| Index: webkit/media/crypto/proxy_decryptor.cc
|
| diff --git a/webkit/media/crypto/proxy_decryptor.cc b/webkit/media/crypto/proxy_decryptor.cc
|
| index f6f9685dcdc46097d1409c663973616ffb68e924..8a0f2cb1c7bf6099d10cd250122b7125b45bd146 100644
|
| --- a/webkit/media/crypto/proxy_decryptor.cc
|
| +++ b/webkit/media/crypto/proxy_decryptor.cc
|
| @@ -4,9 +4,9 @@
|
|
|
| #include "webkit/media/crypto/proxy_decryptor.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/callback_helpers.h"
|
| #include "base/logging.h"
|
| -#include "media/base/decryptor_client.h"
|
| #include "media/crypto/aes_decryptor.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
|
| @@ -42,12 +42,19 @@ static scoped_refptr<webkit::ppapi::PluginInstance> CreatePluginInstance(
|
| }
|
|
|
| ProxyDecryptor::ProxyDecryptor(
|
| - media::DecryptorClient* decryptor_client,
|
| WebKit::WebMediaPlayerClient* web_media_player_client,
|
| - WebKit::WebFrame* web_frame)
|
| - : client_(decryptor_client),
|
| - web_media_player_client_(web_media_player_client),
|
| - web_frame_(web_frame) {
|
| + WebKit::WebFrame* web_frame,
|
| + const media::KeyAddedCB& key_added_cb,
|
| + const media::KeyErrorCB& key_error_cb,
|
| + const media::KeyMessageCB& key_message_cb,
|
| + const media::NeedKeyCB& need_key_cb)
|
| + : web_media_player_client_(web_media_player_client),
|
| + web_frame_(web_frame),
|
| + key_added_cb_(key_added_cb),
|
| + key_error_cb_(key_error_cb),
|
| + key_message_cb_(key_message_cb),
|
| + need_key_cb_(need_key_cb),
|
| + ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
|
| }
|
|
|
| ProxyDecryptor::~ProxyDecryptor() {
|
| @@ -91,7 +98,7 @@ bool ProxyDecryptor::GenerateKeyRequest(const std::string& key_system,
|
| if (!decryptor_) {
|
| decryptor_ = CreateDecryptor(key_system);
|
| if (!decryptor_) {
|
| - client_->KeyError(key_system, "", media::Decryptor::kUnknownError, 0);
|
| + key_error_cb_.Run(key_system, "", media::Decryptor::kUnknownError, 0);
|
| return false;
|
| }
|
| }
|
| @@ -131,7 +138,6 @@ void ProxyDecryptor::CancelKeyRequest(const std::string& key_system,
|
|
|
| scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor(
|
| const std::string& key_system) {
|
| - DCHECK(client_);
|
| DCHECK(web_media_player_client_);
|
| DCHECK(web_frame_);
|
|
|
| @@ -144,16 +150,22 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor(
|
| return scoped_ptr<media::Decryptor>();
|
| }
|
|
|
| - return scoped_ptr<media::Decryptor>(new PpapiDecryptor(client_,
|
| - plugin_instance));
|
| + return scoped_ptr<media::Decryptor>(new PpapiDecryptor(
|
| + plugin_instance,
|
| + 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())));
|
| }
|
|
|
| scoped_ptr<media::Decryptor> ProxyDecryptor::CreateDecryptor(
|
| const std::string& key_system) {
|
| - DCHECK(client_);
|
| -
|
| if (CanUseAesDecryptor(key_system))
|
| - return scoped_ptr<media::Decryptor>(new media::AesDecryptor(client_));
|
| + return scoped_ptr<media::Decryptor>(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())));
|
|
|
| // We only support AesDecryptor and PpapiDecryptor. So if we cannot
|
| // use the AesDecryptor, then we'll try to create a PpapiDecryptor for given
|
| @@ -161,4 +173,32 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreateDecryptor(
|
| return CreatePpapiDecryptor(key_system);
|
| }
|
|
|
| +void ProxyDecryptor::KeyAdded(const std::string& key_system,
|
| + const std::string& session_id) {
|
| + key_added_cb_.Run(key_system, session_id);
|
| +}
|
| +
|
| +void ProxyDecryptor::KeyError(const std::string& key_system,
|
| + const std::string& session_id,
|
| + media::Decryptor::KeyError error_code,
|
| + int system_code) {
|
| + key_error_cb_.Run(key_system, session_id, error_code, system_code);
|
| +}
|
| +
|
| +void ProxyDecryptor::KeyMessage(const std::string& key_system,
|
| + const std::string& session_id,
|
| + const std::string& message,
|
| + const std::string& default_url) {
|
| + key_message_cb_.Run(key_system, session_id, message, default_url);
|
| +}
|
| +
|
| +void ProxyDecryptor::NeedKey(const std::string& key_system,
|
| + const std::string& session_id,
|
| + const std::string& type,
|
| + scoped_array<uint8> init_data,
|
| + int init_data_size) {
|
| + need_key_cb_.Run(key_system, session_id, type,
|
| + init_data.Pass(), init_data_size);
|
| +}
|
| +
|
| } // namespace webkit_media
|
|
|