tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestVideoFrameContainer.cpp (2492B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "ImageContainer.h"
      8 #include "MockMediaDecoderOwner.h"
      9 #include "TimeUnits.h"
     10 #include "VideoFrameContainer.h"
     11 #include "gmock/gmock.h"
     12 #include "gtest/gtest.h"
     13 #include "nsContentUtils.h"
     14 
     15 using namespace mozilla;
     16 using namespace mozilla::layers;
     17 
     18 using testing::InSequence;
     19 using testing::MockFunction;
     20 using testing::StrEq;
     21 
     22 TEST(TestVideoFrameContainer, UpdatePrincipalHandleForFrameID)
     23 {
     24  auto owner = std::make_unique<MockMediaDecoderOwner>();
     25  PrincipalHandle principal =
     26      MakePrincipalHandle(nsContentUtils::GetSystemPrincipal());
     27  RefPtr container = new VideoFrameContainer(
     28      owner.get(),
     29      MakeAndAddRef<ImageContainer>(ImageUsageType::VideoFrameContainer,
     30                                    ImageContainer::ASYNCHRONOUS));
     31  MockFunction<void(const char* name)> checkpoint;
     32  {
     33    InSequence s;
     34    EXPECT_CALL(checkpoint, Call(StrEq("id2 is first"))).Times(1);
     35    EXPECT_CALL(*owner, PrincipalHandleChangedForVideoFrameContainer(
     36                            container.get(), principal))
     37        .Times(1);
     38  }
     39 
     40  auto image = container->GetImageContainer()->CreatePlanarYCbCrImage();
     41  AutoTArray<ImageContainer::NonOwningImage, 2> images;
     42  images.AppendElements(2);
     43  TimeStamp timeStamp = TimeStamp::Now();
     44  for (auto& imageRef : images) {
     45    imageRef.mFrameID = container->NewFrameID();
     46    imageRef.mImage = image;
     47    imageRef.mTimeStamp = timeStamp;
     48    timeStamp += TimeDuration::FromSeconds(0.1);
     49  }
     50  gfx::IntSize intrinsicSize;
     51  container->SetCurrentFrames(intrinsicSize, images);
     52 
     53  ImageContainer::FrameID id2 = container->NewFrameID();
     54  container->UpdatePrincipalHandleForFrameID(principal, id2);
     55  images.RemoveElementAt(0);
     56  auto image2 = images.AppendElement();
     57  image2->mFrameID = id2;
     58  image2->mImage = image;
     59  image2->mTimeStamp = timeStamp;
     60  container->SetCurrentFrames(intrinsicSize, images);
     61  // Check no pending NotifyDecoderPrincipalChanged() event.
     62  NS_ProcessPendingEvents(nullptr);
     63 
     64  images.RemoveElementAt(0);
     65  container->SetCurrentFrames(intrinsicSize, images);
     66  checkpoint.Call("id2 is first");
     67  // Process NotifyDecoderPrincipalChanged() event.
     68  NS_ProcessPendingEvents(nullptr);
     69 }