diff options
Diffstat (limited to 'chromium/media/base/android/media_drm_bridge.h')
-rw-r--r-- | chromium/media/base/android/media_drm_bridge.h | 101 |
1 files changed, 86 insertions, 15 deletions
diff --git a/chromium/media/base/android/media_drm_bridge.h b/chromium/media/base/android/media_drm_bridge.h index 42b67909ca7..0399beb1d7d 100644 --- a/chromium/media/base/android/media_drm_bridge.h +++ b/chromium/media/base/android/media_drm_bridge.h @@ -10,8 +10,13 @@ #include <vector> #include "base/android/scoped_java_ref.h" +#include "base/callback.h" +#include "base/memory/scoped_ptr.h" #include "media/base/media_export.h" #include "media/base/media_keys.h" +#include "url/gurl.h" + +class GURL; namespace media { @@ -21,17 +26,38 @@ class MediaPlayerManager; // TODO(qinmin): implement all the functions in this class. class MEDIA_EXPORT MediaDrmBridge : public MediaKeys { public: + enum SecurityLevel { + SECURITY_LEVEL_NONE = 0, + SECURITY_LEVEL_1 = 1, + SECURITY_LEVEL_3 = 3, + }; + + typedef base::Callback<void(bool)> ResetCredentialsCB; + virtual ~MediaDrmBridge(); - // Returns a MediaDrmBridge instance if |uuid| is supported, or a NULL + // Returns a MediaDrmBridge instance if |scheme_uuid| is supported, or a NULL // pointer otherwise. - static MediaDrmBridge* Create(int media_keys_id, - const std::vector<uint8>& uuid, - MediaPlayerManager* manager); - - // Checks whether DRM is available. + static scoped_ptr<MediaDrmBridge> Create( + int media_keys_id, + const std::vector<uint8>& scheme_uuid, + const GURL& frame_url, + const std::string& security_level, + MediaPlayerManager* manager); + + // Checks whether MediaDRM is available. static bool IsAvailable(); + static bool IsSecurityLevelSupported(const std::vector<uint8>& scheme_uuid, + const std::string& security_level); + + static bool IsCryptoSchemeSupported(const std::vector<uint8>& scheme_uuid, + const std::string& container_mime_type); + + static bool IsSecureDecoderRequired(const std::string& security_level_str); + + static bool RegisterMediaDrmBridge(JNIEnv* env); + // MediaKeys implementations. virtual bool GenerateKeyRequest(const std::string& type, const uint8* init_data, @@ -41,33 +67,78 @@ class MEDIA_EXPORT MediaDrmBridge : public MediaKeys { const std::string& session_id) OVERRIDE; virtual void CancelKeyRequest(const std::string& session_id) OVERRIDE; - // Drm related message was received. - void OnDrmEvent(JNIEnv* env, jobject, jstring session_id, - jint event, jint extra, jstring data); + // Returns a MediaCrypto object if it's already created. Returns a null object + // otherwise. + base::android::ScopedJavaLocalRef<jobject> GetMediaCrypto(); + + // Sets callback which will be called when MediaCrypto is ready. + // If |closure| is null, previously set callback will be cleared. + void SetMediaCryptoReadyCB(const base::Closure& closure); + + // Called after a MediaCrypto object is created. + void OnMediaCryptoReady(JNIEnv* env, jobject); // Called after we got the response for GenerateKeyRequest(). - void OnKeyMessage(JNIEnv* env, jobject, jstring session_id, + void OnKeyMessage(JNIEnv* env, jobject, jstring j_session_id, jbyteArray message, jstring destination_url); - // Methods to create and release a MediaCrypto object. - base::android::ScopedJavaLocalRef<jobject> GetMediaCrypto(); + // Called when key is added. + void OnKeyAdded(JNIEnv* env, jobject, jstring j_session_id); + + // Called when error happens. + void OnKeyError(JNIEnv* env, jobject, jstring j_session_id); + + // Reset the device credentials. + void ResetDeviceCredentials(const ResetCredentialsCB& callback); + + // Called by the java object when credential reset is completed. + void OnResetDeviceCredentialsCompleted(JNIEnv* env, jobject, bool success); + + // Helper function to determine whether a protected surface is needed for the + // video playback. + bool IsProtectedSurfaceRequired(); int media_keys_id() const { return media_keys_id_; } + GURL frame_url() const { return frame_url_; } + + static void set_can_use_media_drm(bool can_use_media_drm) { + can_use_media_drm_ = can_use_media_drm; + } + private: + static bool IsSecureDecoderRequired(SecurityLevel security_level); + + static bool can_use_media_drm_; + MediaDrmBridge(int media_keys_id, - const std::vector<uint8>& uuid, + const std::vector<uint8>& scheme_uuid, + const GURL& frame_url, + const std::string& security_level, MediaPlayerManager* manager); - // Id of the MediaKeys object. + // Get the security level of the media. + SecurityLevel GetSecurityLevel(); + + // ID of the MediaKeys object. int media_keys_id_; // UUID of the key system. - std::vector<uint8> uuid_; + std::vector<uint8> scheme_uuid_; + + // media stream's frame URL. + const GURL frame_url_; + + // Java MediaDrm instance. + base::android::ScopedJavaGlobalRef<jobject> j_media_drm_; // Non-owned pointer. MediaPlayerManager* manager_; + base::Closure media_crypto_ready_cb_; + + ResetCredentialsCB reset_credentials_cb_; + DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); }; |