Index: content/browser/media/android/browser_media_player_manager.h |
diff --git a/content/browser/media/android/browser_media_player_manager.h b/content/browser/media/android/browser_media_player_manager.h |
index 308ed02f5b0598322e926eacdef366dda9501556..9859ea6024667cf239020c7c61be27dd1547ae52 100644 |
--- a/content/browser/media/android/browser_media_player_manager.h |
+++ b/content/browser/media/android/browser_media_player_manager.h |
@@ -35,11 +35,11 @@ class ContentViewCoreImpl; |
class ExternalVideoSurfaceContainer; |
class WebContents; |
-// This class manages all the MediaPlayerAndroid objects. It receives |
-// control operations from the the render process, and forwards |
-// them to corresponding MediaPlayerAndroid object. Callbacks from |
-// MediaPlayerAndroid objects are converted to IPCs and then sent to the |
-// render process. |
+// This class manages all the MediaPlayerAndroid and MediaDrmBridge objects. |
+// It receives control operations from the the render process, and forwards |
+// them to corresponding MediaPlayerAndroid or MediaDrmBridge object. Callbacks |
+// from MediaPlayerAndroid and MediaDrmBridge objects are converted to IPCs and |
+// then sent to the render process. |
class CONTENT_EXPORT BrowserMediaPlayerManager |
: public WebContentsObserver, |
public media::MediaPlayerManager { |
@@ -56,6 +56,8 @@ class CONTENT_EXPORT BrowserMediaPlayerManager |
virtual ~BrowserMediaPlayerManager(); |
// WebContentsObserver overrides. |
+ virtual bool OnMessageReceived(const IPC::Message& message, |
+ RenderFrameHost* render_frame_host) OVERRIDE; |
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
// Fullscreen video playback controls. |
@@ -165,8 +167,8 @@ class CONTENT_EXPORT BrowserMediaPlayerManager |
media::MediaPlayerAndroid* player); |
// Adds a new MediaDrmBridge for the given |key_system|, |cdm_id|, and |
- // |frame_url|. |
- void AddDrmBridge(int cdm_id, |
+ // |frame_url|. Returns false when the MediaDrmBridge cannot be created/added. |
+ bool AddDrmBridge(int cdm_id, |
const std::string& key_system, |
const GURL& frame_url); |
@@ -213,12 +215,29 @@ class CONTENT_EXPORT BrowserMediaPlayerManager |
void OnRequestExternalSurface(int player_id, const gfx::RectF& rect); |
#endif // defined(VIDEO_HOLE) |
+ int GetCdmRoutingId(int cdm_id); |
+ |
// An array of managed players. |
ScopedVector<media::MediaPlayerAndroid> players_; |
// An array of managed media DRM bridges. |
ScopedVector<media::MediaDrmBridge> drm_bridges_; |
+ // The CDM routing ID of the last received CDM message. |
+ // TODO(xhwang): This seems hacky. Find a more general way to handle IPC |
+ // messages from RenderFrameObserver. |
+ int current_cdm_routing_id_; |
+ |
+ // RendererCdmManager implements RenderFrameObserver so the routing ID for |
+ // each CDM could be different. Use this variable to track the CDM ID to |
+ // routing ID mapping. |
+ // RendererMediaPlayerManager implements RenderViewObserver so that we can |
+ // always use routing_id() for all media player messages. |
+ // TODO(xhwang): Update RendererMediaPlayerManager to use RenderFrameObserver. |
+ // TODO(xhwang): Remove CDM ID from MediaDrmBridge, hide it and the CDM |
+ // routing ID in a helper class. |
+ std::map<int, int> cdm_to_routing_id_map_; |
+ |
// Map from DrmBridge cdm_id to MediaPlayerAndroid player_id to indicate that |
// the DrmBridge is set on the MediaPlayerAndroid object. |
typedef std::map<int, int> DrmBridgePlayerMap; |