| 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..fe3bdc469af4961c83b696dd70ed268674f2a9c5 100644
|
| --- a/third_party/WebKit/Source/modules/media_controls/MediaControlsMediaEventListener.cpp
|
| +++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsMediaEventListener.cpp
|
| @@ -8,6 +8,9 @@
|
| #include "core/html/HTMLMediaElement.h"
|
| #include "core/html/track/TextTrackList.h"
|
| #include "modules/media_controls/MediaControlsImpl.h"
|
| +#include "modules/remoteplayback/AvailabilityCallbackWrapper.h"
|
| +#include "modules/remoteplayback/HTMLMediaElementRemotePlayback.h"
|
| +#include "modules/remoteplayback/RemotePlayback.h"
|
|
|
| namespace blink {
|
|
|
| @@ -51,6 +54,23 @@ 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);
|
| +
|
| + // TODO(avayvod, mlamouri): Attach can be called twice. See
|
| + // https://crbug.com/713275.
|
| + if (remote_playback_availability_callback_id_ == -1) {
|
| + remote_playback_availability_callback_id_ =
|
| + remote->WatchAvailabilityInternal(new AvailabilityCallbackWrapper(
|
| + WTF::Bind(&MediaControlsMediaEventListener::
|
| + OnRemotePlaybackAvailabilityChanged,
|
| + WrapPersistent(this))));
|
| + }
|
| + }
|
| }
|
|
|
| void MediaControlsMediaEventListener::Detach() {
|
| @@ -68,6 +88,21 @@ 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);
|
| +
|
| + // TODO(avayvod): apparently Detach() can be called without a previous
|
| + // Attach() call. See https://crbug.com/713275 for more details.
|
| + if (remote_playback_availability_callback_id_ != -1) {
|
| + remote->CancelWatchAvailabilityInternal(
|
| + remote_playback_availability_callback_id_);
|
| + remote_playback_availability_callback_id_ = -1;
|
| + }
|
| + }
|
| }
|
|
|
| bool MediaControlsMediaEventListener::operator==(
|
| @@ -79,6 +114,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 +186,21 @@ void MediaControlsMediaEventListener::handleEvent(
|
| return;
|
| }
|
|
|
| + // RemotePlayback state change events.
|
| + if (event->type() == EventTypeNames::connect ||
|
| + event->type() == EventTypeNames::connecting ||
|
| + event->type() == EventTypeNames::disconnect) {
|
| + media_controls_->RemotePlaybackStateChanged();
|
| + return;
|
| + }
|
| +
|
| NOTREACHED();
|
| }
|
|
|
| +void MediaControlsMediaEventListener::OnRemotePlaybackAvailabilityChanged() {
|
| + media_controls_->RefreshCastButtonVisibility();
|
| +}
|
| +
|
| DEFINE_TRACE(MediaControlsMediaEventListener) {
|
| EventListener::Trace(visitor);
|
| visitor->Trace(media_controls_);
|
|
|