| Index: third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegateTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegateTest.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegateTest.cpp
|
| deleted file mode 100644
|
| index 2acd74091dbe21efb507d1f6d0448df2bc5ce418..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegateTest.cpp
|
| +++ /dev/null
|
| @@ -1,399 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "core/html/shadow/MediaControlsOrientationLockDelegate.h"
|
| -
|
| -#include "core/dom/Document.h"
|
| -#include "core/dom/DocumentUserGestureToken.h"
|
| -#include "core/dom/Fullscreen.h"
|
| -#include "core/frame/ScreenOrientationController.h"
|
| -#include "core/html/HTMLAudioElement.h"
|
| -#include "core/html/HTMLVideoElement.h"
|
| -#include "core/html/shadow/MediaControls.h"
|
| -#include "core/loader/EmptyClients.h"
|
| -#include "core/testing/DummyPageHolder.h"
|
| -#include "platform/UserGestureIndicator.h"
|
| -#include "platform/testing/EmptyWebMediaPlayer.h"
|
| -#include "platform/testing/UnitTestHelpers.h"
|
| -#include "public/platform/WebSize.h"
|
| -#include "public/platform/modules/screen_orientation/WebLockOrientationCallback.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using ::testing::_;
|
| -using ::testing::Return;
|
| -
|
| -namespace blink {
|
| -
|
| -namespace {
|
| -
|
| -// WebLockOrientationCallback implementation that will not react to a success
|
| -// nor a failure.
|
| -class DummyScreenOrientationCallback : public WebLockOrientationCallback {
|
| - public:
|
| - void onSuccess() override {}
|
| - void onError(WebLockOrientationError) override {}
|
| -};
|
| -
|
| -class MockVideoWebMediaPlayer : public EmptyWebMediaPlayer {
|
| - public:
|
| - bool hasVideo() const override { return true; }
|
| -
|
| - MOCK_CONST_METHOD0(naturalSize, WebSize());
|
| -};
|
| -
|
| -class MockChromeClient : public EmptyChromeClient {
|
| - public:
|
| - MOCK_CONST_METHOD0(screenInfo, WebScreenInfo());
|
| -};
|
| -
|
| -class StubLocalFrameClient : public EmptyLocalFrameClient {
|
| - public:
|
| - static StubLocalFrameClient* create() { return new StubLocalFrameClient; }
|
| -
|
| - std::unique_ptr<WebMediaPlayer> createWebMediaPlayer(
|
| - HTMLMediaElement&,
|
| - const WebMediaPlayerSource&,
|
| - WebMediaPlayerClient*) override {
|
| - return WTF::wrapUnique(new MockVideoWebMediaPlayer());
|
| - }
|
| -};
|
| -
|
| -class MockScreenOrientationController final
|
| - : public ScreenOrientationController {
|
| - WTF_MAKE_NONCOPYABLE(MockScreenOrientationController);
|
| -
|
| - public:
|
| - static MockScreenOrientationController* provideTo(LocalFrame& frame) {
|
| - MockScreenOrientationController* controller =
|
| - new MockScreenOrientationController(frame);
|
| - ScreenOrientationController::provideTo(frame, controller);
|
| - return controller;
|
| - }
|
| -
|
| - MOCK_METHOD1(lock, void(WebScreenOrientationLockType));
|
| - MOCK_METHOD0(mockUnlock, void());
|
| -
|
| - DEFINE_INLINE_VIRTUAL_TRACE() { ScreenOrientationController::trace(visitor); }
|
| -
|
| - private:
|
| - explicit MockScreenOrientationController(LocalFrame& frame)
|
| - : ScreenOrientationController(frame) {}
|
| -
|
| - void lock(WebScreenOrientationLockType type,
|
| - std::unique_ptr<WebLockOrientationCallback>) override {
|
| - m_locked = true;
|
| - lock(type);
|
| - }
|
| -
|
| - void unlock() override {
|
| - m_locked = false;
|
| - mockUnlock();
|
| - }
|
| -
|
| - void notifyOrientationChanged() override {}
|
| -
|
| - bool maybeHasActiveLock() const override { return m_locked; }
|
| -
|
| - bool m_locked = false;
|
| -};
|
| -
|
| -} // anonymous namespace
|
| -
|
| -class MediaControlsOrientationLockDelegateTest : public ::testing::Test {
|
| - protected:
|
| - void SetUp() override {
|
| - m_previousVideoFullscreenOrientationLockValue =
|
| - RuntimeEnabledFeatures::videoFullscreenOrientationLockEnabled();
|
| - RuntimeEnabledFeatures::setVideoFullscreenOrientationLockEnabled(true);
|
| -
|
| - m_chromeClient = new MockChromeClient();
|
| -
|
| - Page::PageClients clients;
|
| - fillWithEmptyClients(clients);
|
| - clients.chromeClient = m_chromeClient.get();
|
| -
|
| - m_pageHolder = DummyPageHolder::create(IntSize(800, 600), &clients,
|
| - StubLocalFrameClient::create());
|
| -
|
| - document().write("<body><video></body>");
|
| - m_video = toHTMLVideoElement(*document().querySelector("video"));
|
| -
|
| - m_screenOrientationController =
|
| - MockScreenOrientationController::provideTo(m_pageHolder->frame());
|
| - }
|
| -
|
| - void TearDown() override {
|
| - ::testing::Mock::VerifyAndClear(&screenOrientationController());
|
| -
|
| - RuntimeEnabledFeatures::setVideoFullscreenOrientationLockEnabled(
|
| - m_previousVideoFullscreenOrientationLockValue);
|
| - }
|
| -
|
| - static bool hasDelegate(const MediaControls& mediaControls) {
|
| - return !!mediaControls.m_orientationLockDelegate;
|
| - }
|
| -
|
| - void simulateEnterFullscreen() {
|
| - UserGestureIndicator gesture(DocumentUserGestureToken::create(&document()));
|
| -
|
| - Fullscreen::requestFullscreen(video());
|
| - Fullscreen::from(document()).didEnterFullscreen();
|
| - testing::runPendingTasks();
|
| - }
|
| -
|
| - void simulateExitFullscreen() {
|
| - Fullscreen::exitFullscreen(document());
|
| - Fullscreen::from(document()).didExitFullscreen();
|
| - testing::runPendingTasks();
|
| - }
|
| -
|
| - void simulateOrientationLock() {
|
| - ScreenOrientationController* controller =
|
| - ScreenOrientationController::from(*document().frame());
|
| - controller->lock(WebScreenOrientationLockLandscape,
|
| - WTF::wrapUnique(new DummyScreenOrientationCallback));
|
| - EXPECT_TRUE(controller->maybeHasActiveLock());
|
| - }
|
| -
|
| - void simulateVideoReadyState(HTMLMediaElement::ReadyState state) {
|
| - video().setReadyState(state);
|
| - }
|
| -
|
| - void simulateVideoNetworkState(HTMLMediaElement::NetworkState state) {
|
| - video().setNetworkState(state);
|
| - }
|
| -
|
| - void checkStatePendingFullscreen() const {
|
| - EXPECT_EQ(MediaControlsOrientationLockDelegate::State::PendingFullscreen,
|
| - m_video->mediaControls()->m_orientationLockDelegate->m_state);
|
| - }
|
| -
|
| - void checkStatePendingMetadata() const {
|
| - EXPECT_EQ(MediaControlsOrientationLockDelegate::State::PendingMetadata,
|
| - m_video->mediaControls()->m_orientationLockDelegate->m_state);
|
| - }
|
| -
|
| - void checkStateMaybeLockedFullscreen() const {
|
| - EXPECT_EQ(
|
| - MediaControlsOrientationLockDelegate::State::MaybeLockedFullscreen,
|
| - m_video->mediaControls()->m_orientationLockDelegate->m_state);
|
| - }
|
| -
|
| - bool delegateWillUnlockFullscreen() const {
|
| - return m_video->mediaControls()
|
| - ->m_orientationLockDelegate->m_shouldUnlockOrientation;
|
| - }
|
| -
|
| - WebScreenOrientationLockType computeOrientationLock() const {
|
| - return m_video->mediaControls()
|
| - ->m_orientationLockDelegate->computeOrientationLock();
|
| - }
|
| -
|
| - MockChromeClient& chromeClient() const { return *m_chromeClient; }
|
| -
|
| - HTMLVideoElement& video() const { return *m_video; }
|
| - Document& document() const { return m_pageHolder->document(); }
|
| - MockScreenOrientationController& screenOrientationController() const {
|
| - return *m_screenOrientationController;
|
| - }
|
| - MockVideoWebMediaPlayer& mockWebMediaPlayer() const {
|
| - return *static_cast<MockVideoWebMediaPlayer*>(video().webMediaPlayer());
|
| - }
|
| -
|
| - private:
|
| - bool m_previousVideoFullscreenOrientationLockValue;
|
| - std::unique_ptr<DummyPageHolder> m_pageHolder;
|
| - Persistent<HTMLVideoElement> m_video;
|
| - Persistent<MockScreenOrientationController> m_screenOrientationController;
|
| - Persistent<MockChromeClient> m_chromeClient;
|
| -};
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, DelegateRequiresFlag) {
|
| - // Flag on by default.
|
| - EXPECT_TRUE(hasDelegate(*video().mediaControls()));
|
| -
|
| - // Same with flag off.
|
| - RuntimeEnabledFeatures::setVideoFullscreenOrientationLockEnabled(false);
|
| - HTMLVideoElement* video = HTMLVideoElement::create(document());
|
| - document().body()->appendChild(video);
|
| - EXPECT_FALSE(hasDelegate(*video->mediaControls()));
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, DelegateRequiresVideo) {
|
| - HTMLAudioElement* audio = HTMLAudioElement::create(document());
|
| - document().body()->appendChild(audio);
|
| - EXPECT_FALSE(hasDelegate(*audio->mediaControls()));
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, InitialState) {
|
| - checkStatePendingFullscreen();
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, EnterFullscreenNoMetadata) {
|
| - EXPECT_CALL(screenOrientationController(), lock(_)).Times(0);
|
| -
|
| - simulateEnterFullscreen();
|
| -
|
| - checkStatePendingMetadata();
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, LeaveFullscreenNoMetadata) {
|
| - EXPECT_CALL(screenOrientationController(), lock(_)).Times(0);
|
| - EXPECT_CALL(screenOrientationController(), mockUnlock()).Times(0);
|
| -
|
| - simulateEnterFullscreen();
|
| - // State set to PendingMetadata.
|
| - simulateExitFullscreen();
|
| -
|
| - checkStatePendingFullscreen();
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, EnterFullscreenWithMetadata) {
|
| - simulateVideoReadyState(HTMLMediaElement::kHaveMetadata);
|
| -
|
| - EXPECT_CALL(screenOrientationController(), lock(_)).Times(1);
|
| - EXPECT_FALSE(delegateWillUnlockFullscreen());
|
| -
|
| - simulateEnterFullscreen();
|
| -
|
| - EXPECT_TRUE(delegateWillUnlockFullscreen());
|
| - checkStateMaybeLockedFullscreen();
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, LeaveFullscreenWithMetadata) {
|
| - simulateVideoReadyState(HTMLMediaElement::kHaveMetadata);
|
| -
|
| - EXPECT_CALL(screenOrientationController(), lock(_)).Times(1);
|
| - EXPECT_CALL(screenOrientationController(), mockUnlock()).Times(1);
|
| -
|
| - simulateEnterFullscreen();
|
| - // State set to MaybeLockedFullscreen.
|
| - simulateExitFullscreen();
|
| -
|
| - EXPECT_FALSE(delegateWillUnlockFullscreen());
|
| - checkStatePendingFullscreen();
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, EnterFullscreenAfterPageLock) {
|
| - simulateVideoReadyState(HTMLMediaElement::kHaveMetadata);
|
| - simulateOrientationLock();
|
| -
|
| - EXPECT_FALSE(delegateWillUnlockFullscreen());
|
| - EXPECT_CALL(screenOrientationController(), lock(_)).Times(0);
|
| -
|
| - simulateEnterFullscreen();
|
| -
|
| - EXPECT_FALSE(delegateWillUnlockFullscreen());
|
| - checkStateMaybeLockedFullscreen();
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, LeaveFullscreenAfterPageLock) {
|
| - simulateVideoReadyState(HTMLMediaElement::kHaveMetadata);
|
| - simulateOrientationLock();
|
| -
|
| - EXPECT_CALL(screenOrientationController(), lock(_)).Times(0);
|
| - EXPECT_CALL(screenOrientationController(), mockUnlock()).Times(0);
|
| -
|
| - simulateEnterFullscreen();
|
| - // State set to MaybeLockedFullscreen.
|
| - simulateExitFullscreen();
|
| -
|
| - EXPECT_FALSE(delegateWillUnlockFullscreen());
|
| - checkStatePendingFullscreen();
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest,
|
| - ReceivedMetadataAfterExitingFullscreen) {
|
| - EXPECT_CALL(screenOrientationController(), lock(_)).Times(1);
|
| -
|
| - simulateEnterFullscreen();
|
| - // State set to PendingMetadata.
|
| -
|
| - // Set up the WebMediaPlayer instance.
|
| - video().setSrc("http://example.com");
|
| - testing::runPendingTasks();
|
| -
|
| - simulateVideoNetworkState(HTMLMediaElement::kNetworkIdle);
|
| - simulateVideoReadyState(HTMLMediaElement::kHaveMetadata);
|
| - testing::runPendingTasks();
|
| -
|
| - checkStateMaybeLockedFullscreen();
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, ReceivedMetadataLater) {
|
| - EXPECT_CALL(screenOrientationController(), lock(_)).Times(0);
|
| - EXPECT_CALL(screenOrientationController(), mockUnlock()).Times(0);
|
| -
|
| - simulateEnterFullscreen();
|
| - // State set to PendingMetadata.
|
| - simulateExitFullscreen();
|
| -
|
| - // Set up the WebMediaPlayer instance.
|
| - video().setSrc("http://example.com");
|
| - testing::runPendingTasks();
|
| -
|
| - simulateVideoNetworkState(HTMLMediaElement::kNetworkIdle);
|
| - simulateVideoReadyState(HTMLMediaElement::kHaveMetadata);
|
| - testing::runPendingTasks();
|
| -
|
| - checkStatePendingFullscreen();
|
| -}
|
| -
|
| -TEST_F(MediaControlsOrientationLockDelegateTest, ComputeOrientationLock) {
|
| - // Set up the WebMediaPlayer instance.
|
| - video().setSrc("http://example.com");
|
| - testing::runPendingTasks();
|
| -
|
| - simulateVideoNetworkState(HTMLMediaElement::kNetworkIdle);
|
| - simulateVideoReadyState(HTMLMediaElement::kHaveMetadata);
|
| -
|
| - EXPECT_CALL(mockWebMediaPlayer(), naturalSize())
|
| - .Times(14) // Each `computeOrientationLock` calls the method twice.
|
| - .WillOnce(Return(WebSize(100, 50)))
|
| - .WillOnce(Return(WebSize(100, 50)))
|
| - .WillOnce(Return(WebSize(50, 100)))
|
| - .WillOnce(Return(WebSize(50, 100)))
|
| - .WillRepeatedly(Return(WebSize(100, 100)));
|
| -
|
| - // 100x50
|
| - EXPECT_EQ(WebScreenOrientationLockLandscape, computeOrientationLock());
|
| -
|
| - // 50x100
|
| - EXPECT_EQ(WebScreenOrientationLockPortrait, computeOrientationLock());
|
| -
|
| - // 100x100 has more subtilities, it depends on the current screen orientation.
|
| - WebScreenInfo screenInfo;
|
| - screenInfo.orientationType = WebScreenOrientationUndefined;
|
| - EXPECT_CALL(chromeClient(), screenInfo())
|
| - .Times(1)
|
| - .WillOnce(Return(screenInfo));
|
| - EXPECT_EQ(WebScreenOrientationLockLandscape, computeOrientationLock());
|
| -
|
| - screenInfo.orientationType = WebScreenOrientationPortraitPrimary;
|
| - EXPECT_CALL(chromeClient(), screenInfo())
|
| - .Times(1)
|
| - .WillOnce(Return(screenInfo));
|
| - EXPECT_EQ(WebScreenOrientationLockPortrait, computeOrientationLock());
|
| -
|
| - screenInfo.orientationType = WebScreenOrientationPortraitPrimary;
|
| - EXPECT_CALL(chromeClient(), screenInfo())
|
| - .Times(1)
|
| - .WillOnce(Return(screenInfo));
|
| - EXPECT_EQ(WebScreenOrientationLockPortrait, computeOrientationLock());
|
| -
|
| - screenInfo.orientationType = WebScreenOrientationLandscapePrimary;
|
| - EXPECT_CALL(chromeClient(), screenInfo())
|
| - .Times(1)
|
| - .WillOnce(Return(screenInfo));
|
| - EXPECT_EQ(WebScreenOrientationLockLandscape, computeOrientationLock());
|
| -
|
| - screenInfo.orientationType = WebScreenOrientationLandscapeSecondary;
|
| - EXPECT_CALL(chromeClient(), screenInfo())
|
| - .Times(1)
|
| - .WillOnce(Return(screenInfo));
|
| - EXPECT_EQ(WebScreenOrientationLockLandscape, computeOrientationLock());
|
| -}
|
| -
|
| -} // namespace blink
|
|
|