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

Side by Side Diff: third_party/WebKit/Source/modules/media_controls/MediaControlsMediaEventListener.cpp

Issue 2782373002: Remove MediaControls methods needed for the Cast button (Closed)
Patch Set: Fixed MediaControlsImplTest Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/media_controls/MediaControlsMediaEventListener.h" 5 #include "modules/media_controls/MediaControlsMediaEventListener.h"
6 6
7 #include "core/events/Event.h" 7 #include "core/events/Event.h"
8 #include "core/html/HTMLMediaElement.h" 8 #include "core/html/HTMLMediaElement.h"
9 #include "core/html/track/TextTrackList.h" 9 #include "core/html/track/TextTrackList.h"
10 #include "modules/media_controls/MediaControlsImpl.h" 10 #include "modules/media_controls/MediaControlsImpl.h"
11 #include "modules/remoteplayback/AvailabilityCallbackWrapper.h"
12 #include "modules/remoteplayback/HTMLMediaElementRemotePlayback.h"
13 #include "modules/remoteplayback/RemotePlayback.h"
11 14
12 namespace blink { 15 namespace blink {
13 16
14 MediaControlsMediaEventListener::MediaControlsMediaEventListener( 17 MediaControlsMediaEventListener::MediaControlsMediaEventListener(
15 MediaControlsImpl* media_controls) 18 MediaControlsImpl* media_controls)
16 : EventListener(kCPPEventListenerType), media_controls_(media_controls) { 19 : EventListener(kCPPEventListenerType), media_controls_(media_controls) {
17 if (GetMediaElement().isConnected()) 20 if (GetMediaElement().isConnected())
18 Attach(); 21 Attach();
19 } 22 }
20 23
(...skipping 23 matching lines...) Expand all
44 TextTrackList* text_tracks = GetMediaElement().textTracks(); 47 TextTrackList* text_tracks = GetMediaElement().textTracks();
45 text_tracks->addEventListener(EventTypeNames::addtrack, this, false); 48 text_tracks->addEventListener(EventTypeNames::addtrack, this, false);
46 text_tracks->addEventListener(EventTypeNames::change, this, false); 49 text_tracks->addEventListener(EventTypeNames::change, this, false);
47 text_tracks->addEventListener(EventTypeNames::removetrack, this, false); 50 text_tracks->addEventListener(EventTypeNames::removetrack, this, false);
48 51
49 // Keypress events. 52 // Keypress events.
50 if (media_controls_->PanelElement()) { 53 if (media_controls_->PanelElement()) {
51 media_controls_->PanelElement()->addEventListener(EventTypeNames::keypress, 54 media_controls_->PanelElement()->addEventListener(EventTypeNames::keypress,
52 this, false); 55 this, false);
53 } 56 }
57
58 RemotePlayback* remote = GetRemotePlayback();
59 if (remote) {
60 remote->addEventListener(EventTypeNames::connect, this);
61 remote->addEventListener(EventTypeNames::connecting, this);
62 remote->addEventListener(EventTypeNames::disconnect, this);
63
64 // TODO(avayvod, mlamouri): Attach can be called twice. See
65 // https://crbug.com/713275.
66 if (remote_playback_availability_callback_id_ == -1) {
67 remote_playback_availability_callback_id_ =
68 remote->WatchAvailabilityInternal(new AvailabilityCallbackWrapper(
69 WTF::Bind(&MediaControlsMediaEventListener::
70 OnRemotePlaybackAvailabilityChanged,
71 WrapPersistent(this))));
72 }
73 }
54 } 74 }
55 75
56 void MediaControlsMediaEventListener::Detach() { 76 void MediaControlsMediaEventListener::Detach() {
57 DCHECK(!GetMediaElement().isConnected()); 77 DCHECK(!GetMediaElement().isConnected());
58 78
59 media_controls_->GetDocument().removeEventListener( 79 media_controls_->GetDocument().removeEventListener(
60 EventTypeNames::fullscreenchange, this, false); 80 EventTypeNames::fullscreenchange, this, false);
61 81
62 TextTrackList* text_tracks = GetMediaElement().textTracks(); 82 TextTrackList* text_tracks = GetMediaElement().textTracks();
63 text_tracks->removeEventListener(EventTypeNames::addtrack, this, false); 83 text_tracks->removeEventListener(EventTypeNames::addtrack, this, false);
64 text_tracks->removeEventListener(EventTypeNames::change, this, false); 84 text_tracks->removeEventListener(EventTypeNames::change, this, false);
65 text_tracks->removeEventListener(EventTypeNames::removetrack, this, false); 85 text_tracks->removeEventListener(EventTypeNames::removetrack, this, false);
66 86
67 if (media_controls_->PanelElement()) { 87 if (media_controls_->PanelElement()) {
68 media_controls_->PanelElement()->removeEventListener( 88 media_controls_->PanelElement()->removeEventListener(
69 EventTypeNames::keypress, this, false); 89 EventTypeNames::keypress, this, false);
70 } 90 }
91
92 RemotePlayback* remote = GetRemotePlayback();
93 if (remote) {
94 remote->removeEventListener(EventTypeNames::connect, this);
95 remote->removeEventListener(EventTypeNames::connecting, this);
96 remote->removeEventListener(EventTypeNames::disconnect, this);
97
98 // TODO(avayvod): apparently Detach() can be called without a previous
99 // Attach() call. See https://crbug.com/713275 for more details.
100 if (remote_playback_availability_callback_id_ != -1) {
101 remote->CancelWatchAvailabilityInternal(
102 remote_playback_availability_callback_id_);
103 remote_playback_availability_callback_id_ = -1;
104 }
105 }
71 } 106 }
72 107
73 bool MediaControlsMediaEventListener::operator==( 108 bool MediaControlsMediaEventListener::operator==(
74 const EventListener& other) const { 109 const EventListener& other) const {
75 return this == &other; 110 return this == &other;
76 } 111 }
77 112
78 HTMLMediaElement& MediaControlsMediaEventListener::GetMediaElement() { 113 HTMLMediaElement& MediaControlsMediaEventListener::GetMediaElement() {
79 return media_controls_->MediaElement(); 114 return media_controls_->MediaElement();
80 } 115 }
81 116
117 RemotePlayback* MediaControlsMediaEventListener::GetRemotePlayback() {
118 return HTMLMediaElementRemotePlayback::remote(GetMediaElement());
119 }
120
82 void MediaControlsMediaEventListener::handleEvent( 121 void MediaControlsMediaEventListener::handleEvent(
83 ExecutionContext* execution_context, 122 ExecutionContext* execution_context,
84 Event* event) { 123 Event* event) {
85 if (event->type() == EventTypeNames::volumechange) { 124 if (event->type() == EventTypeNames::volumechange) {
86 media_controls_->OnVolumeChange(); 125 media_controls_->OnVolumeChange();
87 return; 126 return;
88 } 127 }
89 if (event->type() == EventTypeNames::focusin) { 128 if (event->type() == EventTypeNames::focusin) {
90 media_controls_->OnFocusIn(); 129 media_controls_->OnFocusIn();
91 return; 130 return;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 return; 179 return;
141 } 180 }
142 181
143 // Keypress events. 182 // Keypress events.
144 if (event->type() == EventTypeNames::keypress) { 183 if (event->type() == EventTypeNames::keypress) {
145 if (event->currentTarget() == media_controls_->PanelElement()) 184 if (event->currentTarget() == media_controls_->PanelElement())
146 media_controls_->OnPanelKeypress(); 185 media_controls_->OnPanelKeypress();
147 return; 186 return;
148 } 187 }
149 188
189 // RemotePlayback state change events.
190 if (event->type() == EventTypeNames::connect ||
191 event->type() == EventTypeNames::connecting ||
192 event->type() == EventTypeNames::disconnect) {
193 media_controls_->RemotePlaybackStateChanged();
194 return;
195 }
196
150 NOTREACHED(); 197 NOTREACHED();
151 } 198 }
152 199
200 void MediaControlsMediaEventListener::OnRemotePlaybackAvailabilityChanged() {
201 media_controls_->RefreshCastButtonVisibility();
202 }
203
153 DEFINE_TRACE(MediaControlsMediaEventListener) { 204 DEFINE_TRACE(MediaControlsMediaEventListener) {
154 EventListener::Trace(visitor); 205 EventListener::Trace(visitor);
155 visitor->Trace(media_controls_); 206 visitor->Trace(media_controls_);
156 } 207 }
157 208
158 } // namespace blink 209 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698