summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorjrummell@chromium.org <jrummell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-31 21:03:13 +0000
committerjrummell@chromium.org <jrummell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-31 21:03:13 +0000
commitf6ef737cb988d80cf46d9a584c8961b0e00cfe28 (patch)
tree78f768c23ab7552c72908e1608397437bb3657a7 /content
parentd2382c9fd71b2a029f9499705d3ddb524e2e8e82 (diff)
downloadchromium_src-f6ef737cb988d80cf46d9a584c8961b0e00cfe28.zip
chromium_src-f6ef737cb988d80cf46d9a584c8961b0e00cfe28.tar.gz
chromium_src-f6ef737cb988d80cf46d9a584c8961b0e00cfe28.tar.bz2
Update Android EME IPC
The EME IPC message CreateSession() now uses an enum for session type rather than passing a string. Also updates SessionMessage() to use a GURL rather than just passing a string. BUG=327449,326663 TEST=Able to play encrypted media on Android Review URL: https://codereview.chromium.org/126633002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@248267 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/media/android/browser_media_player_manager.cc31
-rw-r--r--content/browser/media/android/browser_media_player_manager.h4
-rw-r--r--content/common/media/media_player_messages_android.h7
-rw-r--r--content/common/media/media_player_messages_enums_android.h6
-rw-r--r--content/renderer/media/android/proxy_media_keys.cc13
-rw-r--r--content/renderer/media/android/renderer_media_player_manager.cc12
-rw-r--r--content/renderer/media/android/renderer_media_player_manager.h4
7 files changed, 49 insertions, 28 deletions
diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc
index 04cde98..79cbe61 100644
--- a/content/browser/media/android/browser_media_player_manager.cc
+++ b/content/browser/media/android/browser_media_player_manager.cc
@@ -39,7 +39,6 @@ static const int kMediaPlayerThreshold = 1;
// prevent unnecessarily large messages from being passed around, and the sizes
// are somewhat arbitrary as the EME specification doesn't specify any limits.
static const size_t kEmeUuidSize = 16;
-static const size_t kEmeTypeMaximum = 50; // Type is a MIME type.
static const size_t kEmeInitDataMaximum = 10240; // 10 KB
static const size_t kEmeResponseMaximum = 10240; // 10 KB
@@ -427,7 +426,7 @@ void BrowserMediaPlayerManager::OnSessionMessage(
int media_keys_id,
uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url) {
+ const GURL& destination_url) {
Send(new MediaKeysMsg_SessionMessage(
routing_id(), media_keys_id, session_id, message, destination_url));
}
@@ -607,22 +606,34 @@ void BrowserMediaPlayerManager::OnInitializeCDM(
void BrowserMediaPlayerManager::OnCreateSession(
int media_keys_id,
uint32 session_id,
- const std::string& type,
+ MediaKeysHostMsg_CreateSession_Type type,
const std::vector<uint8>& init_data) {
- if (type.length() > kEmeTypeMaximum) {
- OnSessionError(
- media_keys_id, session_id, media::MediaKeys::kUnknownError, 0);
- return;
- }
if (init_data.size() > kEmeInitDataMaximum) {
OnSessionError(
media_keys_id, session_id, media::MediaKeys::kUnknownError, 0);
return;
}
+ // Convert the session type into a MIME type. "audio" and "video" don't
+ // matter, so using "video" for the MIME type.
+ // Ref: https://dvcs.w3.org/hg/html-media/raw-file/tip/encrypted-media/encrypted-media.html#dom-createsession
+ std::string mime_type;
+ switch (type) {
+ case CREATE_SESSION_TYPE_WEBM:
+ mime_type = "video/webm";
+ break;
+ case CREATE_SESSION_TYPE_MP4:
+ mime_type = "video/mp4";
+ break;
+ default:
+ NOTREACHED();
+ return;
+ }
+
if (CommandLine::ForCurrentProcess()
->HasSwitch(switches::kDisableInfobarForProtectedMediaIdentifier)) {
- CreateSessionIfPermitted(media_keys_id, session_id, type, init_data, true);
+ CreateSessionIfPermitted(
+ media_keys_id, session_id, mime_type, init_data, true);
return;
}
@@ -652,7 +663,7 @@ void BrowserMediaPlayerManager::OnCreateSession(
weak_ptr_factory_.GetWeakPtr(),
media_keys_id,
session_id,
- type,
+ mime_type,
init_data));
}
diff --git a/content/browser/media/android/browser_media_player_manager.h b/content/browser/media/android/browser_media_player_manager.h
index b8e24ae..9f38d42 100644
--- a/content/browser/media/android/browser_media_player_manager.h
+++ b/content/browser/media/android/browser_media_player_manager.h
@@ -101,7 +101,7 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
virtual void OnSessionMessage(int media_keys_id,
uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url) OVERRIDE;
+ const GURL& destination_url) OVERRIDE;
virtual void OnSessionReady(int media_keys_id, uint32 session_id) OVERRIDE;
virtual void OnSessionClosed(int media_keys_id, uint32 session_id) OVERRIDE;
virtual void OnSessionError(int media_keys_id,
@@ -142,7 +142,7 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
const GURL& frame_url);
void OnCreateSession(int media_keys_id,
uint32 session_id,
- const std::string& type,
+ MediaKeysHostMsg_CreateSession_Type type,
const std::vector<uint8>& init_data);
void OnUpdateSession(int media_keys_id,
uint32 session_id,
diff --git a/content/common/media/media_player_messages_android.h b/content/common/media/media_player_messages_android.h
index 145fc0b..4a5fbfc 100644
--- a/content/common/media/media_player_messages_android.h
+++ b/content/common/media/media_player_messages_android.h
@@ -65,6 +65,7 @@ IPC_STRUCT_TRAITS_BEGIN(media::SubsampleEntry)
IPC_STRUCT_TRAITS_END()
IPC_ENUM_TRAITS(MediaPlayerHostMsg_Initialize_Type)
+IPC_ENUM_TRAITS(MediaKeysHostMsg_CreateSession_Type)
// Chrome for Android seek message sequence is:
// 1. Renderer->Browser MediaPlayerHostMsg_Seek
@@ -286,9 +287,8 @@ IPC_MESSAGE_ROUTED3(MediaKeysHostMsg_InitializeCDM,
IPC_MESSAGE_ROUTED4(MediaKeysHostMsg_CreateSession,
int /* media_keys_id */,
uint32_t /* session_id */,
- std::string /* type */,
+ MediaKeysHostMsg_CreateSession_Type /* type */,
std::vector<uint8> /* init_data */)
-// TODO(jrummell): Use enum for type (http://crbug.com/327449)
IPC_MESSAGE_ROUTED3(MediaKeysHostMsg_UpdateSession,
int /* media_keys_id */,
@@ -311,8 +311,7 @@ IPC_MESSAGE_ROUTED4(MediaKeysMsg_SessionMessage,
int /* media_keys_id */,
uint32_t /* session_id */,
std::vector<uint8> /* message */,
- std::string /* destination_url */)
-// TODO(jrummell): Use GURL for destination_url (http://crbug.com/326663)
+ GURL /* destination_url */)
IPC_MESSAGE_ROUTED2(MediaKeysMsg_SessionReady,
int /* media_keys_id */,
diff --git a/content/common/media/media_player_messages_enums_android.h b/content/common/media/media_player_messages_enums_android.h
index 97818ff..56625a0 100644
--- a/content/common/media/media_player_messages_enums_android.h
+++ b/content/common/media/media_player_messages_enums_android.h
@@ -11,4 +11,10 @@ enum MediaPlayerHostMsg_Initialize_Type {
MEDIA_PLAYER_TYPE_MEDIA_SOURCE,
};
+// Dictates the session type when an EME session is created.
+enum MediaKeysHostMsg_CreateSession_Type {
+ CREATE_SESSION_TYPE_WEBM,
+ CREATE_SESSION_TYPE_MP4,
+};
+
#endif // CONTENT_COMMON_MEDIA_MEDIA_PLAYER_MESSAGES_ENUMS_ANDROID_H_
diff --git a/content/renderer/media/android/proxy_media_keys.cc b/content/renderer/media/android/proxy_media_keys.cc
index 85036b5..ff9d0c5 100644
--- a/content/renderer/media/android/proxy_media_keys.cc
+++ b/content/renderer/media/android/proxy_media_keys.cc
@@ -50,10 +50,21 @@ bool ProxyMediaKeys::CreateSession(uint32 session_id,
const std::string& type,
const uint8* init_data,
int init_data_length) {
+ MediaKeysHostMsg_CreateSession_Type session_type;
+ if (type == "audio/mp4" || type == "video/mp4") {
+ session_type = CREATE_SESSION_TYPE_MP4;
+ } else if (type == "audio/webm" || type == "video/webm") {
+ session_type = CREATE_SESSION_TYPE_WEBM;
+ } else {
+ DLOG(ERROR) << "Unsupported EME CreateSession type of " << type;
+ OnSessionError(session_id, media::MediaKeys::kUnknownError, 0);
+ return false;
+ }
+
manager_->CreateSession(
media_keys_id_,
session_id,
- type,
+ session_type,
std::vector<uint8>(init_data, init_data + init_data_length));
return true;
}
diff --git a/content/renderer/media/android/renderer_media_player_manager.cc b/content/renderer/media/android/renderer_media_player_manager.cc
index 8d3a069..2165536 100644
--- a/content/renderer/media/android/renderer_media_player_manager.cc
+++ b/content/renderer/media/android/renderer_media_player_manager.cc
@@ -17,7 +17,6 @@
// are somewhat arbitrary as the EME specification doesn't specify any limits.
static const size_t kEmeWebSessionIdMaximum = 512;
static const size_t kEmeMessageMaximum = 10240; // 10 KB
-static const size_t kEmeDestinationUrlMaximum = 2048; // 2 KB
namespace content {
@@ -247,7 +246,7 @@ void RendererMediaPlayerManager::InitializeCDM(int media_keys_id,
void RendererMediaPlayerManager::CreateSession(
int media_keys_id,
uint32 session_id,
- const std::string& type,
+ MediaKeysHostMsg_CreateSession_Type type,
const std::vector<uint8>& init_data) {
Send(new MediaKeysHostMsg_CreateSession(
routing_id(), media_keys_id, session_id, type, init_data));
@@ -292,21 +291,16 @@ void RendererMediaPlayerManager::OnSessionMessage(
int media_keys_id,
uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url) {
+ const GURL& destination_url) {
if (message.size() > kEmeMessageMaximum) {
OnSessionError(
media_keys_id, session_id, media::MediaKeys::kUnknownError, 0);
return;
}
- if (destination_url.length() > kEmeDestinationUrlMaximum) {
- OnSessionError(
- media_keys_id, session_id, media::MediaKeys::kUnknownError, 0);
- return;
- }
ProxyMediaKeys* media_keys = GetMediaKeys(media_keys_id);
if (media_keys)
- media_keys->OnSessionMessage(session_id, message, destination_url);
+ media_keys->OnSessionMessage(session_id, message, destination_url.spec());
}
void RendererMediaPlayerManager::OnSessionReady(int media_keys_id,
diff --git a/content/renderer/media/android/renderer_media_player_manager.h b/content/renderer/media/android/renderer_media_player_manager.h
index 614b875..197b97f 100644
--- a/content/renderer/media/android/renderer_media_player_manager.h
+++ b/content/renderer/media/android/renderer_media_player_manager.h
@@ -91,7 +91,7 @@ class RendererMediaPlayerManager : public RenderViewObserver {
const GURL& frame_url);
void CreateSession(int media_keys_id,
uint32 session_id,
- const std::string& type,
+ MediaKeysHostMsg_CreateSession_Type type,
const std::vector<uint8>& init_data);
void UpdateSession(int media_keys_id,
uint32 session_id,
@@ -165,7 +165,7 @@ class RendererMediaPlayerManager : public RenderViewObserver {
void OnSessionMessage(int media_keys_id,
uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url);
+ const GURL& destination_url);
void OnSessionReady(int media_keys_id, uint32 session_id);
void OnSessionClosed(int media_keys_id, uint32 session_id);
void OnSessionError(int media_keys_id,