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

Side by Side Diff: content/renderer/media/webmediaplayer_ms.cc

Issue 2490783002: Refactor WebMediaPlayerDelegate interface. (Closed)
Patch Set: Unit tests found a real bug! Created 3 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/renderer/media/webmediaplayer_ms.h" 5 #include "content/renderer/media/webmediaplayer_ms.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 288
289 compositor_->StartRendering(); 289 compositor_->StartRendering();
290 290
291 if (audio_renderer_) 291 if (audio_renderer_)
292 audio_renderer_->Play(); 292 audio_renderer_->Play();
293 293
294 if (delegate_) { 294 if (delegate_) {
295 // TODO(perkj, magjed): We use OneShot focus type here so that it takes 295 // TODO(perkj, magjed): We use OneShot focus type here so that it takes
296 // audio focus once it starts, and then will not respond to further audio 296 // audio focus once it starts, and then will not respond to further audio
297 // focus changes. See http://crbug.com/596516 for more details. 297 // focus changes. See http://crbug.com/596516 for more details.
298 delegate_->DidPlay(delegate_id_, hasVideo(), hasAudio(), false, 298 delegate_->DidPlay(delegate_id_, hasVideo(), hasAudio(),
299 media::MediaContentType::OneShot); 299 media::MediaContentType::OneShot);
300 delegate_->SetIdle(delegate_id_, false);
300 } 301 }
301 302
302 paused_ = false; 303 paused_ = false;
303 } 304 }
304 305
305 void WebMediaPlayerMS::pause() { 306 void WebMediaPlayerMS::pause() {
306 DVLOG(1) << __func__; 307 DVLOG(1) << __func__;
307 DCHECK(thread_checker_.CalledOnValidThread()); 308 DCHECK(thread_checker_.CalledOnValidThread());
308 309
309 should_play_upon_shown_ = false; 310 should_play_upon_shown_ = false;
310 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); 311 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE));
311 if (paused_) 312 if (paused_)
312 return; 313 return;
313 314
314 if (video_frame_provider_) 315 if (video_frame_provider_)
315 video_frame_provider_->Pause(); 316 video_frame_provider_->Pause();
316 317
317 compositor_->StopRendering(); 318 compositor_->StopRendering();
318 compositor_->ReplaceCurrentFrameWithACopy(); 319 compositor_->ReplaceCurrentFrameWithACopy();
319 320
320 if (audio_renderer_) 321 if (audio_renderer_)
321 audio_renderer_->Pause(); 322 audio_renderer_->Pause();
322 323
323 if (delegate_) 324 if (delegate_) {
324 delegate_->DidPause(delegate_id_, false); 325 delegate_->DidPause(delegate_id_);
326 delegate_->SetIdle(delegate_id_, true);
327 }
325 328
326 paused_ = true; 329 paused_ = true;
327 } 330 }
328 331
329 bool WebMediaPlayerMS::supportsSave() const { 332 bool WebMediaPlayerMS::supportsSave() const {
330 DCHECK(thread_checker_.CalledOnValidThread()); 333 DCHECK(thread_checker_.CalledOnValidThread());
331 return false; 334 return false;
332 } 335 }
333 336
334 void WebMediaPlayerMS::seek(double seconds) { 337 void WebMediaPlayerMS::seek(double seconds) {
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 NOTIMPLEMENTED(); 499 NOTIMPLEMENTED();
497 return 0; 500 return 0;
498 } 501 }
499 502
500 size_t WebMediaPlayerMS::videoDecodedByteCount() const { 503 size_t WebMediaPlayerMS::videoDecodedByteCount() const {
501 DCHECK(thread_checker_.CalledOnValidThread()); 504 DCHECK(thread_checker_.CalledOnValidThread());
502 NOTIMPLEMENTED(); 505 NOTIMPLEMENTED();
503 return 0; 506 return 0;
504 } 507 }
505 508
506 void WebMediaPlayerMS::OnHidden() { 509 void WebMediaPlayerMS::OnFrameHidden() {
507 #if defined(OS_ANDROID) 510 #if defined(OS_ANDROID)
508 DCHECK(thread_checker_.CalledOnValidThread()); 511 DCHECK(thread_checker_.CalledOnValidThread());
509 512
510 // Method called when the RenderFrame is sent to background and suspended 513 // Method called when the RenderFrame is sent to background and suspended
511 // (android). Substitute the displayed VideoFrame with a copy to avoid 514 // (android). Substitute the displayed VideoFrame with a copy to avoid
512 // holding on to it unnecessarily. 515 // holding on to it unnecessarily.
513 // 516 //
514 // During undoable tab closures OnHidden() may be called back to back, so we 517 // During undoable tab closures OnHidden() may be called back to back, so we
515 // can't rely on |render_frame_suspended_| being false here. 518 // can't rely on |render_frame_suspended_| being false here.
516 if (frame_deliverer_) { 519 if (frame_deliverer_) {
517 io_task_runner_->PostTask( 520 io_task_runner_->PostTask(
518 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, 521 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended,
519 base::Unretained(frame_deliverer_.get()), true)); 522 base::Unretained(frame_deliverer_.get()), true));
520 } 523 }
521 524
522 if (!paused_) 525 if (!paused_)
523 compositor_->ReplaceCurrentFrameWithACopy(); 526 compositor_->ReplaceCurrentFrameWithACopy();
524 #endif // defined(OS_ANDROID) 527 #endif // defined(OS_ANDROID)
525 } 528 }
526 529
527 void WebMediaPlayerMS::OnShown() { 530 void WebMediaPlayerMS::OnFrameClosed() {
531 #if defined(OS_ANDROID)
532 if (!paused_) {
533 pause();
534 should_play_upon_shown_ = true;
535 }
536
537 if (delegate_)
538 delegate_->PlayerGone(delegate_id_);
539
540 if (frame_deliverer_) {
541 io_task_runner_->PostTask(
542 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended,
543 base::Unretained(frame_deliverer_.get()), true));
544 }
545 #endif // defined(OS_ANDROID)
546 }
547
548 void WebMediaPlayerMS::OnFrameShown() {
528 #if defined(OS_ANDROID) 549 #if defined(OS_ANDROID)
529 DCHECK(thread_checker_.CalledOnValidThread()); 550 DCHECK(thread_checker_.CalledOnValidThread());
530 551
531 if (frame_deliverer_) { 552 if (frame_deliverer_) {
532 io_task_runner_->PostTask( 553 io_task_runner_->PostTask(
533 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, 554 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended,
534 base::Unretained(frame_deliverer_.get()), false)); 555 base::Unretained(frame_deliverer_.get()), false));
535 } 556 }
536 557
537 // Resume playback on visibility. play() clears |should_play_upon_shown_|. 558 // Resume playback on visibility. play() clears |should_play_upon_shown_|.
538 if (should_play_upon_shown_) 559 if (should_play_upon_shown_)
539 play(); 560 play();
540 #endif // defined(OS_ANDROID) 561 #endif // defined(OS_ANDROID)
541 } 562 }
542 563
543 bool WebMediaPlayerMS::OnSuspendRequested(bool must_suspend) { 564 void WebMediaPlayerMS::OnIdleTimeout() {}
544 #if defined(OS_ANDROID)
545 if (!must_suspend)
546 return false;
547
548 if (!paused_) {
549 pause();
550 should_play_upon_shown_ = true;
551 }
552
553 if (delegate_)
554 delegate_->PlayerGone(delegate_id_);
555
556 if (frame_deliverer_) {
557 io_task_runner_->PostTask(
558 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended,
559 base::Unretained(frame_deliverer_.get()), true));
560 }
561 #endif // defined(OS_ANDROID)
562 return true;
563 }
564 565
565 void WebMediaPlayerMS::OnPlay() { 566 void WebMediaPlayerMS::OnPlay() {
566 // TODO(perkj, magjed): It's not clear how WebRTC should work with an 567 // TODO(perkj, magjed): It's not clear how WebRTC should work with an
567 // MediaSession, until these issues are resolved, disable session controls. 568 // MediaSession, until these issues are resolved, disable session controls.
568 // http://crbug.com/595297. 569 // http://crbug.com/595297.
569 } 570 }
570 571
571 void WebMediaPlayerMS::OnPause() { 572 void WebMediaPlayerMS::OnPause() {
572 // TODO(perkj, magjed): See TODO in OnPlay(). 573 // TODO(perkj, magjed): See TODO in OnPlay().
573 } 574 }
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 void WebMediaPlayerMS::ResetCanvasCache() { 703 void WebMediaPlayerMS::ResetCanvasCache() {
703 DCHECK(thread_checker_.CalledOnValidThread()); 704 DCHECK(thread_checker_.CalledOnValidThread());
704 video_renderer_.ResetCache(); 705 video_renderer_.ResetCache();
705 } 706 }
706 707
707 void WebMediaPlayerMS::TriggerResize() { 708 void WebMediaPlayerMS::TriggerResize() {
708 get_client()->sizeChanged(); 709 get_client()->sizeChanged();
709 } 710 }
710 711
711 } // namespace content 712 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webmediaplayer_ms.h ('k') | content/renderer/media/webmediaplayer_ms_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698