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

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: handle everything at browser side 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 } 44 }
45 45
46 // static 46 // static
47 BrowserMediaPlayerManager* BrowserMediaPlayerManager::Create( 47 BrowserMediaPlayerManager* BrowserMediaPlayerManager::Create(
48 RenderViewHost* rvh) { 48 RenderViewHost* rvh) {
49 if (g_factory) 49 if (g_factory)
50 return g_factory(rvh); 50 return g_factory(rvh);
51 return new BrowserMediaPlayerManager(rvh); 51 return new BrowserMediaPlayerManager(rvh);
52 } 52 }
53 53
54 ContentViewCoreImpl* BrowserMediaPlayerManager::GetContentViewCore() const {
55 return ContentViewCoreImpl::FromWebContents(web_contents());
56 }
57
54 #if !defined(GOOGLE_TV) 58 #if !defined(GOOGLE_TV)
55 // static 59 // static
56 MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer( 60 MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer(
57 MediaPlayerHostMsg_Initialize_Type type, 61 MediaPlayerHostMsg_Initialize_Type type,
58 int player_id, 62 int player_id,
59 const GURL& url, 63 const GURL& url,
60 const GURL& first_party_for_cookies, 64 const GURL& first_party_for_cookies,
61 int demuxer_client_id, 65 int demuxer_client_id,
62 bool hide_url_log, 66 bool hide_url_log,
63 MediaPlayerManager* manager, 67 MediaPlayerManager* manager,
(...skipping 29 matching lines...) Expand all
93 NOTREACHED(); 97 NOTREACHED();
94 return NULL; 98 return NULL;
95 } 99 }
96 #endif 100 #endif
97 101
98 BrowserMediaPlayerManager::BrowserMediaPlayerManager( 102 BrowserMediaPlayerManager::BrowserMediaPlayerManager(
99 RenderViewHost* render_view_host) 103 RenderViewHost* render_view_host)
100 : WebContentsObserver(WebContents::FromRenderViewHost(render_view_host)), 104 : WebContentsObserver(WebContents::FromRenderViewHost(render_view_host)),
101 fullscreen_player_id_(-1), 105 fullscreen_player_id_(-1),
102 pending_fullscreen_player_id_(-1), 106 pending_fullscreen_player_id_(-1),
103 fullscreen_player_is_released_(false),
104 web_contents_(WebContents::FromRenderViewHost(render_view_host)), 107 web_contents_(WebContents::FromRenderViewHost(render_view_host)),
105 weak_ptr_factory_(this) { 108 weak_ptr_factory_(this) {
106 } 109 }
107 110
108 BrowserMediaPlayerManager::~BrowserMediaPlayerManager() {} 111 BrowserMediaPlayerManager::~BrowserMediaPlayerManager() {}
109 112
110 bool BrowserMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) { 113 bool BrowserMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) {
111 bool handled = true; 114 bool handled = true;
112 IPC_BEGIN_MESSAGE_MAP(BrowserMediaPlayerManager, msg) 115 IPC_BEGIN_MESSAGE_MAP(BrowserMediaPlayerManager, msg)
113 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen) 116 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen)
(...skipping 19 matching lines...) Expand all
133 OnNotifyExternalSurface) 136 OnNotifyExternalSurface)
134 #endif 137 #endif
135 IPC_MESSAGE_UNHANDLED(handled = false) 138 IPC_MESSAGE_UNHANDLED(handled = false)
136 IPC_END_MESSAGE_MAP() 139 IPC_END_MESSAGE_MAP()
137 return handled; 140 return handled;
138 } 141 }
139 142
140 void BrowserMediaPlayerManager::FullscreenPlayerPlay() { 143 void BrowserMediaPlayerManager::FullscreenPlayerPlay() {
141 MediaPlayerAndroid* player = GetFullscreenPlayer(); 144 MediaPlayerAndroid* player = GetFullscreenPlayer();
142 if (player) { 145 if (player) {
143 if (fullscreen_player_is_released_) {
144 video_view_->OpenVideo();
145 fullscreen_player_is_released_ = false;
146 }
147 player->Start(); 146 player->Start();
148 Send(new MediaPlayerMsg_DidMediaPlayerPlay( 147 Send(new MediaPlayerMsg_DidMediaPlayerPlay(
149 routing_id(), fullscreen_player_id_)); 148 routing_id(), fullscreen_player_id_));
150 } 149 }
151 } 150 }
152 151
153 void BrowserMediaPlayerManager::FullscreenPlayerPause() { 152 void BrowserMediaPlayerManager::FullscreenPlayerPause() {
154 MediaPlayerAndroid* player = GetFullscreenPlayer(); 153 MediaPlayerAndroid* player = GetFullscreenPlayer();
155 if (player) { 154 if (player) {
156 player->Pause(true); 155 player->Pause(true);
(...skipping 20 matching lines...) Expand all
177 MediaPlayerAndroid* player = GetFullscreenPlayer(); 176 MediaPlayerAndroid* player = GetFullscreenPlayer();
178 fullscreen_player_id_ = -1; 177 fullscreen_player_id_ = -1;
179 if (!player) 178 if (!player)
180 return; 179 return;
181 if (release_media_player) 180 if (release_media_player)
182 player->Release(); 181 player->Release();
183 else 182 else
184 player->SetVideoSurface(gfx::ScopedJavaSurface()); 183 player->SetVideoSurface(gfx::ScopedJavaSurface());
185 } 184 }
186 185
186 void BrowserMediaPlayerManager::SuspendFullscreen() {
187 MediaPlayerAndroid* player = GetFullscreenPlayer();
188 if (player)
189 player->SetVideoSurface(gfx::ScopedJavaSurface());
190 }
191
192 void BrowserMediaPlayerManager::ResumeFullscreen(
193 gfx::ScopedJavaSurface surface) {
194 MediaPlayerAndroid* player = GetFullscreenPlayer();
195 if (player)
196 player->SetVideoSurface(surface.Pass());
197 }
198
187 void BrowserMediaPlayerManager::OnTimeUpdate(int player_id, 199 void BrowserMediaPlayerManager::OnTimeUpdate(int player_id,
188 base::TimeDelta current_time) { 200 base::TimeDelta current_time) {
189 Send(new MediaPlayerMsg_MediaTimeUpdate( 201 Send(new MediaPlayerMsg_MediaTimeUpdate(
190 routing_id(), player_id, current_time)); 202 routing_id(), player_id, current_time));
191 } 203 }
192 204
193 void BrowserMediaPlayerManager::SetVideoSurface( 205 void BrowserMediaPlayerManager::SetVideoSurface(
194 gfx::ScopedJavaSurface surface) { 206 gfx::ScopedJavaSurface surface) {
195 MediaPlayerAndroid* player = GetFullscreenPlayer(); 207 MediaPlayerAndroid* player = GetFullscreenPlayer();
196 if (player) { 208 if (player) {
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 void BrowserMediaPlayerManager::OnEnterFullscreen(int player_id) { 458 void BrowserMediaPlayerManager::OnEnterFullscreen(int player_id) {
447 DCHECK_EQ(fullscreen_player_id_, -1); 459 DCHECK_EQ(fullscreen_player_id_, -1);
448 if (media_keys_ids_pending_approval_.find(player_id) != 460 if (media_keys_ids_pending_approval_.find(player_id) !=
449 media_keys_ids_pending_approval_.end()) { 461 media_keys_ids_pending_approval_.end()) {
450 return; 462 return;
451 } 463 }
452 464
453 if (video_view_.get()) { 465 if (video_view_.get()) {
454 fullscreen_player_id_ = player_id; 466 fullscreen_player_id_ = player_id;
455 video_view_->OpenVideo(); 467 video_view_->OpenVideo();
456 } else if (!ContentVideoView::HasContentVideoView()) { 468 } else if (!ContentVideoView::GetInstance()) {
457 // In Android WebView, two ContentViewCores could both try to enter 469 // In Android WebView, two ContentViewCores could both try to enter
458 // fullscreen video, we just ignore the second one. 470 // fullscreen video, we just ignore the second one.
459 fullscreen_player_id_ = player_id; 471 fullscreen_player_id_ = player_id;
460 ContentViewCoreImpl* content_view_core_impl = 472 video_view_.reset(new ContentVideoView(this));
461 ContentViewCoreImpl::FromWebContents(web_contents());
462 video_view_.reset(new ContentVideoView(content_view_core_impl->GetContext(),
463 content_view_core_impl->GetContentVideoViewClient(), this));
464 } 473 }
465 } 474 }
466 475
467 void BrowserMediaPlayerManager::OnExitFullscreen(int player_id) { 476 void BrowserMediaPlayerManager::OnExitFullscreen(int player_id) {
468 if (fullscreen_player_id_ == player_id) { 477 if (fullscreen_player_id_ == player_id) {
469 MediaPlayerAndroid* player = GetPlayer(player_id); 478 MediaPlayerAndroid* player = GetPlayer(player_id);
470 if (player) 479 if (player)
471 player->SetVideoSurface(gfx::ScopedJavaSurface()); 480 player->SetVideoSurface(gfx::ScopedJavaSurface());
472 video_view_->OnExitFullscreen(); 481 video_view_->OnExitFullscreen();
473 } 482 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 void BrowserMediaPlayerManager::OnSetVolume(int player_id, double volume) { 527 void BrowserMediaPlayerManager::OnSetVolume(int player_id, double volume) {
519 MediaPlayerAndroid* player = GetPlayer(player_id); 528 MediaPlayerAndroid* player = GetPlayer(player_id);
520 if (player) 529 if (player)
521 player->SetVolume(volume); 530 player->SetVolume(volume);
522 } 531 }
523 532
524 void BrowserMediaPlayerManager::OnReleaseResources(int player_id) { 533 void BrowserMediaPlayerManager::OnReleaseResources(int player_id) {
525 MediaPlayerAndroid* player = GetPlayer(player_id); 534 MediaPlayerAndroid* player = GetPlayer(player_id);
526 if (player) 535 if (player)
527 player->Release(); 536 player->Release();
528 if (player_id == fullscreen_player_id_)
529 fullscreen_player_is_released_ = true;
530 537
531 #if defined(GOOGLE_TV) 538 #if defined(GOOGLE_TV)
532 WebContentsViewAndroid* view = 539 WebContentsViewAndroid* view =
533 static_cast<WebContentsViewAndroid*>(web_contents_->GetView()); 540 static_cast<WebContentsViewAndroid*>(web_contents_->GetView());
534 if (view) 541 if (view)
535 view->NotifyExternalSurface(player_id, false, gfx::RectF()); 542 view->NotifyExternalSurface(player_id, false, gfx::RectF());
536 #endif 543 #endif
537 } 544 }
538 545
539 void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) { 546 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) 747 if (pending_fullscreen_player_id_ != media_keys_id)
741 return; 748 return;
742 749
743 pending_fullscreen_player_id_ = -1; 750 pending_fullscreen_player_id_ = -1;
744 MediaPlayerAndroid* player = GetPlayer(media_keys_id); 751 MediaPlayerAndroid* player = GetPlayer(media_keys_id);
745 if (player->IsPlaying()) 752 if (player->IsPlaying())
746 OnProtectedSurfaceRequested(media_keys_id); 753 OnProtectedSurfaceRequested(media_keys_id);
747 } 754 }
748 755
749 } // namespace content 756 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698