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

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

Issue 10822026: Implement "Key Presence" step in "Encrypted Block Encounted" algorithm in EME. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 4 months 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
« no previous file with comments | « webkit/media/crypto/ppapi_decryptor.cc ('k') | webkit/media/crypto/proxy_decryptor.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/media/crypto/proxy_decryptor.h
diff --git a/webkit/media/crypto/proxy_decryptor.h b/webkit/media/crypto/proxy_decryptor.h
index 61360ebaceb5f33235cdef782ae9d719ba2bf6a7..a4638af01967c2e0d1c5a7255e12b1c56d46147b 100644
--- a/webkit/media/crypto/proxy_decryptor.h
+++ b/webkit/media/crypto/proxy_decryptor.h
@@ -6,11 +6,16 @@
#define WEBKIT_MEDIA_CRYPTO_PROXY_DECRYPTOR_H_
#include <string>
+#include <vector>
#include "base/memory/scoped_ptr.h"
#include "base/synchronization/lock.h"
#include "media/base/decryptor.h"
+namespace base {
+class MessageLoopProxy;
+}
+
namespace media {
class DecryptorClient;
}
@@ -33,6 +38,10 @@ class ProxyDecryptor : public media::Decryptor {
WebKit::WebFrame* web_frame);
virtual ~ProxyDecryptor();
+ void set_decryptor_for_testing(scoped_ptr<media::Decryptor> decryptor) {
+ decryptor_ = decryptor.Pass();
+ }
+
// media::Decryptor implementation.
virtual void GenerateKeyRequest(const std::string& key_system,
const uint8* init_data,
@@ -47,26 +56,40 @@ class ProxyDecryptor : public media::Decryptor {
const std::string& session_id) OVERRIDE;
virtual void Decrypt(const scoped_refptr<media::DecoderBuffer>& encrypted,
const DecryptCB& decrypt_cb) OVERRIDE;
+ virtual void Stop() OVERRIDE;
private:
scoped_ptr<media::Decryptor> CreatePpapiDecryptor(
const std::string& key_system);
scoped_ptr<media::Decryptor> CreateDecryptor(const std::string& key_system);
+ // Helper function that makes sure decryptor_->Decrypt() runs on the
+ // |message_loop|.
+ void DecryptOnMessageLoop(
+ const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy,
+ const scoped_refptr<media::DecoderBuffer>& encrypted,
+ const media::Decryptor::DecryptCB& decrypt_cb);
+
+ // Callback used to pass into decryptor_->Decrypt().
+ void OnBufferDecrypted(
+ const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy,
+ const scoped_refptr<media::DecoderBuffer>& encrypted,
+ const media::Decryptor::DecryptCB& decrypt_cb,
+ media::Decryptor::DecryptStatus status,
+ const scoped_refptr<media::DecoderBuffer>& decrypted);
+
media::DecryptorClient* client_;
// Needed to create the PpapiDecryptor.
WebKit::WebMediaPlayerClient* web_media_player_client_;
WebKit::WebFrame* web_frame_;
- // Protects the |decryptor_|. The Decryptor interface specifies that the
- // Decrypt() function will be called on the decoder thread and all other
- // methods on the renderer thread. The |decryptor_| itself is thread safe
- // when this rule is obeyed. This lock is solely to prevent the race condition
- // between setting the |decryptor_| in GenerateKeyRequest() and using it in
- // Decrypt().
+ // Protects the |decryptor_| and |pending_decrypt_closures_|. Note that
+ // |decryptor_| itself should be thread safe as per the Decryptor interface.
base::Lock lock_;
- scoped_ptr<media::Decryptor> decryptor_; // Protected by the |lock_|.
+ scoped_ptr<media::Decryptor> decryptor_;
+ std::vector<base::Closure> pending_decrypt_closures_;
+ bool stopped_;
DISALLOW_COPY_AND_ASSIGN(ProxyDecryptor);
};
« no previous file with comments | « webkit/media/crypto/ppapi_decryptor.cc ('k') | webkit/media/crypto/proxy_decryptor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698