| 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..fa5c19e6921bc5e278a99f9a2ddabbccbcf9c2b0 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::CdmPromise<std::string> > promise) OVERRIDE;
|
| + virtual void LoadSession(
|
| + const std::string& web_session_id,
|
| + scoped_ptr<media::CdmPromise<std::string> > promise) OVERRIDE;
|
| + virtual void UpdateSession(
|
| + const std::string& web_session_id,
|
| + const uint8* response,
|
| + int response_length,
|
| + scoped_ptr<media::CdmPromise<void> > promise) OVERRIDE;
|
| + virtual void ReleaseSession(
|
| + const std::string& web_session_id,
|
| + scoped_ptr<media::CdmPromise<void> > 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> SessionMap;
|
| + typedef std::map<uint32_t, media::CdmPromise<void>*> VoidPromiseMap;
|
| + typedef std::map<uint32_t, media::CdmPromise<std::string>*> SessionPromiseMap;
|
| +
|
| 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,48 @@ class ProxyMediaKeys : public media::MediaKeys {
|
| void InitializeCdm(const std::string& key_system,
|
| const GURL& security_origin);
|
|
|
| + // The Android API 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 API changes to support
|
| + // string session ids.
|
| + uint32_t CreateSessionId();
|
| + void AssignWebSessionId(uint32_t session_id,
|
| + const std::string& web_session_id);
|
| + uint32_t LookupSessionId(const std::string& web_session_id);
|
| + std::string LookupWebSessionId(uint32_t session_id);
|
| + 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 RegisterVoidPromise(uint32_t session_id,
|
| + scoped_ptr<media::CdmPromise<void> > promise);
|
| + scoped_ptr<media::CdmPromise<void> > RetrieveVoidPromise(uint32_t session_id);
|
| + void RegisterSessionPromise(
|
| + uint32_t session_id,
|
| + scoped_ptr<media::CdmPromise<std::string> > promise);
|
| + scoped_ptr<media::CdmPromise<std::string> > RetrieveSessionPromise(
|
| + 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_;
|
|
|
| + uint32_t next_session_id_;
|
| + SessionMap web_session_to_session_id_map_;
|
| +
|
| + // Keep track of outstanding promises. These maps owns the promise object.
|
| + VoidPromiseMap session_id_to_promise_map_;
|
| + SessionPromiseMap session_id_to_new_session_promise_map_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ProxyMediaKeys);
|
| };
|
|
|
|
|