Chromium Code Reviews| OLD | NEW |
|---|---|
| 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> |
| 11 | 11 |
| 12 #include "base/android/scoped_java_ref.h" | 12 #include "base/android/scoped_java_ref.h" |
| 13 #include "base/callback.h" | 13 #include "base/callback.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/memory/weak_ptr.h" | 15 #include "base/memory/weak_ptr.h" |
| 16 #include "media/base/browser_cdm.h" | 16 #include "media/base/browser_cdm.h" |
| 17 #include "media/base/cdm_promise_adapter.h" | 17 #include "media/base/cdm_promise_adapter.h" |
| 18 #include "media/base/media_export.h" | 18 #include "media/base/media_export.h" |
| 19 #include "media/cdm/player_tracker_impl.h" | 19 #include "media/cdm/player_tracker_impl.h" |
| 20 #include "url/gurl.h" | 20 #include "url/gurl.h" |
| 21 | 21 |
| 22 class GURL; | 22 class GURL; |
| 23 | 23 |
| 24 namespace media { | 24 namespace media { |
| 25 | 25 |
| 26 class MediaDrmBridge; | 26 class MediaDrmBridge; |
| 27 class ProvisionFetcher; | |
| 27 | 28 |
| 28 using ScopedMediaDrmBridgePtr = scoped_ptr<MediaDrmBridge, BrowserCdmDeleter>; | 29 using ScopedMediaDrmBridgePtr = scoped_ptr<MediaDrmBridge, BrowserCdmDeleter>; |
| 29 | 30 |
| 30 // This class provides DRM services for android EME implementation. | 31 // This class provides DRM services for android EME implementation. |
| 31 class MEDIA_EXPORT MediaDrmBridge : public BrowserCdm { | 32 class MEDIA_EXPORT MediaDrmBridge : public BrowserCdm { |
| 32 public: | 33 public: |
| 33 // TODO(ddorwin): These are specific to Widevine. http://crbug.com/459400 | 34 // TODO(ddorwin): These are specific to Widevine. http://crbug.com/459400 |
| 34 enum SecurityLevel { | 35 enum SecurityLevel { |
| 35 SECURITY_LEVEL_NONE = 0, | 36 SECURITY_LEVEL_NONE = 0, |
| 36 SECURITY_LEVEL_1 = 1, | 37 SECURITY_LEVEL_1 = 1, |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 70 | 71 |
| 71 // Returns the list of the platform-supported key system names that | 72 // Returns the list of the platform-supported key system names that |
| 72 // are not handled by Chrome explicitly. | 73 // are not handled by Chrome explicitly. |
| 73 static std::vector<std::string> GetPlatformKeySystemNames(); | 74 static std::vector<std::string> GetPlatformKeySystemNames(); |
| 74 | 75 |
| 75 // Returns a MediaDrmBridge instance if |key_system| is supported, or a NULL | 76 // Returns a MediaDrmBridge instance if |key_system| is supported, or a NULL |
| 76 // pointer otherwise. | 77 // pointer otherwise. |
| 77 // TODO(xhwang): Is it okay not to update session expiration info? | 78 // TODO(xhwang): Is it okay not to update session expiration info? |
| 78 static ScopedMediaDrmBridgePtr Create( | 79 static ScopedMediaDrmBridgePtr Create( |
| 79 const std::string& key_system, | 80 const std::string& key_system, |
| 81 scoped_ptr<ProvisionFetcher> provision_fetcher, | |
| 80 const SessionMessageCB& session_message_cb, | 82 const SessionMessageCB& session_message_cb, |
| 81 const SessionClosedCB& session_closed_cb, | 83 const SessionClosedCB& session_closed_cb, |
| 82 const LegacySessionErrorCB& legacy_session_error_cb, | 84 const LegacySessionErrorCB& legacy_session_error_cb, |
| 83 const SessionKeysChangeCB& session_keys_change_cb, | 85 const SessionKeysChangeCB& session_keys_change_cb, |
| 84 const SessionExpirationUpdateCB& session_expiration_update_cb); | 86 const SessionExpirationUpdateCB& session_expiration_update_cb); |
| 85 | 87 |
| 86 // Returns a MediaDrmBridge instance if |key_system| is supported, or a NULL | 88 // 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 | 89 // otherwise. No session callbacks are provided. This is used when we need to |
| 88 // use MediaDrmBridge without creating any sessions. | 90 // use MediaDrmBridge without creating any sessions. |
| 89 static ScopedMediaDrmBridgePtr CreateWithoutSessionSupport( | 91 static ScopedMediaDrmBridgePtr CreateWithoutSessionSupport( |
|
xhwang
2015/11/06 23:08:19
tip: You'll need to do a rebase. Please keep the r
Tima Vaisburd
2015/11/11 03:03:34
Done.
| |
| 90 const std::string& key_system); | 92 const std::string& key_system); |
| 91 | 93 |
| 92 // Returns a WeakPtr to be used on the |task_runner_|. | 94 // Returns a WeakPtr to be used on the |task_runner_|. |
| 93 base::WeakPtr<MediaDrmBridge> WeakPtr(); | 95 base::WeakPtr<MediaDrmBridge> WeakPtr(); |
| 94 | 96 |
| 95 // MediaKeys (via BrowserCdm) implementation. | 97 // MediaKeys (via BrowserCdm) implementation. |
| 96 void SetServerCertificate( | 98 void SetServerCertificate( |
| 97 const std::vector<uint8_t>& certificate, | 99 const std::vector<uint8_t>& certificate, |
| 98 scoped_ptr<media::SimpleCdmPromise> promise) override; | 100 scoped_ptr<media::SimpleCdmPromise> promise) override; |
| 99 void CreateSessionAndGenerateRequest( | 101 void CreateSessionAndGenerateRequest( |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 147 // Sets callback which will be called when MediaCrypto is ready. If | 149 // Sets callback which will be called when MediaCrypto is ready. If |
| 148 // |media_crypto_ready_cb| is null, previously set callback will be cleared. | 150 // |media_crypto_ready_cb| is null, previously set callback will be cleared. |
| 149 void SetMediaCryptoReadyCB(const MediaCryptoReadyCB& media_crypto_ready_cb); | 151 void SetMediaCryptoReadyCB(const MediaCryptoReadyCB& media_crypto_ready_cb); |
| 150 | 152 |
| 151 // All the OnXxx functions below are called from Java. The implementation must | 153 // All the OnXxx functions below are called from Java. The implementation must |
| 152 // only do minimal work and then post tasks to avoid reentrancy issues. | 154 // only do minimal work and then post tasks to avoid reentrancy issues. |
| 153 | 155 |
| 154 // Called by Java after a MediaCrypto object is created. | 156 // Called by Java after a MediaCrypto object is created. |
| 155 void OnMediaCryptoReady(JNIEnv* env, jobject j_media_drm); | 157 void OnMediaCryptoReady(JNIEnv* env, jobject j_media_drm); |
| 156 | 158 |
| 159 // Called by Java when we need to send a provisioning request, | |
| 160 void OnStartProvisioning(JNIEnv* env, | |
| 161 jobject j_media_drm, | |
| 162 jstring j_default_url, | |
| 163 jbyteArray j_request_data); | |
| 164 | |
| 157 // Callbacks to resolve the promise for |promise_id|. | 165 // Callbacks to resolve the promise for |promise_id|. |
| 158 void OnPromiseResolved(JNIEnv* env, jobject j_media_drm, jint j_promise_id); | 166 void OnPromiseResolved(JNIEnv* env, jobject j_media_drm, jint j_promise_id); |
| 159 void OnPromiseResolvedWithSession(JNIEnv* env, | 167 void OnPromiseResolvedWithSession(JNIEnv* env, |
| 160 jobject j_media_drm, | 168 jobject j_media_drm, |
| 161 jint j_promise_id, | 169 jint j_promise_id, |
| 162 jbyteArray j_session_id); | 170 jbyteArray j_session_id); |
| 163 | 171 |
| 164 // Callback to reject the promise for |promise_id| with |error_message|. | 172 // Callback to reject the promise for |promise_id| with |error_message|. |
| 165 // Note: No |system_error| is available from MediaDrm. | 173 // Note: No |system_error| is available from MediaDrm. |
| 166 // TODO(xhwang): Implement Exception code. | 174 // TODO(xhwang): Implement Exception code. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 206 void OnLegacySessionError(JNIEnv* env, | 214 void OnLegacySessionError(JNIEnv* env, |
| 207 jobject j_media_drm, | 215 jobject j_media_drm, |
| 208 jbyteArray j_session_id, | 216 jbyteArray j_session_id, |
| 209 jstring j_error_message); | 217 jstring j_error_message); |
| 210 | 218 |
| 211 // Called by the java object when credential reset is completed. | 219 // Called by the java object when credential reset is completed. |
| 212 void OnResetDeviceCredentialsCompleted(JNIEnv* env, jobject, bool success); | 220 void OnResetDeviceCredentialsCompleted(JNIEnv* env, jobject, bool success); |
| 213 | 221 |
| 214 private: | 222 private: |
| 215 MediaDrmBridge(const std::vector<uint8>& scheme_uuid, | 223 MediaDrmBridge(const std::vector<uint8>& scheme_uuid, |
| 224 scoped_ptr<ProvisionFetcher> provision_fetcher, | |
| 216 const SessionMessageCB& session_message_cb, | 225 const SessionMessageCB& session_message_cb, |
| 217 const SessionClosedCB& session_closed_cb, | 226 const SessionClosedCB& session_closed_cb, |
| 218 const LegacySessionErrorCB& legacy_session_error_cb, | 227 const LegacySessionErrorCB& legacy_session_error_cb, |
| 219 const SessionKeysChangeCB& session_keys_change_cb, | 228 const SessionKeysChangeCB& session_keys_change_cb, |
| 220 const SessionExpirationUpdateCB& session_expiration_update_cb); | 229 const SessionExpirationUpdateCB& session_expiration_update_cb); |
| 221 | 230 |
| 222 static bool IsSecureDecoderRequired(SecurityLevel security_level); | 231 static bool IsSecureDecoderRequired(SecurityLevel security_level); |
| 223 | 232 |
| 224 // Get the security level of the media. | 233 // Get the security level of the media. |
| 225 SecurityLevel GetSecurityLevel(); | 234 SecurityLevel GetSecurityLevel(); |
| 226 | 235 |
| 227 // A helper method that calls a |player_tracker_| method on correct thread. | 236 // A helper method that calls a |player_tracker_| method on correct thread. |
| 228 void NotifyNewKeyOnCorrectThread(); | 237 void NotifyNewKeyOnCorrectThread(); |
| 229 | 238 |
| 230 // A helper method that calculates the |media_crypto_ready_cb_| arguments and | 239 // A helper method that calculates the |media_crypto_ready_cb_| arguments and |
| 231 // run this callback. | 240 // run this callback. |
| 232 void NotifyMediaCryptoReady(const MediaCryptoReadyCB& cb); | 241 void NotifyMediaCryptoReady(const MediaCryptoReadyCB& cb); |
| 233 | 242 |
| 243 // Sends HTTP provisioning request to a provisioning server. | |
| 244 void SendProvisioningRequest(const std::string& default_url, | |
| 245 const std::string& request_data); | |
| 246 | |
| 247 // Process the data received by provisioning server. | |
| 248 void ProcessProvisionResponse(bool success, const std::string& response); | |
| 249 | |
| 234 // UUID of the key system. | 250 // UUID of the key system. |
| 235 std::vector<uint8> scheme_uuid_; | 251 std::vector<uint8> scheme_uuid_; |
| 236 | 252 |
| 237 // Java MediaDrm instance. | 253 // Java MediaDrm instance. |
| 238 base::android::ScopedJavaGlobalRef<jobject> j_media_drm_; | 254 base::android::ScopedJavaGlobalRef<jobject> j_media_drm_; |
| 239 | 255 |
| 256 // The object that requests and receives provisioning data. | |
| 257 scoped_ptr<ProvisionFetcher> provision_fetcher_; | |
| 258 | |
| 240 // Callbacks for firing session events. | 259 // Callbacks for firing session events. |
| 241 SessionMessageCB session_message_cb_; | 260 SessionMessageCB session_message_cb_; |
| 242 SessionClosedCB session_closed_cb_; | 261 SessionClosedCB session_closed_cb_; |
| 243 LegacySessionErrorCB legacy_session_error_cb_; | 262 LegacySessionErrorCB legacy_session_error_cb_; |
| 244 SessionKeysChangeCB session_keys_change_cb_; | 263 SessionKeysChangeCB session_keys_change_cb_; |
| 245 SessionExpirationUpdateCB session_expiration_update_cb_; | 264 SessionExpirationUpdateCB session_expiration_update_cb_; |
| 246 | 265 |
| 247 MediaCryptoReadyCB media_crypto_ready_cb_; | 266 MediaCryptoReadyCB media_crypto_ready_cb_; |
| 248 | 267 |
| 249 ResetCredentialsCB reset_credentials_cb_; | 268 ResetCredentialsCB reset_credentials_cb_; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 267 | 286 |
| 268 // Default WeakPtrFactory. | 287 // Default WeakPtrFactory. |
| 269 base::WeakPtrFactory<MediaDrmBridge> weak_factory_; | 288 base::WeakPtrFactory<MediaDrmBridge> weak_factory_; |
| 270 | 289 |
| 271 DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); | 290 DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); |
| 272 }; | 291 }; |
| 273 | 292 |
| 274 } // namespace media | 293 } // namespace media |
| 275 | 294 |
| 276 #endif // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ | 295 #endif // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ |
| OLD | NEW |