OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_RENDERER_MEDIA_CDM_SESSION_ADAPTER_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_CDM_SESSION_ADAPTER_H_ |
6 #define CONTENT_RENDERER_MEDIA_CDM_SESSION_ADAPTER_H_ | 6 #define CONTENT_RENDERER_MEDIA_CDM_SESSION_ADAPTER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 29 matching lines...) Expand all Loading... |
40 // Returns true on success. | 40 // Returns true on success. |
41 bool Initialize( | 41 bool Initialize( |
42 #if defined(ENABLE_PEPPER_CDMS) | 42 #if defined(ENABLE_PEPPER_CDMS) |
43 const CreatePepperCdmCB& create_pepper_cdm_cb, | 43 const CreatePepperCdmCB& create_pepper_cdm_cb, |
44 #elif defined(ENABLE_BROWSER_CDMS) | 44 #elif defined(ENABLE_BROWSER_CDMS) |
45 RendererCdmManager* manager, | 45 RendererCdmManager* manager, |
46 #endif | 46 #endif |
47 const std::string& key_system, | 47 const std::string& key_system, |
48 const GURL& security_origin); | 48 const GURL& security_origin); |
49 | 49 |
| 50 // Provides a server certificate to be used to encrypt messages to the |
| 51 // license server. |
| 52 void SetServerCertificate(const uint8* server_certificate, |
| 53 int server_certificate_length, |
| 54 scoped_ptr<media::SimpleCdmPromise> promise); |
| 55 |
50 // Creates a new session and adds it to the internal map. The caller owns the | 56 // Creates a new session and adds it to the internal map. The caller owns the |
51 // created session. RemoveSession() must be called when destroying it, if | 57 // created session. RemoveSession() must be called when destroying it, if |
52 // RegisterSession() was called. | 58 // RegisterSession() was called. |
53 WebContentDecryptionModuleSessionImpl* CreateSession(); | 59 WebContentDecryptionModuleSessionImpl* CreateSession(); |
54 | 60 |
55 // Adds a session to the internal map. Called once the session is successfully | 61 // Adds a session to the internal map. Called once the session is successfully |
56 // initialized. Returns true if the session was registered, false if there is | 62 // initialized. Returns true if the session was registered, false if there is |
57 // already an existing session with the same |web_session_id|. | 63 // already an existing session with the same |web_session_id|. |
58 bool RegisterSession( | 64 bool RegisterSession( |
59 const std::string& web_session_id, | 65 const std::string& web_session_id, |
60 base::WeakPtr<WebContentDecryptionModuleSessionImpl> session); | 66 base::WeakPtr<WebContentDecryptionModuleSessionImpl> session); |
61 | 67 |
62 // Removes a session from the internal map. | 68 // Removes a session from the internal map. |
63 void RemoveSession(const std::string& web_session_id); | 69 void UnregisterSession(const std::string& web_session_id); |
64 | 70 |
65 // Initializes a session with the |init_data_type|, |init_data| and | 71 // Initializes a session with the |init_data_type|, |init_data| and |
66 // |session_type| provided. Takes ownership of |promise|. | 72 // |session_type| provided. |
67 void InitializeNewSession(const std::string& init_data_type, | 73 void InitializeNewSession(const std::string& init_data_type, |
68 const uint8* init_data, | 74 const uint8* init_data, |
69 int init_data_length, | 75 int init_data_length, |
70 media::MediaKeys::SessionType session_type, | 76 media::MediaKeys::SessionType session_type, |
71 scoped_ptr<media::NewSessionCdmPromise> promise); | 77 scoped_ptr<media::NewSessionCdmPromise> promise); |
72 | 78 |
73 // Updates the session specified by |web_session_id| with |response|. | 79 // Updates the session specified by |web_session_id| with |response|. |
74 // Takes ownership of |promise|. | |
75 void UpdateSession(const std::string& web_session_id, | 80 void UpdateSession(const std::string& web_session_id, |
76 const uint8* response, | 81 const uint8* response, |
77 int response_length, | 82 int response_length, |
78 scoped_ptr<media::SimpleCdmPromise> promise); | 83 scoped_ptr<media::SimpleCdmPromise> promise); |
79 | 84 |
80 // Releases the session specified by |web_session_id|. | 85 // Closes the session specified by |web_session_id|. |
81 // Takes ownership of |promise|. | 86 void CloseSession(const std::string& web_session_id, |
82 void ReleaseSession(const std::string& web_session_id, | 87 scoped_ptr<media::SimpleCdmPromise> promise); |
83 scoped_ptr<media::SimpleCdmPromise> promise); | 88 |
| 89 // Removes stored session data associated with the session specified by |
| 90 // |web_session_id|. |
| 91 void RemoveSession(const std::string& web_session_id, |
| 92 scoped_ptr<media::SimpleCdmPromise> promise); |
| 93 |
| 94 // Retrieves the key IDs for keys in the session that the CDM knows are |
| 95 // currently usable to decrypt media data. |
| 96 void GetUsableKeyIds(const std::string& web_session_id, |
| 97 scoped_ptr<media::KeyIdsPromise> promise); |
84 | 98 |
85 // Returns the Decryptor associated with this CDM. May be NULL if no | 99 // Returns the Decryptor associated with this CDM. May be NULL if no |
86 // Decryptor is associated with the MediaKeys object. | 100 // Decryptor is associated with the MediaKeys object. |
87 // TODO(jrummell): Figure out lifetimes, as WMPI may still use the decryptor | 101 // TODO(jrummell): Figure out lifetimes, as WMPI may still use the decryptor |
88 // after WebContentDecryptionModule is freed. http://crbug.com/330324 | 102 // after WebContentDecryptionModule is freed. http://crbug.com/330324 |
89 media::Decryptor* GetDecryptor(); | 103 media::Decryptor* GetDecryptor(); |
90 | 104 |
91 // Returns a prefix to use for UMAs. | 105 // Returns a prefix to use for UMAs. |
92 const std::string& GetKeySystemUMAPrefix() const; | 106 const std::string& GetKeySystemUMAPrefix() const; |
93 | 107 |
94 #if defined(ENABLE_BROWSER_CDMS) | 108 #if defined(ENABLE_BROWSER_CDMS) |
95 // Returns the CDM ID associated with the |media_keys_|. May be kInvalidCdmId | 109 // Returns the CDM ID associated with the |media_keys_|. May be kInvalidCdmId |
96 // if no CDM ID is associated. | 110 // if no CDM ID is associated. |
97 int GetCdmId() const; | 111 int GetCdmId() const; |
98 #endif | 112 #endif |
99 | 113 |
100 private: | 114 private: |
101 friend class base::RefCounted<CdmSessionAdapter>; | 115 friend class base::RefCounted<CdmSessionAdapter>; |
102 typedef base::hash_map<std::string, | 116 typedef base::hash_map<std::string, |
103 base::WeakPtr<WebContentDecryptionModuleSessionImpl> > | 117 base::WeakPtr<WebContentDecryptionModuleSessionImpl> > |
104 SessionMap; | 118 SessionMap; |
105 | 119 |
106 ~CdmSessionAdapter(); | 120 ~CdmSessionAdapter(); |
107 | 121 |
108 // Callbacks for firing session events. | 122 // Callbacks for firing session events. |
109 void OnSessionMessage(const std::string& web_session_id, | 123 void OnSessionMessage(const std::string& web_session_id, |
110 const std::vector<uint8>& message, | 124 const std::vector<uint8>& message, |
111 const GURL& destination_url); | 125 const GURL& destination_url); |
| 126 void OnSessionKeysChange(const std::string& web_session_id, |
| 127 bool has_additional_usable_key); |
| 128 void OnSessionExpirationUpdate(const std::string& web_session_id, |
| 129 const base::Time& new_expiry_time); |
112 void OnSessionReady(const std::string& web_session_id); | 130 void OnSessionReady(const std::string& web_session_id); |
113 void OnSessionClosed(const std::string& web_session_id); | 131 void OnSessionClosed(const std::string& web_session_id); |
114 void OnSessionError(const std::string& web_session_id, | 132 void OnSessionError(const std::string& web_session_id, |
115 media::MediaKeys::Exception exception_code, | 133 media::MediaKeys::Exception exception_code, |
116 uint32 system_code, | 134 uint32 system_code, |
117 const std::string& error_message); | 135 const std::string& error_message); |
118 | 136 |
119 // Helper function of the callbacks. | 137 // Helper function of the callbacks. |
120 WebContentDecryptionModuleSessionImpl* GetSession( | 138 WebContentDecryptionModuleSessionImpl* GetSession( |
121 const std::string& web_session_id); | 139 const std::string& web_session_id); |
(...skipping 10 matching lines...) Expand all Loading... |
132 | 150 |
133 // NOTE: Weak pointers must be invalidated before all other member variables. | 151 // NOTE: Weak pointers must be invalidated before all other member variables. |
134 base::WeakPtrFactory<CdmSessionAdapter> weak_ptr_factory_; | 152 base::WeakPtrFactory<CdmSessionAdapter> weak_ptr_factory_; |
135 | 153 |
136 DISALLOW_COPY_AND_ASSIGN(CdmSessionAdapter); | 154 DISALLOW_COPY_AND_ASSIGN(CdmSessionAdapter); |
137 }; | 155 }; |
138 | 156 |
139 } // namespace content | 157 } // namespace content |
140 | 158 |
141 #endif // CONTENT_RENDERER_MEDIA_CDM_SESSION_ADAPTER_H_ | 159 #endif // CONTENT_RENDERER_MEDIA_CDM_SESSION_ADAPTER_H_ |
OLD | NEW |