Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(814)

Unified Diff: third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp

Issue 2890423003: [Media controls] Integrate rotate-to-fullscreen with orientation lock (Closed)
Patch Set: #undef atan2,fmod Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegate.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp
diff --git a/third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp b/third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp
index 3e831ea97dae1ff90b2ef0580a3474f1a1abbeae..37d492f5a089d44fa53e3409f79d47203d52d5d3 100644
--- a/third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp
@@ -17,15 +17,18 @@
#include "core/loader/EmptyClients.h"
#include "core/testing/DummyPageHolder.h"
#include "modules/media_controls/MediaControlsImpl.h"
+#include "modules/screen_orientation/ScreenOrientationControllerImpl.h"
#include "platform/UserGestureIndicator.h"
#include "platform/testing/EmptyWebMediaPlayer.h"
#include "platform/testing/UnitTestHelpers.h"
#include "platform/wtf/text/AtomicString.h"
#include "public/platform/WebSize.h"
+#include "public/platform/modules/screen_orientation/WebScreenOrientationClient.h"
#include "public/platform/modules/screen_orientation/WebScreenOrientationType.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+using ::testing::AtLeast;
using ::testing::Return;
namespace blink {
@@ -34,9 +37,17 @@ using namespace HTMLNames;
namespace {
+class FakeWebScreenOrientationClient : public WebScreenOrientationClient {
+ public:
+ // WebScreenOrientationClient overrides:
+ void LockOrientation(WebScreenOrientationLockType,
+ std::unique_ptr<WebLockOrientationCallback>) override {}
+ void UnlockOrientation() override {}
+};
+
class MockVideoWebMediaPlayer : public EmptyWebMediaPlayer {
public:
- // ChromeClient overrides:
+ // EmptyWebMediaPlayer overrides:
bool HasVideo() const override { return true; }
MOCK_CONST_METHOD0(NaturalSize, WebSize());
@@ -45,6 +56,11 @@ class MockVideoWebMediaPlayer : public EmptyWebMediaPlayer {
class MockChromeClient : public EmptyChromeClient {
public:
// ChromeClient overrides:
+ void InstallSupplements(LocalFrame& frame) override {
+ EmptyChromeClient::InstallSupplements(frame);
+ ScreenOrientationControllerImpl::ProvideTo(frame,
+ &web_screen_orientation_client_);
+ }
void EnterFullscreen(LocalFrame& frame) override {
Fullscreen::From(*frame.GetDocument()).DidEnterFullscreen();
}
@@ -53,6 +69,9 @@ class MockChromeClient : public EmptyChromeClient {
}
MOCK_CONST_METHOD0(GetScreenInfo, WebScreenInfo());
+
+ private:
+ FakeWebScreenOrientationClient web_screen_orientation_client_;
};
class StubLocalFrameClient : public EmptyLocalFrameClient {
@@ -75,8 +94,11 @@ class MediaControlsRotateToFullscreenDelegateTest : public ::testing::Test {
MediaControlsRotateToFullscreenDelegate::SimpleOrientation;
void SetUp() override {
+ previous_video_fullscreen_orientation_lock_value_ =
+ RuntimeEnabledFeatures::videoFullscreenOrientationLockEnabled();
previous_video_rotate_to_fullscreen_value_ =
RuntimeEnabledFeatures::videoRotateToFullscreenEnabled();
+ RuntimeEnabledFeatures::setVideoFullscreenOrientationLockEnabled(true);
RuntimeEnabledFeatures::setVideoRotateToFullscreenEnabled(true);
chrome_client_ = new MockChromeClient();
@@ -95,6 +117,8 @@ class MediaControlsRotateToFullscreenDelegateTest : public ::testing::Test {
}
void TearDown() override {
+ RuntimeEnabledFeatures::setVideoFullscreenOrientationLockEnabled(
+ previous_video_fullscreen_orientation_lock_value_);
RuntimeEnabledFeatures::setVideoRotateToFullscreenEnabled(
previous_video_rotate_to_fullscreen_value_);
}
@@ -104,11 +128,6 @@ class MediaControlsRotateToFullscreenDelegateTest : public ::testing::Test {
->rotate_to_fullscreen_delegate_;
}
- static bool HasOrientationLockDelegate(const MediaControls& media_controls) {
- return !!static_cast<const MediaControlsImpl*>(&media_controls)
- ->orientation_lock_delegate_;
- }
-
void SimulateVideoReadyState(HTMLMediaElement::ReadyState state) {
GetVideo().SetReadyState(state);
}
@@ -169,6 +188,7 @@ class MediaControlsRotateToFullscreenDelegateTest : public ::testing::Test {
}
private:
+ bool previous_video_fullscreen_orientation_lock_value_;
bool previous_video_rotate_to_fullscreen_value_;
Persistent<MockChromeClient> chrome_client_;
std::unique_ptr<DummyPageHolder> page_holder_;
@@ -209,9 +229,10 @@ void MediaControlsRotateToFullscreenDelegateTest::RotateTo(
WebScreenOrientationType new_screen_orientation) {
WebScreenInfo screen_info;
screen_info.orientation_type = new_screen_orientation;
+ ::testing::Mock::VerifyAndClearExpectations(&GetChromeClient());
EXPECT_CALL(GetChromeClient(), GetScreenInfo())
- .Times(1)
- .WillOnce(Return(screen_info));
+ .Times(AtLeast(1))
+ .WillRepeatedly(Return(screen_info));
DispatchEvent(GetWindow(), EventTypeNames::orientationchange);
testing::RunPendingTasks();
}
@@ -234,18 +255,6 @@ TEST_F(MediaControlsRotateToFullscreenDelegateTest, DelegateRequiresVideo) {
EXPECT_FALSE(HasDelegate(*audio->GetMediaControls()));
}
-TEST_F(MediaControlsRotateToFullscreenDelegateTest,
- OrientationLockIsMutuallyExclusive) {
- // Rotate to fullscreen and fullscreen orientation lock are currently
- // incompatible, so if both are enabled only one should be active.
- RuntimeEnabledFeatures::setVideoRotateToFullscreenEnabled(true);
- RuntimeEnabledFeatures::setVideoFullscreenOrientationLockEnabled(true);
- HTMLVideoElement* video = HTMLVideoElement::Create(GetDocument());
- GetDocument().body()->AppendChild(video);
- EXPECT_TRUE(HasDelegate(*video->GetMediaControls()));
- EXPECT_FALSE(HasOrientationLockDelegate(*video->GetMediaControls()));
-}
-
TEST_F(MediaControlsRotateToFullscreenDelegateTest, ComputeVideoOrientation) {
// Set up the WebMediaPlayer instance.
GetDocument().body()->AppendChild(&GetVideo());
@@ -589,6 +598,9 @@ TEST_F(MediaControlsRotateToFullscreenDelegateTest,
DocumentUserGestureToken::Create(&GetDocument()));
GetMediaControls().EnterFullscreen();
}
+ // n.b. omit to call Fullscreen::From(GetDocument()).DidEnterFullscreen() so
+ // that MediaControlsOrientationLockDelegate doesn't trigger, which avoids
+ // having to create deviceorientation events here to unlock it again.
testing::RunPendingTasks();
EXPECT_TRUE(GetVideo().IsFullscreen());
@@ -596,7 +608,8 @@ TEST_F(MediaControlsRotateToFullscreenDelegateTest,
EXPECT_TRUE(GetVideo().paused());
EXPECT_FALSE(ObservedVisibility());
- // Rotate screen to portrait.
+ // Rotate screen to portrait. This relies on the screen orientation no longer
+ // being locked by MediaControlsOrientationLockDelegate.
RotateTo(kWebScreenOrientationPortraitPrimary);
// Should exit fullscreen.
@@ -616,6 +629,9 @@ TEST_F(MediaControlsRotateToFullscreenDelegateTest,
DocumentUserGestureToken::Create(&GetDocument()));
GetMediaControls().EnterFullscreen();
}
+ // n.b. omit to call Fullscreen::From(GetDocument()).DidEnterFullscreen() so
+ // that MediaControlsOrientationLockDelegate doesn't trigger, which avoids
+ // having to create deviceorientation events here to unlock it again.
testing::RunPendingTasks();
EXPECT_TRUE(GetVideo().IsFullscreen());
@@ -623,7 +639,8 @@ TEST_F(MediaControlsRotateToFullscreenDelegateTest,
EXPECT_TRUE(GetVideo().paused());
EXPECT_FALSE(ObservedVisibility());
- // Rotate screen to landscape.
+ // Rotate screen to portrait. This relies on the screen orientation no longer
+ // being locked by MediaControlsOrientationLockDelegate.
RotateTo(kWebScreenOrientationLandscapePrimary);
// Should exit fullscreen.
« no previous file with comments | « third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegate.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698