Index: third_party/WebKit/Source/modules/media_controls/MediaControlsMediaEventListener.cpp |
diff --git a/third_party/WebKit/Source/modules/media_controls/MediaControlsMediaEventListener.cpp b/third_party/WebKit/Source/modules/media_controls/MediaControlsMediaEventListener.cpp |
index 97bbd28d76a140207b1dda0f5af4b72fa6f187de..7089e81d6e0ec6fb4f5f6b9414cde8e12b6815b6 100644 |
--- a/third_party/WebKit/Source/modules/media_controls/MediaControlsMediaEventListener.cpp |
+++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsMediaEventListener.cpp |
@@ -8,6 +8,8 @@ |
#include "core/html/HTMLMediaElement.h" |
#include "core/html/track/TextTrackList.h" |
#include "modules/media_controls/MediaControlsImpl.h" |
+#include "modules/remoteplayback/HTMLMediaElementRemotePlayback.h" |
+#include "modules/remoteplayback/RemotePlayback.h" |
namespace blink { |
@@ -51,6 +53,22 @@ void MediaControlsMediaEventListener::Attach() { |
media_controls_->PanelElement()->addEventListener(EventTypeNames::keypress, |
this, false); |
} |
+ |
+ RemotePlayback* remote = GetRemotePlayback(); |
+ if (remote) { |
+ remote->addEventListener(EventTypeNames::connect, this); |
+ remote->addEventListener(EventTypeNames::connecting, this); |
+ remote->addEventListener(EventTypeNames::disconnect, this); |
+ |
+ if (remote_playback_availability_callback_id_ == -1) { |
+ remote_playback_availability_callback_id_ = |
+ remote->WatchAvailabilityInternal( |
+ new RemotePlayback::AvailabilityCallback( |
+ WTF::Bind(&MediaControlsMediaEventListener:: |
+ OnRemotePlaybackAvailabilityChanged, |
+ WrapPersistent(this)))); |
+ } |
+ } |
} |
void MediaControlsMediaEventListener::Detach() { |
@@ -68,6 +86,18 @@ void MediaControlsMediaEventListener::Detach() { |
media_controls_->PanelElement()->removeEventListener( |
EventTypeNames::keypress, this, false); |
} |
+ |
+ RemotePlayback* remote = GetRemotePlayback(); |
+ if (remote) { |
+ remote->removeEventListener(EventTypeNames::connect, this); |
+ remote->removeEventListener(EventTypeNames::connecting, this); |
+ remote->removeEventListener(EventTypeNames::disconnect, this); |
+ |
+ DCHECK_NE(-1, remote_playback_availability_callback_id_); |
+ remote->CancelWatchAvailabilityInternal( |
+ remote_playback_availability_callback_id_); |
+ remote_playback_availability_callback_id_ = -1; |
+ } |
} |
bool MediaControlsMediaEventListener::operator==( |
@@ -79,6 +109,10 @@ HTMLMediaElement& MediaControlsMediaEventListener::GetMediaElement() { |
return media_controls_->MediaElement(); |
} |
+RemotePlayback* MediaControlsMediaEventListener::GetRemotePlayback() { |
+ return HTMLMediaElementRemotePlayback::remote(GetMediaElement()); |
+} |
+ |
void MediaControlsMediaEventListener::handleEvent( |
ExecutionContext* execution_context, |
Event* event) { |
@@ -147,9 +181,21 @@ void MediaControlsMediaEventListener::handleEvent( |
return; |
} |
+ // RemotePlayback state change events. |
+ if (event->type() == EventTypeNames::connect || |
+ event->type() == EventTypeNames::connecting || |
+ event->type() == EventTypeNames::disconnect) { |
+ media_controls_->RefreshCastButtonVisibility(); |
+ return; |
+ } |
+ |
NOTREACHED(); |
} |
+void MediaControlsMediaEventListener::OnRemotePlaybackAvailabilityChanged() { |
+ media_controls_->RefreshCastButtonVisibility(); |
+} |
+ |
DEFINE_TRACE(MediaControlsMediaEventListener) { |
EventListener::Trace(visitor); |
visitor->Trace(media_controls_); |