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

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

Issue 2757323002: Prevent Media Controls from hiding when the user is interacting via the keyboard (Closed)
Patch Set: johnme@ feedback and add unit tests Created 3 years, 8 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
Index: third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp
index 9a3f79b4c5b05b14017007db2bdc66c110579636..f5f950c9e95f33a2663a1081e19de50efa5b17a9 100644
--- a/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp
+++ b/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp
@@ -19,6 +19,7 @@
#include "platform/heap/Handle.h"
#include "platform/testing/EmptyWebMediaPlayer.h"
#include "platform/testing/HistogramTester.h"
+#include "platform/testing/TestingPlatformSupport.h"
#include "platform/testing/UnitTestHelpers.h"
#include "public/platform/WebSize.h"
#include "public/platform/modules/remoteplayback/WebRemotePlaybackAvailability.h"
@@ -121,7 +122,9 @@ enum DownloadActionMetrics {
class MediaControlsTest : public ::testing::Test {
protected:
- virtual void SetUp() {
+ virtual void SetUp() { initializePage(); }
+
+ void initializePage() {
m_pageHolder = DummyPageHolder::create(IntSize(800, 600), nullptr,
StubLocalFrameClient::create());
Document& document = this->document();
@@ -135,7 +138,7 @@ class MediaControlsTest : public ::testing::Test {
m_pageHolder->frame().settings()->setScriptEnabled(true);
}
- void simulateRouteAvailabe() {
+ void simulateRouteAvailable() {
m_mediaControls->mediaElement().remoteRouteAvailabilityChanged(
WebRemotePlaybackAvailability::DeviceAvailable);
}
@@ -242,7 +245,7 @@ TEST_F(MediaControlsTest, CastButtonRequiresRoute) {
ASSERT_FALSE(isElementVisible(*castButton));
- simulateRouteAvailabe();
+ simulateRouteAvailable();
ASSERT_TRUE(isElementVisible(*castButton));
}
@@ -256,7 +259,7 @@ TEST_F(MediaControlsTest, CastButtonDisableRemotePlaybackAttr) {
ASSERT_NE(nullptr, castButton);
ASSERT_FALSE(isElementVisible(*castButton));
- simulateRouteAvailabe();
+ simulateRouteAvailable();
ASSERT_TRUE(isElementVisible(*castButton));
mediaControls().mediaElement().setBooleanAttribute(
@@ -273,7 +276,7 @@ TEST_F(MediaControlsTest, CastOverlayDefault) {
mediaControls(), "-internal-media-controls-overlay-cast-button");
ASSERT_NE(nullptr, castOverlayButton);
- simulateRouteAvailabe();
+ simulateRouteAvailable();
ASSERT_TRUE(isElementVisible(*castOverlayButton));
}
@@ -283,7 +286,7 @@ TEST_F(MediaControlsTest, CastOverlayDisableRemotePlaybackAttr) {
ASSERT_NE(nullptr, castOverlayButton);
ASSERT_FALSE(isElementVisible(*castOverlayButton));
- simulateRouteAvailabe();
+ simulateRouteAvailable();
ASSERT_TRUE(isElementVisible(*castOverlayButton));
mediaControls().mediaElement().setBooleanAttribute(
@@ -301,7 +304,7 @@ TEST_F(MediaControlsTest, CastOverlayMediaControlsDisabled) {
ASSERT_NE(nullptr, castOverlayButton);
EXPECT_FALSE(isElementVisible(*castOverlayButton));
- simulateRouteAvailabe();
+ simulateRouteAvailable();
EXPECT_TRUE(isElementVisible(*castOverlayButton));
document().settings()->setMediaControlsEnabled(false);
@@ -501,4 +504,46 @@ TEST_F(MediaControlsTest, TimelineImmediatelyUpdatesCurrentTime) {
EXPECT_EQ(duration / 2, currentTimeDisplay->currentValue());
}
+TEST_F(MediaControlsTest, ControlsRemainVisibleDuringKeyboardInteraction) {
+ ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler>
+ m_platform;
+ m_platform->advanceClockSeconds(1);
johnme 2017/04/06 17:15:28 Can you add a comment explaining why you need to a
steimel 2017/04/07 16:47:16 Done.
+
+ // Need to reinitialize page since we changed the platform.
+ initializePage();
+ ensureSizing();
+
+ Element* panel = getElementByShadowPseudoId(mediaControls(),
johnme 2017/04/06 17:15:28 Nit: you can use mediaControls().panelElement() he
steimel 2017/04/07 16:47:17 Done.
+ "-webkit-media-controls-panel");
+ ASSERT_NE(nullptr, panel);
+
+ mediaControls().mediaElement().setBooleanAttribute(HTMLNames::controlsAttr,
+ true);
+ mediaControls().mediaElement().setSrc("http://example.com");
+ mediaControls().mediaElement().play();
+
+ // Controls start out visible.
+ EXPECT_TRUE(isElementVisible(*panel));
+
+ // Tabbing between controls prevents controls from hiding.
+ m_platform->runForPeriodSeconds(2);
+ mediaControls().dispatchEvent(Event::create("focusin"));
+ m_platform->runForPeriodSeconds(2);
+ EXPECT_TRUE(isElementVisible(*panel));
+
+ // Seeking on the timeline or volume bar prevents controls from hiding.
+ mediaControls().dispatchEvent(Event::create("input"));
+ m_platform->runForPeriodSeconds(2);
+ EXPECT_TRUE(isElementVisible(*panel));
+
+ // Pressing a key prevents controls from hiding.
+ mediaControls().panelElement()->dispatchEvent(Event::create("keypress"));
+ m_platform->runForPeriodSeconds(2);
+ EXPECT_TRUE(isElementVisible(*panel));
+
+ // Once user interaction stops, controls can hide.
+ m_platform->runForPeriodSeconds(2);
+ EXPECT_FALSE(isElementVisible(*panel));
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698