Chromium Code Reviews| Index: content/browser/media/android/browser_media_player_manager.cc |
| diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc |
| index 669cc6046c5b83e8be0023a9a15d94acfeffacd3..128ca66b1bbbc89c98a98335569ff1fe58c0ef68 100644 |
| --- a/content/browser/media/android/browser_media_player_manager.cc |
| +++ b/content/browser/media/android/browser_media_player_manager.cc |
| @@ -149,6 +149,7 @@ bool BrowserMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) { |
| IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer) |
| IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers, |
| DestroyAllMediaPlayers) |
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetMediaKeys, OnSetMediaKeys) |
| IPC_MESSAGE_HANDLER(CdmHostMsg_InitializeCdm, OnInitializeCdm) |
| IPC_MESSAGE_HANDLER(CdmHostMsg_CreateSession, OnCreateSession) |
| IPC_MESSAGE_HANDLER(CdmHostMsg_UpdateSession, OnUpdateSession) |
| @@ -520,10 +521,24 @@ void BrowserMediaPlayerManager::OnInitialize( |
| RenderProcessHostImpl* host = static_cast<RenderProcessHostImpl*>( |
| web_contents()->GetRenderProcessHost()); |
| - AddPlayer(CreateMediaPlayer( |
| + MediaPlayerAndroid* player = CreateMediaPlayer( |
| type, player_id, url, first_party_for_cookies, demuxer_client_id, |
| host->GetBrowserContext()->IsOffTheRecord(), this, |
| - host->browser_demuxer_android())); |
| + host->browser_demuxer_android()); |
| + if (!player) |
| + return; |
| + |
| + AddPlayer(player); |
| + |
| + if (pending_set_media_keys_map_.find(player_id) == |
| + pending_set_media_keys_map_.end()) { |
| + return; |
| + } |
| + |
| + int cdm_id = pending_set_media_keys_map_[player_id]; |
|
ddorwin
2014/03/11 04:06:33
Better to save a temp iterator above?
xhwang
2014/03/12 01:07:52
Obsolete.
|
| + MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id); |
|
ddorwin
2014/03/11 04:06:33
Should we erase it from the map? Otherwise, we'll
xhwang
2014/03/12 01:07:52
You are right. But this code is obsolete now.
|
| + if (!drm_bridge) |
|
ddorwin
2014/03/11 04:06:33
Should this ever fail?
xhwang
2014/03/12 01:07:52
This code is obsolete. But this is possible. OnIni
|
| + player->SetDrmBridge(drm_bridge); |
| } |
| void BrowserMediaPlayerManager::OnStart(int player_id) { |
| @@ -588,9 +603,6 @@ void BrowserMediaPlayerManager::OnInitializeCdm(int cdm_id, |
| } |
| AddDrmBridge(cdm_id, key_system, frame_url); |
| - // In EME v0.1b MediaKeys lives in the media element. So the |cdm_id| |
| - // is the same as the |player_id|. |
| - OnSetMediaKeys(cdm_id, cdm_id); |
| } |
| void BrowserMediaPlayerManager::OnCreateSession( |
| @@ -795,12 +807,19 @@ void BrowserMediaPlayerManager::RemoveDrmBridge(int cdm_id) { |
| } |
| void BrowserMediaPlayerManager::OnSetMediaKeys(int player_id, int cdm_id) { |
| - MediaPlayerAndroid* player = GetPlayer(player_id); |
| MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id); |
| - if (!player || !drm_bridge) { |
| - DVLOG(1) << "OnSetMediaKeys(): Player and MediaKeys must be present."; |
| + if (!drm_bridge) { |
| + DVLOG(1) << "OnSetMediaKeys(): MediaDrmBridge must be present."; |
| return; |
| } |
| + |
| + MediaPlayerAndroid* player = GetPlayer(player_id); |
| + // SetMediaKeys() may be called before the player is loaded. |
|
ddorwin
2014/03/11 04:06:33
How do we know the player_id in that case?
xhwang
2014/03/12 01:07:52
Removed.
|
| + if (!player) { |
| + pending_set_media_keys_map_[player_id] = cdm_id; |
| + return; |
| + } |
| + |
| // TODO(qinmin): add the logic to decide whether we should create the |
| // fullscreen surface for EME lv1. |
| player->SetDrmBridge(drm_bridge); |