summaryrefslogtreecommitdiffstats
path: root/webkit/renderer/media/crypto
diff options
context:
space:
mode:
authorxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-19 13:41:43 +0000
committerxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-19 13:41:43 +0000
commit1c637bcb13a000b67e570f31ef187b9072b854e4 (patch)
treec1191e6ea75fa041c9c568051242cd2a01c06dc3 /webkit/renderer/media/crypto
parent69ea87175787600f5e7cfbd8cda1895fafa3176e (diff)
downloadchromium_src-1c637bcb13a000b67e570f31ef187b9072b854e4.zip
chromium_src-1c637bcb13a000b67e570f31ef187b9072b854e4.tar.gz
chromium_src-1c637bcb13a000b67e570f31ef187b9072b854e4.tar.bz2
EME: ProxyDecryptor creates MediaKeys instead of Decryptor.
ProxyDecryptor will be the MediaKeys manager for EME v0.1b. So it'll create and manage MediaKeys instead of Decryptors. Also add GetDecryptor() method in MediaKey interface so that we can get a Decryptor through the MediaKeys interface. BUG=163552 Review URL: https://chromiumcodereview.appspot.com/17381007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207233 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/renderer/media/crypto')
-rw-r--r--webkit/renderer/media/crypto/ppapi_decryptor.cc2
-rw-r--r--webkit/renderer/media/crypto/ppapi_decryptor.h2
-rw-r--r--webkit/renderer/media/crypto/proxy_decryptor.cc42
-rw-r--r--webkit/renderer/media/crypto/proxy_decryptor.h11
4 files changed, 27 insertions, 30 deletions
diff --git a/webkit/renderer/media/crypto/ppapi_decryptor.cc b/webkit/renderer/media/crypto/ppapi_decryptor.cc
index 786eb19..71f4685f5 100644
--- a/webkit/renderer/media/crypto/ppapi_decryptor.cc
+++ b/webkit/renderer/media/crypto/ppapi_decryptor.cc
@@ -126,7 +126,7 @@ void PpapiDecryptor::CancelKeyRequest(const std::string& session_id) {
ReportFailureToCallPlugin(session_id);
}
-media::MediaKeys* PpapiDecryptor::GetMediaKeys() {
+media::Decryptor* PpapiDecryptor::GetDecryptor() {
return this;
}
diff --git a/webkit/renderer/media/crypto/ppapi_decryptor.h b/webkit/renderer/media/crypto/ppapi_decryptor.h
index 30c9698..6a360f477 100644
--- a/webkit/renderer/media/crypto/ppapi_decryptor.h
+++ b/webkit/renderer/media/crypto/ppapi_decryptor.h
@@ -51,9 +51,9 @@ class PpapiDecryptor : public media::MediaKeys, public media::Decryptor {
const uint8* init_data, int init_data_length,
const std::string& session_id) OVERRIDE;
virtual void CancelKeyRequest(const std::string& session_id) OVERRIDE;
+ virtual Decryptor* GetDecryptor() OVERRIDE;
// media::Decryptor implementation.
- virtual media::MediaKeys* GetMediaKeys() OVERRIDE;
virtual void RegisterNewKeyCB(StreamType stream_type,
const NewKeyCB& key_added_cb) OVERRIDE;
virtual void Decrypt(StreamType stream_type,
diff --git a/webkit/renderer/media/crypto/proxy_decryptor.cc b/webkit/renderer/media/crypto/proxy_decryptor.cc
index 0c1f6bf..2aa0804 100644
--- a/webkit/renderer/media/crypto/proxy_decryptor.cc
+++ b/webkit/renderer/media/crypto/proxy_decryptor.cc
@@ -70,7 +70,7 @@ ProxyDecryptor::~ProxyDecryptor() {
// Destroy the decryptor explicitly before destroying the plugin.
{
base::AutoLock auto_lock(lock_);
- decryptor_.reset();
+ media_keys_.reset();
}
}
@@ -92,8 +92,8 @@ void ProxyDecryptor::SetDecryptorReadyCB(
// Normal decryptor request.
DCHECK(decryptor_ready_cb_.is_null());
- if (decryptor_) {
- decryptor_ready_cb.Run(decryptor_.get());
+ if (media_keys_) {
+ decryptor_ready_cb.Run(media_keys_->GetDecryptor());
return;
}
decryptor_ready_cb_ = decryptor_ready_cb;
@@ -104,26 +104,22 @@ bool ProxyDecryptor::InitializeCDM(const std::string& key_system) {
base::AutoLock auto_lock(lock_);
- DCHECK(!decryptor_);
- decryptor_ = CreateDecryptor(key_system);
+ DCHECK(!media_keys_);
+ media_keys_ = CreateMediaKeys(key_system);
- return decryptor_ != NULL;
+ return media_keys_ != NULL;
}
-
bool ProxyDecryptor::GenerateKeyRequest(const std::string& type,
const uint8* init_data,
int init_data_length) {
- DCHECK(decryptor_);
-
- if (!decryptor_->GetMediaKeys()->GenerateKeyRequest(
- type, init_data, init_data_length)) {
- decryptor_.reset();
+ if (!media_keys_->GenerateKeyRequest(type, init_data, init_data_length)) {
+ media_keys_.reset();
return false;
}
if (!decryptor_ready_cb_.is_null())
- base::ResetAndReturn(&decryptor_ready_cb_).Run(decryptor_.get());
+ base::ResetAndReturn(&decryptor_ready_cb_).Run(media_keys_->GetDecryptor());
return true;
}
@@ -136,19 +132,18 @@ void ProxyDecryptor::AddKey(const uint8* key,
DVLOG(1) << "AddKey()";
// WebMediaPlayerImpl ensures GenerateKeyRequest() has been called.
- decryptor_->GetMediaKeys()->AddKey(
- key, key_length, init_data, init_data_length, session_id);
+ media_keys_->AddKey(key, key_length, init_data, init_data_length, session_id);
}
void ProxyDecryptor::CancelKeyRequest(const std::string& session_id) {
DVLOG(1) << "CancelKeyRequest()";
// WebMediaPlayerImpl ensures GenerateKeyRequest() has been called.
- decryptor_->GetMediaKeys()->CancelKeyRequest(session_id);
+ media_keys_->CancelKeyRequest(session_id);
}
#if defined(ENABLE_PEPPER_CDMS)
-scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor(
+scoped_ptr<media::MediaKeys> ProxyDecryptor::CreatePpapiDecryptor(
const std::string& key_system) {
DCHECK(web_media_player_client_);
DCHECK(web_frame_);
@@ -159,7 +154,7 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor(
CreateHelperPlugin(plugin_type, web_media_player_client_, web_frame_);
if (!plugin_instance.get()) {
DVLOG(1) << "ProxyDecryptor: plugin instance creation failed.";
- return scoped_ptr<media::Decryptor>();
+ return scoped_ptr<media::MediaKeys>();
}
scoped_ptr<webkit_media::PpapiDecryptor> decryptor = PpapiDecryptor::Create(
@@ -176,18 +171,19 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor(
DestroyHelperPlugin();
// Else the new object will call destroy_plugin_cb to destroy Helper Plugin.
- return scoped_ptr<media::Decryptor>(decryptor.Pass());
+ return scoped_ptr<media::MediaKeys>(decryptor.Pass());
}
#endif // defined(ENABLE_PEPPER_CDMS)
-scoped_ptr<media::Decryptor> ProxyDecryptor::CreateDecryptor(
+scoped_ptr<media::MediaKeys> ProxyDecryptor::CreateMediaKeys(
const std::string& key_system) {
- if (CanUseAesDecryptor(key_system))
- return scoped_ptr<media::Decryptor>(new media::AesDecryptor(
+ if (CanUseAesDecryptor(key_system)) {
+ return scoped_ptr<media::MediaKeys>(new media::AesDecryptor(
base::Bind(&ProxyDecryptor::KeyAdded, weak_ptr_factory_.GetWeakPtr()),
base::Bind(&ProxyDecryptor::KeyError, weak_ptr_factory_.GetWeakPtr()),
base::Bind(&ProxyDecryptor::KeyMessage, weak_ptr_factory_.GetWeakPtr()),
base::Bind(&ProxyDecryptor::NeedKey, weak_ptr_factory_.GetWeakPtr())));
+ }
#if defined(ENABLE_PEPPER_CDMS)
// We only support AesDecryptor and PpapiDecryptor. So if we cannot
@@ -195,7 +191,7 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreateDecryptor(
// |key_system|.
return CreatePpapiDecryptor(key_system);
#else
- return scoped_ptr<media::Decryptor>();
+ return scoped_ptr<media::MediaKeys>();
#endif // defined(ENABLE_PEPPER_CDMS)
}
diff --git a/webkit/renderer/media/crypto/proxy_decryptor.h b/webkit/renderer/media/crypto/proxy_decryptor.h
index 54efc8a..0bffe56 100644
--- a/webkit/renderer/media/crypto/proxy_decryptor.h
+++ b/webkit/renderer/media/crypto/proxy_decryptor.h
@@ -55,10 +55,11 @@ class ProxyDecryptor : public media::MediaKeys {
virtual void CancelKeyRequest(const std::string& session_id) OVERRIDE;
private:
- // Helper functions to create decryptors to handle the given |key_system|.
- scoped_ptr<media::Decryptor> CreateDecryptor(const std::string& key_system);
+ // Helper functions to create MediaKeys to handle the given |key_system|.
+ scoped_ptr<media::MediaKeys> CreateMediaKeys(const std::string& key_system);
+
#if defined(ENABLE_PEPPER_CDMS)
- scoped_ptr<media::Decryptor> CreatePpapiDecryptor(
+ scoped_ptr<media::MediaKeys> CreatePpapiDecryptor(
const std::string& key_system);
// Callback for cleaning up a Pepper CDM.
void DestroyHelperPlugin();
@@ -92,9 +93,9 @@ class ProxyDecryptor : public media::MediaKeys {
media::DecryptorReadyCB decryptor_ready_cb_;
- // The real decryptor that does decryption for the ProxyDecryptor.
+ // The real MediaKeys that manages key operations for the ProxyDecryptor.
// This pointer is protected by the |lock_|.
- scoped_ptr<media::Decryptor> decryptor_;
+ scoped_ptr<media::MediaKeys> media_keys_;
base::WeakPtrFactory<ProxyDecryptor> weak_ptr_factory_;