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