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(); |