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

Side by Side Diff: content/renderer/media/android/renderer_media_player_manager.cc

Issue 295103015: Separate RendererCdmManager from RendererMediaPlayerManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase again Created 6 years, 6 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 | Annotate | Revision Log
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"
8 #include "base/message_loop/message_loop.h"
9 #include "content/common/media/cdm_messages.h"
10 #include "content/common/media/media_player_messages_android.h" 7 #include "content/common/media/media_player_messages_android.h"
11 #include "content/public/common/renderer_preferences.h" 8 #include "content/public/common/renderer_preferences.h"
12 #include "content/renderer/media/android/proxy_media_keys.h"
13 #include "content/renderer/media/android/renderer_media_player_manager.h" 9 #include "content/renderer/media/android/renderer_media_player_manager.h"
14 #include "content/renderer/media/android/webmediaplayer_android.h" 10 #include "content/renderer/media/android/webmediaplayer_android.h"
11 #include "content/renderer/media/crypto/renderer_cdm_manager.h"
15 #include "content/renderer/render_view_impl.h" 12 #include "content/renderer/render_view_impl.h"
16 #include "ui/gfx/rect_f.h" 13 #include "ui/gfx/rect_f.h"
17 14
18 namespace content { 15 namespace content {
19 16
20 // Maximum sizes for various EME API parameters. These are checks to prevent
21 // unnecessarily large messages from being passed around, and the sizes
22 // are somewhat arbitrary as the EME spec doesn't specify any limits.
23 const size_t kMaxWebSessionIdLength = 512;
24 const size_t kMaxSessionMessageLength = 10240; // 10 KB
25
26 RendererMediaPlayerManager::RendererMediaPlayerManager( 17 RendererMediaPlayerManager::RendererMediaPlayerManager(
27 RenderFrame* render_frame) 18 RenderFrame* render_frame)
28 : RenderFrameObserver(render_frame), 19 : RenderFrameObserver(render_frame),
29 next_media_player_id_(0), 20 next_media_player_id_(0),
30 fullscreen_frame_(NULL), 21 fullscreen_frame_(NULL),
31 pending_fullscreen_frame_(NULL) { 22 pending_fullscreen_frame_(NULL) {
32 } 23 }
33 24
34 RendererMediaPlayerManager::~RendererMediaPlayerManager() { 25 RendererMediaPlayerManager::~RendererMediaPlayerManager() {
35 std::map<int, WebMediaPlayerAndroid*>::iterator player_it; 26 std::map<int, WebMediaPlayerAndroid*>::iterator player_it;
(...skipping 27 matching lines...) Expand all
63 OnConnectedToRemoteDevice) 54 OnConnectedToRemoteDevice)
64 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DisconnectedFromRemoteDevice, 55 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DisconnectedFromRemoteDevice,
65 OnDisconnectedFromRemoteDevice) 56 OnDisconnectedFromRemoteDevice)
66 IPC_MESSAGE_HANDLER(MediaPlayerMsg_RequestFullscreen, 57 IPC_MESSAGE_HANDLER(MediaPlayerMsg_RequestFullscreen,
67 OnRequestFullscreen) 58 OnRequestFullscreen)
68 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidEnterFullscreen, OnDidEnterFullscreen) 59 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidEnterFullscreen, OnDidEnterFullscreen)
69 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidExitFullscreen, OnDidExitFullscreen) 60 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidExitFullscreen, OnDidExitFullscreen)
70 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPlay, OnPlayerPlay) 61 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPlay, OnPlayerPlay)
71 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPause, OnPlayerPause) 62 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPause, OnPlayerPause)
72 IPC_MESSAGE_HANDLER(MediaPlayerMsg_PauseVideo, OnPauseVideo) 63 IPC_MESSAGE_HANDLER(MediaPlayerMsg_PauseVideo, OnPauseVideo)
73 IPC_MESSAGE_HANDLER(CdmMsg_SessionCreated, OnSessionCreated)
74 IPC_MESSAGE_HANDLER(CdmMsg_SessionMessage, OnSessionMessage)
75 IPC_MESSAGE_HANDLER(CdmMsg_SessionReady, OnSessionReady)
76 IPC_MESSAGE_HANDLER(CdmMsg_SessionClosed, OnSessionClosed)
77 IPC_MESSAGE_HANDLER(CdmMsg_SessionError, OnSessionError)
78 IPC_MESSAGE_UNHANDLED(handled = false) 64 IPC_MESSAGE_UNHANDLED(handled = false)
79 IPC_END_MESSAGE_MAP() 65 IPC_END_MESSAGE_MAP()
80 return handled; 66 return handled;
81 } 67 }
82 68
83 void RendererMediaPlayerManager::Initialize( 69 void RendererMediaPlayerManager::Initialize(
84 MediaPlayerHostMsg_Initialize_Type type, 70 MediaPlayerHostMsg_Initialize_Type type,
85 int player_id, 71 int player_id,
86 const GURL& url, 72 const GURL& url,
87 const GURL& first_party_for_cookies, 73 const GURL& first_party_for_cookies,
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id)); 230 Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id));
245 } 231 }
246 232
247 void RendererMediaPlayerManager::ExitFullscreen(int player_id) { 233 void RendererMediaPlayerManager::ExitFullscreen(int player_id) {
248 pending_fullscreen_frame_ = NULL; 234 pending_fullscreen_frame_ = NULL;
249 fullscreen_frame_ = NULL; 235 fullscreen_frame_ = NULL;
250 Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id)); 236 Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id));
251 } 237 }
252 238
253 void RendererMediaPlayerManager::SetCdm(int player_id, int cdm_id) { 239 void RendererMediaPlayerManager::SetCdm(int player_id, int cdm_id) {
254 if (cdm_id == kInvalidCdmId) 240 if (cdm_id == RendererCdmManager::kInvalidCdmId) {
241 NOTREACHED();
255 return; 242 return;
243 }
256 Send(new MediaPlayerHostMsg_SetCdm(routing_id(), player_id, cdm_id)); 244 Send(new MediaPlayerHostMsg_SetCdm(routing_id(), player_id, cdm_id));
257 } 245 }
258 246
259 void RendererMediaPlayerManager::InitializeCdm(int cdm_id,
260 ProxyMediaKeys* media_keys,
261 const std::string& key_system,
262 const GURL& security_origin) {
263 DCHECK_NE(cdm_id, kInvalidCdmId);
264 RegisterMediaKeys(cdm_id, media_keys);
265 Send(new CdmHostMsg_InitializeCdm(
266 routing_id(), cdm_id, key_system, security_origin));
267 }
268
269 void RendererMediaPlayerManager::CreateSession(
270 int cdm_id,
271 uint32 session_id,
272 CdmHostMsg_CreateSession_ContentType content_type,
273 const std::vector<uint8>& init_data) {
274 DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
275 Send(new CdmHostMsg_CreateSession(
276 routing_id(), cdm_id, session_id, content_type, init_data));
277 }
278
279 void RendererMediaPlayerManager::UpdateSession(
280 int cdm_id,
281 uint32 session_id,
282 const std::vector<uint8>& response) {
283 DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
284 Send(
285 new CdmHostMsg_UpdateSession(routing_id(), cdm_id, session_id, response));
286 }
287
288 void RendererMediaPlayerManager::ReleaseSession(int cdm_id, uint32 session_id) {
289 DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
290 Send(new CdmHostMsg_ReleaseSession(routing_id(), cdm_id, session_id));
291 }
292
293 void RendererMediaPlayerManager::DestroyCdm(int cdm_id) {
294 DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
295 Send(new CdmHostMsg_DestroyCdm(routing_id(), cdm_id));
296 media_keys_.erase(cdm_id);
297 }
298
299 void RendererMediaPlayerManager::OnSessionCreated(
300 int cdm_id,
301 uint32 session_id,
302 const std::string& web_session_id) {
303 if (web_session_id.length() > kMaxWebSessionIdLength) {
304 OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
305 return;
306 }
307
308 ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
309 if (media_keys)
310 media_keys->OnSessionCreated(session_id, web_session_id);
311 }
312
313 void RendererMediaPlayerManager::OnSessionMessage(
314 int cdm_id,
315 uint32 session_id,
316 const std::vector<uint8>& message,
317 const GURL& destination_url) {
318 if (message.size() > kMaxSessionMessageLength) {
319 OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
320 return;
321 }
322
323 ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
324 if (media_keys)
325 media_keys->OnSessionMessage(session_id, message, destination_url);
326 }
327
328 void RendererMediaPlayerManager::OnSessionReady(int cdm_id, uint32 session_id) {
329 ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
330 if (media_keys)
331 media_keys->OnSessionReady(session_id);
332 }
333
334 void RendererMediaPlayerManager::OnSessionClosed(int cdm_id,
335 uint32 session_id) {
336 ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
337 if (media_keys)
338 media_keys->OnSessionClosed(session_id);
339 }
340
341 void RendererMediaPlayerManager::OnSessionError(
342 int cdm_id,
343 uint32 session_id,
344 media::MediaKeys::KeyError error_code,
345 uint32 system_code) {
346 ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
347 if (media_keys)
348 media_keys->OnSessionError(session_id, error_code, system_code);
349 }
350
351 int RendererMediaPlayerManager::RegisterMediaPlayer( 247 int RendererMediaPlayerManager::RegisterMediaPlayer(
352 WebMediaPlayerAndroid* player) { 248 WebMediaPlayerAndroid* player) {
353 media_players_[next_media_player_id_] = player; 249 media_players_[next_media_player_id_] = player;
354 return next_media_player_id_++; 250 return next_media_player_id_++;
355 } 251 }
356 252
357 void RendererMediaPlayerManager::UnregisterMediaPlayer(int player_id) { 253 void RendererMediaPlayerManager::UnregisterMediaPlayer(int player_id) {
358 media_players_.erase(player_id); 254 media_players_.erase(player_id);
359 } 255 }
360 256
361 void RendererMediaPlayerManager::RegisterMediaKeys(int cdm_id,
362 ProxyMediaKeys* media_keys) {
363 // Only allowed to register once.
364 DCHECK(media_keys_.find(cdm_id) == media_keys_.end());
365
366 media_keys_[cdm_id] = media_keys;
367 }
368
369 void RendererMediaPlayerManager::ReleaseVideoResources() { 257 void RendererMediaPlayerManager::ReleaseVideoResources() {
370 std::map<int, WebMediaPlayerAndroid*>::iterator player_it; 258 std::map<int, WebMediaPlayerAndroid*>::iterator player_it;
371 for (player_it = media_players_.begin(); player_it != media_players_.end(); 259 for (player_it = media_players_.begin(); player_it != media_players_.end();
372 ++player_it) { 260 ++player_it) {
373 WebMediaPlayerAndroid* player = player_it->second; 261 WebMediaPlayerAndroid* player = player_it->second;
374 262
375 // Do not release if an audio track is still playing 263 // Do not release if an audio track is still playing
376 if (player && (player->paused() || player->hasVideo())) 264 if (player && (player->paused() || player->hasVideo()))
377 player->ReleaseMediaResources(); 265 player->ReleaseMediaResources();
378 } 266 }
379 } 267 }
380 268
381 WebMediaPlayerAndroid* RendererMediaPlayerManager::GetMediaPlayer( 269 WebMediaPlayerAndroid* RendererMediaPlayerManager::GetMediaPlayer(
382 int player_id) { 270 int player_id) {
383 std::map<int, WebMediaPlayerAndroid*>::iterator iter = 271 std::map<int, WebMediaPlayerAndroid*>::iterator iter =
384 media_players_.find(player_id); 272 media_players_.find(player_id);
385 if (iter != media_players_.end()) 273 if (iter != media_players_.end())
386 return iter->second; 274 return iter->second;
387 return NULL; 275 return NULL;
388 } 276 }
389 277
390 ProxyMediaKeys* RendererMediaPlayerManager::GetMediaKeys(int cdm_id) {
391 std::map<int, ProxyMediaKeys*>::iterator iter = media_keys_.find(cdm_id);
392 return (iter != media_keys_.end()) ? iter->second : NULL;
393 }
394
395 bool RendererMediaPlayerManager::CanEnterFullscreen(blink::WebFrame* frame) { 278 bool RendererMediaPlayerManager::CanEnterFullscreen(blink::WebFrame* frame) {
396 return (!fullscreen_frame_ && !pending_fullscreen_frame_) 279 return (!fullscreen_frame_ && !pending_fullscreen_frame_)
397 || ShouldEnterFullscreen(frame); 280 || ShouldEnterFullscreen(frame);
398 } 281 }
399 282
400 void RendererMediaPlayerManager::DidEnterFullscreen(blink::WebFrame* frame) { 283 void RendererMediaPlayerManager::DidEnterFullscreen(blink::WebFrame* frame) {
401 pending_fullscreen_frame_ = NULL; 284 pending_fullscreen_frame_ = NULL;
402 fullscreen_frame_ = frame; 285 fullscreen_frame_ = frame;
403 } 286 }
404 287
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 334
452 bool 335 bool
453 RendererMediaPlayerManager::ShouldUseVideoOverlayForEmbeddedEncryptedVideo() { 336 RendererMediaPlayerManager::ShouldUseVideoOverlayForEmbeddedEncryptedVideo() {
454 const RendererPreferences& prefs = static_cast<RenderFrameImpl*>( 337 const RendererPreferences& prefs = static_cast<RenderFrameImpl*>(
455 render_frame())->render_view()->renderer_preferences(); 338 render_frame())->render_view()->renderer_preferences();
456 return prefs.use_video_overlay_for_embedded_encrypted_video; 339 return prefs.use_video_overlay_for_embedded_encrypted_video;
457 } 340 }
458 #endif // defined(VIDEO_HOLE) 341 #endif // defined(VIDEO_HOLE)
459 342
460 } // namespace content 343 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698