OLD | NEW |
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/cdm_messages.h" | 9 #include "content/common/media/cdm_messages.h" |
10 #include "content/common/media/media_player_messages_android.h" | 10 #include "content/common/media/media_player_messages_android.h" |
11 #include "content/public/common/renderer_preferences.h" | 11 #include "content/public/common/renderer_preferences.h" |
12 #include "content/renderer/media/android/proxy_media_keys.h" | 12 #include "content/renderer/media/android/proxy_media_keys.h" |
13 #include "content/renderer/media/android/renderer_media_player_manager.h" | 13 #include "content/renderer/media/android/renderer_media_player_manager.h" |
14 #include "content/renderer/media/android/webmediaplayer_android.h" | 14 #include "content/renderer/media/android/webmediaplayer_android.h" |
15 #include "content/renderer/render_view_impl.h" | 15 #include "content/renderer/render_view_impl.h" |
16 #include "ui/gfx/rect_f.h" | 16 #include "ui/gfx/rect_f.h" |
17 | 17 |
18 namespace content { | 18 namespace content { |
19 | 19 |
20 // Maximum sizes for various EME API parameters. These are checks to prevent | 20 // Maximum sizes for various EME API parameters. These are checks to prevent |
21 // unnecessarily large messages from being passed around, and the sizes | 21 // unnecessarily large messages from being passed around, and the sizes |
22 // are somewhat arbitrary as the EME spec doesn't specify any limits. | 22 // are somewhat arbitrary as the EME spec doesn't specify any limits. |
23 const size_t kMaxWebSessionIdLength = 512; | 23 const size_t kMaxWebSessionIdLength = 512; |
24 const size_t kMaxSessionMessageLength = 10240; // 10 KB | 24 const size_t kMaxSessionMessageLength = 10240; // 10 KB |
25 | 25 |
26 RendererMediaPlayerManager::RendererMediaPlayerManager(RenderView* render_view) | 26 RendererMediaPlayerManager::RendererMediaPlayerManager( |
27 : RenderViewObserver(render_view), | 27 RenderFrame* render_frame) |
| 28 : RenderFrameObserver(render_frame), |
28 next_media_player_id_(0), | 29 next_media_player_id_(0), |
29 fullscreen_frame_(NULL), | 30 fullscreen_frame_(NULL), |
30 pending_fullscreen_frame_(NULL) {} | 31 pending_fullscreen_frame_(NULL) { |
| 32 } |
31 | 33 |
32 RendererMediaPlayerManager::~RendererMediaPlayerManager() { | 34 RendererMediaPlayerManager::~RendererMediaPlayerManager() { |
33 std::map<int, WebMediaPlayerAndroid*>::iterator player_it; | 35 std::map<int, WebMediaPlayerAndroid*>::iterator player_it; |
34 for (player_it = media_players_.begin(); | 36 for (player_it = media_players_.begin(); |
35 player_it != media_players_.end(); ++player_it) { | 37 player_it != media_players_.end(); ++player_it) { |
36 WebMediaPlayerAndroid* player = player_it->second; | 38 WebMediaPlayerAndroid* player = player_it->second; |
37 player->Detach(); | 39 player->Detach(); |
38 } | 40 } |
39 | 41 |
40 Send(new MediaPlayerHostMsg_DestroyAllMediaPlayers(routing_id())); | 42 Send(new MediaPlayerHostMsg_DestroyAllMediaPlayers(routing_id())); |
(...skipping 19 matching lines...) Expand all Loading... |
60 IPC_MESSAGE_HANDLER(MediaPlayerMsg_ConnectedToRemoteDevice, | 62 IPC_MESSAGE_HANDLER(MediaPlayerMsg_ConnectedToRemoteDevice, |
61 OnConnectedToRemoteDevice) | 63 OnConnectedToRemoteDevice) |
62 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DisconnectedFromRemoteDevice, | 64 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DisconnectedFromRemoteDevice, |
63 OnDisconnectedFromRemoteDevice) | 65 OnDisconnectedFromRemoteDevice) |
64 IPC_MESSAGE_HANDLER(MediaPlayerMsg_RequestFullscreen, | 66 IPC_MESSAGE_HANDLER(MediaPlayerMsg_RequestFullscreen, |
65 OnRequestFullscreen) | 67 OnRequestFullscreen) |
66 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidEnterFullscreen, OnDidEnterFullscreen) | 68 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidEnterFullscreen, OnDidEnterFullscreen) |
67 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidExitFullscreen, OnDidExitFullscreen) | 69 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidExitFullscreen, OnDidExitFullscreen) |
68 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPlay, OnPlayerPlay) | 70 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPlay, OnPlayerPlay) |
69 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPause, OnPlayerPause) | 71 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPause, OnPlayerPause) |
| 72 IPC_MESSAGE_HANDLER(MediaPlayerMsg_PauseVideo, OnPauseVideo) |
70 IPC_MESSAGE_HANDLER(CdmMsg_SessionCreated, OnSessionCreated) | 73 IPC_MESSAGE_HANDLER(CdmMsg_SessionCreated, OnSessionCreated) |
71 IPC_MESSAGE_HANDLER(CdmMsg_SessionMessage, OnSessionMessage) | 74 IPC_MESSAGE_HANDLER(CdmMsg_SessionMessage, OnSessionMessage) |
72 IPC_MESSAGE_HANDLER(CdmMsg_SessionReady, OnSessionReady) | 75 IPC_MESSAGE_HANDLER(CdmMsg_SessionReady, OnSessionReady) |
73 IPC_MESSAGE_HANDLER(CdmMsg_SessionClosed, OnSessionClosed) | 76 IPC_MESSAGE_HANDLER(CdmMsg_SessionClosed, OnSessionClosed) |
74 IPC_MESSAGE_HANDLER(CdmMsg_SessionError, OnSessionError) | 77 IPC_MESSAGE_HANDLER(CdmMsg_SessionError, OnSessionError) |
75 IPC_MESSAGE_UNHANDLED(handled = false) | 78 IPC_MESSAGE_UNHANDLED(handled = false) |
76 IPC_END_MESSAGE_MAP() | 79 IPC_END_MESSAGE_MAP() |
77 return handled; | 80 return handled; |
78 } | 81 } |
79 | 82 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 if (player) | 227 if (player) |
225 player->OnMediaPlayerPause(); | 228 player->OnMediaPlayerPause(); |
226 } | 229 } |
227 | 230 |
228 void RendererMediaPlayerManager::OnRequestFullscreen(int player_id) { | 231 void RendererMediaPlayerManager::OnRequestFullscreen(int player_id) { |
229 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); | 232 WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); |
230 if (player) | 233 if (player) |
231 player->OnRequestFullscreen(); | 234 player->OnRequestFullscreen(); |
232 } | 235 } |
233 | 236 |
| 237 void RendererMediaPlayerManager::OnPauseVideo() { |
| 238 ReleaseVideoResources(); |
| 239 } |
| 240 |
234 void RendererMediaPlayerManager::EnterFullscreen(int player_id, | 241 void RendererMediaPlayerManager::EnterFullscreen(int player_id, |
235 blink::WebFrame* frame) { | 242 blink::WebFrame* frame) { |
236 pending_fullscreen_frame_ = frame; | 243 pending_fullscreen_frame_ = frame; |
237 Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id)); | 244 Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id)); |
238 } | 245 } |
239 | 246 |
240 void RendererMediaPlayerManager::ExitFullscreen(int player_id) { | 247 void RendererMediaPlayerManager::ExitFullscreen(int player_id) { |
241 pending_fullscreen_frame_ = NULL; | 248 pending_fullscreen_frame_ = NULL; |
242 fullscreen_frame_ = NULL; | 249 fullscreen_frame_ = NULL; |
243 Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id)); | 250 Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id)); |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 void RendererMediaPlayerManager::RegisterMediaKeys(int cdm_id, | 361 void RendererMediaPlayerManager::RegisterMediaKeys(int cdm_id, |
355 ProxyMediaKeys* media_keys) { | 362 ProxyMediaKeys* media_keys) { |
356 // Only allowed to register once. | 363 // Only allowed to register once. |
357 DCHECK(media_keys_.find(cdm_id) == media_keys_.end()); | 364 DCHECK(media_keys_.find(cdm_id) == media_keys_.end()); |
358 | 365 |
359 media_keys_[cdm_id] = media_keys; | 366 media_keys_[cdm_id] = media_keys; |
360 } | 367 } |
361 | 368 |
362 void RendererMediaPlayerManager::ReleaseVideoResources() { | 369 void RendererMediaPlayerManager::ReleaseVideoResources() { |
363 std::map<int, WebMediaPlayerAndroid*>::iterator player_it; | 370 std::map<int, WebMediaPlayerAndroid*>::iterator player_it; |
364 for (player_it = media_players_.begin(); | 371 for (player_it = media_players_.begin(); player_it != media_players_.end(); |
365 player_it != media_players_.end(); ++player_it) { | 372 ++player_it) { |
366 WebMediaPlayerAndroid* player = player_it->second; | 373 WebMediaPlayerAndroid* player = player_it->second; |
367 | 374 |
368 // Do not release if an audio track is still playing | 375 // Do not release if an audio track is still playing |
369 if (player && (player->paused() || player->hasVideo())) | 376 if (player && (player->paused() || player->hasVideo())) |
370 player->ReleaseMediaResources(); | 377 player->ReleaseMediaResources(); |
371 } | 378 } |
372 } | 379 } |
373 | 380 |
374 WebMediaPlayerAndroid* RendererMediaPlayerManager::GetMediaPlayer( | 381 WebMediaPlayerAndroid* RendererMediaPlayerManager::GetMediaPlayer( |
375 int player_id) { | 382 int player_id) { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 | 444 |
438 if (player && player->hasVideo()) { | 445 if (player && player->hasVideo()) { |
439 if (player->UpdateBoundaryRectangle()) | 446 if (player->UpdateBoundaryRectangle()) |
440 (*changes)[player_it->first] = player->GetBoundaryRectangle(); | 447 (*changes)[player_it->first] = player->GetBoundaryRectangle(); |
441 } | 448 } |
442 } | 449 } |
443 } | 450 } |
444 | 451 |
445 bool | 452 bool |
446 RendererMediaPlayerManager::ShouldUseVideoOverlayForEmbeddedEncryptedVideo() { | 453 RendererMediaPlayerManager::ShouldUseVideoOverlayForEmbeddedEncryptedVideo() { |
447 const RendererPreferences& prefs = static_cast<RenderViewImpl*>( | 454 const RendererPreferences& prefs = static_cast<RenderFrameImpl*>( |
448 render_view())->renderer_preferences(); | 455 render_frame())->render_view()->renderer_preferences(); |
449 return prefs.use_video_overlay_for_embedded_encrypted_video; | 456 return prefs.use_video_overlay_for_embedded_encrypted_video; |
450 } | 457 } |
451 #endif // defined(VIDEO_HOLE) | 458 #endif // defined(VIDEO_HOLE) |
452 | 459 |
453 } // namespace content | 460 } // namespace content |
OLD | NEW |