Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(465)

Unified Diff: media/base/android/media_drm_bridge.h

Issue 962793005: Adds MediaClientAndroid to support embedder/MediaDrmBridge interaction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: clean up code, implement actual Delegates for Widevine (Android) and Chromecast Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/base/android/media_drm_bridge.h
diff --git a/media/base/android/media_drm_bridge.h b/media/base/android/media_drm_bridge.h
index b767aa64a117f8941bbc281bb085dca069057852..3e1a31a496d62dd98c46f609fe9584e84b0066c7 100644
--- a/media/base/android/media_drm_bridge.h
+++ b/media/base/android/media_drm_bridge.h
@@ -27,6 +27,30 @@ class MediaPlayerManager;
// This class provides DRM services for android EME implementation.
class MEDIA_EXPORT MediaDrmBridge : public BrowserCdm {
public:
+ // Allows embedders to modify the Android DRM flow. Delegates are registered
+ // to a specific key system.
+ class Delegate {
+ public:
+ Delegate();
+ virtual ~Delegate();
+
+ // Invoked from CreateSession.
+ // If |init_data_out| is filled, it replaces |init_data| to send to the
+ // DRM plugin.
+ // If |optional_parameters_out| is filled, it is expected to be an
+ // even-length list of (key, value) pairs to send to the DRM plugin.
+ // Returns false if the request should be rejected.
+ virtual bool OnCreateSession(
+ const EmeInitDataType init_data_type,
+ const uint8* init_data,
+ int init_data_length,
+ std::vector<uint8>& init_data_out,
+ std::vector<std::string>& optional_parameters_out);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Delegate);
+ };
+
// TODO(ddorwin): These are specific to Widevine. http://crbug.com/459400
enum SecurityLevel {
SECURITY_LEVEL_NONE = 0,
@@ -56,6 +80,11 @@ class MEDIA_EXPORT MediaDrmBridge : public BrowserCdm {
const std::string& key_system,
const std::string& container_mime_type);
+ // Registers a delegate to handle requests with a given UUID.
+ static void RegisterDelegate(
+ const std::string& key_system,
+ Delegate* delegate);
+
static bool RegisterMediaDrmBridge(JNIEnv* env);
// Returns a MediaDrmBridge instance if |key_system| is supported, or a NULL
@@ -185,7 +214,8 @@ class MEDIA_EXPORT MediaDrmBridge : public BrowserCdm {
const SessionMessageCB& session_message_cb,
const SessionClosedCB& session_closed_cb,
const LegacySessionErrorCB& legacy_session_error_cb,
- const SessionKeysChangeCB& session_keys_change_cb);
+ const SessionKeysChangeCB& session_keys_change_cb,
+ Delegate* delegate);
static bool IsSecureDecoderRequired(SecurityLevel security_level);
@@ -198,6 +228,8 @@ class MEDIA_EXPORT MediaDrmBridge : public BrowserCdm {
// Java MediaDrm instance.
base::android::ScopedJavaGlobalRef<jobject> j_media_drm_;
+ Delegate* const delegate_;
xhwang 2015/04/09 22:37:10 nit: document about lifetime.
gunsch 2015/04/10 00:21:11 Done.
+
// Callbacks for firing session events.
SessionMessageCB session_message_cb_;
SessionClosedCB session_closed_cb_;

Powered by Google App Engine
This is Rietveld 408576698