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

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

Issue 2943983003: chrome/blink: Add functionality for in-product help for media elements. (Closed)
Patch Set: mounir's comments. Created 3 years, 5 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/modules/media_controls/MediaControlsImplTest.cpp
diff --git a/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp b/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp
index b54bb85c6c2d4765c575726a6c54c0e15cf85545..568f94d4dd7e9df3d398552931c147e70de57b6a 100644
--- a/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp
@@ -76,11 +76,22 @@ class MockLayoutObject : public LayoutObject {
public:
MockLayoutObject(Node* node) : LayoutObject(node) {}
+ void SetVisible(bool visible) { visible_ = visible; }
+
const char* GetName() const override { return "MockLayoutObject"; }
void UpdateLayout() override {}
FloatRect LocalBoundingBoxRectForAccessibility() const override {
return FloatRect();
}
+ void AbsoluteQuads(Vector<FloatQuad>& quads,
+ MapCoordinatesFlags mode) const override {
+ if (!visible_)
+ return;
+ quads.push_back(FloatQuad(FloatRect(0.f, 0.f, 10.f, 10.f)));
+ }
+
+ private:
+ bool visible_ = false;
};
class StubLocalFrameClient : public EmptyLocalFrameClient {
@@ -109,6 +120,13 @@ Element* GetElementByShadowPseudoId(Node& root_node,
return nullptr;
}
+MediaControlDownloadButtonElement& GetDownloadButton(
+ MediaControlsImpl& controls) {
+ Element* element = GetElementByShadowPseudoId(
+ controls, "-internal-media-controls-download-button");
+ return static_cast<MediaControlDownloadButtonElement&>(*element);
+}
+
bool IsElementVisible(Element& element) {
const StylePropertySet* inline_style = element.InlineStyle();
@@ -571,6 +589,121 @@ TEST_F(MediaControlsImplTest, DownloadButtonNotDisplayedHLS) {
EXPECT_FALSE(IsElementVisible(*download_button));
}
+TEST_F(MediaControlsImplTest, DownloadButtonInProductHelp_Settings) {
+ EnsureSizing();
+
+ // Inject the LayoutObject for the button to override the rect returned in
+ // visual viewport.
+ MediaControlDownloadButtonElement& button =
+ GetDownloadButton(MediaControls());
+ MockLayoutObject layout_object(&button);
+ layout_object.SetVisible(true);
+ button.SetLayoutObject(&layout_object);
+
+ // In-product help not triggered when disabled from the settings.
+ MediaControls().MediaElement().SetSrc("https://example.com/foo.mp4");
+ testing::RunPendingTasks();
+ SimulateLoadedMetadata();
+ MediaControls().MediaElement().Play();
+
+ ASSERT_TRUE(button.IsWanted());
+ EXPECT_FALSE(button.IsShowingInProductHelp());
+
+ // Enable the setting which should show the in-product help.
+ MediaControls()
+ .MediaElement()
+ .GetDocument()
+ .GetSettings()
+ ->SetMediaDownloadInProductHelpEnabled(true);
+ button.SetIsWanted(button.IsWanted());
+ EXPECT_TRUE(button.IsShowingInProductHelp());
+ EXPECT_TRUE(MediaControls().IsVisible());
+
+ // Disable the download button, which dismisses the in-product-help.
+ button.SetIsWanted(false);
+ EXPECT_FALSE(button.IsShowingInProductHelp());
+
+ // Re-enable. In-product-help should be restricted to once per element.
+ button.SetIsWanted(true);
+ EXPECT_FALSE(button.IsShowingInProductHelp());
+
+ button.SetLayoutObject(nullptr);
+}
+
+TEST_F(MediaControlsImplTest, DownloadButtonInProductHelp_ControlsVisibility) {
+ EnsureSizing();
+
+ // Inject the LayoutObject for the button to override the rect returned in
+ // visual viewport.
+ MediaControlDownloadButtonElement& button =
+ GetDownloadButton(MediaControls());
+ MockLayoutObject layout_object(&button);
+ layout_object.SetVisible(true);
+ button.SetLayoutObject(&layout_object);
+
+ MediaControls()
+ .MediaElement()
+ .GetDocument()
+ .GetSettings()
+ ->SetMediaDownloadInProductHelpEnabled(true);
+
+ // The in-product-help should not be shown while the controls are hidden.
+ MediaControls().Hide();
+ MediaControls().MediaElement().SetSrc("https://example.com/foo.mp4");
+ testing::RunPendingTasks();
+ SimulateLoadedMetadata();
+ MediaControls().MediaElement().Play();
+
+ ASSERT_TRUE(button.IsWanted());
+ EXPECT_FALSE(button.IsShowingInProductHelp());
+
+ // Showing the controls initiates showing in-product-help.
+ MediaControls().MaybeShow();
+ EXPECT_TRUE(button.IsShowingInProductHelp());
+ EXPECT_TRUE(MediaControls().IsVisible());
+
+ // Hiding the controls dismissed in-product-help.
+ MediaControls().Hide();
+ EXPECT_FALSE(button.IsShowingInProductHelp());
+
+ button.SetLayoutObject(nullptr);
+}
+
+TEST_F(MediaControlsImplTest, DownloadButtonInProductHelp_ButtonVisibility) {
+ EnsureSizing();
+
+ // Inject the LayoutObject for the button to override the rect returned in
+ // visual viewport.
+ MediaControlDownloadButtonElement& button =
+ GetDownloadButton(MediaControls());
+ MockLayoutObject layout_object(&button);
+ button.SetLayoutObject(&layout_object);
+
+ MediaControls()
+ .MediaElement()
+ .GetDocument()
+ .GetSettings()
+ ->SetMediaDownloadInProductHelpEnabled(true);
+
+ // The in-product-help should not be shown while the button is hidden.
+ layout_object.SetVisible(false);
+ MediaControls().MediaElement().SetSrc("https://example.com/foo.mp4");
+ testing::RunPendingTasks();
+ SimulateLoadedMetadata();
+ MediaControls().MediaElement().Play();
+
+ ASSERT_TRUE(button.IsWanted());
+ EXPECT_FALSE(button.IsShowingInProductHelp());
+
+ // Make the button visible to show in-product-help.
+ layout_object.SetVisible(true);
+ button.SetIsWanted(button.IsWanted());
+ EXPECT_TRUE(button.IsShowingInProductHelp());
+ EXPECT_TRUE(MediaControls().IsVisible());
+
+ button.SetLayoutObject(nullptr);
+}
+
TEST_F(MediaControlsImplTest, TimelineSeekToRoundedEnd) {
EnsureSizing();

Powered by Google App Engine
This is Rietveld 408576698