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

Side by Side Diff: content/renderer/media/android/renderer_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/renderer/media/android/renderer_media_player_manager.h" 5 #include "content/renderer/media/android/renderer_media_player_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "content/common/media/media_player_messages_android.h" 9 #include "content/common/media/media_player_messages_android.h"
10 #include "content/renderer/media/android/proxy_media_keys.h" 10 #include "content/renderer/media/android/proxy_media_keys.h"
11 #include "content/renderer/media/android/renderer_media_player_manager.h" 11 #include "content/renderer/media/android/renderer_media_player_manager.h"
12 #include "content/renderer/media/android/webmediaplayer_android.h" 12 #include "content/renderer/media/android/webmediaplayer_android.h"
13 #include "ui/gfx/rect_f.h" 13 #include "ui/gfx/rect_f.h"
14 14
15 namespace content { 15 namespace content {
16 16
17 RendererMediaPlayerManager::RendererMediaPlayerManager(RenderView* render_view) 17 RendererMediaPlayerManager::RendererMediaPlayerManager(RenderView* render_view)
18 : RenderViewObserver(render_view), 18 : RenderViewObserver(render_view),
19 next_media_player_id_(0), 19 next_media_player_id_(0),
20 fullscreen_player_id_(-1),
21 paused_fullscreen_player_id_(-1),
20 fullscreen_frame_(NULL) {} 22 fullscreen_frame_(NULL) {}
21 23
22 RendererMediaPlayerManager::~RendererMediaPlayerManager() { 24 RendererMediaPlayerManager::~RendererMediaPlayerManager() {
23 std::map<int, WebMediaPlayerAndroid*>::iterator player_it; 25 std::map<int, WebMediaPlayerAndroid*>::iterator player_it;
24 for (player_it = media_players_.begin(); 26 for (player_it = media_players_.begin();
25 player_it != media_players_.end(); ++player_it) { 27 player_it != media_players_.end(); ++player_it) {
26 WebMediaPlayerAndroid* player = player_it->second; 28 WebMediaPlayerAndroid* player = player_it->second;
27 player->Detach(); 29 player->Detach();
28 } 30 }
29 31
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 } 183 }
182 184
183 void RendererMediaPlayerManager::OnDisconnectedFromRemoteDevice(int player_id) { 185 void RendererMediaPlayerManager::OnDisconnectedFromRemoteDevice(int player_id) {
184 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); 186 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id);
185 if (player) 187 if (player)
186 player->OnDisconnectedFromRemoteDevice(); 188 player->OnDisconnectedFromRemoteDevice();
187 } 189 }
188 190
189 void RendererMediaPlayerManager::OnDidEnterFullscreen(int player_id) { 191 void RendererMediaPlayerManager::OnDidEnterFullscreen(int player_id) {
190 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); 192 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id);
191 if (player) 193 if (player) {
194 fullscreen_player_id_ = player_id;
192 player->OnDidEnterFullscreen(); 195 player->OnDidEnterFullscreen();
196 }
193 } 197 }
194 198
195 void RendererMediaPlayerManager::OnDidExitFullscreen(int player_id) { 199 void RendererMediaPlayerManager::OnDidExitFullscreen(int player_id) {
196 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); 200 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id);
197 if (player) 201 if (player) {
202 fullscreen_player_id_ = -1;
198 player->OnDidExitFullscreen(); 203 player->OnDidExitFullscreen();
204 }
199 } 205 }
200 206
201 void RendererMediaPlayerManager::OnPlayerPlay(int player_id) { 207 void RendererMediaPlayerManager::OnPlayerPlay(int player_id) {
202 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); 208 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id);
203 if (player) 209 if (player)
204 player->OnMediaPlayerPlay(); 210 player->OnMediaPlayerPlay();
205 } 211 }
206 212
207 void RendererMediaPlayerManager::OnPlayerPause(int player_id) { 213 void RendererMediaPlayerManager::OnPlayerPause(int player_id) {
208 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); 214 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id);
209 if (player) 215 if (player)
210 player->OnMediaPlayerPause(); 216 player->OnMediaPlayerPause();
211 } 217 }
212 218
213 void RendererMediaPlayerManager::OnRequestFullscreen(int player_id) { 219 void RendererMediaPlayerManager::OnRequestFullscreen(int player_id) {
214 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); 220 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id);
215 if (player) 221 if (player)
216 player->OnRequestFullscreen(); 222 player->OnRequestFullscreen();
217 } 223 }
218 224
219 void RendererMediaPlayerManager::EnterFullscreen(int player_id) { 225 void RendererMediaPlayerManager::EnterFullscreen(int player_id) {
220 Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id)); 226 Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id));
221 } 227 }
222 228
223 void RendererMediaPlayerManager::ExitFullscreen(int player_id) { 229 void RendererMediaPlayerManager::ExitFullscreen(int player_id) {
230 DCHECK(player_id == fullscreen_player_id_);
224 Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id)); 231 Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id));
225 } 232 }
226 233
227 void RendererMediaPlayerManager::InitializeCDM(int media_keys_id, 234 void RendererMediaPlayerManager::InitializeCDM(int media_keys_id,
228 ProxyMediaKeys* media_keys, 235 ProxyMediaKeys* media_keys,
229 const std::vector<uint8>& uuid, 236 const std::vector<uint8>& uuid,
230 const GURL& frame_url) { 237 const GURL& frame_url) {
231 RegisterMediaKeys(media_keys_id, media_keys); 238 RegisterMediaKeys(media_keys_id, media_keys);
232 Send(new MediaKeysHostMsg_InitializeCDM( 239 Send(new MediaKeysHostMsg_InitializeCDM(
233 routing_id(), media_keys_id, uuid, frame_url)); 240 routing_id(), media_keys_id, uuid, frame_url));
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 // |media_keys_id|. For now |media_keys_id| is the same as player_id 323 // |media_keys_id|. For now |media_keys_id| is the same as player_id
317 // used in other methods. 324 // used in other methods.
318 DCHECK(media_players_.find(media_keys_id) != media_players_.end()); 325 DCHECK(media_players_.find(media_keys_id) != media_players_.end());
319 326
320 // Only allowed to register once. 327 // Only allowed to register once.
321 DCHECK(media_keys_.find(media_keys_id) == media_keys_.end()); 328 DCHECK(media_keys_.find(media_keys_id) == media_keys_.end());
322 329
323 media_keys_[media_keys_id] = media_keys; 330 media_keys_[media_keys_id] = media_keys;
324 } 331 }
325 332
326 void RendererMediaPlayerManager::ReleaseVideoResources() { 333 void RendererMediaPlayerManager::PauseVideo() {
qinmin 2013/12/05 23:02:34 I don't think this is right. This function is not
kbalazs 2013/12/05 23:36:22 I think you misread it, there is no early return f
qinmin 2013/12/06 00:10:13 ah...sorry, i thought you were removing the origin
kbalazs 2013/12/06 19:15:03 Done, I moved the new code into SuspendFullscreenV
334 if (fullscreen_player_id_ != -1) {
335 ExitFullscreen(fullscreen_player_id_);
336 paused_fullscreen_player_id_ = fullscreen_player_id_;
337 }
338
327 std::map<int, WebMediaPlayerAndroid*>::iterator player_it; 339 std::map<int, WebMediaPlayerAndroid*>::iterator player_it;
328 for (player_it = media_players_.begin(); 340 for (player_it = media_players_.begin();
329 player_it != media_players_.end(); ++player_it) { 341 player_it != media_players_.end(); ++player_it) {
330 WebMediaPlayerAndroid* player = player_it->second; 342 WebMediaPlayerAndroid* player = player_it->second;
331 343
332 // Do not release if an audio track is still playing 344 // Do not release if an audio track is still playing
333 if (player && (player->paused() || player->hasVideo())) 345 if (player && (player->paused() || player->hasVideo()))
334 player->ReleaseMediaResources(); 346 player->ReleaseMediaResources();
335 } 347 }
336 } 348 }
337 349
350 void RendererMediaPlayerManager::ResumeVideo() {
351 if (paused_fullscreen_player_id_ != -1) {
352 EnterFullscreen(paused_fullscreen_player_id_);
353 paused_fullscreen_player_id_ = -1;
354 }
355 }
356
338 WebMediaPlayerAndroid* RendererMediaPlayerManager::GetMediaPlayer( 357 WebMediaPlayerAndroid* RendererMediaPlayerManager::GetMediaPlayer(
339 int player_id) { 358 int player_id) {
340 std::map<int, WebMediaPlayerAndroid*>::iterator iter = 359 std::map<int, WebMediaPlayerAndroid*>::iterator iter =
341 media_players_.find(player_id); 360 media_players_.find(player_id);
342 if (iter != media_players_.end()) 361 if (iter != media_players_.end())
343 return iter->second; 362 return iter->second;
344 return NULL; 363 return NULL;
345 } 364 }
346 365
347 ProxyMediaKeys* RendererMediaPlayerManager::GetMediaKeys(int media_keys_id) { 366 ProxyMediaKeys* RendererMediaPlayerManager::GetMediaKeys(int media_keys_id) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 gfx::RectF rect; 417 gfx::RectF rect;
399 if (player->RetrieveGeometryChange(&rect)) { 418 if (player->RetrieveGeometryChange(&rect)) {
400 (*changes)[player_it->first] = rect; 419 (*changes)[player_it->first] = rect;
401 } 420 }
402 } 421 }
403 } 422 }
404 } 423 }
405 #endif 424 #endif
406 425
407 } // namespace content 426 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698