Index: content/renderer/media/android/proxy_media_keys.h |
diff --git a/content/renderer/media/android/proxy_media_keys.h b/content/renderer/media/android/proxy_media_keys.h |
index afe1719b5739f99c7f3db2fb4bc2154f95893ad5..3b5921dfea760d4dd64ae35e5cc3e5fdd690fbc3 100644 |
--- a/content/renderer/media/android/proxy_media_keys.h |
+++ b/content/renderer/media/android/proxy_media_keys.h |
@@ -5,7 +5,11 @@ |
#ifndef CONTENT_RENDERER_MEDIA_ANDROID_PROXY_MEDIA_KEYS_H_ |
#define CONTENT_RENDERER_MEDIA_ANDROID_PROXY_MEDIA_KEYS_H_ |
+#include <map> |
+#include <string> |
+ |
#include "base/basictypes.h" |
+#include "base/containers/hash_tables.h" |
#include "media/base/media_keys.h" |
class GURL; |
@@ -24,7 +28,6 @@ class ProxyMediaKeys : public media::MediaKeys { |
const std::string& key_system, |
const GURL& security_origin, |
RendererMediaPlayerManager* manager, |
- const media::SessionCreatedCB& session_created_cb, |
const media::SessionMessageCB& session_message_cb, |
const media::SessionReadyCB& session_ready_cb, |
const media::SessionClosedCB& session_closed_cb, |
@@ -33,16 +36,23 @@ class ProxyMediaKeys : public media::MediaKeys { |
virtual ~ProxyMediaKeys(); |
// MediaKeys implementation. |
- virtual bool CreateSession(uint32 session_id, |
- const std::string& content_type, |
- const uint8* init_data, |
- int init_data_length) OVERRIDE; |
- virtual void LoadSession(uint32 session_id, |
- const std::string& web_session_id) OVERRIDE; |
- virtual void UpdateSession(uint32 session_id, |
- const uint8* response, |
- int response_length) OVERRIDE; |
- virtual void ReleaseSession(uint32 session_id) OVERRIDE; |
+ virtual void CreateSession( |
+ const std::string& init_data_type, |
+ const uint8* init_data, |
+ int init_data_length, |
+ SessionType session_type, |
+ scoped_ptr<media::NewSessionCdmPromise> promise) OVERRIDE; |
+ virtual void LoadSession( |
+ const std::string& web_session_id, |
+ scoped_ptr<media::NewSessionCdmPromise> promise) OVERRIDE; |
+ virtual void UpdateSession( |
+ const std::string& web_session_id, |
+ const uint8* response, |
+ int response_length, |
+ scoped_ptr<media::SimpleCdmPromise> promise) OVERRIDE; |
+ virtual void ReleaseSession( |
+ const std::string& web_session_id, |
+ scoped_ptr<media::SimpleCdmPromise> promise) OVERRIDE; |
// Callbacks. |
void OnSessionCreated(uint32 session_id, const std::string& web_session_id); |
@@ -58,8 +68,11 @@ class ProxyMediaKeys : public media::MediaKeys { |
int GetCdmId() const; |
private: |
+ typedef base::hash_map<std::string, uint32_t> SessionIdMap; |
+ typedef std::map<uint32_t, media::SimpleCdmPromise*> SimplePromiseMap; |
+ typedef std::map<uint32_t, media::NewSessionCdmPromise*> NewSessionPromiseMap; |
xhwang
2014/05/23 06:01:23
Add comments about these maps. For example, what's
xhwang
2014/05/23 06:01:23
Comment that the promise maps owns the promises. A
jrummell
2014/05/29 00:54:40
Done.
jrummell
2014/05/29 00:54:40
Done.
|
+ |
ProxyMediaKeys(RendererMediaPlayerManager* manager, |
- const media::SessionCreatedCB& session_created_cb, |
const media::SessionMessageCB& session_message_cb, |
const media::SessionReadyCB& session_ready_cb, |
const media::SessionClosedCB& session_closed_cb, |
@@ -68,18 +81,50 @@ class ProxyMediaKeys : public media::MediaKeys { |
void InitializeCdm(const std::string& key_system, |
const GURL& security_origin); |
+ // The Android-specific code that handles sessions uses integer session ids |
+ // (basically a reference id), but media::MediaKeys bases everything on |
+ // web_session_id (a string representing the actual session id as generated |
+ // by the CDM). These functions keep track of session_ids <-> web_session_ids |
+ // mappings. |
+ // TODO(jrummell): Remove this once the Android-specific code changes to |
+ // support string session ids. |
xhwang
2014/05/23 06:01:23
nit: s/string/string web/
jrummell
2014/05/29 00:54:40
Done.
|
+ uint32_t CreateSessionId(); |
+ void AssignWebSessionId(uint32_t session_id, |
+ const std::string& web_session_id); |
+ uint32_t LookupSessionId(const std::string& web_session_id); |
xhwang
2014/05/23 06:01:23
const method?
jrummell
2014/05/29 00:54:40
Done.
|
+ std::string LookupWebSessionId(uint32_t session_id); |
xhwang
2014/05/23 06:01:23
const method?
jrummell
2014/05/29 00:54:40
Done.
|
+ void DropWebSessionId(std::string web_session_id); |
+ |
+ // Helper function to keep track of promises. Adding takes ownership of the |
+ // promise, transferred back to caller on lookup. |
+ void RegisterSimplePromise(uint32_t session_id, |
+ scoped_ptr<media::SimpleCdmPromise> promise); |
+ scoped_ptr<media::SimpleCdmPromise> TakeSimplePromise(uint32_t session_id); |
+ void RegisterNewSessionPromise( |
+ uint32_t session_id, |
+ scoped_ptr<media::NewSessionCdmPromise> promise); |
+ scoped_ptr<media::NewSessionCdmPromise> TakeNewSessionPromise( |
+ uint32_t session_id); |
+ |
// CDM ID should be unique per renderer process. |
// TODO(xhwang): Use uint32 to prevent undefined overflow behavior. |
static int next_cdm_id_; |
RendererMediaPlayerManager* manager_; |
int cdm_id_; |
- media::SessionCreatedCB session_created_cb_; |
media::SessionMessageCB session_message_cb_; |
media::SessionReadyCB session_ready_cb_; |
media::SessionClosedCB session_closed_cb_; |
media::SessionErrorCB session_error_cb_; |
+ // Android-specific. See comment above CreateSessionId(). |
+ uint32_t next_session_id_; |
+ SessionIdMap web_session_to_session_id_map_; |
+ |
+ // Keep track of outstanding promises. These maps owns the promise object. |
+ SimplePromiseMap session_id_to_simple_promise_map_; |
+ NewSessionPromiseMap session_id_to_new_session_promise_map_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ProxyMediaKeys); |
}; |