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

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLMediaElementPersistentVideoTest.cpp

Issue 2756553002: Force the video to go fullscreen when setting persistent video (Closed)
Patch Set: fixed build Created 3 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "core/html/HTMLMediaElement.h"
6
7 #include <memory>
8
9 #include "core/dom/DocumentUserGestureToken.h"
10 #include "core/dom/Fullscreen.h"
11 #include "core/html/HTMLDivElement.h"
12 #include "core/loader/EmptyClients.h"
13 #include "core/testing/DummyPageHolder.h"
14 #include "platform/UserGestureIndicator.h"
15 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace blink {
19
20 namespace {
21
22 class MockChromeClient : public EmptyChromeClient {
23 public:
24 MOCK_METHOD1(enterFullscreen, void(LocalFrame&));
25 MOCK_METHOD1(exitFullscreen, void(LocalFrame&));
26 };
27
28 using ::testing::_;
29 using ::testing::Sequence;
30
31 } // anonymous namespace
32
33 class HTMLMediaElementPersistentVideoTest : public ::testing::Test {
34 protected:
35 void SetUp() override {
36 m_chromeClient = new MockChromeClient();
37
38 Page::PageClients clients;
39 fillWithEmptyClients(clients);
40 clients.chromeClient = m_chromeClient.get();
41
42 m_pageHolder = DummyPageHolder::create(IntSize(800, 600), &clients);
43 document().body()->setInnerHTML("<body><div><video></video></div></body>");
44 }
45
46 Document& document() { return m_pageHolder->document(); }
47
48 HTMLMediaElement* videoElement() {
49 return toHTMLMediaElement(document().querySelector("video"));
50 }
51
52 HTMLDivElement* divElement() {
53 return toHTMLDivElement(document().querySelector("div"));
54 }
55
56 Element* fullscreenElement() {
57 return Fullscreen::currentFullScreenElementFrom(document());
58 }
59
60 MockChromeClient& mockChromeClient() { return *m_chromeClient; }
61
62 void simulateDidEnterFullscreen() {
63 Fullscreen::fromIfExists(document())->didEnterFullscreen();
64 }
65
66 void simulateDidExitFullscreen() {
67 Fullscreen::fromIfExists(document())->didExitFullscreen();
68 }
69
70 void simulateBecamePersistentVideo(bool value) {
71 videoElement()->onBecamePersistentVideo(value);
72 }
73
74 bool isPersistentVideo() { return videoElement()->m_isPersistentVideo; }
75
76 private:
77 std::unique_ptr<DummyPageHolder> m_pageHolder;
78 Persistent<MockChromeClient> m_chromeClient;
79 };
80
81 TEST_F(HTMLMediaElementPersistentVideoTest, testWhenNothingIsFullscreen) {
82 Sequence s;
83
84 EXPECT_EQ(fullscreenElement(), nullptr);
85
86 EXPECT_CALL(mockChromeClient(), enterFullscreen(_)).InSequence(s);
87
88 // Make the video persistent.
89 simulateBecamePersistentVideo(true);
90 simulateDidEnterFullscreen();
91 EXPECT_EQ(fullscreenElement(), videoElement());
92 EXPECT_TRUE(isPersistentVideo());
93
94 // This should be no-op.
95 simulateBecamePersistentVideo(true);
mlamouri (slow - plz ping) 2017/03/16 17:44:49 Maybe add checks verifying that it's a no-op?
Zhiqiang Zhang (Slow) 2017/03/16 18:08:26 Done.
96
97 // Make the video not persitent.
98 EXPECT_CALL(mockChromeClient(), exitFullscreen(_)).InSequence(s);
99 simulateBecamePersistentVideo(false);
100 simulateDidExitFullscreen();
101 EXPECT_EQ(fullscreenElement(), nullptr);
102 EXPECT_FALSE(isPersistentVideo());
103
104 // This should be no-op.
105 simulateBecamePersistentVideo(false);
mlamouri (slow - plz ping) 2017/03/16 17:44:49 Maybe we should check that the video is not fullsc
Zhiqiang Zhang (Slow) 2017/03/16 18:08:26 Done.
106 }
107
108 TEST_F(HTMLMediaElementPersistentVideoTest, testWhenVideoIsFullscreen) {
109 EXPECT_EQ(fullscreenElement(), nullptr);
110
111 EXPECT_CALL(mockChromeClient(), enterFullscreen(_)).Times(1);
112 EXPECT_CALL(mockChromeClient(), exitFullscreen(_)).Times(0);
113
114 // Fullscreen the video in advance.
115 UserGestureIndicator gestureIndicator(
116 DocumentUserGestureToken::create(&document()));
117 Fullscreen::requestFullscreen(*videoElement());
118 simulateDidEnterFullscreen();
119 EXPECT_EQ(fullscreenElement(), videoElement());
120
121 // This should be no-op.
122 simulateBecamePersistentVideo(true);
123 EXPECT_EQ(fullscreenElement(), videoElement());
124 EXPECT_FALSE(isPersistentVideo());
125
126 // This should be no-op.
127 simulateBecamePersistentVideo(false);
128 EXPECT_EQ(fullscreenElement(), videoElement());
129 EXPECT_FALSE(isPersistentVideo());
130 }
131
132 TEST_F(HTMLMediaElementPersistentVideoTest, testWhenDivIsFullscreen) {
133 EXPECT_EQ(fullscreenElement(), nullptr);
134
135 EXPECT_CALL(mockChromeClient(), enterFullscreen(_)).Times(2);
136 EXPECT_CALL(mockChromeClient(), exitFullscreen(_)).Times(0);
137
138 // Fullscreen the video in advance.
139 UserGestureIndicator gestureIndicator(
140 DocumentUserGestureToken::create(&document()));
141 Fullscreen::requestFullscreen(*divElement());
142 simulateDidEnterFullscreen();
143 EXPECT_EQ(fullscreenElement(), divElement());
144
145 // Make the video persistent.
146 simulateBecamePersistentVideo(true);
147 simulateDidEnterFullscreen();
148 EXPECT_EQ(fullscreenElement(), videoElement());
149 EXPECT_TRUE(isPersistentVideo());
150
151 // This should be no-op.
152 simulateBecamePersistentVideo(true);
mlamouri (slow - plz ping) 2017/03/16 17:44:49 same as above.
Zhiqiang Zhang (Slow) 2017/03/16 18:08:26 Done.
153
154 // Make the video not persistent. Don't call simulateDidExitFullscreen as
155 // there still a fullscreen element in stack.
156 simulateBecamePersistentVideo(false);
157 EXPECT_EQ(fullscreenElement(), divElement());
158 EXPECT_FALSE(isPersistentVideo());
159 }
160
161 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLMediaElement.cpp ('k') | third_party/WebKit/public/platform/WebMediaPlayerClient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698