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

Side by Side Diff: content/browser/media/android/browser_media_player_manager.cc

Issue 103583005: Restart fullscreen video playback when switching back from background (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years 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/browser/media/android/browser_media_player_manager.h" 5 #include "content/browser/media/android/browser_media_player_manager.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "content/browser/android/content_view_core_impl.h" 8 #include "content/browser/android/content_view_core_impl.h"
9 #include "content/browser/media/android/browser_demuxer_android.h" 9 #include "content/browser/media/android/browser_demuxer_android.h"
10 #include "content/browser/media/android/media_resource_getter_impl.h" 10 #include "content/browser/media/android/media_resource_getter_impl.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 OnNotifyExternalSurface) 133 OnNotifyExternalSurface)
134 #endif 134 #endif
135 IPC_MESSAGE_UNHANDLED(handled = false) 135 IPC_MESSAGE_UNHANDLED(handled = false)
136 IPC_END_MESSAGE_MAP() 136 IPC_END_MESSAGE_MAP()
137 return handled; 137 return handled;
138 } 138 }
139 139
140 void BrowserMediaPlayerManager::FullscreenPlayerPlay() { 140 void BrowserMediaPlayerManager::FullscreenPlayerPlay() {
141 MediaPlayerAndroid* player = GetFullscreenPlayer(); 141 MediaPlayerAndroid* player = GetFullscreenPlayer();
142 if (player) { 142 if (player) {
143 if (fullscreen_player_is_released_) {
144 video_view_->OpenVideo();
145 fullscreen_player_is_released_ = false;
146 }
147 player->Start(); 143 player->Start();
148 Send(new MediaPlayerMsg_DidMediaPlayerPlay( 144 Send(new MediaPlayerMsg_DidMediaPlayerPlay(
149 routing_id(), fullscreen_player_id_)); 145 routing_id(), fullscreen_player_id_));
150 } 146 }
151 } 147 }
152 148
153 void BrowserMediaPlayerManager::FullscreenPlayerPause() { 149 void BrowserMediaPlayerManager::FullscreenPlayerPause() {
154 MediaPlayerAndroid* player = GetFullscreenPlayer(); 150 MediaPlayerAndroid* player = GetFullscreenPlayer();
155 if (player) { 151 if (player) {
156 player->Pause(true); 152 player->Pause(true);
157 Send(new MediaPlayerMsg_DidMediaPlayerPause( 153 Send(new MediaPlayerMsg_DidMediaPlayerPause(
158 routing_id(), fullscreen_player_id_)); 154 routing_id(), fullscreen_player_id_));
159 } 155 }
160 } 156 }
161 157
162 void BrowserMediaPlayerManager::FullscreenPlayerSeek(int msec) { 158 void BrowserMediaPlayerManager::FullscreenPlayerSeek(int msec) {
163 MediaPlayerAndroid* player = GetFullscreenPlayer(); 159 MediaPlayerAndroid* player = GetFullscreenPlayer();
164 if (player) { 160 if (player) {
165 // TODO(kbalazs): if |fullscreen_player_is_released_| is true 161 // TODO(kbalazs): if the fullscreen player has been Release()-d and
166 // at this point, player->GetCurrentTime() will be wrong until 162 // not restarted yet, player->GetCurrentTime() will be wrong until
167 // FullscreenPlayerPlay (http://crbug.com/322798). 163 // FullscreenPlayerPlay (http://crbug.com/322798).
168 OnSeekRequest(fullscreen_player_id_, 164 OnSeekRequest(fullscreen_player_id_,
169 base::TimeDelta::FromMilliseconds(msec)); 165 base::TimeDelta::FromMilliseconds(msec));
170 } 166 }
171 } 167 }
172 168
173 void BrowserMediaPlayerManager::ExitFullscreen(bool release_media_player) { 169 void BrowserMediaPlayerManager::ExitFullscreen(bool release_media_player) {
174 Send(new MediaPlayerMsg_DidExitFullscreen( 170 Send(new MediaPlayerMsg_DidExitFullscreen(
175 routing_id(), fullscreen_player_id_)); 171 routing_id(), fullscreen_player_id_));
176 video_view_.reset(); 172 video_view_.reset();
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 OnExitFullscreen(fullscreen_player_id_); 439 OnExitFullscreen(fullscreen_player_id_);
444 } 440 }
445 441
446 void BrowserMediaPlayerManager::OnEnterFullscreen(int player_id) { 442 void BrowserMediaPlayerManager::OnEnterFullscreen(int player_id) {
447 DCHECK_EQ(fullscreen_player_id_, -1); 443 DCHECK_EQ(fullscreen_player_id_, -1);
448 if (media_keys_ids_pending_approval_.find(player_id) != 444 if (media_keys_ids_pending_approval_.find(player_id) !=
449 media_keys_ids_pending_approval_.end()) { 445 media_keys_ids_pending_approval_.end()) {
450 return; 446 return;
451 } 447 }
452 448
453 if (video_view_.get()) { 449 if (!ContentVideoView::HasContentVideoView()) {
454 fullscreen_player_id_ = player_id;
455 video_view_->OpenVideo();
456 } else if (!ContentVideoView::HasContentVideoView()) {
457 // In Android WebView, two ContentViewCores could both try to enter 450 // In Android WebView, two ContentViewCores could both try to enter
458 // fullscreen video, we just ignore the second one. 451 // fullscreen video, we just ignore the second one.
459 fullscreen_player_id_ = player_id; 452 fullscreen_player_id_ = player_id;
460 ContentViewCoreImpl* content_view_core_impl = 453 ContentViewCoreImpl* content_view_core_impl =
461 ContentViewCoreImpl::FromWebContents(web_contents()); 454 ContentViewCoreImpl::FromWebContents(web_contents());
462 video_view_.reset(new ContentVideoView(content_view_core_impl->GetContext(), 455 video_view_.reset(new ContentVideoView(content_view_core_impl->GetContext(),
463 content_view_core_impl->GetContentVideoViewClient(), this)); 456 content_view_core_impl->GetContentVideoViewClient(), this));
464 } 457 }
465 } 458 }
466 459
467 void BrowserMediaPlayerManager::OnExitFullscreen(int player_id) { 460 void BrowserMediaPlayerManager::OnExitFullscreen(int player_id) {
468 if (fullscreen_player_id_ == player_id) { 461 if (fullscreen_player_id_ == player_id) {
469 MediaPlayerAndroid* player = GetPlayer(player_id); 462 MediaPlayerAndroid* player = GetPlayer(player_id);
470 if (player) 463 if (player)
471 player->SetVideoSurface(gfx::ScopedJavaSurface()); 464 player->SetVideoSurface(gfx::ScopedJavaSurface());
472 video_view_->OnExitFullscreen(); 465 video_view_.reset();
466 fullscreen_player_id_ = -1;
473 } 467 }
474 } 468 }
475 469
476 void BrowserMediaPlayerManager::OnInitialize( 470 void BrowserMediaPlayerManager::OnInitialize(
477 MediaPlayerHostMsg_Initialize_Type type, 471 MediaPlayerHostMsg_Initialize_Type type,
478 int player_id, 472 int player_id,
479 const GURL& url, 473 const GURL& url,
480 const GURL& first_party_for_cookies, 474 const GURL& first_party_for_cookies,
481 int demuxer_client_id) { 475 int demuxer_client_id) {
482 DCHECK(type != MEDIA_PLAYER_TYPE_MEDIA_SOURCE || demuxer_client_id > 0) 476 DCHECK(type != MEDIA_PLAYER_TYPE_MEDIA_SOURCE || demuxer_client_id > 0)
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 void BrowserMediaPlayerManager::OnSetVolume(int player_id, double volume) { 512 void BrowserMediaPlayerManager::OnSetVolume(int player_id, double volume) {
519 MediaPlayerAndroid* player = GetPlayer(player_id); 513 MediaPlayerAndroid* player = GetPlayer(player_id);
520 if (player) 514 if (player)
521 player->SetVolume(volume); 515 player->SetVolume(volume);
522 } 516 }
523 517
524 void BrowserMediaPlayerManager::OnReleaseResources(int player_id) { 518 void BrowserMediaPlayerManager::OnReleaseResources(int player_id) {
525 MediaPlayerAndroid* player = GetPlayer(player_id); 519 MediaPlayerAndroid* player = GetPlayer(player_id);
526 if (player) 520 if (player)
527 player->Release(); 521 player->Release();
528 if (player_id == fullscreen_player_id_)
529 fullscreen_player_is_released_ = true;
530 522
531 #if defined(GOOGLE_TV) 523 #if defined(GOOGLE_TV)
532 WebContentsViewAndroid* view = 524 WebContentsViewAndroid* view =
533 static_cast<WebContentsViewAndroid*>(web_contents_->GetView()); 525 static_cast<WebContentsViewAndroid*>(web_contents_->GetView());
534 if (view) 526 if (view)
535 view->NotifyExternalSurface(player_id, false, gfx::RectF()); 527 view->NotifyExternalSurface(player_id, false, gfx::RectF());
536 #endif 528 #endif
537 } 529 }
538 530
539 void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) { 531 void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) {
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 if (pending_fullscreen_player_id_ != media_keys_id) 732 if (pending_fullscreen_player_id_ != media_keys_id)
741 return; 733 return;
742 734
743 pending_fullscreen_player_id_ = -1; 735 pending_fullscreen_player_id_ = -1;
744 MediaPlayerAndroid* player = GetPlayer(media_keys_id); 736 MediaPlayerAndroid* player = GetPlayer(media_keys_id);
745 if (player->IsPlaying()) 737 if (player->IsPlaying())
746 OnProtectedSurfaceRequested(media_keys_id); 738 OnProtectedSurfaceRequested(media_keys_id);
747 } 739 }
748 740
749 } // namespace content 741 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698