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

Unified Diff: media/cdm/proxy_decryptor.h

Issue 1070853004: media: CdmFactory creates CDM (MediaKeys) asynchronously. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase only Created 5 years, 8 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
Index: media/cdm/proxy_decryptor.h
diff --git a/media/cdm/proxy_decryptor.h b/media/cdm/proxy_decryptor.h
index ff611ad3197a60da3268b51bfdbfbea698b1164c..ee20f3518adc96941f04c8103a5ac6f0981330a4 100644
--- a/media/cdm/proxy_decryptor.h
+++ b/media/cdm/proxy_decryptor.h
@@ -12,6 +12,7 @@
#include "base/containers/hash_tables.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
+#include "media/base/cdm_context.h"
#include "media/base/decryptor.h"
#include "media/base/eme_constants.h"
#include "media/base/media_export.h"
@@ -32,6 +33,9 @@ class MediaPermission;
// TODO(xhwang): The ProxyDecryptor is not a Decryptor. Find a better name!
class MEDIA_EXPORT ProxyDecryptor {
public:
+ typedef base::Callback<void(CdmContext*, const CdmAttachedCB&)>
+ SetCdmContextCB;
+
// These are similar to the callbacks in media_keys.h, but pass back the
// session ID rather than the internal session ID.
typedef base::Callback<void(const std::string& session_id)> KeyAddedCB;
@@ -48,16 +52,16 @@ class MEDIA_EXPORT ProxyDecryptor {
const KeyMessageCB& key_message_cb);
virtual ~ProxyDecryptor();
- // Returns the CdmContext associated with this object.
- CdmContext* GetCdmContext();
-
- // Only call this once.
- bool InitializeCDM(CdmFactory* cdm_factory,
- const std::string& key_system,
- const GURL& security_origin);
+ // Creates the CDM and fires |cdm_created_cb|. This method should only be
+ // called once. If CDM creation failed, all following GenerateKeyRequest,
+ // AddKey and CancelKeyRequest calls will result in a KeyError.
+ void CreateCdm(CdmFactory* cdm_factory,
+ const std::string& key_system,
+ const GURL& security_origin,
+ const SetCdmContextCB& set_cdm_context_cb);
- // May only be called after InitializeCDM() succeeds.
- bool GenerateKeyRequest(EmeInitDataType init_data_type,
+ // May only be called after CreateCDM().
+ void GenerateKeyRequest(EmeInitDataType init_data_type,
const uint8* init_data,
int init_data_length);
void AddKey(const uint8* key, int key_length,
@@ -66,11 +70,14 @@ class MEDIA_EXPORT ProxyDecryptor {
void CancelKeyRequest(const std::string& session_id);
private:
- // Helper function to create MediaKeys to handle the given |key_system|.
- scoped_ptr<MediaKeys> CreateMediaKeys(
- CdmFactory* cdm_factory,
- const std::string& key_system,
- const GURL& security_origin);
+ // Callback for CreateCdm().
+ void OnCdmCreated(const std::string& key_system,
+ const GURL& security_origin,
+ const SetCdmContextCB& set_cdm_context_cb,
+ scoped_ptr<MediaKeys> cdm);
+
+ void GenerateKeyRequestInternal(EmeInitDataType init_data_type,
+ const std::vector<uint8>& init_data);
// Callbacks for firing session events.
void OnSessionMessage(const std::string& session_id,
@@ -106,6 +113,17 @@ class MEDIA_EXPORT ProxyDecryptor {
void SetSessionId(SessionCreationType session_type,
const std::string& session_id);
+ struct PendingGenerateKeyRequestData {
+ PendingGenerateKeyRequestData(EmeInitDataType init_data_type,
+ const std::vector<uint8>& init_data);
+ ~PendingGenerateKeyRequestData();
+
+ EmeInitDataType init_data_type;
+ std::vector<uint8> init_data;
+ };
+
+ bool is_creating_cdm_;
+
// The real MediaKeys that manages key operations for the ProxyDecryptor.
scoped_ptr<MediaKeys> media_keys_;
@@ -124,6 +142,8 @@ class MEDIA_EXPORT ProxyDecryptor {
bool is_clear_key_;
+ std::vector<PendingGenerateKeyRequestData> pending_requests_;
+
// NOTE: Weak pointers must be invalidated before all other member variables.
base::WeakPtrFactory<ProxyDecryptor> weak_ptr_factory_;

Powered by Google App Engine
This is Rietveld 408576698