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

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: Ready for review Created 6 years, 7 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" 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"
10 #include "content/common/media/media_player_messages_android.h" 9 #include "content/common/media/media_player_messages_android.h"
11 #include "content/public/common/renderer_preferences.h" 10 #include "content/public/common/renderer_preferences.h"
12 #include "content/renderer/media/android/proxy_media_keys.h" 11 #include "content/renderer/media/android/renderer_cdm_manager.h"
13 #include "content/renderer/media/android/renderer_media_player_manager.h" 12 #include "content/renderer/media/android/renderer_media_player_manager.h"
14 #include "content/renderer/media/android/webmediaplayer_android.h" 13 #include "content/renderer/media/android/webmediaplayer_android.h"
15 #include "content/renderer/render_view_impl.h" 14 #include "content/renderer/render_view_impl.h"
16 #include "ui/gfx/rect_f.h" 15 #include "ui/gfx/rect_f.h"
17 16
18 namespace content { 17 namespace content {
19 18
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( 19 RendererMediaPlayerManager::RendererMediaPlayerManager(
27 RenderFrame* render_frame) 20 RenderFrame* render_frame)
28 : RenderFrameObserver(render_frame), 21 : RenderFrameObserver(render_frame),
29 next_media_player_id_(0), 22 next_media_player_id_(0),
30 fullscreen_frame_(NULL), 23 fullscreen_frame_(NULL),
31 pending_fullscreen_frame_(NULL) { 24 pending_fullscreen_frame_(NULL) {
32 } 25 }
33 26
34 RendererMediaPlayerManager::~RendererMediaPlayerManager() { 27 RendererMediaPlayerManager::~RendererMediaPlayerManager() {
35 std::map<int, WebMediaPlayerAndroid*>::iterator player_it; 28 std::map<int, WebMediaPlayerAndroid*>::iterator player_it;
(...skipping 27 matching lines...) Expand all
63 OnConnectedToRemoteDevice) 56 OnConnectedToRemoteDevice)
64 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DisconnectedFromRemoteDevice, 57 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DisconnectedFromRemoteDevice,
65 OnDisconnectedFromRemoteDevice) 58 OnDisconnectedFromRemoteDevice)
66 IPC_MESSAGE_HANDLER(MediaPlayerMsg_RequestFullscreen, 59 IPC_MESSAGE_HANDLER(MediaPlayerMsg_RequestFullscreen,
67 OnRequestFullscreen) 60 OnRequestFullscreen)
68 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidEnterFullscreen, OnDidEnterFullscreen) 61 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidEnterFullscreen, OnDidEnterFullscreen)
69 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidExitFullscreen, OnDidExitFullscreen) 62 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidExitFullscreen, OnDidExitFullscreen)
70 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPlay, OnPlayerPlay) 63 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPlay, OnPlayerPlay)
71 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPause, OnPlayerPause) 64 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPause, OnPlayerPause)
72 IPC_MESSAGE_HANDLER(MediaPlayerMsg_PauseVideo, OnPauseVideo) 65 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) 66 IPC_MESSAGE_UNHANDLED(handled = false)
79 IPC_END_MESSAGE_MAP() 67 IPC_END_MESSAGE_MAP()
80 return handled; 68 return handled;
81 } 69 }
82 70
83 void RendererMediaPlayerManager::Initialize( 71 void RendererMediaPlayerManager::Initialize(
84 MediaPlayerHostMsg_Initialize_Type type, 72 MediaPlayerHostMsg_Initialize_Type type,
85 int player_id, 73 int player_id,
86 const GURL& url, 74 const GURL& url,
87 const GURL& first_party_for_cookies, 75 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)); 232 Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id));
245 } 233 }
246 234
247 void RendererMediaPlayerManager::ExitFullscreen(int player_id) { 235 void RendererMediaPlayerManager::ExitFullscreen(int player_id) {
248 pending_fullscreen_frame_ = NULL; 236 pending_fullscreen_frame_ = NULL;
249 fullscreen_frame_ = NULL; 237 fullscreen_frame_ = NULL;
250 Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id)); 238 Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id));
251 } 239 }
252 240
253 void RendererMediaPlayerManager::SetCdm(int player_id, int cdm_id) { 241 void RendererMediaPlayerManager::SetCdm(int player_id, int cdm_id) {
254 if (cdm_id == kInvalidCdmId) 242 if (cdm_id == RendererCdmManager::kInvalidCdmId) {
243 NOTREACHED();
ddorwin 2014/05/23 23:28:37 OOC, what changed? Oh, the WMPA code?
xhwang 2014/05/27 22:57:41 Yeah. Now WMPA checks the validity of Cdm ID. I fe
255 return; 244 return;
245 }
256 Send(new MediaPlayerHostMsg_SetCdm(routing_id(), player_id, cdm_id)); 246 Send(new MediaPlayerHostMsg_SetCdm(routing_id(), player_id, cdm_id));
257 } 247 }
258 248
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.spec());
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( 249 int RendererMediaPlayerManager::RegisterMediaPlayer(
352 WebMediaPlayerAndroid* player) { 250 WebMediaPlayerAndroid* player) {
353 media_players_[next_media_player_id_] = player; 251 media_players_[next_media_player_id_] = player;
354 return next_media_player_id_++; 252 return next_media_player_id_++;
355 } 253 }
356 254
357 void RendererMediaPlayerManager::UnregisterMediaPlayer(int player_id) { 255 void RendererMediaPlayerManager::UnregisterMediaPlayer(int player_id) {
358 media_players_.erase(player_id); 256 media_players_.erase(player_id);
359 } 257 }
360 258
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() { 259 void RendererMediaPlayerManager::ReleaseVideoResources() {
370 std::map<int, WebMediaPlayerAndroid*>::iterator player_it; 260 std::map<int, WebMediaPlayerAndroid*>::iterator player_it;
371 for (player_it = media_players_.begin(); 261 for (player_it = media_players_.begin();
372 player_it != media_players_.end(); ++player_it) { 262 player_it != media_players_.end(); ++player_it) {
373 WebMediaPlayerAndroid* player = player_it->second; 263 WebMediaPlayerAndroid* player = player_it->second;
374 264
375 // Do not release if an audio track is still playing 265 // Do not release if an audio track is still playing
376 if (player && (player->paused() || player->hasVideo())) 266 if (player && (player->paused() || player->hasVideo()))
377 player->ReleaseMediaResources(); 267 player->ReleaseMediaResources();
378 } 268 }
379 } 269 }
380 270
381 WebMediaPlayerAndroid* RendererMediaPlayerManager::GetMediaPlayer( 271 WebMediaPlayerAndroid* RendererMediaPlayerManager::GetMediaPlayer(
382 int player_id) { 272 int player_id) {
383 std::map<int, WebMediaPlayerAndroid*>::iterator iter = 273 std::map<int, WebMediaPlayerAndroid*>::iterator iter =
384 media_players_.find(player_id); 274 media_players_.find(player_id);
385 if (iter != media_players_.end()) 275 if (iter != media_players_.end())
386 return iter->second; 276 return iter->second;
387 return NULL; 277 return NULL;
388 } 278 }
389 279
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) { 280 bool RendererMediaPlayerManager::CanEnterFullscreen(blink::WebFrame* frame) {
396 return (!fullscreen_frame_ && !pending_fullscreen_frame_) 281 return (!fullscreen_frame_ && !pending_fullscreen_frame_)
397 || ShouldEnterFullscreen(frame); 282 || ShouldEnterFullscreen(frame);
398 } 283 }
399 284
400 void RendererMediaPlayerManager::DidEnterFullscreen(blink::WebFrame* frame) { 285 void RendererMediaPlayerManager::DidEnterFullscreen(blink::WebFrame* frame) {
401 pending_fullscreen_frame_ = NULL; 286 pending_fullscreen_frame_ = NULL;
402 fullscreen_frame_ = frame; 287 fullscreen_frame_ = frame;
403 } 288 }
404 289
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 336
452 bool 337 bool
453 RendererMediaPlayerManager::ShouldUseVideoOverlayForEmbeddedEncryptedVideo() { 338 RendererMediaPlayerManager::ShouldUseVideoOverlayForEmbeddedEncryptedVideo() {
454 const RendererPreferences& prefs = static_cast<RenderFrameImpl*>( 339 const RendererPreferences& prefs = static_cast<RenderFrameImpl*>(
455 render_frame())->render_view()->renderer_preferences(); 340 render_frame())->render_view()->renderer_preferences();
456 return prefs.use_video_overlay_for_embedded_encrypted_video; 341 return prefs.use_video_overlay_for_embedded_encrypted_video;
457 } 342 }
458 #endif // defined(VIDEO_HOLE) 343 #endif // defined(VIDEO_HOLE)
459 344
460 } // namespace content 345 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698