summaryrefslogtreecommitdiff
path: root/chromium/media/base/android/media_drm_bridge.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/base/android/media_drm_bridge.h')
-rw-r--r--chromium/media/base/android/media_drm_bridge.h101
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);
};