Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: webkit/media/crypto/proxy_decryptor.cc

Issue 11226019: Encrypted Media: Replace DecryptorClient with key event callbacks. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: add spec link Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698