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

Side by Side Diff: media/blink/webmediaplayer_cast_android.cc

Issue 1570043002: Implement MediaSession on top of the WebMediaPlayerDelegate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@media_session
Patch Set: Rebase yet again. Created 4 years, 11 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 "media/blink/webmediaplayer_cast_android.h" 5 #include "media/blink/webmediaplayer_cast_android.h"
6 6
7 #include "gpu/GLES2/gl2extchromium.h" 7 #include "gpu/GLES2/gl2extchromium.h"
8 #include "gpu/blink/webgraphicscontext3d_impl.h" 8 #include "gpu/blink/webgraphicscontext3d_impl.h"
9 #include "gpu/command_buffer/client/gles2_interface.h" 9 #include "gpu/command_buffer/client/gles2_interface.h"
10 #include "gpu/command_buffer/common/sync_token.h" 10 #include "gpu/command_buffer/common/sync_token.h"
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 player_manager_->DestroyPlayer(player_id_); 170 player_manager_->DestroyPlayer(player_id_);
171 171
172 player_manager_->UnregisterMediaPlayer(player_id_); 172 player_manager_->UnregisterMediaPlayer(player_id_);
173 } 173 }
174 } 174 }
175 175
176 void WebMediaPlayerCast::Initialize(const GURL& url, 176 void WebMediaPlayerCast::Initialize(const GURL& url,
177 blink::WebLocalFrame* frame) { 177 blink::WebLocalFrame* frame) {
178 player_manager_->Initialize(MEDIA_PLAYER_TYPE_REMOTE_ONLY, player_id_, url, 178 player_manager_->Initialize(MEDIA_PLAYER_TYPE_REMOTE_ONLY, player_id_, url,
179 frame->document().firstPartyForCookies(), 0, 179 frame->document().firstPartyForCookies(), 0,
180 frame->document().url(), true); 180 frame->document().url(), true, webmediaplayer_);
181 is_player_initialized_ = true; 181 is_player_initialized_ = true;
182 } 182 }
183 183
184 void WebMediaPlayerCast::SetMediaPlayerManager( 184 void WebMediaPlayerCast::SetMediaPlayerManager(
185 RendererMediaPlayerManagerInterface* media_player_manager) { 185 RendererMediaPlayerManagerInterface* media_player_manager) {
186 player_manager_ = media_player_manager; 186 player_manager_ = media_player_manager;
187 player_id_ = player_manager_->RegisterMediaPlayer(this); 187 player_id_ = player_manager_->RegisterMediaPlayer(this);
188 } 188 }
189 189
190 void WebMediaPlayerCast::requestRemotePlayback() { 190 void WebMediaPlayerCast::requestRemotePlayback() {
191 player_manager_->Seek(player_id_, base::TimeDelta::FromSecondsD( 191 player_manager_->Seek(player_id_, base::TimeDelta::FromSecondsD(
192 webmediaplayer_->currentTime())); 192 webmediaplayer_->currentTime()));
193 player_manager_->RequestRemotePlayback(player_id_); 193 player_manager_->RequestRemotePlayback(player_id_);
194 } 194 }
195 195
196 void WebMediaPlayerCast::requestRemotePlaybackControl() { 196 void WebMediaPlayerCast::requestRemotePlaybackControl() {
197 player_manager_->RequestRemotePlaybackControl(player_id_); 197 player_manager_->RequestRemotePlaybackControl(player_id_);
198 } 198 }
199 199
200 void WebMediaPlayerCast::OnMediaMetadataChanged(base::TimeDelta duration, 200 void WebMediaPlayerCast::OnMediaMetadataChanged(base::TimeDelta duration,
201 int width, 201 int width,
202 int height, 202 int height,
203 bool success) {} 203 bool success) {
204 duration_ = duration;
205 }
204 206
205 void WebMediaPlayerCast::OnPlaybackComplete() { 207 void WebMediaPlayerCast::OnPlaybackComplete() {
206 DVLOG(1) << __FUNCTION__; 208 DVLOG(1) << __FUNCTION__;
207 webmediaplayer_->OnRemotePlaybackEnded(); 209 webmediaplayer_->OnRemotePlaybackEnded();
208 } 210 }
209 211
210 void WebMediaPlayerCast::OnBufferingUpdate(int percentage) { 212 void WebMediaPlayerCast::OnBufferingUpdate(int percentage) {
211 DVLOG(1) << __FUNCTION__; 213 DVLOG(1) << __FUNCTION__;
212 } 214 }
213 215
(...skipping 28 matching lines...) Expand all
242 DVLOG(1) << __FUNCTION__; 244 DVLOG(1) << __FUNCTION__;
243 } 245 }
244 246
245 void WebMediaPlayerCast::OnConnectedToRemoteDevice( 247 void WebMediaPlayerCast::OnConnectedToRemoteDevice(
246 const std::string& remote_playback_message) { 248 const std::string& remote_playback_message) {
247 DVLOG(1) << __FUNCTION__; 249 DVLOG(1) << __FUNCTION__;
248 remote_time_ = base::TimeDelta::FromSecondsD(webmediaplayer_->currentTime()); 250 remote_time_ = base::TimeDelta::FromSecondsD(webmediaplayer_->currentTime());
249 is_remote_ = true; 251 is_remote_ = true;
250 initializing_ = true; 252 initializing_ = true;
251 paused_ = false; 253 paused_ = false;
252 if (delegate_) 254 if (delegate_) {
253 delegate_->DidPlay(webmediaplayer_); 255 delegate_->DidPlay(webmediaplayer_, hasVideo(), false, is_remote_,
256 GetDuration());
257 }
254 client_->playbackStateChanged(); 258 client_->playbackStateChanged();
255 259
256 remote_playback_message_ = remote_playback_message; 260 remote_playback_message_ = remote_playback_message;
257 webmediaplayer_->SuspendForRemote(); 261 webmediaplayer_->SuspendForRemote();
258 client_->connectedToRemoteDevice(); 262 client_->connectedToRemoteDevice();
259 } 263 }
260 264
261 double WebMediaPlayerCast::currentTime() const { 265 double WebMediaPlayerCast::currentTime() const {
262 base::TimeDelta ret = remote_time_; 266 base::TimeDelta ret = remote_time_;
263 if (!paused_ && !initializing_) { 267 if (!paused_ && !initializing_) {
264 ret += base::TimeTicks::Now() - remote_time_at_; 268 ret += base::TimeTicks::Now() - remote_time_at_;
265 } 269 }
266 return ret.InSecondsF(); 270 return ret.InSecondsF();
267 } 271 }
268 272
269 void WebMediaPlayerCast::play() { 273 void WebMediaPlayerCast::play() {
270 if (!paused_) 274 if (!paused_)
271 return; 275 return;
272 276
273 player_manager_->Start(player_id_); 277 player_manager_->Start(player_id_);
274 remote_time_at_ = base::TimeTicks::Now(); 278 remote_time_at_ = base::TimeTicks::Now();
275 paused_ = false; 279 paused_ = false;
276 if (delegate_) 280 if (delegate_) {
277 delegate_->DidPlay(webmediaplayer_); 281 delegate_->DidPlay(webmediaplayer_, hasVideo(), false, is_remote_,
282 GetDuration());
283 }
278 } 284 }
279 285
280 void WebMediaPlayerCast::pause() { 286 void WebMediaPlayerCast::pause() {
281 player_manager_->Pause(player_id_, true); 287 player_manager_->Pause(player_id_, true);
282 } 288 }
283 289
284 void WebMediaPlayerCast::seek(base::TimeDelta t) { 290 void WebMediaPlayerCast::seek(base::TimeDelta t) {
285 should_notify_time_changed_ = true; 291 should_notify_time_changed_ = true;
286 player_manager_->Seek(player_id_, t); 292 player_manager_->Seek(player_id_, t);
287 } 293 }
288 294
289 void WebMediaPlayerCast::OnDisconnectedFromRemoteDevice() { 295 void WebMediaPlayerCast::OnDisconnectedFromRemoteDevice() {
290 DVLOG(1) << __FUNCTION__; 296 DVLOG(1) << __FUNCTION__;
291 if (!paused_) { 297 if (!paused_) {
292 paused_ = true; 298 paused_ = true;
293 if (delegate_) 299 if (delegate_)
294 delegate_->DidPause(webmediaplayer_); 300 delegate_->DidPause(webmediaplayer_, false);
295 } 301 }
296 is_remote_ = false; 302 is_remote_ = false;
297 double t = currentTime(); 303 double t = currentTime();
298 if (t + media::kTimeUpdateInterval * 2 / 1000 > webmediaplayer_->duration()) { 304 if (t + media::kTimeUpdateInterval * 2 / 1000 > webmediaplayer_->duration()) {
299 t = webmediaplayer_->duration(); 305 t = webmediaplayer_->duration();
300 } 306 }
301 webmediaplayer_->OnDisconnectedFromRemoteDevice(t); 307 webmediaplayer_->OnDisconnectedFromRemoteDevice(t);
302 } 308 }
303 309
304 void WebMediaPlayerCast::OnDidExitFullscreen() { 310 void WebMediaPlayerCast::OnDidExitFullscreen() {
305 DVLOG(1) << __FUNCTION__; 311 DVLOG(1) << __FUNCTION__;
306 } 312 }
307 313
308 void WebMediaPlayerCast::OnMediaPlayerPlay() { 314 void WebMediaPlayerCast::OnMediaPlayerPlay() {
309 DVLOG(1) << __FUNCTION__ << " is_remote_ = " << is_remote_; 315 DVLOG(1) << __FUNCTION__ << " is_remote_ = " << is_remote_;
310 initializing_ = false; 316 initializing_ = false;
311 if (is_remote_ && paused_) { 317 if (is_remote_ && paused_) {
312 paused_ = false; 318 paused_ = false;
313 if (paused_) 319 if (delegate_) {
314 delegate_->DidPlay(webmediaplayer_); 320 delegate_->DidPlay(webmediaplayer_, hasVideo(), false, is_remote_,
321 GetDuration());
322 }
315 remote_time_at_ = base::TimeTicks::Now(); 323 remote_time_at_ = base::TimeTicks::Now();
316 client_->playbackStateChanged(); 324 client_->playbackStateChanged();
317 } 325 }
318 // Blink expects a timeChanged() in response to a seek(). 326 // Blink expects a timeChanged() in response to a seek().
319 if (should_notify_time_changed_) 327 if (should_notify_time_changed_)
320 client_->timeChanged(); 328 client_->timeChanged();
321 } 329 }
322 330
323 void WebMediaPlayerCast::OnMediaPlayerPause() { 331 void WebMediaPlayerCast::OnMediaPlayerPause() {
324 DVLOG(1) << __FUNCTION__ << " is_remote_ = " << is_remote_; 332 DVLOG(1) << __FUNCTION__ << " is_remote_ = " << is_remote_;
325 if (is_remote_ && !paused_) { 333 if (is_remote_ && !paused_) {
326 paused_ = true; 334 paused_ = true;
327 if (delegate_) 335 if (delegate_)
328 delegate_->DidPause(webmediaplayer_); 336 delegate_->DidPause(webmediaplayer_, false);
329 client_->playbackStateChanged(); 337 client_->playbackStateChanged();
330 } 338 }
331 } 339 }
332 340
333 void WebMediaPlayerCast::OnRemoteRouteAvailabilityChanged( 341 void WebMediaPlayerCast::OnRemoteRouteAvailabilityChanged(
334 bool routes_available) { 342 bool routes_available) {
335 DVLOG(1) << __FUNCTION__; 343 DVLOG(1) << __FUNCTION__;
336 client_->remoteRouteAvailabilityChanged(routes_available); 344 client_->remoteRouteAvailabilityChanged(routes_available);
337 } 345 }
338 346
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 static_cast<int>(video_size_css_px.height() * device_scale_factor_)); 386 static_cast<int>(video_size_css_px.height() * device_scale_factor_));
379 387
380 if (!canvas_size.width()) 388 if (!canvas_size.width())
381 return nullptr; 389 return nullptr;
382 390
383 return MakeTextFrameForCast(remote_playback_message_, canvas_size, 391 return MakeTextFrameForCast(remote_playback_message_, canvas_size,
384 webmediaplayer_->naturalSize(), 392 webmediaplayer_->naturalSize(),
385 base::Bind(&GLCBShim, context_3d_cb_)); 393 base::Bind(&GLCBShim, context_3d_cb_));
386 } 394 }
387 395
396 base::TimeDelta WebMediaPlayerCast::GetDuration() {
397 const double duration = webmediaplayer_->duration();
398 if (duration == std::numeric_limits<double>::infinity())
399 return kInfiniteDuration();
400
401 return std::max(duration_, base::TimeDelta::FromSecondsD(duration));
402 }
403
388 } // namespace media 404 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698