| 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( |
| 90 const std::string& key_system); | 92 const std::string& key_system, |
| 93 scoped_ptr<ProvisionFetcher> provision_fetcher); |
| 91 | 94 |
| 92 // Returns a WeakPtr to be used on the |task_runner_|. | 95 // Returns a WeakPtr to be used on the |task_runner_|. |
| 93 base::WeakPtr<MediaDrmBridge> WeakPtr(); | 96 base::WeakPtr<MediaDrmBridge> WeakPtr(); |
| 94 | 97 |
| 95 // MediaKeys (via BrowserCdm) implementation. | 98 // MediaKeys (via BrowserCdm) implementation. |
| 96 void SetServerCertificate( | 99 void SetServerCertificate( |
| 97 const std::vector<uint8_t>& certificate, | 100 const std::vector<uint8_t>& certificate, |
| 98 scoped_ptr<media::SimpleCdmPromise> promise) override; | 101 scoped_ptr<media::SimpleCdmPromise> promise) override; |
| 99 void CreateSessionAndGenerateRequest( | 102 void CreateSessionAndGenerateRequest( |
| 100 SessionType session_type, | 103 SessionType session_type, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 // Sets callback which will be called when MediaCrypto is ready. If | 150 // Sets callback which will be called when MediaCrypto is ready. If |
| 148 // |media_crypto_ready_cb| is null, previously set callback will be cleared. | 151 // |media_crypto_ready_cb| is null, previously set callback will be cleared. |
| 149 void SetMediaCryptoReadyCB(const MediaCryptoReadyCB& media_crypto_ready_cb); | 152 void SetMediaCryptoReadyCB(const MediaCryptoReadyCB& media_crypto_ready_cb); |
| 150 | 153 |
| 151 // All the OnXxx functions below are called from Java. The implementation must | 154 // 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. | 155 // only do minimal work and then post tasks to avoid reentrancy issues. |
| 153 | 156 |
| 154 // Called by Java after a MediaCrypto object is created. | 157 // Called by Java after a MediaCrypto object is created. |
| 155 void OnMediaCryptoReady(JNIEnv* env, jobject j_media_drm); | 158 void OnMediaCryptoReady(JNIEnv* env, jobject j_media_drm); |
| 156 | 159 |
| 160 // Called by Java when we need to send a provisioning request, |
| 161 void OnStartProvisioning(JNIEnv* env, |
| 162 jobject j_media_drm, |
| 163 jstring j_default_url, |
| 164 jbyteArray j_request_data); |
| 165 |
| 157 // Callbacks to resolve the promise for |promise_id|. | 166 // Callbacks to resolve the promise for |promise_id|. |
| 158 void OnPromiseResolved(JNIEnv* env, jobject j_media_drm, jint j_promise_id); | 167 void OnPromiseResolved(JNIEnv* env, jobject j_media_drm, jint j_promise_id); |
| 159 void OnPromiseResolvedWithSession(JNIEnv* env, | 168 void OnPromiseResolvedWithSession(JNIEnv* env, |
| 160 jobject j_media_drm, | 169 jobject j_media_drm, |
| 161 jint j_promise_id, | 170 jint j_promise_id, |
| 162 jbyteArray j_session_id); | 171 jbyteArray j_session_id); |
| 163 | 172 |
| 164 // Callback to reject the promise for |promise_id| with |error_message|. | 173 // Callback to reject the promise for |promise_id| with |error_message|. |
| 165 // Note: No |system_error| is available from MediaDrm. | 174 // Note: No |system_error| is available from MediaDrm. |
| 166 // TODO(xhwang): Implement Exception code. | 175 // TODO(xhwang): Implement Exception code. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 void OnLegacySessionError(JNIEnv* env, | 215 void OnLegacySessionError(JNIEnv* env, |
| 207 jobject j_media_drm, | 216 jobject j_media_drm, |
| 208 jbyteArray j_session_id, | 217 jbyteArray j_session_id, |
| 209 jstring j_error_message); | 218 jstring j_error_message); |
| 210 | 219 |
| 211 // Called by the java object when credential reset is completed. | 220 // Called by the java object when credential reset is completed. |
| 212 void OnResetDeviceCredentialsCompleted(JNIEnv* env, jobject, bool success); | 221 void OnResetDeviceCredentialsCompleted(JNIEnv* env, jobject, bool success); |
| 213 | 222 |
| 214 private: | 223 private: |
| 215 MediaDrmBridge(const std::vector<uint8>& scheme_uuid, | 224 MediaDrmBridge(const std::vector<uint8>& scheme_uuid, |
| 225 scoped_ptr<ProvisionFetcher> provision_fetcher, |
| 216 const SessionMessageCB& session_message_cb, | 226 const SessionMessageCB& session_message_cb, |
| 217 const SessionClosedCB& session_closed_cb, | 227 const SessionClosedCB& session_closed_cb, |
| 218 const LegacySessionErrorCB& legacy_session_error_cb, | 228 const LegacySessionErrorCB& legacy_session_error_cb, |
| 219 const SessionKeysChangeCB& session_keys_change_cb, | 229 const SessionKeysChangeCB& session_keys_change_cb, |
| 220 const SessionExpirationUpdateCB& session_expiration_update_cb); | 230 const SessionExpirationUpdateCB& session_expiration_update_cb); |
| 221 | 231 |
| 222 static bool IsSecureDecoderRequired(SecurityLevel security_level); | 232 static bool IsSecureDecoderRequired(SecurityLevel security_level); |
| 223 | 233 |
| 224 // Get the security level of the media. | 234 // Get the security level of the media. |
| 225 SecurityLevel GetSecurityLevel(); | 235 SecurityLevel GetSecurityLevel(); |
| 226 | 236 |
| 227 // A helper method that calls a |player_tracker_| method on correct thread. | 237 // A helper method that calls a |player_tracker_| method on correct thread. |
| 228 void NotifyNewKeyOnCorrectThread(); | 238 void NotifyNewKeyOnCorrectThread(); |
| 229 | 239 |
| 230 // A helper method that calculates the |media_crypto_ready_cb_| arguments and | 240 // A helper method that calculates the |media_crypto_ready_cb_| arguments and |
| 231 // run this callback. | 241 // run this callback. |
| 232 void NotifyMediaCryptoReady(const MediaCryptoReadyCB& cb); | 242 void NotifyMediaCryptoReady(const MediaCryptoReadyCB& cb); |
| 233 | 243 |
| 244 // Sends HTTP provisioning request to a provisioning server. |
| 245 void SendProvisioningRequest(const std::string& default_url, |
| 246 const std::string& request_data); |
| 247 |
| 248 // Process the data received by provisioning server. |
| 249 void ProcessProvisioningResult(const std::string& response, bool success); |
| 250 |
| 234 // UUID of the key system. | 251 // UUID of the key system. |
| 235 std::vector<uint8> scheme_uuid_; | 252 std::vector<uint8> scheme_uuid_; |
| 236 | 253 |
| 237 // Java MediaDrm instance. | 254 // Java MediaDrm instance. |
| 238 base::android::ScopedJavaGlobalRef<jobject> j_media_drm_; | 255 base::android::ScopedJavaGlobalRef<jobject> j_media_drm_; |
| 239 | 256 |
| 257 // The object that requests and receives provisioning data. |
| 258 scoped_ptr<ProvisionFetcher> provision_fetcher_; |
| 259 |
| 240 // Callbacks for firing session events. | 260 // Callbacks for firing session events. |
| 241 SessionMessageCB session_message_cb_; | 261 SessionMessageCB session_message_cb_; |
| 242 SessionClosedCB session_closed_cb_; | 262 SessionClosedCB session_closed_cb_; |
| 243 LegacySessionErrorCB legacy_session_error_cb_; | 263 LegacySessionErrorCB legacy_session_error_cb_; |
| 244 SessionKeysChangeCB session_keys_change_cb_; | 264 SessionKeysChangeCB session_keys_change_cb_; |
| 245 SessionExpirationUpdateCB session_expiration_update_cb_; | 265 SessionExpirationUpdateCB session_expiration_update_cb_; |
| 246 | 266 |
| 247 MediaCryptoReadyCB media_crypto_ready_cb_; | 267 MediaCryptoReadyCB media_crypto_ready_cb_; |
| 248 | 268 |
| 249 ResetCredentialsCB reset_credentials_cb_; | 269 ResetCredentialsCB reset_credentials_cb_; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 267 | 287 |
| 268 // Default WeakPtrFactory. | 288 // Default WeakPtrFactory. |
| 269 base::WeakPtrFactory<MediaDrmBridge> weak_factory_; | 289 base::WeakPtrFactory<MediaDrmBridge> weak_factory_; |
| 270 | 290 |
| 271 DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); | 291 DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); |
| 272 }; | 292 }; |
| 273 | 293 |
| 274 } // namespace media | 294 } // namespace media |
| 275 | 295 |
| 276 #endif // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ | 296 #endif // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ |
| OLD | NEW |