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

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

Issue 2701433003: Hide overlay play button if it can't be shown without clipping (Closed)
Patch Set: mlamouri feedback 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/html/shadow/MediaControls.h" 5 #include "core/html/shadow/MediaControls.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <memory> 8 #include <memory>
9 #include "core/HTMLNames.h" 9 #include "core/HTMLNames.h"
10 #include "core/css/StylePropertySet.h" 10 #include "core/css/StylePropertySet.h"
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 153
154 // If scripts are not enabled, controls will always be shown. 154 // If scripts are not enabled, controls will always be shown.
155 m_pageHolder->frame().settings()->setScriptEnabled(true); 155 m_pageHolder->frame().settings()->setScriptEnabled(true);
156 } 156 }
157 157
158 void simulateRouteAvailabe() { 158 void simulateRouteAvailabe() {
159 m_mediaControls->mediaElement().remoteRouteAvailabilityChanged( 159 m_mediaControls->mediaElement().remoteRouteAvailabilityChanged(
160 WebRemotePlaybackAvailability::DeviceAvailable); 160 WebRemotePlaybackAvailability::DeviceAvailable);
161 } 161 }
162 162
163 void ensureLayout() { 163 void ensureSizing() {
164 // Force a relayout, so that the controls know the width. Otherwise, 164 // Fire the size-change callback to ensure that the controls have
165 // they don't know if, for example, the cast button will fit. 165 // been properly notified of the video size.
166 m_mediaControls->mediaElement().clientWidth(); 166 m_mediaControls->notifyElementSizeChanged(
167 m_mediaControls->mediaElement().getBoundingClientRect());
167 } 168 }
168 169
169 void simulateHideMediaControlsTimerFired() { 170 void simulateHideMediaControlsTimerFired() {
170 m_mediaControls->hideMediaControlsTimerFired(nullptr); 171 m_mediaControls->hideMediaControlsTimerFired(nullptr);
171 } 172 }
172 173
173 void simulateLoadedMetadata() { m_mediaControls->onLoadedMetadata(); } 174 void simulateLoadedMetadata() { m_mediaControls->onLoadedMetadata(); }
174 175
175 MediaControls& mediaControls() { return *m_mediaControls; } 176 MediaControls& mediaControls() { return *m_mediaControls; }
176 Document& document() { return m_pageHolder->document(); } 177 Document& document() { return m_pageHolder->document(); }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 Document& document = this->document(); 228 Document& document = this->document();
228 int oldElementCount = document.styleEngine().styleForElementCount(); 229 int oldElementCount = document.styleEngine().styleForElementCount();
229 // Also assert that there are no layouts yet. 230 // Also assert that there are no layouts yet.
230 ASSERT_EQ(0, oldElementCount); 231 ASSERT_EQ(0, oldElementCount);
231 mediaControls().reset(); 232 mediaControls().reset();
232 int newElementCount = document.styleEngine().styleForElementCount(); 233 int newElementCount = document.styleEngine().styleForElementCount();
233 ASSERT_EQ(oldElementCount, newElementCount); 234 ASSERT_EQ(oldElementCount, newElementCount);
234 } 235 }
235 236
236 TEST_F(MediaControlsTest, CastButtonRequiresRoute) { 237 TEST_F(MediaControlsTest, CastButtonRequiresRoute) {
237 ensureLayout(); 238 ensureSizing();
238 mediaControls().mediaElement().setBooleanAttribute(HTMLNames::controlsAttr, 239 mediaControls().mediaElement().setBooleanAttribute(HTMLNames::controlsAttr,
239 true); 240 true);
240 241
241 Element* castButton = getElementByShadowPseudoId( 242 Element* castButton = getElementByShadowPseudoId(
242 mediaControls(), "-internal-media-controls-cast-button"); 243 mediaControls(), "-internal-media-controls-cast-button");
243 ASSERT_NE(nullptr, castButton); 244 ASSERT_NE(nullptr, castButton);
244 245
245 ASSERT_FALSE(isElementVisible(*castButton)); 246 ASSERT_FALSE(isElementVisible(*castButton));
246 247
247 simulateRouteAvailabe(); 248 simulateRouteAvailabe();
248 ASSERT_TRUE(isElementVisible(*castButton)); 249 ASSERT_TRUE(isElementVisible(*castButton));
249 } 250 }
250 251
251 TEST_F(MediaControlsTest, CastButtonDisableRemotePlaybackAttr) { 252 TEST_F(MediaControlsTest, CastButtonDisableRemotePlaybackAttr) {
252 ensureLayout(); 253 ensureSizing();
253 mediaControls().mediaElement().setBooleanAttribute(HTMLNames::controlsAttr, 254 mediaControls().mediaElement().setBooleanAttribute(HTMLNames::controlsAttr,
254 true); 255 true);
255 256
256 Element* castButton = getElementByShadowPseudoId( 257 Element* castButton = getElementByShadowPseudoId(
257 mediaControls(), "-internal-media-controls-cast-button"); 258 mediaControls(), "-internal-media-controls-cast-button");
258 ASSERT_NE(nullptr, castButton); 259 ASSERT_NE(nullptr, castButton);
259 260
260 ASSERT_FALSE(isElementVisible(*castButton)); 261 ASSERT_FALSE(isElementVisible(*castButton));
261 simulateRouteAvailabe(); 262 simulateRouteAvailabe();
262 ASSERT_TRUE(isElementVisible(*castButton)); 263 ASSERT_TRUE(isElementVisible(*castButton));
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 mediaControls().show(); 330 mediaControls().show();
330 mediaControls().toggleOverflowMenu(); 331 mediaControls().toggleOverflowMenu();
331 EXPECT_TRUE(isElementVisible(*overflowList)); 332 EXPECT_TRUE(isElementVisible(*overflowList));
332 333
333 simulateHideMediaControlsTimerFired(); 334 simulateHideMediaControlsTimerFired();
334 EXPECT_TRUE(isElementVisible(*overflowList)); 335 EXPECT_TRUE(isElementVisible(*overflowList));
335 EXPECT_TRUE(isElementVisible(*panel)); 336 EXPECT_TRUE(isElementVisible(*panel));
336 } 337 }
337 338
338 TEST_F(MediaControlsTest, DownloadButtonDisplayed) { 339 TEST_F(MediaControlsTest, DownloadButtonDisplayed) {
339 ensureLayout(); 340 ensureSizing();
340 341
341 Element* downloadButton = getElementByShadowPseudoId( 342 Element* downloadButton = getElementByShadowPseudoId(
342 mediaControls(), "-internal-media-controls-download-button"); 343 mediaControls(), "-internal-media-controls-download-button");
343 ASSERT_NE(nullptr, downloadButton); 344 ASSERT_NE(nullptr, downloadButton);
344 345
345 mediaControls().mediaElement().setSrc("https://example.com/foo.mp4"); 346 mediaControls().mediaElement().setSrc("https://example.com/foo.mp4");
346 testing::runPendingTasks(); 347 testing::runPendingTasks();
347 simulateLoadedMetadata(); 348 simulateLoadedMetadata();
348 349
349 // Download button should normally be displayed. 350 // Download button should normally be displayed.
350 EXPECT_TRUE(isElementVisible(*downloadButton)); 351 EXPECT_TRUE(isElementVisible(*downloadButton));
351 } 352 }
352 353
353 TEST_F(MediaControlsTest, DownloadButtonNotDisplayedEmptyUrl) { 354 TEST_F(MediaControlsTest, DownloadButtonNotDisplayedEmptyUrl) {
354 ensureLayout(); 355 ensureSizing();
355 356
356 Element* downloadButton = getElementByShadowPseudoId( 357 Element* downloadButton = getElementByShadowPseudoId(
357 mediaControls(), "-internal-media-controls-download-button"); 358 mediaControls(), "-internal-media-controls-download-button");
358 ASSERT_NE(nullptr, downloadButton); 359 ASSERT_NE(nullptr, downloadButton);
359 360
360 // Download button should not be displayed when URL is empty. 361 // Download button should not be displayed when URL is empty.
361 mediaControls().mediaElement().setSrc(""); 362 mediaControls().mediaElement().setSrc("");
362 testing::runPendingTasks(); 363 testing::runPendingTasks();
363 simulateLoadedMetadata(); 364 simulateLoadedMetadata();
364 EXPECT_FALSE(isElementVisible(*downloadButton)); 365 EXPECT_FALSE(isElementVisible(*downloadButton));
365 } 366 }
366 367
367 TEST_F(MediaControlsTest, DownloadButtonNotDisplayedInfiniteDuration) { 368 TEST_F(MediaControlsTest, DownloadButtonNotDisplayedInfiniteDuration) {
368 ensureLayout(); 369 ensureSizing();
369 370
370 Element* downloadButton = getElementByShadowPseudoId( 371 Element* downloadButton = getElementByShadowPseudoId(
371 mediaControls(), "-internal-media-controls-download-button"); 372 mediaControls(), "-internal-media-controls-download-button");
372 ASSERT_NE(nullptr, downloadButton); 373 ASSERT_NE(nullptr, downloadButton);
373 374
374 mediaControls().mediaElement().setSrc("https://example.com/foo.mp4"); 375 mediaControls().mediaElement().setSrc("https://example.com/foo.mp4");
375 testing::runPendingTasks(); 376 testing::runPendingTasks();
376 377
377 // Download button should not be displayed when duration is infinite. 378 // Download button should not be displayed when duration is infinite.
378 mediaControls().mediaElement().durationChanged( 379 mediaControls().mediaElement().durationChanged(
379 std::numeric_limits<double>::infinity(), false /* requestSeek */); 380 std::numeric_limits<double>::infinity(), false /* requestSeek */);
380 simulateLoadedMetadata(); 381 simulateLoadedMetadata();
381 EXPECT_FALSE(isElementVisible(*downloadButton)); 382 EXPECT_FALSE(isElementVisible(*downloadButton));
382 } 383 }
383 384
384 TEST_F(MediaControlsTest, DownloadButtonNotDisplayedHLS) { 385 TEST_F(MediaControlsTest, DownloadButtonNotDisplayedHLS) {
385 ensureLayout(); 386 ensureSizing();
386 387
387 Element* downloadButton = getElementByShadowPseudoId( 388 Element* downloadButton = getElementByShadowPseudoId(
388 mediaControls(), "-internal-media-controls-download-button"); 389 mediaControls(), "-internal-media-controls-download-button");
389 ASSERT_NE(nullptr, downloadButton); 390 ASSERT_NE(nullptr, downloadButton);
390 391
391 // Download button should not be displayed for HLS streams. 392 // Download button should not be displayed for HLS streams.
392 mediaControls().mediaElement().setSrc("https://example.com/foo.m3u8"); 393 mediaControls().mediaElement().setSrc("https://example.com/foo.m3u8");
393 testing::runPendingTasks(); 394 testing::runPendingTasks();
394 simulateLoadedMetadata(); 395 simulateLoadedMetadata();
395 EXPECT_FALSE(isElementVisible(*downloadButton)); 396 EXPECT_FALSE(isElementVisible(*downloadButton));
396 } 397 }
397 398
398 } // namespace blink 399 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698