| 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 a2c618e38899eaa5bbeeadf74a68016cfc5674e5..e0b19e8f794c40aeb4e202d76fc5d8772bccb39d 100644
|
| --- a/content/browser/media/android/browser_media_player_manager.cc
|
| +++ b/content/browser/media/android/browser_media_player_manager.cc
|
| @@ -677,10 +677,13 @@ void BrowserMediaPlayerManager::OnUpdateSession(
|
| }
|
|
|
| drm_bridge->UpdateSession(session_id, &response[0], response.size());
|
| - // In EME v0.1b MediaKeys lives in the media element. So the |cdm_id|
|
| - // is the same as the |player_id|.
|
| - // TODO(xhwang): Separate |cdm_id| and |player_id|.
|
| - MediaPlayerAndroid* player = GetPlayer(cdm_id);
|
| +
|
| + DrmBridgePlayerMap::const_iterator iter = drm_bridge_player_map_.find(cdm_id);
|
| + if (iter == drm_bridge_player_map_.end())
|
| + return;
|
| +
|
| + int player_id = iter->second;
|
| + MediaPlayerAndroid* player = GetPlayer(player_id);
|
| if (player)
|
| player->OnKeyAdded();
|
| }
|
| @@ -725,6 +728,14 @@ void BrowserMediaPlayerManager::RemovePlayer(int player_id) {
|
| break;
|
| }
|
| }
|
| +
|
| + for (DrmBridgePlayerMap::iterator it = drm_bridge_player_map_.begin();
|
| + it != drm_bridge_player_map_.end(); ++it) {
|
| + if (it->second == player_id) {
|
| + drm_bridge_player_map_.erase(it);
|
| + break;
|
| + }
|
| + }
|
| }
|
|
|
| scoped_ptr<media::MediaPlayerAndroid> BrowserMediaPlayerManager::SwapPlayer(
|
| @@ -772,10 +783,15 @@ void BrowserMediaPlayerManager::AddDrmBridge(int cdm_id,
|
| }
|
|
|
| void BrowserMediaPlayerManager::RemoveDrmBridge(int cdm_id) {
|
| + // TODO(xhwang): Detach DrmBridge from the player it's set to. In prefixed
|
| + // EME implementation the current code is fine because we always destroy the
|
| + // player before we destroy the DrmBridge. This will not always be the case
|
| + // in unprefixed EME implementation.
|
| for (ScopedVector<MediaDrmBridge>::iterator it = drm_bridges_.begin();
|
| it != drm_bridges_.end(); ++it) {
|
| if ((*it)->cdm_id() == cdm_id) {
|
| drm_bridges_.erase(it);
|
| + drm_bridge_player_map_.erase(cdm_id);
|
| break;
|
| }
|
| }
|
| @@ -792,6 +808,9 @@ void BrowserMediaPlayerManager::OnSetCdm(int player_id, int cdm_id) {
|
| // TODO(qinmin): add the logic to decide whether we should create the
|
| // fullscreen surface for EME lv1.
|
| player->SetDrmBridge(drm_bridge);
|
| + // Do now support setting one CDM on multiple players.
|
| + DCHECK(drm_bridge_player_map_.find(cdm_id) == drm_bridge_player_map_.end());
|
| + drm_bridge_player_map_[cdm_id] = player_id;
|
| }
|
|
|
| void BrowserMediaPlayerManager::CreateSessionIfPermitted(
|
|
|