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