diff options
author | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-07 20:28:38 +0000 |
---|---|---|
committer | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-07 20:28:38 +0000 |
commit | e5af9bcbb29f9207de974e278e614ebc0609ea08 (patch) | |
tree | 67bc2c829b591fa6a88fb67bfc9759821e8f4376 /content/renderer/media | |
parent | 93b815b4a2187022e6b3b636f93dcc803df71cdf (diff) | |
download | chromium_src-e5af9bcbb29f9207de974e278e614ebc0609ea08.zip chromium_src-e5af9bcbb29f9207de974e278e614ebc0609ea08.tar.gz chromium_src-e5af9bcbb29f9207de974e278e614ebc0609ea08.tar.bz2 |
Add ProxyMediaKeys::Create().
This makes sure ProxyMediaKeys::InitializeCdm() is always called after the construction.
Review URL: https://codereview.chromium.org/224963009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262191 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/media')
3 files changed, 66 insertions, 33 deletions
diff --git a/content/renderer/media/android/proxy_media_keys.cc b/content/renderer/media/android/proxy_media_keys.cc index 8bbce92..68175c8 100644 --- a/content/renderer/media/android/proxy_media_keys.cc +++ b/content/renderer/media/android/proxy_media_keys.cc @@ -16,32 +16,31 @@ namespace content { int ProxyMediaKeys::next_cdm_id_ = RendererMediaPlayerManager::kInvalidCdmId + 1; -ProxyMediaKeys::ProxyMediaKeys( +scoped_ptr<ProxyMediaKeys> ProxyMediaKeys::Create( + 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, - const media::SessionErrorCB& session_error_cb) - : manager_(manager), - cdm_id_(next_cdm_id_++), - session_created_cb_(session_created_cb), - session_message_cb_(session_message_cb), - session_ready_cb_(session_ready_cb), - session_closed_cb_(session_closed_cb), - session_error_cb_(session_error_cb) { - DCHECK(manager_); + const media::SessionErrorCB& session_error_cb) { + DCHECK(manager); + scoped_ptr<ProxyMediaKeys> proxy_media_keys( + new ProxyMediaKeys(manager, + session_created_cb, + session_message_cb, + session_ready_cb, + session_closed_cb, + session_error_cb)); + proxy_media_keys->InitializeCdm(key_system, security_origin); + return proxy_media_keys.Pass(); } ProxyMediaKeys::~ProxyMediaKeys() { manager_->DestroyCdm(cdm_id_); } -void ProxyMediaKeys::InitializeCdm(const std::string& key_system, - const GURL& security_origin) { - manager_->InitializeCdm(cdm_id_, this, key_system, security_origin); -} - bool ProxyMediaKeys::CreateSession(uint32 session_id, const std::string& content_type, const uint8* init_data, @@ -117,4 +116,25 @@ int ProxyMediaKeys::GetCdmId() const { return cdm_id_; } +ProxyMediaKeys::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, + const media::SessionErrorCB& session_error_cb) + : manager_(manager), + cdm_id_(next_cdm_id_++), + session_created_cb_(session_created_cb), + session_message_cb_(session_message_cb), + session_ready_cb_(session_ready_cb), + session_closed_cb_(session_closed_cb), + session_error_cb_(session_error_cb) { +} + +void ProxyMediaKeys::InitializeCdm(const std::string& key_system, + const GURL& security_origin) { + manager_->InitializeCdm(cdm_id_, this, key_system, security_origin); +} + } // namespace content diff --git a/content/renderer/media/android/proxy_media_keys.h b/content/renderer/media/android/proxy_media_keys.h index 5752bf2..afe1719 100644 --- a/content/renderer/media/android/proxy_media_keys.h +++ b/content/renderer/media/android/proxy_media_keys.h @@ -20,16 +20,17 @@ class RendererMediaPlayerManager; // ProxyDecryptor directly. Then we can remove this class! class ProxyMediaKeys : public media::MediaKeys { public: - ProxyMediaKeys(RendererMediaPlayerManager* proxy, - const media::SessionCreatedCB& session_created_cb, - const media::SessionMessageCB& session_message_cb, - const media::SessionReadyCB& session_ready_cb, - const media::SessionClosedCB& session_closed_cb, - const media::SessionErrorCB& session_error_cb); - virtual ~ProxyMediaKeys(); + static scoped_ptr<ProxyMediaKeys> Create( + 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, + const media::SessionErrorCB& session_error_cb); - void InitializeCdm(const std::string& key_system, - const GURL& security_origin); + virtual ~ProxyMediaKeys(); // MediaKeys implementation. virtual bool CreateSession(uint32 session_id, @@ -57,6 +58,16 @@ class ProxyMediaKeys : public media::MediaKeys { int GetCdmId() const; private: + 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, + const media::SessionErrorCB& session_error_cb); + + void InitializeCdm(const std::string& key_system, + const GURL& security_origin); + // CDM ID should be unique per renderer process. // TODO(xhwang): Use uint32 to prevent undefined overflow behavior. static int next_cdm_id_; diff --git a/content/renderer/media/crypto/content_decryption_module_factory.cc b/content/renderer/media/crypto/content_decryption_module_factory.cc index a7f4cc1..4792e49 100644 --- a/content/renderer/media/crypto/content_decryption_module_factory.cc +++ b/content/renderer/media/crypto/content_decryption_module_factory.cc @@ -59,15 +59,17 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create( session_closed_cb, session_error_cb)); #elif defined(OS_ANDROID) - scoped_ptr<ProxyMediaKeys> proxy_media_keys( - new ProxyMediaKeys(manager, - session_created_cb, - session_message_cb, - session_ready_cb, - session_closed_cb, - session_error_cb)); - proxy_media_keys->InitializeCdm(key_system, security_origin); - *cdm_id = proxy_media_keys->GetCdmId(); + scoped_ptr<ProxyMediaKeys> proxy_media_keys = + ProxyMediaKeys::Create(key_system, + security_origin, + manager, + session_created_cb, + session_message_cb, + session_ready_cb, + session_closed_cb, + session_error_cb); + if (proxy_media_keys) + *cdm_id = proxy_media_keys->GetCdmId(); return proxy_media_keys.PassAs<media::MediaKeys>(); #else return scoped_ptr<media::MediaKeys>(); |