| 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 <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| 11 #include <memory> | 11 #include <memory> |
| 12 #include <string> | 12 #include <string> |
| 13 #include <vector> | 13 #include <vector> |
| 14 | 14 |
| 15 #include "base/android/scoped_java_ref.h" | 15 #include "base/android/scoped_java_ref.h" |
| 16 #include "base/callback.h" | 16 #include "base/callback.h" |
| 17 #include "base/macros.h" | 17 #include "base/macros.h" |
| 18 #include "base/memory/ref_counted.h" | 18 #include "base/memory/ref_counted.h" |
| 19 #include "base/memory/weak_ptr.h" | 19 #include "base/memory/weak_ptr.h" |
| 20 #include "base/sequenced_task_runner_helpers.h" | 20 #include "base/sequenced_task_runner_helpers.h" |
| 21 #include "media/base/android/media_drm_bridge_cdm_context.h" | 21 #include "media/base/android/media_drm_bridge_cdm_context.h" |
| 22 #include "media/base/android/media_drm_storage.h" |
| 22 #include "media/base/cdm_promise.h" | 23 #include "media/base/cdm_promise.h" |
| 23 #include "media/base/cdm_promise_adapter.h" | 24 #include "media/base/cdm_promise_adapter.h" |
| 24 #include "media/base/content_decryption_module.h" | 25 #include "media/base/content_decryption_module.h" |
| 25 #include "media/base/media_export.h" | 26 #include "media/base/media_export.h" |
| 26 #include "media/base/player_tracker.h" | 27 #include "media/base/player_tracker.h" |
| 27 #include "media/base/provision_fetcher.h" | 28 #include "media/base/provision_fetcher.h" |
| 28 #include "media/cdm/player_tracker_impl.h" | 29 #include "media/cdm/player_tracker_impl.h" |
| 29 #include "url/gurl.h" | 30 #include "url/gurl.h" |
| 30 | 31 |
| 31 namespace base { | 32 namespace base { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 // are not handled by Chrome explicitly. | 87 // are not handled by Chrome explicitly. |
| 87 static std::vector<std::string> GetPlatformKeySystemNames(); | 88 static std::vector<std::string> GetPlatformKeySystemNames(); |
| 88 | 89 |
| 89 // Returns a MediaDrmBridge instance if |key_system| and |security_level| are | 90 // Returns a MediaDrmBridge instance if |key_system| and |security_level| are |
| 90 // supported, and nullptr otherwise. The default security level will be used | 91 // supported, and nullptr otherwise. The default security level will be used |
| 91 // if |security_level| is SECURITY_LEVEL_DEFAULT. | 92 // if |security_level| is SECURITY_LEVEL_DEFAULT. |
| 92 static scoped_refptr<MediaDrmBridge> Create( | 93 static scoped_refptr<MediaDrmBridge> Create( |
| 93 const std::string& key_system, | 94 const std::string& key_system, |
| 94 SecurityLevel security_level, | 95 SecurityLevel security_level, |
| 95 const CreateFetcherCB& create_fetcher_cb, | 96 const CreateFetcherCB& create_fetcher_cb, |
| 97 const CreateStorageCB& create_storage_cb, |
| 96 const SessionMessageCB& session_message_cb, | 98 const SessionMessageCB& session_message_cb, |
| 97 const SessionClosedCB& session_closed_cb, | 99 const SessionClosedCB& session_closed_cb, |
| 98 const SessionKeysChangeCB& session_keys_change_cb, | 100 const SessionKeysChangeCB& session_keys_change_cb, |
| 99 const SessionExpirationUpdateCB& session_expiration_update_cb); | 101 const SessionExpirationUpdateCB& session_expiration_update_cb); |
| 100 | 102 |
| 101 // Same as Create() except that no session callbacks are provided. This is | 103 // Same as Create() except that no session callbacks are provided. This is |
| 102 // used when we need to use MediaDrmBridge without creating any sessions. | 104 // used when we need to use MediaDrmBridge without creating any sessions. |
| 103 static scoped_refptr<MediaDrmBridge> CreateWithoutSessionSupport( | 105 static scoped_refptr<MediaDrmBridge> CreateWithoutSessionSupport( |
| 104 const std::string& key_system, | 106 const std::string& key_system, |
| 105 SecurityLevel security_level, | 107 SecurityLevel security_level, |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 bool success); | 232 bool success); |
| 231 | 233 |
| 232 private: | 234 private: |
| 233 // For DeleteSoon() in DeleteOnCorrectThread(). | 235 // For DeleteSoon() in DeleteOnCorrectThread(). |
| 234 friend class base::DeleteHelper<MediaDrmBridge>; | 236 friend class base::DeleteHelper<MediaDrmBridge>; |
| 235 | 237 |
| 236 static scoped_refptr<MediaDrmBridge> CreateInternal( | 238 static scoped_refptr<MediaDrmBridge> CreateInternal( |
| 237 const std::string& key_system, | 239 const std::string& key_system, |
| 238 SecurityLevel security_level, | 240 SecurityLevel security_level, |
| 239 const CreateFetcherCB& create_fetcher_cb, | 241 const CreateFetcherCB& create_fetcher_cb, |
| 242 const CreateStorageCB& create_storage_cb, |
| 240 const SessionMessageCB& session_message_cb, | 243 const SessionMessageCB& session_message_cb, |
| 241 const SessionClosedCB& session_closed_cb, | 244 const SessionClosedCB& session_closed_cb, |
| 242 const SessionKeysChangeCB& session_keys_change_cb, | 245 const SessionKeysChangeCB& session_keys_change_cb, |
| 243 const SessionExpirationUpdateCB& session_expiration_update_cb); | 246 const SessionExpirationUpdateCB& session_expiration_update_cb); |
| 244 | 247 |
| 245 // Constructs a MediaDrmBridge for |scheme_uuid| and |security_level|. The | 248 // Constructs a MediaDrmBridge for |scheme_uuid| and |security_level|. The |
| 246 // default security level will be used if |security_level| is | 249 // default security level will be used if |security_level| is |
| 247 // SECURITY_LEVEL_DEFAULT. Sessions should not be created if session callbacks | 250 // SECURITY_LEVEL_DEFAULT. Sessions should not be created if session callbacks |
| 248 // are null. | 251 // are null. |
| 249 MediaDrmBridge(const std::vector<uint8_t>& scheme_uuid, | 252 MediaDrmBridge(const std::vector<uint8_t>& scheme_uuid, |
| 250 SecurityLevel security_level, | 253 SecurityLevel security_level, |
| 251 const CreateFetcherCB& create_fetcher_cb, | 254 const CreateFetcherCB& create_fetcher_cb, |
| 255 const CreateStorageCB& create_storage_cb, |
| 252 const SessionMessageCB& session_message_cb, | 256 const SessionMessageCB& session_message_cb, |
| 253 const SessionClosedCB& session_closed_cb, | 257 const SessionClosedCB& session_closed_cb, |
| 254 const SessionKeysChangeCB& session_keys_change_cb, | 258 const SessionKeysChangeCB& session_keys_change_cb, |
| 255 const SessionExpirationUpdateCB& session_expiration_update_cb); | 259 const SessionExpirationUpdateCB& session_expiration_update_cb); |
| 256 | 260 |
| 257 ~MediaDrmBridge() override; | 261 ~MediaDrmBridge() override; |
| 258 | 262 |
| 259 static bool IsSecureDecoderRequired(SecurityLevel security_level); | 263 static bool IsSecureDecoderRequired(SecurityLevel security_level); |
| 260 | 264 |
| 261 // Get the security level of the media. | 265 // Get the security level of the media. |
| 262 SecurityLevel GetSecurityLevel(); | 266 SecurityLevel GetSecurityLevel(); |
| 263 | 267 |
| 264 // A helper method to create a JavaObjectPtr. | 268 // A helper method to create a JavaObjectPtr. |
| 265 JavaObjectPtr CreateJavaObjectPtr(jobject object); | 269 JavaObjectPtr CreateJavaObjectPtr(jobject object); |
| 266 | 270 |
| 267 // A helper method that is called when MediaCrypto is ready. | 271 // A helper method that is called when MediaCrypto is ready. |
| 268 void NotifyMediaCryptoReady(JavaObjectPtr j_media_crypto); | 272 void NotifyMediaCryptoReady(JavaObjectPtr j_media_crypto); |
| 269 | 273 |
| 270 // Sends HTTP provisioning request to a provisioning server. | 274 // Sends HTTP provisioning request to a provisioning server. |
| 271 void SendProvisioningRequest(const std::string& default_url, | 275 void SendProvisioningRequest(const std::string& default_url, |
| 272 const std::string& request_data); | 276 const std::string& request_data); |
| 273 | 277 |
| 274 // Process the data received by provisioning server. | 278 // Process the data received by provisioning server. |
| 275 void ProcessProvisionResponse(bool success, const std::string& response); | 279 void ProcessProvisionResponse(bool success, const std::string& response); |
| 276 | 280 |
| 277 // Called on the |task_runner_| when there is additional usable key. | 281 // Called on the |task_runner_| when there is additional usable key. |
| 278 void OnHasAdditionalUsableKey(); | 282 void OnHasAdditionalUsableKey(); |
| 279 | 283 |
| 284 void OnStorageResult(bool); |
| 285 |
| 280 // UUID of the key system. | 286 // UUID of the key system. |
| 281 std::vector<uint8_t> scheme_uuid_; | 287 std::vector<uint8_t> scheme_uuid_; |
| 282 | 288 |
| 283 // Java MediaDrm instance. | 289 // Java MediaDrm instance. |
| 284 base::android::ScopedJavaGlobalRef<jobject> j_media_drm_; | 290 base::android::ScopedJavaGlobalRef<jobject> j_media_drm_; |
| 285 | 291 |
| 286 // Java MediaCrypto instance. Possible values are: | 292 // Java MediaCrypto instance. Possible values are: |
| 287 // !j_media_crypto_: | 293 // !j_media_crypto_: |
| 288 // MediaCrypto creation has not been notified via NotifyMediaCryptoReady(). | 294 // MediaCrypto creation has not been notified via NotifyMediaCryptoReady(). |
| 289 // !j_media_crypto_->is_null(): | 295 // !j_media_crypto_->is_null(): |
| 290 // MediaCrypto creation succeeded and it has been notified. | 296 // MediaCrypto creation succeeded and it has been notified. |
| 291 // j_media_crypto_->is_null(): | 297 // j_media_crypto_->is_null(): |
| 292 // MediaCrypto creation failed and it has been notified. | 298 // MediaCrypto creation failed and it has been notified. |
| 293 JavaObjectPtr j_media_crypto_; | 299 JavaObjectPtr j_media_crypto_; |
| 294 | 300 |
| 295 // The callback to create a ProvisionFetcher. | 301 // The callback to create a ProvisionFetcher. |
| 296 CreateFetcherCB create_fetcher_cb_; | 302 CreateFetcherCB create_fetcher_cb_; |
| 297 | 303 |
| 304 // The callback to create a MediaDrmStorage. |
| 305 CreateStorageCB create_storage_cb_; |
| 306 |
| 298 // The ProvisionFetcher that requests and receives provisioning data. | 307 // The ProvisionFetcher that requests and receives provisioning data. |
| 299 // Non-null iff when a provision request is pending. | 308 // Non-null iff when a provision request is pending. |
| 300 std::unique_ptr<ProvisionFetcher> provision_fetcher_; | 309 std::unique_ptr<ProvisionFetcher> provision_fetcher_; |
| 301 | 310 |
| 311 std::unique_ptr<MediaDrmStorage> media_drm_storage_; |
| 312 |
| 302 // Callbacks for firing session events. | 313 // Callbacks for firing session events. |
| 303 SessionMessageCB session_message_cb_; | 314 SessionMessageCB session_message_cb_; |
| 304 SessionClosedCB session_closed_cb_; | 315 SessionClosedCB session_closed_cb_; |
| 305 SessionKeysChangeCB session_keys_change_cb_; | 316 SessionKeysChangeCB session_keys_change_cb_; |
| 306 SessionExpirationUpdateCB session_expiration_update_cb_; | 317 SessionExpirationUpdateCB session_expiration_update_cb_; |
| 307 | 318 |
| 308 MediaCryptoReadyCB media_crypto_ready_cb_; | 319 MediaCryptoReadyCB media_crypto_ready_cb_; |
| 309 | 320 |
| 310 ResetCredentialsCB reset_credentials_cb_; | 321 ResetCredentialsCB reset_credentials_cb_; |
| 311 | 322 |
| 312 PlayerTrackerImpl player_tracker_; | 323 PlayerTrackerImpl player_tracker_; |
| 313 | 324 |
| 314 CdmPromiseAdapter cdm_promise_adapter_; | 325 CdmPromiseAdapter cdm_promise_adapter_; |
| 315 | 326 |
| 316 // Default task runner. | 327 // Default task runner. |
| 317 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 328 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| 318 | 329 |
| 319 MediaDrmBridgeCdmContext media_drm_bridge_cdm_context_; | 330 MediaDrmBridgeCdmContext media_drm_bridge_cdm_context_; |
| 320 | 331 |
| 321 // NOTE: Weak pointers must be invalidated before all other member variables. | 332 // NOTE: Weak pointers must be invalidated before all other member variables. |
| 322 base::WeakPtrFactory<MediaDrmBridge> weak_factory_; | 333 base::WeakPtrFactory<MediaDrmBridge> weak_factory_; |
| 323 | 334 |
| 324 DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); | 335 DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); |
| 325 }; | 336 }; |
| 326 | 337 |
| 327 } // namespace media | 338 } // namespace media |
| 328 | 339 |
| 329 #endif // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ | 340 #endif // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ |
| OLD | NEW |