| 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 #include <string> | 10 #include <string> | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 21 #include "media/base/media_export.h" | 21 #include "media/base/media_export.h" | 
| 22 #include "media/base/media_keys.h" | 22 #include "media/base/media_keys.h" | 
| 23 #include "media/base/player_tracker.h" | 23 #include "media/base/player_tracker.h" | 
| 24 #include "media/cdm/player_tracker_impl.h" | 24 #include "media/cdm/player_tracker_impl.h" | 
| 25 #include "url/gurl.h" | 25 #include "url/gurl.h" | 
| 26 | 26 | 
| 27 class GURL; | 27 class GURL; | 
| 28 | 28 | 
| 29 namespace media { | 29 namespace media { | 
| 30 | 30 | 
|  | 31 class MediaPermission; | 
|  | 32 | 
| 31 // Implements a CDM using Android MediaDrm API. | 33 // Implements a CDM using Android MediaDrm API. | 
| 32 // | 34 // | 
| 33 // Thread Safety: | 35 // Thread Safety: | 
| 34 // | 36 // | 
| 35 // This class lives on the thread where it is created. All methods must be | 37 // This class lives on the thread where it is created. All methods must be | 
| 36 // called on the |task_runner_| except for the PlayerTracker methods and | 38 // called on the |task_runner_| except for the PlayerTracker methods and | 
| 37 // SetMediaCryptoReadyCB(), which can be called on any thread. | 39 // SetMediaCryptoReadyCB(), which can be called on any thread. | 
| 38 | 40 | 
| 39 class MEDIA_EXPORT MediaDrmBridge : public MediaKeys, public PlayerTracker { | 41 class MEDIA_EXPORT MediaDrmBridge : public MediaKeys, public PlayerTracker { | 
| 40  public: | 42  public: | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 74 | 76 | 
| 75   // Returns the list of the platform-supported key system names that | 77   // Returns the list of the platform-supported key system names that | 
| 76   // are not handled by Chrome explicitly. | 78   // are not handled by Chrome explicitly. | 
| 77   static std::vector<std::string> GetPlatformKeySystemNames(); | 79   static std::vector<std::string> GetPlatformKeySystemNames(); | 
| 78 | 80 | 
| 79   // Returns a MediaDrmBridge instance if |key_system| and |security_level| are | 81   // Returns a MediaDrmBridge instance if |key_system| and |security_level| are | 
| 80   // supported, and nullptr otherwise. The default security level will be used | 82   // supported, and nullptr otherwise. The default security level will be used | 
| 81   // if |security_level| is SECURITY_LEVEL_DEFAULT. | 83   // if |security_level| is SECURITY_LEVEL_DEFAULT. | 
| 82   static scoped_refptr<MediaDrmBridge> Create( | 84   static scoped_refptr<MediaDrmBridge> Create( | 
| 83       const std::string& key_system, | 85       const std::string& key_system, | 
|  | 86       const GURL& security_origin, | 
| 84       SecurityLevel security_level, | 87       SecurityLevel security_level, | 
|  | 88       MediaPermission* media_permission, | 
| 85       const CreateFetcherCB& create_fetcher_cb, | 89       const CreateFetcherCB& create_fetcher_cb, | 
| 86       const SessionMessageCB& session_message_cb, | 90       const SessionMessageCB& session_message_cb, | 
| 87       const SessionClosedCB& session_closed_cb, | 91       const SessionClosedCB& session_closed_cb, | 
| 88       const LegacySessionErrorCB& legacy_session_error_cb, | 92       const LegacySessionErrorCB& legacy_session_error_cb, | 
| 89       const SessionKeysChangeCB& session_keys_change_cb, | 93       const SessionKeysChangeCB& session_keys_change_cb, | 
| 90       const SessionExpirationUpdateCB& session_expiration_update_cb); | 94       const SessionExpirationUpdateCB& session_expiration_update_cb); | 
| 91 | 95 | 
| 92   // Same as Create() except that no session callbacks are provided. This is | 96   // Same as Create() except that no session callbacks are provided. This is | 
| 93   // used when we need to use MediaDrmBridge without creating any sessions. | 97   // used when we need to use MediaDrmBridge without creating any sessions. | 
| 94   static scoped_refptr<MediaDrmBridge> CreateWithoutSessionSupport( | 98   static scoped_refptr<MediaDrmBridge> CreateWithoutSessionSupport( | 
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 240       JNIEnv* env, | 244       JNIEnv* env, | 
| 241       const base::android::JavaParamRef<jobject>&, | 245       const base::android::JavaParamRef<jobject>&, | 
| 242       bool success); | 246       bool success); | 
| 243 | 247 | 
| 244  private: | 248  private: | 
| 245   // For DeleteSoon() in DeleteOnCorrectThread(). | 249   // For DeleteSoon() in DeleteOnCorrectThread(). | 
| 246   friend class base::DeleteHelper<MediaDrmBridge>; | 250   friend class base::DeleteHelper<MediaDrmBridge>; | 
| 247 | 251 | 
| 248   static scoped_refptr<MediaDrmBridge> CreateInternal( | 252   static scoped_refptr<MediaDrmBridge> CreateInternal( | 
| 249       const std::string& key_system, | 253       const std::string& key_system, | 
|  | 254       const GURL& security_origin, | 
| 250       SecurityLevel security_level, | 255       SecurityLevel security_level, | 
|  | 256       MediaPermission* media_permission, | 
| 251       const CreateFetcherCB& create_fetcher_cb, | 257       const CreateFetcherCB& create_fetcher_cb, | 
| 252       const SessionMessageCB& session_message_cb, | 258       const SessionMessageCB& session_message_cb, | 
| 253       const SessionClosedCB& session_closed_cb, | 259       const SessionClosedCB& session_closed_cb, | 
| 254       const LegacySessionErrorCB& legacy_session_error_cb, | 260       const LegacySessionErrorCB& legacy_session_error_cb, | 
| 255       const SessionKeysChangeCB& session_keys_change_cb, | 261       const SessionKeysChangeCB& session_keys_change_cb, | 
| 256       const SessionExpirationUpdateCB& session_expiration_update_cb); | 262       const SessionExpirationUpdateCB& session_expiration_update_cb); | 
| 257 | 263 | 
| 258   // Constructs a MediaDrmBridge for |scheme_uuid| and |security_level|. The | 264   // Constructs a MediaDrmBridge for |scheme_uuid| and |security_level|. The | 
| 259   // default security level will be used if |security_level| is | 265   // default security level will be used if |security_level| is | 
| 260   // SECURITY_LEVEL_DEFAULT. Sessions should not be created if session callbacks | 266   // SECURITY_LEVEL_DEFAULT. Sessions should not be created if session callbacks | 
| 261   // are null. | 267   // are null. | 
| 262   MediaDrmBridge(const std::vector<uint8_t>& scheme_uuid, | 268   MediaDrmBridge(const std::vector<uint8_t>& scheme_uuid, | 
|  | 269                  const GURL& security_origin, | 
| 263                  SecurityLevel security_level, | 270                  SecurityLevel security_level, | 
|  | 271                  MediaPermission* media_permission, | 
| 264                  const CreateFetcherCB& create_fetcher_cb, | 272                  const CreateFetcherCB& create_fetcher_cb, | 
| 265                  const SessionMessageCB& session_message_cb, | 273                  const SessionMessageCB& session_message_cb, | 
| 266                  const SessionClosedCB& session_closed_cb, | 274                  const SessionClosedCB& session_closed_cb, | 
| 267                  const LegacySessionErrorCB& legacy_session_error_cb, | 275                  const LegacySessionErrorCB& legacy_session_error_cb, | 
| 268                  const SessionKeysChangeCB& session_keys_change_cb, | 276                  const SessionKeysChangeCB& session_keys_change_cb, | 
| 269                  const SessionExpirationUpdateCB& session_expiration_update_cb); | 277                  const SessionExpirationUpdateCB& session_expiration_update_cb); | 
| 270 | 278 | 
| 271   ~MediaDrmBridge() override; | 279   ~MediaDrmBridge() override; | 
| 272 | 280 | 
| 273   static bool IsSecureDecoderRequired(SecurityLevel security_level); | 281   static bool IsSecureDecoderRequired(SecurityLevel security_level); | 
| 274 | 282 | 
| 275   // Get the security level of the media. | 283   // Get the security level of the media. | 
| 276   SecurityLevel GetSecurityLevel(); | 284   SecurityLevel GetSecurityLevel(); | 
| 277 | 285 | 
| 278   // A helper method to create a JavaObjectPtr. | 286   // A helper method to create a JavaObjectPtr. | 
| 279   JavaObjectPtr CreateJavaObjectPtr(jobject object); | 287   JavaObjectPtr CreateJavaObjectPtr(jobject object); | 
| 280 | 288 | 
| 281   // A helper method that is called when MediaCrypto is ready. | 289   // A helper method that is called when MediaCrypto is ready. | 
| 282   void NotifyMediaCryptoReady(JavaObjectPtr j_media_crypto); | 290   void NotifyMediaCryptoReady(JavaObjectPtr j_media_crypto); | 
| 283 | 291 | 
|  | 292   void CreateSessionAndGenerateRequestIfPermitted( | 
|  | 293       EmeInitDataType init_data_type, | 
|  | 294       const std::vector<uint8_t>& init_data, | 
|  | 295       scoped_ptr<NewSessionCdmPromise> promise, | 
|  | 296       bool permitted); | 
|  | 297 | 
| 284   // Sends HTTP provisioning request to a provisioning server. | 298   // Sends HTTP provisioning request to a provisioning server. | 
| 285   void SendProvisioningRequest(const std::string& default_url, | 299   void SendProvisioningRequest(const std::string& default_url, | 
| 286                                const std::string& request_data); | 300                                const std::string& request_data); | 
| 287 | 301 | 
| 288   // Process the data received by provisioning server. | 302   // Process the data received by provisioning server. | 
| 289   void ProcessProvisionResponse(bool success, const std::string& response); | 303   void ProcessProvisionResponse(bool success, const std::string& response); | 
| 290 | 304 | 
| 291   // Called on the |task_runner_| when there is additional usable key. | 305   // Called on the |task_runner_| when there is additional usable key. | 
| 292   void OnHasAdditionalUsableKey(); | 306   void OnHasAdditionalUsableKey(); | 
| 293 | 307 | 
| 294   // UUID of the key system. | 308   // UUID of the key system. | 
| 295   std::vector<uint8_t> scheme_uuid_; | 309   std::vector<uint8_t> scheme_uuid_; | 
| 296 | 310 | 
|  | 311   GURL security_origin_; | 
|  | 312 | 
| 297   // Java MediaDrm instance. | 313   // Java MediaDrm instance. | 
| 298   base::android::ScopedJavaGlobalRef<jobject> j_media_drm_; | 314   base::android::ScopedJavaGlobalRef<jobject> j_media_drm_; | 
| 299 | 315 | 
| 300   // Java MediaCrypto instance. Possible values are: | 316   // Java MediaCrypto instance. Possible values are: | 
| 301   // !j_media_crypto_: | 317   // !j_media_crypto_: | 
| 302   //   MediaCrypto creation has not been notified via NotifyMediaCryptoReady(). | 318   //   MediaCrypto creation has not been notified via NotifyMediaCryptoReady(). | 
| 303   // !j_media_crypto_->is_null(): | 319   // !j_media_crypto_->is_null(): | 
| 304   //   MediaCrypto creation succeeded and it has been notified. | 320   //   MediaCrypto creation succeeded and it has been notified. | 
| 305   // j_media_crypto_->is_null(): | 321   // j_media_crypto_->is_null(): | 
| 306   //   MediaCrypto creation failed and it has been notified. | 322   //   MediaCrypto creation failed and it has been notified. | 
| 307   JavaObjectPtr j_media_crypto_; | 323   JavaObjectPtr j_media_crypto_; | 
| 308 | 324 | 
|  | 325   MediaPermission* media_permission_; | 
|  | 326 | 
| 309   // The callback to create a ProvisionFetcher. | 327   // The callback to create a ProvisionFetcher. | 
| 310   CreateFetcherCB create_fetcher_cb_; | 328   CreateFetcherCB create_fetcher_cb_; | 
| 311 | 329 | 
| 312   // The ProvisionFetcher that requests and receives provisioning data. | 330   // The ProvisionFetcher that requests and receives provisioning data. | 
| 313   // Non-null iff when a provision request is pending. | 331   // Non-null iff when a provision request is pending. | 
| 314   scoped_ptr<ProvisionFetcher> provision_fetcher_; | 332   scoped_ptr<ProvisionFetcher> provision_fetcher_; | 
| 315 | 333 | 
| 316   // Callbacks for firing session events. | 334   // Callbacks for firing session events. | 
| 317   SessionMessageCB session_message_cb_; | 335   SessionMessageCB session_message_cb_; | 
| 318   SessionClosedCB session_closed_cb_; | 336   SessionClosedCB session_closed_cb_; | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 335 | 353 | 
| 336   // NOTE: Weak pointers must be invalidated before all other member variables. | 354   // NOTE: Weak pointers must be invalidated before all other member variables. | 
| 337   base::WeakPtrFactory<MediaDrmBridge> weak_factory_; | 355   base::WeakPtrFactory<MediaDrmBridge> weak_factory_; | 
| 338 | 356 | 
| 339   DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); | 357   DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); | 
| 340 }; | 358 }; | 
| 341 | 359 | 
| 342 }  // namespace media | 360 }  // namespace media | 
| 343 | 361 | 
| 344 #endif  // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ | 362 #endif  // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ | 
| OLD | NEW | 
|---|