Skip to content

Commit

Permalink
Encrypted Media: Destroy CDM in ProxyMediaKeys' dtor.
Browse files Browse the repository at this point in the history
- Makes sure we destroy the CDM when ProxyMediaKeys is destroyed.
- Changes MediaKeysHostMsg_CancelAllPendingSessionCreations message to a more general MediaKeysHostMsg_DestroyCdm message and cancels pending session creations as part of OnDestroyCdm().

BUG=347154,347022
TEST=MediaDrmBridge is properly destroyed with all sessions closed when the MediaPlayer is destroyed.
R=dcheng@chromium.org, ddorwin@chromium.org, qinmin@chromium.org

Review URL: https://codereview.chromium.org/181593004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@253674 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
xhwang@chromium.org committed Feb 27, 2014
1 parent 5648dbb commit d49a486
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 12 deletions.
12 changes: 8 additions & 4 deletions content/browser/media/android/browser_media_player_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,7 @@ bool BrowserMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(MediaKeysHostMsg_CreateSession, OnCreateSession)
IPC_MESSAGE_HANDLER(MediaKeysHostMsg_UpdateSession, OnUpdateSession)
IPC_MESSAGE_HANDLER(MediaKeysHostMsg_ReleaseSession, OnReleaseSession)
IPC_MESSAGE_HANDLER(MediaKeysHostMsg_CancelAllPendingSessionCreations,
OnCancelAllPendingSessionCreations)
IPC_MESSAGE_HANDLER(MediaKeysHostMsg_DestroyCdm, OnDestroyCdm)
#if defined(VIDEO_HOLE)
IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_NotifyExternalSurface,
OnNotifyExternalSurface)
Expand Down Expand Up @@ -729,11 +728,16 @@ void BrowserMediaPlayerManager::OnReleaseSession(int media_keys_id,
drm_bridge->ReleaseSession(session_id);
}

void BrowserMediaPlayerManager::OnCancelAllPendingSessionCreations(
int media_keys_id) {
void BrowserMediaPlayerManager::OnDestroyCdm(int media_keys_id) {
MediaDrmBridge* drm_bridge = GetDrmBridge(media_keys_id);
if (!drm_bridge) return;

CancelAllPendingSessionCreations(media_keys_id);
RemoveDrmBridge(media_keys_id);
}

void BrowserMediaPlayerManager::CancelAllPendingSessionCreations(
int media_keys_id) {
BrowserContext* context =
web_contents()->GetRenderProcessHost()->GetBrowserContext();
context->CancelProtectedMediaIdentifierPermissionRequests(media_keys_id);
Expand Down
4 changes: 3 additions & 1 deletion content/browser/media/android/browser_media_player_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,10 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
const std::vector<uint8>& response);
void OnReleaseSession(int media_keys_id, uint32 session_id);
void OnSetMediaKeys(int player_id, int media_keys_id);
void OnDestroyCdm(int media_keys_id);

void OnCancelAllPendingSessionCreations(int media_keys_id);
// Cancels all pending session creations associated with |media_keys_id|.
void CancelAllPendingSessionCreations(int media_keys_id);

#if defined(VIDEO_HOLE)
virtual void OnNotifyExternalSurface(
Expand Down
2 changes: 1 addition & 1 deletion content/common/media/media_player_messages_android.h
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ IPC_MESSAGE_ROUTED2(MediaKeysHostMsg_ReleaseSession,
int /* media_keys_id */,
uint32_t /* session_id */)

IPC_MESSAGE_ROUTED1(MediaKeysHostMsg_CancelAllPendingSessionCreations,
IPC_MESSAGE_ROUTED1(MediaKeysHostMsg_DestroyCdm,
int /* media_keys_id */)

IPC_MESSAGE_ROUTED3(MediaKeysMsg_SessionCreated,
Expand Down
2 changes: 1 addition & 1 deletion content/renderer/media/android/proxy_media_keys.cc
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ ProxyMediaKeys::ProxyMediaKeys(
}

ProxyMediaKeys::~ProxyMediaKeys() {
manager_->CancelAllPendingSessionCreations(media_keys_id_);
manager_->DestroyCdm(media_keys_id_);
}

void ProxyMediaKeys::InitializeCDM(const std::string& key_system,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -270,10 +270,8 @@ void RendererMediaPlayerManager::ReleaseSession(int media_keys_id,
routing_id(), media_keys_id, session_id));
}

void RendererMediaPlayerManager::CancelAllPendingSessionCreations(
int media_keys_id) {
Send(new MediaKeysHostMsg_CancelAllPendingSessionCreations(
routing_id(), media_keys_id));
void RendererMediaPlayerManager::DestroyCdm(int media_keys_id) {
Send(new MediaKeysHostMsg_DestroyCdm(routing_id(), media_keys_id));
}

void RendererMediaPlayerManager::OnSessionCreated(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ class RendererMediaPlayerManager : public RenderViewObserver {
uint32 session_id,
const std::vector<uint8>& response);
void ReleaseSession(int media_keys_id, uint32 session_id);
void CancelAllPendingSessionCreations(int media_keys_id);
void DestroyCdm(int media_keys_id);

// Registers and unregisters a WebMediaPlayerAndroid object.
int RegisterMediaPlayer(WebMediaPlayerAndroid* player);
Expand Down

0 comments on commit d49a486

Please sign in to comment.