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

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

Issue 2386273003: Keep the media controls panel visible if the overflow menu is visible. (Closed)
Patch Set: Created 4 years, 2 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/core/html/shadow/MediaControls.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/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 7cb310babe3828aff34c2bfdb9cf8f29c2e66f49..2de2a55e3e60428d4c006adb85b9bc162266cad4 100644
--- a/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp
+++ b/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp
@@ -11,8 +11,12 @@
#include "core/dom/StyleEngine.h"
#include "core/frame/Settings.h"
#include "core/html/HTMLVideoElement.h"
+#include "core/loader/EmptyClients.h"
#include "core/testing/DummyPageHolder.h"
#include "platform/heap/Handle.h"
+#include "platform/testing/UnitTestHelpers.h"
+#include "public/platform/WebMediaPlayer.h"
+#include "public/platform/WebSize.h"
#include "testing/gtest/include/gtest/gtest.h"
#include <memory>
@@ -20,6 +24,55 @@ namespace blink {
namespace {
+class MockVideoWebMediaPlayer : public WebMediaPlayer {
+ public:
+ void load(LoadType, const WebMediaPlayerSource&, CORSMode) override{};
+ void play() override{};
+ void pause() override{};
+ bool supportsSave() const override { return false; };
+ void seek(double seconds) override{};
+ void setRate(double) override{};
+ void setVolume(double) override{};
+ WebTimeRanges buffered() const override { return WebTimeRanges(); };
+ WebTimeRanges seekable() const override { return WebTimeRanges(); };
+ void setSinkId(const WebString& sinkId,
+ const WebSecurityOrigin&,
+ WebSetSinkIdCallbacks*) override{};
+ bool hasVideo() const override { return true; };
+ bool hasAudio() const override { return false; };
+ WebSize naturalSize() const override { return WebSize(0, 0); };
+ bool paused() const override { return false; };
+ bool seeking() const override { return false; };
+ double duration() const override { return 0.0; };
+ double currentTime() const override { return 0.0; };
+ NetworkState getNetworkState() const override { return NetworkStateEmpty; };
+ ReadyState getReadyState() const override { return ReadyStateHaveNothing; };
+ WebString getErrorMessage() override { return WebString(); };
+ bool didLoadingProgress() override { return false; };
+ bool hasSingleSecurityOrigin() const override { return true; };
+ bool didPassCORSAccessCheck() const override { return true; };
+ double mediaTimeForTimeValue(double timeValue) const override {
+ return timeValue;
+ };
+ unsigned decodedFrameCount() const override { return 0; };
+ unsigned droppedFrameCount() const override { return 0; };
+ size_t audioDecodedByteCount() const override { return 0; };
+ size_t videoDecodedByteCount() const override { return 0; };
+ void paint(WebCanvas*, const WebRect&, SkPaint&) override{};
+};
+
+class StubFrameLoaderClient : public EmptyFrameLoaderClient {
+ public:
+ static StubFrameLoaderClient* create() { return new StubFrameLoaderClient; }
+
+ std::unique_ptr<WebMediaPlayer> createWebMediaPlayer(
+ HTMLMediaElement&,
+ const WebMediaPlayerSource&,
+ WebMediaPlayerClient*) override {
+ return wrapUnique(new MockVideoWebMediaPlayer);
+ }
+};
+
Element* getElementByShadowPseudoId(Node& rootNode,
const char* shadowPseudoId) {
for (Element& element : ElementTraversal::descendantsOf(rootNode)) {
@@ -39,8 +92,9 @@ bool isElementVisible(Element& element) {
return false;
if (inlineStyle->hasProperty(CSSPropertyOpacity) &&
- inlineStyle->getPropertyValue(CSSPropertyOpacity).toDouble() == 0.0)
+ inlineStyle->getPropertyValue(CSSPropertyOpacity).toDouble() == 0.0) {
return false;
+ }
if (inlineStyle->getPropertyValue(CSSPropertyVisibility) == "hidden")
return false;
@@ -53,10 +107,11 @@ bool isElementVisible(Element& element) {
} // namespace
-class MediaControlsTest : public testing::Test {
+class MediaControlsTest : public ::testing::Test {
protected:
virtual void SetUp() {
- m_pageHolder = DummyPageHolder::create(IntSize(800, 600));
+ m_pageHolder = DummyPageHolder::create(IntSize(800, 600), nullptr,
+ StubFrameLoaderClient::create());
Document& document = this->document();
document.write("<video>");
@@ -78,6 +133,10 @@ class MediaControlsTest : public testing::Test {
m_mediaControls->mediaElement().clientWidth();
}
+ void simulateHideMediaControlsTimerFired() {
+ m_mediaControls->hideMediaControlsTimerFired(nullptr);
+ }
+
MediaControls& mediaControls() { return *m_mediaControls; }
Document& document() { return m_pageHolder->document(); }
@@ -199,4 +258,26 @@ TEST_F(MediaControlsTest, CastOverlayDisableRemotePlaybackAttr) {
ASSERT_TRUE(isElementVisible(*castOverlayButton));
}
+TEST_F(MediaControlsTest, KeepControlsVisibleIfOverflowListVisible) {
+ Element* overflowList = getElementByShadowPseudoId(
+ mediaControls(), "-internal-media-controls-overflow-menu-list");
+ ASSERT_NE(nullptr, overflowList);
+
+ Element* panel = getElementByShadowPseudoId(mediaControls(),
+ "-webkit-media-controls-panel");
+ ASSERT_NE(nullptr, panel);
+
+ mediaControls().mediaElement().setSrc("http://example.com");
+ mediaControls().mediaElement().play();
+ testing::runPendingTasks();
+
+ mediaControls().show();
+ mediaControls().toggleOverflowMenu();
+ EXPECT_TRUE(isElementVisible(*overflowList));
+
+ simulateHideMediaControlsTimerFired();
+ EXPECT_TRUE(isElementVisible(*overflowList));
+ EXPECT_TRUE(isElementVisible(*panel));
+}
+
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/html/shadow/MediaControls.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698