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

Unified Diff: content/browser/media/android/browser_media_player_manager.cc

Issue 270373003: Separate RendererCdmManager from RendererMediaPlayerManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compile error on Windows 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/media/android/browser_media_player_manager.h ('k') | content/content_renderer.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 b4a71e89ae150a93837beaabc5b506faf57ae9ef..f19783bb168189866b21f1b1ccf06ae795ca5a56 100644
--- a/content/browser/media/android/browser_media_player_manager.cc
+++ b/content/browser/media/android/browser_media_player_manager.cc
@@ -127,6 +127,7 @@ MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer(
BrowserMediaPlayerManager::BrowserMediaPlayerManager(
RenderViewHost* render_view_host)
: WebContentsObserver(WebContents::FromRenderViewHost(render_view_host)),
+ current_cdm_routing_id_(MSG_ROUTING_NONE),
fullscreen_player_id_(-1),
fullscreen_player_is_released_(false),
web_contents_(WebContents::FromRenderViewHost(render_view_host)),
@@ -135,6 +136,24 @@ BrowserMediaPlayerManager::BrowserMediaPlayerManager(
BrowserMediaPlayerManager::~BrowserMediaPlayerManager() {}
+bool BrowserMediaPlayerManager::OnMessageReceived(
+ const IPC::Message& message,
+ RenderFrameHost* render_frame_host) {
+ current_cdm_routing_id_ = render_frame_host->GetRoutingID();
+ DCHECK_NE(MSG_ROUTING_NONE, current_cdm_routing_id_);
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(BrowserMediaPlayerManager, message)
+ IPC_MESSAGE_HANDLER(CdmHostMsg_InitializeCdm, OnInitializeCdm)
+ IPC_MESSAGE_HANDLER(CdmHostMsg_CreateSession, OnCreateSession)
+ IPC_MESSAGE_HANDLER(CdmHostMsg_UpdateSession, OnUpdateSession)
+ IPC_MESSAGE_HANDLER(CdmHostMsg_ReleaseSession, OnReleaseSession)
+ IPC_MESSAGE_HANDLER(CdmHostMsg_DestroyCdm, OnDestroyCdm)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ current_cdm_routing_id_ = MSG_ROUTING_NONE;
+ return handled;
+}
+
bool BrowserMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(BrowserMediaPlayerManager, msg)
@@ -151,11 +170,6 @@ bool BrowserMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers,
DestroyAllMediaPlayers)
IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetCdm, OnSetCdm)
- IPC_MESSAGE_HANDLER(CdmHostMsg_InitializeCdm, OnInitializeCdm)
- IPC_MESSAGE_HANDLER(CdmHostMsg_CreateSession, OnCreateSession)
- IPC_MESSAGE_HANDLER(CdmHostMsg_UpdateSession, OnUpdateSession)
- IPC_MESSAGE_HANDLER(CdmHostMsg_ReleaseSession, OnReleaseSession)
- IPC_MESSAGE_HANDLER(CdmHostMsg_DestroyCdm, OnDestroyCdm)
#if defined(VIDEO_HOLE)
IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_NotifyExternalSurface,
OnNotifyExternalSurface)
@@ -387,7 +401,7 @@ void BrowserMediaPlayerManager::OnSessionCreated(
uint32 session_id,
const std::string& web_session_id) {
Send(new CdmMsg_SessionCreated(
- routing_id(), cdm_id, session_id, web_session_id));
+ GetCdmRoutingId(cdm_id), cdm_id, session_id, web_session_id));
}
void BrowserMediaPlayerManager::OnSessionMessage(
@@ -396,15 +410,15 @@ void BrowserMediaPlayerManager::OnSessionMessage(
const std::vector<uint8>& message,
const GURL& destination_url) {
Send(new CdmMsg_SessionMessage(
- routing_id(), cdm_id, session_id, message, destination_url));
+ GetCdmRoutingId(cdm_id), cdm_id, session_id, message, destination_url));
}
void BrowserMediaPlayerManager::OnSessionReady(int cdm_id, uint32 session_id) {
- Send(new CdmMsg_SessionReady(routing_id(), cdm_id, session_id));
+ Send(new CdmMsg_SessionReady(GetCdmRoutingId(cdm_id), cdm_id, session_id));
}
void BrowserMediaPlayerManager::OnSessionClosed(int cdm_id, uint32 session_id) {
- Send(new CdmMsg_SessionClosed(routing_id(), cdm_id, session_id));
+ Send(new CdmMsg_SessionClosed(GetCdmRoutingId(cdm_id), cdm_id, session_id));
}
void BrowserMediaPlayerManager::OnSessionError(
@@ -412,8 +426,15 @@ void BrowserMediaPlayerManager::OnSessionError(
uint32 session_id,
media::MediaKeys::KeyError error_code,
uint32 system_code) {
+ // If session error happens in a CDM IPC message handler, always use
+ // |current_cdm_routing_id_|. Otherwise, the error must be from the
+ // MediaDrmBridge. Use the stored CDM routing ID in this case.
+ int cdm_routing_id = (current_cdm_routing_id_ != MSG_ROUTING_NONE)
+ ? current_cdm_routing_id_
+ : GetCdmRoutingId(cdm_id);
+
Send(new CdmMsg_SessionError(
- routing_id(), cdm_id, session_id, error_code, system_code));
+ cdm_routing_id, cdm_id, session_id, error_code, system_code));
}
#if defined(VIDEO_HOLE)
@@ -589,6 +610,8 @@ void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) {
void BrowserMediaPlayerManager::OnInitializeCdm(int cdm_id,
const std::string& key_system,
const GURL& security_origin) {
+ DCHECK(cdm_to_routing_id_map_.find(cdm_id) == cdm_to_routing_id_map_.end());
+
if (key_system.size() > kMaxKeySystemLength) {
// This failure will be discovered and reported by OnCreateSession()
// as GetDrmBridge() will return null.
@@ -601,7 +624,8 @@ void BrowserMediaPlayerManager::OnInitializeCdm(int cdm_id,
return;
}
- AddDrmBridge(cdm_id, key_system, security_origin);
+ if (AddDrmBridge(cdm_id, key_system, security_origin))
+ cdm_to_routing_id_map_[cdm_id] = current_cdm_routing_id_;
}
void BrowserMediaPlayerManager::OnCreateSession(
@@ -758,7 +782,7 @@ scoped_ptr<media::MediaPlayerAndroid> BrowserMediaPlayerManager::SwapPlayer(
return scoped_ptr<media::MediaPlayerAndroid>(previous_player);
}
-void BrowserMediaPlayerManager::AddDrmBridge(int cdm_id,
+bool BrowserMediaPlayerManager::AddDrmBridge(int cdm_id,
const std::string& key_system,
const GURL& security_origin) {
DCHECK(!GetDrmBridge(cdm_id));
@@ -769,7 +793,7 @@ void BrowserMediaPlayerManager::AddDrmBridge(int cdm_id,
// This failure will be discovered and reported by OnCreateSession()
// as GetDrmBridge() will return null.
DVLOG(1) << "failed to create drm bridge.";
- return;
+ return false;
}
// TODO(xhwang/ddorwin): Pass the security level from key system.
@@ -781,10 +805,11 @@ void BrowserMediaPlayerManager::AddDrmBridge(int cdm_id,
}
if (!drm_bridge->SetSecurityLevel(security_level)) {
DVLOG(1) << "failed to set security level " << security_level;
- return;
+ return false;
}
drm_bridges_.push_back(drm_bridge.release());
+ return true;
}
void BrowserMediaPlayerManager::RemoveDrmBridge(int cdm_id) {
@@ -797,6 +822,7 @@ void BrowserMediaPlayerManager::RemoveDrmBridge(int cdm_id) {
if ((*it)->cdm_id() == cdm_id) {
drm_bridges_.erase(it);
drm_bridge_player_map_.erase(cdm_id);
+ cdm_to_routing_id_map_.erase(cdm_id);
break;
}
}
@@ -884,4 +910,9 @@ void BrowserMediaPlayerManager::OnMediaResourcesReleased(int player_id) {
#endif // defined(VIDEO_HOLE)
}
+int BrowserMediaPlayerManager::GetCdmRoutingId(int cdm_id) {
+ DCHECK(cdm_to_routing_id_map_.find(cdm_id) != cdm_to_routing_id_map_.end());
+ return cdm_to_routing_id_map_[cdm_id];
+}
+
} // namespace content
« no previous file with comments | « content/browser/media/android/browser_media_player_manager.h ('k') | content/content_renderer.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698