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

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

Issue 2782373002: Remove MediaControls methods needed for the Cast button (Closed)
Patch Set: Fixed MediaControlsImplTest 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/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 7e9c97be1271da2d76da6ce24b09cff9415039d7..cfa659acbbe81280b54c98b2203cc101bc00db95 100644
--- a/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp
@@ -25,6 +25,8 @@
#include "modules/media_controls/elements/MediaControlDownloadButtonElement.h"
#include "modules/media_controls/elements/MediaControlTimelineElement.h"
#include "modules/media_controls/elements/MediaControlVolumeSliderElement.h"
+#include "modules/remoteplayback/HTMLMediaElementRemotePlayback.h"
+#include "modules/remoteplayback/RemotePlayback.h"
#include "platform/heap/Handle.h"
#include "platform/testing/EmptyWebMediaPlayer.h"
#include "platform/testing/HistogramTester.h"
@@ -60,23 +62,6 @@ class MockVideoWebMediaPlayer : public EmptyWebMediaPlayer {
WebTimeRanges seekable_;
};
-class MockWebRemotePlaybackClient : public WebRemotePlaybackClient {
- public:
- void StateChanged(WebRemotePlaybackState) override {}
- void AvailabilityChanged(
- WebRemotePlaybackAvailability availability) override {
- availability_ = availability;
- }
- void PromptCancelled() override {}
- bool RemotePlaybackAvailable() const override {
- return availability_ == WebRemotePlaybackAvailability::kDeviceAvailable;
- }
-
- private:
- WebRemotePlaybackAvailability availability_ =
- WebRemotePlaybackAvailability::kUnknown;
-};
-
class MockLayoutObject : public LayoutObject {
public:
MockLayoutObject(Node* node) : LayoutObject(node) {}
@@ -100,16 +85,9 @@ class StubLocalFrameClient : public EmptyLocalFrameClient {
}
WebRemotePlaybackClient* CreateWebRemotePlaybackClient(
- HTMLMediaElement&) override {
- if (!remote_playback_client_) {
- remote_playback_client_ =
- WTF::WrapUnique(new MockWebRemotePlaybackClient);
- }
- return remote_playback_client_.get();
+ HTMLMediaElement& element) override {
+ return HTMLMediaElementRemotePlayback::remote(element);
}
-
- private:
- std::unique_ptr<MockWebRemotePlaybackClient> remote_playback_client_;
};
Element* GetElementByShadowPseudoId(Node& root_node,
@@ -228,6 +206,10 @@ class MediaControlsImplTest : public ::testing::Test {
void MouseMoveTo(WebFloatPoint pos);
void MouseUpAt(WebFloatPoint pos);
+ bool HasAvailabilityCallbacks(RemotePlayback* remote_playback) {
+ return !remote_playback->availability_callbacks_.IsEmpty();
+ }
+
private:
std::unique_ptr<DummyPageHolder> page_holder_;
Persistent<MediaControlsImpl> media_controls_;
@@ -349,10 +331,12 @@ TEST_F(MediaControlsImplTest, CastButtonDisableRemotePlaybackAttr) {
MediaControls().MediaElement().SetBooleanAttribute(
HTMLNames::disableremoteplaybackAttr, true);
+ testing::RunPendingTasks();
ASSERT_FALSE(IsElementVisible(*cast_button));
MediaControls().MediaElement().SetBooleanAttribute(
HTMLNames::disableremoteplaybackAttr, false);
+ testing::RunPendingTasks();
ASSERT_TRUE(IsElementVisible(*cast_button));
}
@@ -376,10 +360,12 @@ TEST_F(MediaControlsImplTest, CastOverlayDisableRemotePlaybackAttr) {
MediaControls().MediaElement().SetBooleanAttribute(
HTMLNames::disableremoteplaybackAttr, true);
+ testing::RunPendingTasks();
ASSERT_FALSE(IsElementVisible(*cast_overlay_button));
MediaControls().MediaElement().SetBooleanAttribute(
HTMLNames::disableremoteplaybackAttr, false);
+ testing::RunPendingTasks();
ASSERT_TRUE(IsElementVisible(*cast_overlay_button));
}
@@ -847,4 +833,61 @@ TEST_F(MediaControlsImplTest, ControlsRemainVisibleDuringKeyboardInteraction) {
EXPECT_FALSE(IsElementVisible(*panel));
}
+TEST_F(MediaControlsImplTest,
+ RemovingFromDocumentRemovesListenersAndCallbacks) {
+ auto page_holder = DummyPageHolder::Create();
+
+ HTMLMediaElement* element =
+ HTMLVideoElement::Create(page_holder->GetDocument());
+ element->SetBooleanAttribute(HTMLNames::controlsAttr, true);
+ page_holder->GetDocument().body()->AppendChild(element);
+
+ RemotePlayback* remote_playback =
+ HTMLMediaElementRemotePlayback::remote(*element);
+
+ EXPECT_TRUE(remote_playback->HasEventListeners());
+ EXPECT_TRUE(HasAvailabilityCallbacks(remote_playback));
+
+ WeakPersistent<HTMLMediaElement> weak_persistent_video = element;
+ {
+ Persistent<HTMLMediaElement> persistent_video = element;
+ page_holder->GetDocument().body()->setInnerHTML("");
+
+ // When removed from the document, the event listeners should have been
+ // dropped.
+ EXPECT_FALSE(remote_playback->HasEventListeners());
+ EXPECT_FALSE(HasAvailabilityCallbacks(remote_playback));
+ }
+
+ testing::RunPendingTasks();
+
+ ThreadState::Current()->CollectAllGarbage();
+
+ // It has been GC'd.
+ EXPECT_EQ(nullptr, weak_persistent_video);
+}
+
+TEST_F(MediaControlsImplTest,
+ ReInsertingInDocumentRestoresListenersAndCallbacks) {
+ auto page_holder = DummyPageHolder::Create();
+
+ HTMLMediaElement* element =
+ HTMLVideoElement::Create(page_holder->GetDocument());
+ element->SetBooleanAttribute(HTMLNames::controlsAttr, true);
+ page_holder->GetDocument().body()->AppendChild(element);
+
+ RemotePlayback* remote_playback =
+ HTMLMediaElementRemotePlayback::remote(*element);
+
+ // This should be a no-op. We keep a reference on the media element to avoid
+ // an unexpected GC.
+ {
+ Persistent<HTMLMediaElement> video_holder = element;
+ page_holder->GetDocument().body()->RemoveChild(element);
+ page_holder->GetDocument().body()->AppendChild(video_holder.Get());
+ EXPECT_TRUE(remote_playback->HasEventListeners());
+ EXPECT_TRUE(HasAvailabilityCallbacks(remote_playback));
+ }
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698