summaryrefslogtreecommitdiffstats
path: root/content/renderer/media
diff options
context:
space:
mode:
authorxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-07 20:28:38 +0000
committerxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-07 20:28:38 +0000
commite5af9bcbb29f9207de974e278e614ebc0609ea08 (patch)
tree67bc2c829b591fa6a88fb67bfc9759821e8f4376 /content/renderer/media
parent93b815b4a2187022e6b3b636f93dcc803df71cdf (diff)
downloadchromium_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')
-rw-r--r--content/renderer/media/android/proxy_media_keys.cc50
-rw-r--r--content/renderer/media/android/proxy_media_keys.h29
-rw-r--r--content/renderer/media/crypto/content_decryption_module_factory.cc20
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>();