Chromium Code Reviews| Index: third_party/WebKit/Source/modules/remoteplayback/RemotePlaybackTest.cpp |
| diff --git a/third_party/WebKit/Source/modules/remoteplayback/RemotePlaybackTest.cpp b/third_party/WebKit/Source/modules/remoteplayback/RemotePlaybackTest.cpp |
| index b84147a705aec06215a8f1df4078be6f81ae4873..656cd905b62412853259b19019411a28ddd08448 100644 |
| --- a/third_party/WebKit/Source/modules/remoteplayback/RemotePlaybackTest.cpp |
| +++ b/third_party/WebKit/Source/modules/remoteplayback/RemotePlaybackTest.cpp |
| @@ -56,6 +56,10 @@ class RemotePlaybackTest : public ::testing::Test { |
| void SetState(RemotePlayback* remote_playback, WebRemotePlaybackState state) { |
| remote_playback->StateChanged(state); |
| } |
| + |
| + bool HasAvailabilityCallbacks(RemotePlayback* remote_playback) { |
| + return !remote_playback->availability_callbacks_.IsEmpty(); |
| + } |
| }; |
| TEST_F(RemotePlaybackTest, PromptCancelledRejectsWithNotAllowedError) { |
| @@ -273,4 +277,63 @@ TEST_F(RemotePlaybackTest, DisableRemotePlaybackCancelsAvailabilityCallbacks) { |
| ::testing::Mock::VerifyAndClear(callback_function); |
| } |
| +TEST_F(RemotePlaybackTest, RemovingFromDocumentRemovesListenersAndCallbacks) { |
|
mlamouri (slow - plz ping)
2017/04/25 12:19:21
This should be a media_controls/ test, shouldn't i
whywhat
2017/04/25 15:45:37
I guess so :)
|
| + V8TestingScope scope; |
| + |
| + 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(RemotePlaybackTest, ReInsertingInDocumentRestoresListenersAndCallbacks) { |
|
mlamouri (slow - plz ping)
2017/04/25 12:19:21
ditto
|
| + V8TestingScope scope; |
| + |
| + 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 |