Index: webkit/media/crypto/proxy_decryptor.cc |
diff --git a/webkit/media/crypto/proxy_decryptor.cc b/webkit/media/crypto/proxy_decryptor.cc |
index 6ef4a5efee5a048ace670041f0378d9cb856ef6d..1d027093d7950b405b2e1e520b04a526e163bfb3 100644 |
--- a/webkit/media/crypto/proxy_decryptor.cc |
+++ b/webkit/media/crypto/proxy_decryptor.cc |
@@ -63,11 +63,17 @@ static void FireNeedKey(media::DecryptorClient* client, |
ProxyDecryptor::ProxyDecryptor( |
const scoped_refptr<base::MessageLoopProxy>& message_loop, |
- media::DecryptorClient* decryptor_client, |
+ const KeyAddedCB& key_added_cb, |
+ const KeyErrorCB& key_error_cb, |
+ const KeyMessageCB& key_message_cb, |
+ const NeedKeyCB& need_key_cb, |
WebKit::WebMediaPlayerClient* web_media_player_client, |
WebKit::WebFrame* web_frame) |
: decryption_message_loop_(message_loop), |
- client_(decryptor_client), |
+ key_added_cb_(key_added_cb), |
+ key_error_cb_(key_error_cb), |
+ key_message_cb_(key_message_cb), |
+ need_key_cb_(need_key_cb), |
web_media_player_client_(web_media_player_client), |
web_frame_(web_frame), |
is_waiting_for_decryptor_(false), |
@@ -112,7 +118,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); |
+ KeyError(key_system, "", media::Decryptor::kUnknownError, 0); |
return false; |
} |
} |
@@ -179,7 +185,7 @@ void ProxyDecryptor::Decrypt( |
// TODO(xhwang): The same NeedKey may be fired here and multiple times in |
// OnBufferDecrypted(). While the spec says only one NeedKey should be |
// fired. Leave them as is since the spec about this may change. |
- FireNeedKey(client_, encrypted); |
+ FireNeedKey(this, encrypted); |
return; |
} |
@@ -242,9 +248,36 @@ void ProxyDecryptor::DeinitializeDecoder(StreamType stream_type) { |
NOTREACHED() << "ProxyDecryptor does not support audio/video decoding"; |
} |
+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, |
+ 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, |
+ scoped_array<uint8> message, |
+ int message_length, |
+ const std::string& default_url) { |
+ key_message_cb_.Run( |
+ key_system, session_id, message.Pass(), message_length, default_url); |
+} |
+ |
+void ProxyDecryptor::NeedKey(const std::string& key_system, |
+ const std::string& session_id, |
+ scoped_array<uint8> init_data, |
+ int init_data_length) { |
+ need_key_cb_.Run(key_system, session_id, init_data.Pass(), init_data_length); |
+} |
Ami GONE FROM CHROMIUM
2012/10/23 06:52:22
This collection of functions is a pretty strong sm
xhwang
2012/10/23 07:32:13
If we remove DecryptorClient and use callbacks exc
Ami GONE FROM CHROMIUM
2012/10/23 07:42:54
I /think/ so...
But it's late and I'm not as famil
|
+ |
scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor( |
const std::string& key_system) { |
- DCHECK(client_); |
DCHECK(web_media_player_client_); |
DCHECK(web_frame_); |
@@ -257,16 +290,14 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor( |
return scoped_ptr<media::Decryptor>(); |
} |
- return scoped_ptr<media::Decryptor>(new PpapiDecryptor(client_, |
+ return scoped_ptr<media::Decryptor>(new PpapiDecryptor(this, |
plugin_instance)); |
} |
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(this)); |
// We only support AesDecryptor and PpapiDecryptor. So if we cannot |
// use the AesDecryptor, then we'll try to create a PpapiDecryptor for given |
@@ -355,7 +386,7 @@ void ProxyDecryptor::OnBufferDecrypted( |
// TODO(xhwang): The same NeedKey may be fired multiple times here and also |
// in Decrypt(). While the spec says only one NeedKey should be fired. Leave |
// them as is since the spec about this may change. |
- FireNeedKey(client_, pending_buffer_to_decrypt_); |
+ FireNeedKey(this, pending_buffer_to_decrypt_); |
} |
} // namespace webkit_media |