diff options
author | jrummell@chromium.org <jrummell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-31 21:03:13 +0000 |
---|---|---|
committer | jrummell@chromium.org <jrummell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-31 21:03:13 +0000 |
commit | f6ef737cb988d80cf46d9a584c8961b0e00cfe28 (patch) | |
tree | 78f768c23ab7552c72908e1608397437bb3657a7 /content | |
parent | d2382c9fd71b2a029f9499705d3ddb524e2e8e82 (diff) | |
download | chromium_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')
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, |