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

Side by Side Diff: media/base/android/media_drm_bridge.h

Issue 1427183002: Move MediaDrmBridge provision communication to native side. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reformatted media/ Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ 5 #ifndef MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_
6 #define MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ 6 #define MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_
7 7
8 #include <jni.h> 8 #include <jni.h>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 14 matching lines...) Expand all
25 namespace media { 25 namespace media {
26 26
27 // Implements a CDM using Android MediaDrm API. 27 // Implements a CDM using Android MediaDrm API.
28 // 28 //
29 // Thread Safety: 29 // Thread Safety:
30 // 30 //
31 // This class lives on the thread where it is created. All methods must be 31 // This class lives on the thread where it is created. All methods must be
32 // called on the |task_runner_| except for the PlayerTracker methods and 32 // called on the |task_runner_| except for the PlayerTracker methods and
33 // SetMediaCryptoReadyCB(), which can be called on any thread. 33 // SetMediaCryptoReadyCB(), which can be called on any thread.
34 34
35 class ProvisionFetcher;
36
35 class MEDIA_EXPORT MediaDrmBridge : public MediaKeys, public PlayerTracker { 37 class MEDIA_EXPORT MediaDrmBridge : public MediaKeys, public PlayerTracker {
36 public: 38 public:
37 // TODO(ddorwin): These are specific to Widevine. http://crbug.com/459400 39 // TODO(ddorwin): These are specific to Widevine. http://crbug.com/459400
38 enum SecurityLevel { 40 enum SecurityLevel {
39 SECURITY_LEVEL_NONE = 0, 41 SECURITY_LEVEL_NONE = 0,
40 SECURITY_LEVEL_1 = 1, 42 SECURITY_LEVEL_1 = 1,
41 SECURITY_LEVEL_3 = 3, 43 SECURITY_LEVEL_3 = 3,
42 }; 44 };
43 45
44 using JavaObjectPtr = scoped_ptr<base::android::ScopedJavaGlobalRef<jobject>>; 46 using JavaObjectPtr = scoped_ptr<base::android::ScopedJavaGlobalRef<jobject>>;
(...skipping 25 matching lines...) Expand all
70 72
71 // Returns the list of the platform-supported key system names that 73 // Returns the list of the platform-supported key system names that
72 // are not handled by Chrome explicitly. 74 // are not handled by Chrome explicitly.
73 static std::vector<std::string> GetPlatformKeySystemNames(); 75 static std::vector<std::string> GetPlatformKeySystemNames();
74 76
75 // Returns a MediaDrmBridge instance if |key_system| is supported, or a NULL 77 // Returns a MediaDrmBridge instance if |key_system| is supported, or a NULL
76 // pointer otherwise. 78 // pointer otherwise.
77 // TODO(xhwang): Is it okay not to update session expiration info? 79 // TODO(xhwang): Is it okay not to update session expiration info?
78 static scoped_refptr<MediaDrmBridge> Create( 80 static scoped_refptr<MediaDrmBridge> Create(
79 const std::string& key_system, 81 const std::string& key_system,
82 scoped_ptr<ProvisionFetcher> provision_fetcher,
80 const SessionMessageCB& session_message_cb, 83 const SessionMessageCB& session_message_cb,
81 const SessionClosedCB& session_closed_cb, 84 const SessionClosedCB& session_closed_cb,
82 const LegacySessionErrorCB& legacy_session_error_cb, 85 const LegacySessionErrorCB& legacy_session_error_cb,
83 const SessionKeysChangeCB& session_keys_change_cb, 86 const SessionKeysChangeCB& session_keys_change_cb,
84 const SessionExpirationUpdateCB& session_expiration_update_cb); 87 const SessionExpirationUpdateCB& session_expiration_update_cb);
85 88
86 // Returns a MediaDrmBridge instance if |key_system| is supported, or a NULL 89 // Returns a MediaDrmBridge instance if |key_system| is supported, or a NULL
87 // otherwise. No session callbacks are provided. This is used when we need to 90 // otherwise. No session callbacks are provided. This is used when we need to
88 // use MediaDrmBridge without creating any sessions. 91 // use MediaDrmBridge without creating any sessions.
89 static scoped_refptr<MediaDrmBridge> CreateWithoutSessionSupport( 92 static scoped_refptr<MediaDrmBridge> CreateWithoutSessionSupport(
90 const std::string& key_system); 93 const std::string& key_system,
94 scoped_ptr<ProvisionFetcher> provision_fetcher);
91 95
92 // MediaKeys implementation. 96 // MediaKeys implementation.
93 void SetServerCertificate( 97 void SetServerCertificate(
94 const std::vector<uint8_t>& certificate, 98 const std::vector<uint8_t>& certificate,
95 scoped_ptr<media::SimpleCdmPromise> promise) override; 99 scoped_ptr<media::SimpleCdmPromise> promise) override;
96 void CreateSessionAndGenerateRequest( 100 void CreateSessionAndGenerateRequest(
97 SessionType session_type, 101 SessionType session_type,
98 media::EmeInitDataType init_data_type, 102 media::EmeInitDataType init_data_type,
99 const std::vector<uint8_t>& init_data, 103 const std::vector<uint8_t>& init_data,
100 scoped_ptr<media::NewSessionCdmPromise> promise) override; 104 scoped_ptr<media::NewSessionCdmPromise> promise) override;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 // should make sure that the callbacks are posted to the correct thread. 156 // should make sure that the callbacks are posted to the correct thread.
153 // TODO(xhwang): Move this up to be close to RegisterPlayer(). 157 // TODO(xhwang): Move this up to be close to RegisterPlayer().
154 void SetMediaCryptoReadyCB(const MediaCryptoReadyCB& media_crypto_ready_cb); 158 void SetMediaCryptoReadyCB(const MediaCryptoReadyCB& media_crypto_ready_cb);
155 159
156 // All the OnXxx functions below are called from Java. The implementation must 160 // All the OnXxx functions below are called from Java. The implementation must
157 // only do minimal work and then post tasks to avoid reentrancy issues. 161 // only do minimal work and then post tasks to avoid reentrancy issues.
158 162
159 // Called by Java after a MediaCrypto object is created. 163 // Called by Java after a MediaCrypto object is created.
160 void OnMediaCryptoReady(JNIEnv* env, jobject j_media_drm); 164 void OnMediaCryptoReady(JNIEnv* env, jobject j_media_drm);
161 165
166 // Called by Java when we need to send a provisioning request,
167 void OnStartProvisioning(JNIEnv* env,
168 jobject j_media_drm,
169 jstring j_default_url,
170 jbyteArray j_request_data);
171
162 // Callbacks to resolve the promise for |promise_id|. 172 // Callbacks to resolve the promise for |promise_id|.
163 void OnPromiseResolved(JNIEnv* env, jobject j_media_drm, jint j_promise_id); 173 void OnPromiseResolved(JNIEnv* env, jobject j_media_drm, jint j_promise_id);
164 void OnPromiseResolvedWithSession(JNIEnv* env, 174 void OnPromiseResolvedWithSession(JNIEnv* env,
165 jobject j_media_drm, 175 jobject j_media_drm,
166 jint j_promise_id, 176 jint j_promise_id,
167 jbyteArray j_session_id); 177 jbyteArray j_session_id);
168 178
169 // Callback to reject the promise for |promise_id| with |error_message|. 179 // Callback to reject the promise for |promise_id| with |error_message|.
170 // Note: No |system_error| is available from MediaDrm. 180 // Note: No |system_error| is available from MediaDrm.
171 // TODO(xhwang): Implement Exception code. 181 // TODO(xhwang): Implement Exception code.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 jstring j_error_message); 224 jstring j_error_message);
215 225
216 // Called by the java object when credential reset is completed. 226 // Called by the java object when credential reset is completed.
217 void OnResetDeviceCredentialsCompleted(JNIEnv* env, jobject, bool success); 227 void OnResetDeviceCredentialsCompleted(JNIEnv* env, jobject, bool success);
218 228
219 private: 229 private:
220 // For DeleteSoon() in DeleteOnCorrectThread(). 230 // For DeleteSoon() in DeleteOnCorrectThread().
221 friend class base::DeleteHelper<MediaDrmBridge>; 231 friend class base::DeleteHelper<MediaDrmBridge>;
222 232
223 MediaDrmBridge(const std::vector<uint8>& scheme_uuid, 233 MediaDrmBridge(const std::vector<uint8>& scheme_uuid,
234 scoped_ptr<ProvisionFetcher> provision_fetcher,
224 const SessionMessageCB& session_message_cb, 235 const SessionMessageCB& session_message_cb,
225 const SessionClosedCB& session_closed_cb, 236 const SessionClosedCB& session_closed_cb,
226 const LegacySessionErrorCB& legacy_session_error_cb, 237 const LegacySessionErrorCB& legacy_session_error_cb,
227 const SessionKeysChangeCB& session_keys_change_cb, 238 const SessionKeysChangeCB& session_keys_change_cb,
228 const SessionExpirationUpdateCB& session_expiration_update_cb); 239 const SessionExpirationUpdateCB& session_expiration_update_cb);
229 240
230 ~MediaDrmBridge() override; 241 ~MediaDrmBridge() override;
231 242
232 static bool IsSecureDecoderRequired(SecurityLevel security_level); 243 static bool IsSecureDecoderRequired(SecurityLevel security_level);
233 244
234 // Get the security level of the media. 245 // Get the security level of the media.
235 SecurityLevel GetSecurityLevel(); 246 SecurityLevel GetSecurityLevel();
236 247
237 // A helper method that calculates the |media_crypto_ready_cb_| arguments and 248 // A helper method that calculates the |media_crypto_ready_cb_| arguments and
238 // run this callback. 249 // run this callback.
239 void NotifyMediaCryptoReady(const MediaCryptoReadyCB& cb); 250 void NotifyMediaCryptoReady(const MediaCryptoReadyCB& cb);
240 251
252 // Sends HTTP provisioning request to a provisioning server.
253 void SendProvisioningRequest(const std::string& default_url,
254 const std::string& request_data);
255
256 // Process the data received by provisioning server.
257 void ProcessProvisionResponse(bool success, const std::string& response);
258
241 // UUID of the key system. 259 // UUID of the key system.
242 std::vector<uint8> scheme_uuid_; 260 std::vector<uint8> scheme_uuid_;
243 261
244 // Java MediaDrm instance. 262 // Java MediaDrm instance.
245 base::android::ScopedJavaGlobalRef<jobject> j_media_drm_; 263 base::android::ScopedJavaGlobalRef<jobject> j_media_drm_;
246 264
265 // The object that requests and receives provisioning data.
266 scoped_ptr<ProvisionFetcher> provision_fetcher_;
267
247 // Callbacks for firing session events. 268 // Callbacks for firing session events.
248 SessionMessageCB session_message_cb_; 269 SessionMessageCB session_message_cb_;
249 SessionClosedCB session_closed_cb_; 270 SessionClosedCB session_closed_cb_;
250 LegacySessionErrorCB legacy_session_error_cb_; 271 LegacySessionErrorCB legacy_session_error_cb_;
251 SessionKeysChangeCB session_keys_change_cb_; 272 SessionKeysChangeCB session_keys_change_cb_;
252 SessionExpirationUpdateCB session_expiration_update_cb_; 273 SessionExpirationUpdateCB session_expiration_update_cb_;
253 274
254 MediaCryptoReadyCB media_crypto_ready_cb_; 275 MediaCryptoReadyCB media_crypto_ready_cb_;
255 276
256 ResetCredentialsCB reset_credentials_cb_; 277 ResetCredentialsCB reset_credentials_cb_;
257 278
258 PlayerTrackerImpl player_tracker_; 279 PlayerTrackerImpl player_tracker_;
259 280
260 // TODO(xhwang): Host a CdmPromiseAdapter directly. No need to use scoped_ptr. 281 // TODO(xhwang): Host a CdmPromiseAdapter directly. No need to use scoped_ptr.
261 scoped_ptr<CdmPromiseAdapter> cdm_promise_adapter_; 282 scoped_ptr<CdmPromiseAdapter> cdm_promise_adapter_;
262 283
263 // Default task runner. 284 // Default task runner.
264 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 285 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
265 286
266 // NOTE: Weak pointers must be invalidated before all other member variables. 287 // NOTE: Weak pointers must be invalidated before all other member variables.
267 base::WeakPtrFactory<MediaDrmBridge> weak_factory_; 288 base::WeakPtrFactory<MediaDrmBridge> weak_factory_;
268 289
269 DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); 290 DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge);
270 }; 291 };
271 292
272 } // namespace media 293 } // namespace media
273 294
274 #endif // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ 295 #endif // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_
OLDNEW
« no previous file with comments | « media/base/android/java/src/org/chromium/media/MediaDrmBridge.java ('k') | media/base/android/media_drm_bridge.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698