diff options
author | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-31 00:35:48 +0000 |
---|---|---|
committer | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-31 00:35:48 +0000 |
commit | 305ecfc7fa649d5cde58a33db615461fe161382d (patch) | |
tree | f36da3a902fe7f944d43f55e0d63d7c1d389d391 /content/renderer | |
parent | cf8b0cc641969f18176ca87f693f82b5c2092d6e (diff) | |
download | chromium_src-305ecfc7fa649d5cde58a33db615461fe161382d.zip chromium_src-305ecfc7fa649d5cde58a33db615461fe161382d.tar.gz chromium_src-305ecfc7fa649d5cde58a33db615461fe161382d.tar.bz2 |
Merge WebMediaPlayerProxy and RendererMediaPlayerManager.
BUG=312358
TEST=MSE/EME player still works on Chrome for Android. No functionality change.
R=jochen@chromium.org, qinmin@chromium.org
Review URL: https://codereview.chromium.org/48773005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231957 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer')
14 files changed, 448 insertions, 541 deletions
diff --git a/content/renderer/media/android/proxy_media_keys.cc b/content/renderer/media/android/proxy_media_keys.cc index 6de8e8d..2df2dbc6 100644 --- a/content/renderer/media/android/proxy_media_keys.cc +++ b/content/renderer/media/android/proxy_media_keys.cc @@ -8,22 +8,22 @@ #include "base/basictypes.h" #include "base/logging.h" -#include "content/renderer/media/android/webmediaplayer_proxy_android.h" +#include "content/renderer/media/android/renderer_media_player_manager.h" #include "content/renderer/media/crypto/key_systems.h" namespace content { -ProxyMediaKeys::ProxyMediaKeys(WebMediaPlayerProxyAndroid* proxy, +ProxyMediaKeys::ProxyMediaKeys(RendererMediaPlayerManager* manager, int media_keys_id, const media::KeyAddedCB& key_added_cb, const media::KeyErrorCB& key_error_cb, const media::KeyMessageCB& key_message_cb) - : proxy_(proxy), + : manager_(manager), media_keys_id_(media_keys_id), key_added_cb_(key_added_cb), key_error_cb_(key_error_cb), key_message_cb_(key_message_cb) { - DCHECK(proxy_); + DCHECK(manager_); } ProxyMediaKeys::~ProxyMediaKeys() { @@ -36,14 +36,14 @@ void ProxyMediaKeys::InitializeCDM(const std::string& key_system, #elif defined(OS_ANDROID) std::vector<uint8> uuid = GetUUID(key_system); DCHECK(!uuid.empty()); - proxy_->InitializeCDM(media_keys_id_, this, uuid, frame_url); + manager_->InitializeCDM(media_keys_id_, this, uuid, frame_url); #endif } bool ProxyMediaKeys::GenerateKeyRequest(const std::string& type, const uint8* init_data, int init_data_length) { - proxy_->GenerateKeyRequest( + manager_->GenerateKeyRequest( media_keys_id_, type, std::vector<uint8>(init_data, init_data + init_data_length)); @@ -53,14 +53,14 @@ bool ProxyMediaKeys::GenerateKeyRequest(const std::string& type, void ProxyMediaKeys::AddKey(const uint8* key, int key_length, const uint8* init_data, int init_data_length, const std::string& session_id) { - proxy_->AddKey(media_keys_id_, + manager_->AddKey(media_keys_id_, std::vector<uint8>(key, key + key_length), std::vector<uint8>(init_data, init_data + init_data_length), session_id); } void ProxyMediaKeys::CancelKeyRequest(const std::string& session_id) { - proxy_->CancelKeyRequest(media_keys_id_, session_id); + manager_->CancelKeyRequest(media_keys_id_, session_id); } void ProxyMediaKeys::OnKeyAdded(const std::string& session_id) { diff --git a/content/renderer/media/android/proxy_media_keys.h b/content/renderer/media/android/proxy_media_keys.h index 0fba181..10ebf41 100644 --- a/content/renderer/media/android/proxy_media_keys.h +++ b/content/renderer/media/android/proxy_media_keys.h @@ -12,15 +12,15 @@ class GURL; namespace content { -class WebMediaPlayerProxyAndroid; +class RendererMediaPlayerManager; -// MediaKeys wrapper of the WebMediaPlayerProxyAndroid. -// TODO(xhwang): Remove |player_id| from WebMediaPlayerProxyAndroid, make -// WebMediaPlayerProxyAndroid a subclass of media::MediaKeys, then remove this -// class! +// A MediaKeys proxy that wraps the EME part of RendererMediaPlayerManager. +// TODO(xhwang): Instead of accessing RendererMediaPlayerManager directly, let +// RendererMediaPlayerManager return a MediaKeys object that can be used by +// ProxyDecryptor directly. Then we can remove this class! class ProxyMediaKeys : public media::MediaKeys { public: - ProxyMediaKeys(WebMediaPlayerProxyAndroid* proxy, + ProxyMediaKeys(RendererMediaPlayerManager* proxy, int media_keys_id, const media::KeyAddedCB& key_added_cb, const media::KeyErrorCB& key_error_cb, @@ -48,13 +48,13 @@ class ProxyMediaKeys : public media::MediaKeys { const std::string& destination_url); private: - WebMediaPlayerProxyAndroid* proxy_; + RendererMediaPlayerManager* manager_; int media_keys_id_; media::KeyAddedCB key_added_cb_; media::KeyErrorCB key_error_cb_; media::KeyMessageCB key_message_cb_; - DISALLOW_COPY_AND_ASSIGN (ProxyMediaKeys); + DISALLOW_COPY_AND_ASSIGN(ProxyMediaKeys); }; } // namespace content diff --git a/content/renderer/media/android/renderer_media_player_manager.cc b/content/renderer/media/android/renderer_media_player_manager.cc index 440cec2..0d2392f 100644 --- a/content/renderer/media/android/renderer_media_player_manager.cc +++ b/content/renderer/media/android/renderer_media_player_manager.cc @@ -4,15 +4,20 @@ #include "content/renderer/media/android/renderer_media_player_manager.h" +#include "base/bind.h" +#include "base/message_loop/message_loop.h" +#include "content/common/media/media_player_messages_android.h" +#include "content/renderer/media/android/proxy_media_keys.h" +#include "content/renderer/media/android/renderer_media_player_manager.h" #include "content/renderer/media/android/webmediaplayer_android.h" #include "ui/gfx/rect_f.h" namespace content { -RendererMediaPlayerManager::RendererMediaPlayerManager() - : next_media_player_id_(0), - fullscreen_frame_(NULL) { -} +RendererMediaPlayerManager::RendererMediaPlayerManager(RenderView* render_view) + : RenderViewObserver(render_view), + next_media_player_id_(0), + fullscreen_frame_(NULL) {} RendererMediaPlayerManager::~RendererMediaPlayerManager() { std::map<int, WebMediaPlayerAndroid*>::iterator player_it; @@ -21,6 +26,271 @@ RendererMediaPlayerManager::~RendererMediaPlayerManager() { WebMediaPlayerAndroid* player = player_it->second; player->Detach(); } + + Send(new MediaPlayerHostMsg_DestroyAllMediaPlayers(routing_id())); +} + +bool RendererMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(RendererMediaPlayerManager, msg) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaMetadataChanged, + OnMediaMetadataChanged) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaPlaybackCompleted, + OnMediaPlaybackCompleted) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaBufferingUpdate, + OnMediaBufferingUpdate) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_SeekRequest, OnSeekRequest) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_SeekCompleted, OnSeekCompleted) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaError, OnMediaError) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaVideoSizeChanged, + OnVideoSizeChanged) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaTimeUpdate, OnTimeUpdate) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaPlayerReleased, + OnMediaPlayerReleased) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_ConnectedToRemoteDevice, + OnConnectedToRemoteDevice) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_DisconnectedFromRemoteDevice, + OnDisconnectedFromRemoteDevice) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidEnterFullscreen, OnDidEnterFullscreen) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidExitFullscreen, OnDidExitFullscreen) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPlay, OnPlayerPlay) + IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPause, OnPlayerPause) + IPC_MESSAGE_HANDLER(MediaKeysMsg_KeyAdded, OnKeyAdded) + IPC_MESSAGE_HANDLER(MediaKeysMsg_KeyError, OnKeyError) + IPC_MESSAGE_HANDLER(MediaKeysMsg_KeyMessage, OnKeyMessage) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void RendererMediaPlayerManager::Initialize( + MediaPlayerHostMsg_Initialize_Type type, + int player_id, + const GURL& url, + const GURL& first_party_for_cookies, + int demuxer_client_id) { + Send(new MediaPlayerHostMsg_Initialize( + routing_id(), type, player_id, url, first_party_for_cookies, + demuxer_client_id)); +} + +void RendererMediaPlayerManager::Start(int player_id) { + Send(new MediaPlayerHostMsg_Start(routing_id(), player_id)); +} + +void RendererMediaPlayerManager::Pause( + int player_id, + bool is_media_related_action) { + Send(new MediaPlayerHostMsg_Pause( + routing_id(), player_id, is_media_related_action)); +} + +void RendererMediaPlayerManager::Seek( + int player_id, + const base::TimeDelta& time) { + Send(new MediaPlayerHostMsg_Seek(routing_id(), player_id, time)); +} + +void RendererMediaPlayerManager::SetVolume(int player_id, double volume) { + Send(new MediaPlayerHostMsg_SetVolume(routing_id(), player_id, volume)); +} + +void RendererMediaPlayerManager::ReleaseResources(int player_id) { + Send(new MediaPlayerHostMsg_Release(routing_id(), player_id)); +} + +void RendererMediaPlayerManager::DestroyPlayer(int player_id) { + Send(new MediaPlayerHostMsg_DestroyMediaPlayer(routing_id(), player_id)); +} + +void RendererMediaPlayerManager::OnMediaMetadataChanged( + int player_id, + base::TimeDelta duration, + int width, + int height, + bool success) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnMediaMetadataChanged(duration, width, height, success); +} + +void RendererMediaPlayerManager::OnMediaPlaybackCompleted(int player_id) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnPlaybackComplete(); +} + +void RendererMediaPlayerManager::OnMediaBufferingUpdate(int player_id, + int percent) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnBufferingUpdate(percent); +} + +void RendererMediaPlayerManager::OnSeekRequest( + int player_id, + const base::TimeDelta& time_to_seek) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnSeekRequest(time_to_seek); +} + +void RendererMediaPlayerManager::OnSeekCompleted( + int player_id, + const base::TimeDelta& current_time) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnSeekComplete(current_time); +} + +void RendererMediaPlayerManager::OnMediaError(int player_id, int error) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnMediaError(error); +} + +void RendererMediaPlayerManager::OnVideoSizeChanged(int player_id, + int width, + int height) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnVideoSizeChanged(width, height); +} + +void RendererMediaPlayerManager::OnTimeUpdate(int player_id, + base::TimeDelta current_time) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnTimeUpdate(current_time); +} + +void RendererMediaPlayerManager::OnMediaPlayerReleased(int player_id) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnPlayerReleased(); +} + +void RendererMediaPlayerManager::OnConnectedToRemoteDevice(int player_id) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnConnectedToRemoteDevice(); +} + +void RendererMediaPlayerManager::OnDisconnectedFromRemoteDevice(int player_id) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnDisconnectedFromRemoteDevice(); +} + +void RendererMediaPlayerManager::OnDidEnterFullscreen(int player_id) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnDidEnterFullscreen(); +} + +void RendererMediaPlayerManager::OnDidExitFullscreen(int player_id) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnDidExitFullscreen(); +} + +void RendererMediaPlayerManager::OnPlayerPlay(int player_id) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnMediaPlayerPlay(); +} + +void RendererMediaPlayerManager::OnPlayerPause(int player_id) { + WebMediaPlayerAndroid* player = GetMediaPlayer(player_id); + if (player) + player->OnMediaPlayerPause(); +} + +void RendererMediaPlayerManager::EnterFullscreen(int player_id) { + Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id)); +} + +void RendererMediaPlayerManager::ExitFullscreen(int player_id) { + Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id)); +} + +#if defined(GOOGLE_TV) +void RendererMediaPlayerManager::RequestExternalSurface( + int player_id, + const gfx::RectF& geometry) { + Send(new MediaPlayerHostMsg_NotifyExternalSurface( + routing_id(), player_id, true, geometry)); +} + +void RendererMediaPlayerManager::DidCommitCompositorFrame() { + std::map<int, gfx::RectF> geometry_change; + manager_->RetrieveGeometryChanges(&geometry_change); + for (std::map<int, gfx::RectF>::iterator it = geometry_change.begin(); + it != geometry_change.end(); + ++it) { + Send(new MediaPlayerHostMsg_NotifyExternalSurface( + routing_id(), it->first, false, it->second)); + } +} +#endif + +void RendererMediaPlayerManager::InitializeCDM(int media_keys_id, + ProxyMediaKeys* media_keys, + const std::vector<uint8>& uuid, + const GURL& frame_url) { + RegisterMediaKeys(media_keys_id, media_keys); + Send(new MediaKeysHostMsg_InitializeCDM( + routing_id(), media_keys_id, uuid, frame_url)); +} + +void RendererMediaPlayerManager::GenerateKeyRequest( + int media_keys_id, + const std::string& type, + const std::vector<uint8>& init_data) { + Send(new MediaKeysHostMsg_GenerateKeyRequest( + routing_id(), media_keys_id, type, init_data)); +} + +void RendererMediaPlayerManager::AddKey(int media_keys_id, + const std::vector<uint8>& key, + const std::vector<uint8>& init_data, + const std::string& session_id) { + Send(new MediaKeysHostMsg_AddKey( + routing_id(), media_keys_id, key, init_data, session_id)); +} + +void RendererMediaPlayerManager::CancelKeyRequest( + int media_keys_id, + const std::string& session_id) { + Send(new MediaKeysHostMsg_CancelKeyRequest( + routing_id(), media_keys_id, session_id)); +} + +void RendererMediaPlayerManager::OnKeyAdded(int media_keys_id, + const std::string& session_id) { + ProxyMediaKeys* media_keys = GetMediaKeys(media_keys_id); + if (media_keys) + media_keys->OnKeyAdded(session_id); +} + +void RendererMediaPlayerManager::OnKeyError( + int media_keys_id, + const std::string& session_id, + media::MediaKeys::KeyError error_code, + int system_code) { + ProxyMediaKeys* media_keys = GetMediaKeys(media_keys_id); + if (media_keys) + media_keys->OnKeyError(session_id, error_code, system_code); +} + +void RendererMediaPlayerManager::OnKeyMessage( + int media_keys_id, + const std::string& session_id, + const std::vector<uint8>& message, + const std::string& destination_url) { + ProxyMediaKeys* media_keys = GetMediaKeys(media_keys_id); + if (media_keys) + media_keys->OnKeyMessage(session_id, message, destination_url); } int RendererMediaPlayerManager::RegisterMediaPlayer( diff --git a/content/renderer/media/android/renderer_media_player_manager.h b/content/renderer/media/android/renderer_media_player_manager.h index bc878d8..4a16b83 100644 --- a/content/renderer/media/android/renderer_media_player_manager.h +++ b/content/renderer/media/android/renderer_media_player_manager.h @@ -6,8 +6,20 @@ #define CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_MEDIA_PLAYER_MANAGER_H_ #include <map> +#include <string> +#include <vector> #include "base/basictypes.h" +#include "base/time/time.h" +#include "content/common/media/media_player_messages_enums_android.h" +#include "content/public/renderer/render_view_observer.h" +#include "media/base/android/media_player_android.h" +#include "media/base/media_keys.h" +#include "url/gurl.h" + +#if defined(GOOGLE_TV) +#include "ui/gfx/rect_f.h" +#endif namespace WebKit { class WebFrame; @@ -24,49 +36,140 @@ class WebMediaPlayerAndroid; // Class for managing all the WebMediaPlayerAndroid objects in the same // RenderView. -class RendererMediaPlayerManager { +class RendererMediaPlayerManager : public RenderViewObserver { public: - RendererMediaPlayerManager(); + // Constructs a RendererMediaPlayerManager object for the |render_view|. + RendererMediaPlayerManager(RenderView* render_view); virtual ~RendererMediaPlayerManager(); - // Register and unregister a WebMediaPlayerAndroid object. + // RenderViewObserver overrides. + virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; + + // Initializes a MediaPlayerAndroid object in browser process. + void Initialize(MediaPlayerHostMsg_Initialize_Type type, + int player_id, + const GURL& url, + const GURL& first_party_for_cookies, + int demuxer_client_id); + + // Starts the player. + void Start(int player_id); + + // Pauses the player. + // is_media_related_action should be true if this pause is coming from an + // an action that explicitly pauses the video (user pressing pause, JS, etc.) + // Otherwise it should be false if Pause is being called due to other reasons + // (cleanup, freeing resources, etc.) + void Pause(int player_id, bool is_media_related_action); + + // Performs seek on the player. + void Seek(int player_id, const base::TimeDelta& time); + + // Sets the player volume. + void SetVolume(int player_id, double volume); + + // Releases resources for the player. + void ReleaseResources(int player_id); + + // Destroys the player in the browser process + void DestroyPlayer(int player_id); + + // Requests the player to enter fullscreen. + void EnterFullscreen(int player_id); + + // Requests the player to exit fullscreen. + void ExitFullscreen(int player_id); + +#if defined(GOOGLE_TV) + // Requests an external surface for out-of-band compositing. + void RequestExternalSurface(int player_id, const gfx::RectF& geometry); + + // RenderViewObserver overrides. + virtual void DidCommitCompositorFrame() OVERRIDE; +#endif + + // Encrypted media related methods. + void InitializeCDM(int media_keys_id, + ProxyMediaKeys* media_keys, + const std::vector<uint8>& uuid, + const GURL& frame_url); + void GenerateKeyRequest(int media_keys_id, + const std::string& type, + const std::vector<uint8>& init_data); + void AddKey(int media_keys_id, + const std::vector<uint8>& key, + const std::vector<uint8>& init_data, + const std::string& session_id); + void CancelKeyRequest(int media_keys_id, const std::string& session_id); + + // Registers and unregisters a WebMediaPlayerAndroid object. int RegisterMediaPlayer(WebMediaPlayerAndroid* player); void UnregisterMediaPlayer(int player_id); - // Register a ProxyMediaKeys object. There must be a WebMediaPlayerAndroid + // Registers a ProxyMediaKeys object. There must be a WebMediaPlayerAndroid // object already registered for this id, and it is unregistered when the // player is unregistered. For now |media_keys_id| is the same as player_id // used in other methods. void RegisterMediaKeys(int media_keys_id, ProxyMediaKeys* media_keys); - // Release the media resources managed by this object when a video + // Releases the media resources managed by this object when a video // is playing. void ReleaseVideoResources(); - // Check whether a player can enter fullscreen. + // Checks whether a player can enter fullscreen. bool CanEnterFullscreen(WebKit::WebFrame* frame); // Called when a player entered or exited fullscreen. void DidEnterFullscreen(WebKit::WebFrame* frame); void DidExitFullscreen(); - // Check whether the Webframe is in fullscreen. + // Checks whether the Webframe is in fullscreen. bool IsInFullscreen(WebKit::WebFrame* frame); - // Get the pointer to WebMediaPlayerAndroid given the |player_id|. + // Gets the pointer to WebMediaPlayerAndroid given the |player_id|. WebMediaPlayerAndroid* GetMediaPlayer(int player_id); - // Get the pointer to ProxyMediaKeys given the |media_keys_id|. + // Gets the pointer to ProxyMediaKeys given the |media_keys_id|. ProxyMediaKeys* GetMediaKeys(int media_keys_id); #if defined(GOOGLE_TV) - // Get the list of media players with video geometry changes. + // Gets the list of media players with video geometry changes. void RetrieveGeometryChanges(std::map<int, gfx::RectF>* changes); #endif private: + // Message handlers. + void OnMediaMetadataChanged(int player_id, + base::TimeDelta duration, + int width, + int height, + bool success); + void OnMediaPlaybackCompleted(int player_id); + void OnMediaBufferingUpdate(int player_id, int percent); + void OnSeekRequest(int player_id, const base::TimeDelta& time_to_seek); + void OnSeekCompleted(int player_id, const base::TimeDelta& current_time); + void OnMediaError(int player_id, int error); + void OnVideoSizeChanged(int player_id, int width, int height); + void OnTimeUpdate(int player_id, base::TimeDelta current_time); + void OnMediaPlayerReleased(int player_id); + void OnConnectedToRemoteDevice(int player_id); + void OnDisconnectedFromRemoteDevice(int player_id); + void OnDidExitFullscreen(int player_id); + void OnDidEnterFullscreen(int player_id); + void OnPlayerPlay(int player_id); + void OnPlayerPause(int player_id); + void OnKeyAdded(int media_keys_id, const std::string& session_id); + void OnKeyError(int media_keys_id, + const std::string& session_id, + media::MediaKeys::KeyError error_code, + int system_code); + void OnKeyMessage(int media_keys_id, + const std::string& session_id, + const std::vector<uint8>& message, + const std::string& destination_url); + // Info for all available WebMediaPlayerAndroid on a page; kept so that - // we can enumerate them to send updates about tab focus and visibily. + // we can enumerate them to send updates about tab focus and visibility. std::map<int, WebMediaPlayerAndroid*> media_players_; // Info for all available ProxyMediaKeys. There must be at most one diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc index aafbb14..01bfa71 100644 --- a/content/renderer/media/android/webmediaplayer_android.cc +++ b/content/renderer/media/android/webmediaplayer_android.cc @@ -17,7 +17,6 @@ #include "content/renderer/media/android/proxy_media_keys.h" #include "content/renderer/media/android/renderer_demuxer_android.h" #include "content/renderer/media/android/renderer_media_player_manager.h" -#include "content/renderer/media/android/webmediaplayer_proxy_android.h" #include "content/renderer/media/crypto/key_systems.h" #include "content/renderer/media/webmediaplayer_delegate.h" #include "content/renderer/media/webmediaplayer_util.h" @@ -80,7 +79,6 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( WebKit::WebMediaPlayerClient* client, base::WeakPtr<WebMediaPlayerDelegate> delegate, RendererMediaPlayerManager* manager, - WebMediaPlayerProxyAndroid* proxy, StreamTextureFactory* factory, const scoped_refptr<base::MessageLoopProxy>& media_loop, media::MediaLog* media_log) @@ -118,12 +116,10 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( #endif // defined(GOOGLE_TV) pending_playback_(false), player_type_(MEDIA_PLAYER_TYPE_URL), - proxy_(proxy), current_time_(0), is_remote_(false), media_log_(media_log), weak_factory_(this) { - DCHECK(proxy_); DCHECK(manager_); DCHECK(main_thread_checker_.CalledOnValidThread()); @@ -159,7 +155,7 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( client, frame, #else - proxy_, + manager_, player_id_, // TODO(xhwang): Use media_keys_id when MediaKeys are // separated from WebMediaPlayer. #endif // defined(ENABLE_PEPPER_CDMS) @@ -175,8 +171,10 @@ WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { SetVideoFrameProviderClient(NULL); client_->setWebLayer(NULL); - if (proxy_) - proxy_->DestroyPlayer(player_id_); + if (manager_) { + manager_->DestroyPlayer(player_id_); + manager_->UnregisterMediaPlayer(player_id_); + } if (stream_id_) stream_texture_factory_->DestroyStreamTexture(texture_id_); @@ -188,9 +186,6 @@ WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { context->deleteTexture(remote_playback_texture_id_); } - if (manager_) - manager_->UnregisterMediaPlayer(player_id_); - if (base::MessageLoop::current()) base::MessageLoop::current()->RemoveDestructionObserver(this); @@ -296,11 +291,11 @@ void WebMediaPlayerAndroid::load(LoadType load_type, url_ = url; GURL first_party_url = frame_->document().firstPartyForCookies(); - proxy_->Initialize( + manager_->Initialize( player_type_, player_id_, url, first_party_url, demuxer_client_id); if (manager_->IsInFullscreen(frame_)) - proxy_->EnterFullscreen(player_id_); + manager_->EnterFullscreen(player_id_); UpdateNetworkState(WebMediaPlayer::NetworkStateLoading); UpdateReadyState(WebMediaPlayer::ReadyStateHaveNothing); @@ -333,7 +328,7 @@ void WebMediaPlayerAndroid::play() { if (hasVideo() && needs_external_surface_ && !manager_->IsInFullscreen(frame_)) { DCHECK(!needs_establish_peer_); - proxy_->RequestExternalSurface(player_id_, last_computed_rect_); + manager_->RequestExternalSurface(player_id_, last_computed_rect_); } if (audio_renderer_ && paused()) audio_renderer_->Play(); @@ -344,7 +339,7 @@ void WebMediaPlayerAndroid::play() { EstablishSurfaceTexturePeer(); if (paused()) - proxy_->Start(player_id_); + manager_->Start(player_id_); UpdatePlayingState(true); UpdateNetworkState(WebMediaPlayer::NetworkStateLoading); playing_started_ = true; @@ -359,7 +354,7 @@ void WebMediaPlayerAndroid::pause(bool is_media_related_action) { if (audio_renderer_ && !paused()) audio_renderer_->Pause(); #endif - proxy_->Pause(player_id_, is_media_related_action); + manager_->Pause(player_id_, is_media_related_action); UpdatePlayingState(false); } @@ -404,7 +399,7 @@ void WebMediaPlayerAndroid::seek(double seconds) { media_source_delegate_->StartWaitingForSeek(seek_time_); // Kick off the asynchronous seek! - proxy_->Seek(player_id_, seek_time_); + manager_->Seek(player_id_, seek_time_); } bool WebMediaPlayerAndroid::supportsFullscreen() const { @@ -420,7 +415,7 @@ void WebMediaPlayerAndroid::setRate(double rate) { } void WebMediaPlayerAndroid::setVolume(double volume) { - proxy_->SetVolume(player_id_, volume); + manager_->SetVolume(player_id_, volume); } bool WebMediaPlayerAndroid::hasVideo() const { @@ -738,7 +733,7 @@ void WebMediaPlayerAndroid::OnVideoSizeChanged(int width, int height) { media_source_delegate_) { needs_external_surface_ = true; if (!paused() && !manager_->IsInFullscreen(frame_)) - proxy_->RequestExternalSurface(player_id_, last_computed_rect_); + manager_->RequestExternalSurface(player_id_, last_computed_rect_); } else if (stream_texture_factory_ && !stream_id_) { // Do deferred stream texture creation finally. DoCreateStreamTexture(); @@ -797,7 +792,7 @@ void WebMediaPlayerAndroid::OnDidExitFullscreen() { #if defined(GOOGLE_TV) if (!paused() && needs_external_surface_) - proxy_->RequestExternalSurface(player_id_, last_computed_rect_); + manager_->RequestExternalSurface(player_id_, last_computed_rect_); #endif frame_->view()->willExitFullScreen(); @@ -884,7 +879,7 @@ void WebMediaPlayerAndroid::ReleaseMediaResources() { case WebMediaPlayer::NetworkStateDecodeError: break; } - proxy_->ReleaseResources(player_id_); + manager_->ReleaseResources(player_id_); OnPlayerReleased(); } @@ -907,7 +902,6 @@ void WebMediaPlayerAndroid::Detach() { } is_remote_ = false; manager_ = NULL; - proxy_ = NULL; } void WebMediaPlayerAndroid::DrawRemotePlaybackIcon() { @@ -1051,10 +1045,8 @@ void WebMediaPlayerAndroid::SetVideoFrameProviderClient( void WebMediaPlayerAndroid::SetCurrentFrameInternal( scoped_refptr<media::VideoFrame>& video_frame) { - { - base::AutoLock auto_lock(current_frame_lock_); - current_frame_ = video_frame; - } + base::AutoLock auto_lock(current_frame_lock_); + current_frame_ = video_frame; } scoped_refptr<media::VideoFrame> WebMediaPlayerAndroid::GetCurrentFrame() { @@ -1433,13 +1425,13 @@ void WebMediaPlayerAndroid::DoReleaseRemotePlaybackTexture(uint32 sync_point) { void WebMediaPlayerAndroid::enterFullscreen() { if (manager_->CanEnterFullscreen(frame_)) { - proxy_->EnterFullscreen(player_id_); + manager_->EnterFullscreen(player_id_); SetNeedsEstablishPeer(false); } } void WebMediaPlayerAndroid::exitFullscreen() { - proxy_->ExitFullscreen(player_id_); + manager_->ExitFullscreen(player_id_); } bool WebMediaPlayerAndroid::canEnterFullscreen() const { diff --git a/content/renderer/media/android/webmediaplayer_android.h b/content/renderer/media/android/webmediaplayer_android.h index b57910e..0edc3ef 100644 --- a/content/renderer/media/android/webmediaplayer_android.h +++ b/content/renderer/media/android/webmediaplayer_android.h @@ -47,7 +47,6 @@ class WebLayerImpl; namespace content { class WebMediaPlayerDelegate; class RendererMediaPlayerManager; -class WebMediaPlayerProxyAndroid; #if defined(GOOGLE_TV) class MediaStreamAudioRenderer; @@ -76,7 +75,6 @@ class WebMediaPlayerAndroid WebKit::WebMediaPlayerClient* client, base::WeakPtr<WebMediaPlayerDelegate> delegate, RendererMediaPlayerManager* manager, - WebMediaPlayerProxyAndroid* proxy, StreamTextureFactory* factory, const scoped_refptr<base::MessageLoopProxy>& media_loop, media::MediaLog* media_log); @@ -340,7 +338,8 @@ class WebMediaPlayerAndroid // Whether loading has progressed since the last call to didLoadingProgress. mutable bool did_loading_progress_; - // Manager for managing this object. + // Manager for managing this object and for delegating method calls on + // Render Thread. RendererMediaPlayerManager* manager_; // Player ID assigned by the |manager_|. @@ -367,7 +366,7 @@ class WebMediaPlayerAndroid // Whether the mediaplayer is playing. bool is_playing_; - // Wether the mediaplayer has already started playing. + // Whether the mediaplayer has already started playing. bool playing_started_; // Whether media player needs to re-establish the surface texture peer. @@ -424,11 +423,6 @@ class WebMediaPlayerAndroid MediaPlayerHostMsg_Initialize_Type player_type_; - // Proxy object that delegates method calls on Render Thread. - // This object is created on the Render Thread and is only called in the - // destructor. - WebMediaPlayerProxyAndroid* proxy_; - // The current playing time. Because the media player is in the browser // process, it will regularly update the |current_time_| by calling // OnTimeUpdate(). diff --git a/content/renderer/media/android/webmediaplayer_proxy_android.cc b/content/renderer/media/android/webmediaplayer_proxy_android.cc deleted file mode 100644 index 8ca15b5..0000000 --- a/content/renderer/media/android/webmediaplayer_proxy_android.cc +++ /dev/null @@ -1,299 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/renderer/media/android/webmediaplayer_proxy_android.h" - -#include "base/bind.h" -#include "base/message_loop/message_loop.h" -#include "content/common/media/media_player_messages_android.h" -#include "content/renderer/media/android/proxy_media_keys.h" -#include "content/renderer/media/android/renderer_media_player_manager.h" -#include "content/renderer/media/android/webmediaplayer_android.h" - -namespace content { - -WebMediaPlayerProxyAndroid::WebMediaPlayerProxyAndroid( - RenderView* render_view, - RendererMediaPlayerManager* manager) - : RenderViewObserver(render_view), - manager_(manager) {} - -WebMediaPlayerProxyAndroid::~WebMediaPlayerProxyAndroid() { - Send(new MediaPlayerHostMsg_DestroyAllMediaPlayers(routing_id())); -} - -bool WebMediaPlayerProxyAndroid::OnMessageReceived(const IPC::Message& msg) { - bool handled = true; - IPC_BEGIN_MESSAGE_MAP(WebMediaPlayerProxyAndroid, msg) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaMetadataChanged, - OnMediaMetadataChanged) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaPlaybackCompleted, - OnMediaPlaybackCompleted) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaBufferingUpdate, - OnMediaBufferingUpdate) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_SeekRequest, OnSeekRequest) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_SeekCompleted, OnSeekCompleted) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaError, OnMediaError) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaVideoSizeChanged, - OnVideoSizeChanged) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaTimeUpdate, OnTimeUpdate) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaPlayerReleased, - OnMediaPlayerReleased) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_ConnectedToRemoteDevice, - OnConnectedToRemoteDevice) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_DisconnectedFromRemoteDevice, - OnDisconnectedFromRemoteDevice) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidEnterFullscreen, OnDidEnterFullscreen) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidExitFullscreen, OnDidExitFullscreen) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPlay, OnPlayerPlay) - IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPause, OnPlayerPause) - IPC_MESSAGE_HANDLER(MediaKeysMsg_KeyAdded, OnKeyAdded) - IPC_MESSAGE_HANDLER(MediaKeysMsg_KeyError, OnKeyError) - IPC_MESSAGE_HANDLER(MediaKeysMsg_KeyMessage, OnKeyMessage) - IPC_MESSAGE_UNHANDLED(handled = false) - IPC_END_MESSAGE_MAP() - return handled; -} - -void WebMediaPlayerProxyAndroid::Initialize( - MediaPlayerHostMsg_Initialize_Type type, - int player_id, - const GURL& url, - const GURL& first_party_for_cookies, - int demuxer_client_id) { - Send(new MediaPlayerHostMsg_Initialize( - routing_id(), type, player_id, url, first_party_for_cookies, - demuxer_client_id)); -} - -void WebMediaPlayerProxyAndroid::Start(int player_id) { - Send(new MediaPlayerHostMsg_Start(routing_id(), player_id)); -} - -void WebMediaPlayerProxyAndroid::Pause( - int player_id, - bool is_media_related_action) { - Send(new MediaPlayerHostMsg_Pause( - routing_id(), player_id, is_media_related_action)); -} - -void WebMediaPlayerProxyAndroid::Seek( - int player_id, - const base::TimeDelta& time) { - Send(new MediaPlayerHostMsg_Seek(routing_id(), player_id, time)); -} - -void WebMediaPlayerProxyAndroid::SetVolume(int player_id, double volume) { - Send(new MediaPlayerHostMsg_SetVolume(routing_id(), player_id, volume)); -} - -void WebMediaPlayerProxyAndroid::ReleaseResources(int player_id) { - Send(new MediaPlayerHostMsg_Release(routing_id(), player_id)); -} - -void WebMediaPlayerProxyAndroid::DestroyPlayer(int player_id) { - Send(new MediaPlayerHostMsg_DestroyMediaPlayer(routing_id(), player_id)); -} - -void WebMediaPlayerProxyAndroid::OnMediaMetadataChanged( - int player_id, - base::TimeDelta duration, - int width, - int height, - bool success) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnMediaMetadataChanged(duration, width, height, success); -} - -void WebMediaPlayerProxyAndroid::OnMediaPlaybackCompleted(int player_id) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnPlaybackComplete(); -} - -void WebMediaPlayerProxyAndroid::OnMediaBufferingUpdate(int player_id, - int percent) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnBufferingUpdate(percent); -} - -void WebMediaPlayerProxyAndroid::OnSeekRequest( - int player_id, - const base::TimeDelta& time_to_seek) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnSeekRequest(time_to_seek); -} - -void WebMediaPlayerProxyAndroid::OnSeekCompleted( - int player_id, - const base::TimeDelta& current_time) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnSeekComplete(current_time); -} - -void WebMediaPlayerProxyAndroid::OnMediaError(int player_id, int error) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnMediaError(error); -} - -void WebMediaPlayerProxyAndroid::OnVideoSizeChanged(int player_id, - int width, - int height) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnVideoSizeChanged(width, height); -} - -void WebMediaPlayerProxyAndroid::OnTimeUpdate(int player_id, - base::TimeDelta current_time) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnTimeUpdate(current_time); -} - -void WebMediaPlayerProxyAndroid::OnMediaPlayerReleased(int player_id) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnPlayerReleased(); -} - -void WebMediaPlayerProxyAndroid::OnConnectedToRemoteDevice(int player_id) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnConnectedToRemoteDevice(); -} - -void WebMediaPlayerProxyAndroid::OnDisconnectedFromRemoteDevice(int player_id) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnDisconnectedFromRemoteDevice(); -} - -void WebMediaPlayerProxyAndroid::OnDidEnterFullscreen(int player_id) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnDidEnterFullscreen(); -} - -void WebMediaPlayerProxyAndroid::OnDidExitFullscreen(int player_id) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnDidExitFullscreen(); -} - -void WebMediaPlayerProxyAndroid::OnPlayerPlay(int player_id) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnMediaPlayerPlay(); -} - -void WebMediaPlayerProxyAndroid::OnPlayerPause(int player_id) { - WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); - if (player) - player->OnMediaPlayerPause(); -} - -void WebMediaPlayerProxyAndroid::EnterFullscreen(int player_id) { - Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id)); -} - -void WebMediaPlayerProxyAndroid::ExitFullscreen(int player_id) { - Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id)); -} - -#if defined(GOOGLE_TV) -void WebMediaPlayerProxyAndroid::RequestExternalSurface( - int player_id, - const gfx::RectF& geometry) { - Send(new MediaPlayerHostMsg_NotifyExternalSurface( - routing_id(), player_id, true, geometry)); -} - -void WebMediaPlayerProxyAndroid::DidCommitCompositorFrame() { - std::map<int, gfx::RectF> geometry_change; - manager_->RetrieveGeometryChanges(&geometry_change); - for (std::map<int, gfx::RectF>::iterator it = geometry_change.begin(); - it != geometry_change.end(); - ++it) { - Send(new MediaPlayerHostMsg_NotifyExternalSurface( - routing_id(), it->first, false, it->second)); - } -} -#endif - -void WebMediaPlayerProxyAndroid::InitializeCDM(int media_keys_id, - ProxyMediaKeys* media_keys, - const std::vector<uint8>& uuid, - const GURL& frame_url) { - manager_->RegisterMediaKeys(media_keys_id, media_keys); - Send(new MediaKeysHostMsg_InitializeCDM( - routing_id(), media_keys_id, uuid, frame_url)); -} - -void WebMediaPlayerProxyAndroid::GenerateKeyRequest( - int media_keys_id, - const std::string& type, - const std::vector<uint8>& init_data) { - Send(new MediaKeysHostMsg_GenerateKeyRequest( - routing_id(), media_keys_id, type, init_data)); -} - -void WebMediaPlayerProxyAndroid::AddKey(int media_keys_id, - const std::vector<uint8>& key, - const std::vector<uint8>& init_data, - const std::string& session_id) { - Send(new MediaKeysHostMsg_AddKey( - routing_id(), media_keys_id, key, init_data, session_id)); -} - -void WebMediaPlayerProxyAndroid::CancelKeyRequest( - int media_keys_id, - const std::string& session_id) { - Send(new MediaKeysHostMsg_CancelKeyRequest( - routing_id(), media_keys_id, session_id)); -} - -WebMediaPlayerAndroid* WebMediaPlayerProxyAndroid::GetWebMediaPlayer( - int player_id) { - return static_cast<WebMediaPlayerAndroid*>( - manager_->GetMediaPlayer(player_id)); -} - -ProxyMediaKeys* WebMediaPlayerProxyAndroid::GetMediaKeys(int media_keys_id) { - return manager_->GetMediaKeys(media_keys_id); -} - -void WebMediaPlayerProxyAndroid::OnKeyAdded(int media_keys_id, - const std::string& session_id) { - ProxyMediaKeys* media_keys = GetMediaKeys(media_keys_id); - if (media_keys) - media_keys->OnKeyAdded(session_id); -} - -void WebMediaPlayerProxyAndroid::OnKeyError( - int media_keys_id, - const std::string& session_id, - media::MediaKeys::KeyError error_code, - int system_code) { - ProxyMediaKeys* media_keys = GetMediaKeys(media_keys_id); - if (media_keys) - media_keys->OnKeyError(session_id, error_code, system_code); -} - -void WebMediaPlayerProxyAndroid::OnKeyMessage( - int media_keys_id, - const std::string& session_id, - const std::vector<uint8>& message, - const std::string& destination_url) { - ProxyMediaKeys* media_keys = GetMediaKeys(media_keys_id); - if (media_keys) - media_keys->OnKeyMessage(session_id, message, destination_url); -} - -} // namespace content diff --git a/content/renderer/media/android/webmediaplayer_proxy_android.h b/content/renderer/media/android/webmediaplayer_proxy_android.h deleted file mode 100644 index 7b2ce53..0000000 --- a/content/renderer/media/android/webmediaplayer_proxy_android.h +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CONTENT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_PROXY_ANDROID_H_ -#define CONTENT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_PROXY_ANDROID_H_ - -#include <string> -#include <vector> - -#include "base/basictypes.h" -#include "base/time/time.h" -#include "content/common/media/media_player_messages_enums_android.h" -#include "content/public/renderer/render_view_observer.h" -#include "media/base/android/media_player_android.h" -#include "media/base/media_keys.h" -#include "url/gurl.h" - -#if defined(GOOGLE_TV) -#include "ui/gfx/rect_f.h" -#endif - -namespace content { - -class ProxyMediaKeys; -class RendererMediaPlayerManager; -class WebMediaPlayerAndroid; - -// This class manages IPC communication between WebMediaPlayerAndroid and the -// MediaPlayerManagerAndroid in the browser process. -class WebMediaPlayerProxyAndroid : public RenderViewObserver { - public: - // Construct a WebMediaPlayerProxyAndroid object for the |render_view|. - // |manager| is passed to this class so that it can find the right - // WebMediaPlayerAndroid using player IDs. - WebMediaPlayerProxyAndroid( - RenderView* render_view, - RendererMediaPlayerManager* manager); - virtual ~WebMediaPlayerProxyAndroid(); - - // RenderViewObserver overrides. - virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; - - // Initializes a MediaPlayerAndroid object in browser process. - void Initialize(MediaPlayerHostMsg_Initialize_Type type, - int player_id, - const GURL& url, - const GURL& first_party_for_cookies, - int demuxer_client_id); - - // Starts the player. - void Start(int player_id); - - // Pauses the player. - // is_media_related_action should be true if this pause is coming from an - // an action that explicitly pauses the video (user pressing pause, JS, etc.) - // Otherwise it should be false if Pause is being called due to other reasons - // (cleanup, freeing resources, etc.) - void Pause(int player_id, bool is_media_related_action); - - // Performs seek on the player. - void Seek(int player_id, const base::TimeDelta& time); - - // Set the player volume. - void SetVolume(int player_id, double volume); - - // Release resources for the player. - void ReleaseResources(int player_id); - - // Destroy the player in the browser process - void DestroyPlayer(int player_id); - - // Request the player to enter fullscreen. - void EnterFullscreen(int player_id); - - // Request the player to exit fullscreen. - void ExitFullscreen(int player_id); - -#if defined(GOOGLE_TV) - // Request an external surface for out-of-band compositing. - void RequestExternalSurface(int player_id, const gfx::RectF& geometry); - - // RenderViewObserver overrides. - virtual void DidCommitCompositorFrame() OVERRIDE; -#endif - - // Encrypted media related methods. - void InitializeCDM(int media_keys_id, - ProxyMediaKeys* media_keys, - const std::vector<uint8>& uuid, - const GURL& frame_url); - void GenerateKeyRequest(int media_keys_id, - const std::string& type, - const std::vector<uint8>& init_data); - void AddKey(int media_keys_id, - const std::vector<uint8>& key, - const std::vector<uint8>& init_data, - const std::string& session_id); - void CancelKeyRequest(int media_keys_id, const std::string& session_id); - - private: - WebMediaPlayerAndroid* GetWebMediaPlayer(int player_id); - ProxyMediaKeys* GetMediaKeys(int media_keys_id); - - // Message handlers. - void OnMediaMetadataChanged(int player_id, - base::TimeDelta duration, - int width, - int height, - bool success); - void OnMediaPlaybackCompleted(int player_id); - void OnMediaBufferingUpdate(int player_id, int percent); - void OnSeekRequest(int player_id, const base::TimeDelta& time_to_seek); - void OnSeekCompleted(int player_id, const base::TimeDelta& current_time); - void OnMediaError(int player_id, int error); - void OnVideoSizeChanged(int player_id, int width, int height); - void OnTimeUpdate(int player_id, base::TimeDelta current_time); - void OnMediaPlayerReleased(int player_id); - void OnConnectedToRemoteDevice(int player_id); - void OnDisconnectedFromRemoteDevice(int player_id); - void OnDidExitFullscreen(int player_id); - void OnDidEnterFullscreen(int player_id); - void OnPlayerPlay(int player_id); - void OnPlayerPause(int player_id); - void OnKeyAdded(int media_keys_id, const std::string& session_id); - void OnKeyError(int media_keys_id, - const std::string& session_id, - media::MediaKeys::KeyError error_code, - int system_code); - void OnKeyMessage(int media_keys_id, - const std::string& session_id, - const std::vector<uint8>& message, - const std::string& destination_url); - - RendererMediaPlayerManager* manager_; - - DISALLOW_IMPLICIT_CONSTRUCTORS(WebMediaPlayerProxyAndroid); -}; - -} // namespace content - -#endif // CONTENT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_PROXY_ANDROID_H_ diff --git a/content/renderer/media/crypto/content_decryption_module_factory.cc b/content/renderer/media/crypto/content_decryption_module_factory.cc index c259f1c..34f0525 100644 --- a/content/renderer/media/crypto/content_decryption_module_factory.cc +++ b/content/renderer/media/crypto/content_decryption_module_factory.cc @@ -17,7 +17,7 @@ #include "third_party/WebKit/public/web/WebMediaPlayerClient.h" #elif defined(OS_ANDROID) #include "content/renderer/media/android/proxy_media_keys.h" -#include "content/renderer/media/android/webmediaplayer_proxy_android.h" +#include "content/renderer/media/android/renderer_media_player_manager.h" #endif // defined(ENABLE_PEPPER_CDMS) namespace content { @@ -94,7 +94,7 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create( WebKit::WebFrame* web_frame, const base::Closure& destroy_plugin_cb, #elif defined(OS_ANDROID) - WebMediaPlayerProxyAndroid* proxy, + RendererMediaPlayerManager* manager, int media_keys_id, const GURL& frame_url, #endif // defined(ENABLE_PEPPER_CDMS) @@ -117,7 +117,7 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create( destroy_plugin_cb, web_media_player_client, web_frame); #elif defined(OS_ANDROID) scoped_ptr<ProxyMediaKeys> proxy_media_keys(new ProxyMediaKeys( - proxy, media_keys_id, key_added_cb, key_error_cb, key_message_cb)); + manager, media_keys_id, key_added_cb, key_error_cb, key_message_cb)); proxy_media_keys->InitializeCDM(key_system, frame_url); return proxy_media_keys.PassAs<media::MediaKeys>(); #else diff --git a/content/renderer/media/crypto/content_decryption_module_factory.h b/content/renderer/media/crypto/content_decryption_module_factory.h index 01ab731..3d32832 100644 --- a/content/renderer/media/crypto/content_decryption_module_factory.h +++ b/content/renderer/media/crypto/content_decryption_module_factory.h @@ -21,7 +21,7 @@ class WebMediaPlayerClient; namespace content { -class WebMediaPlayerProxyAndroid; +class RendererMediaPlayerManager; class ContentDecryptionModuleFactory { public: @@ -33,7 +33,7 @@ class ContentDecryptionModuleFactory { WebKit::WebFrame* web_frame, const base::Closure& destroy_plugin_cb, #elif defined(OS_ANDROID) - WebMediaPlayerProxyAndroid* proxy, + RendererMediaPlayerManager* manager, int media_keys_id, const GURL& frame_url, #endif // defined(ENABLE_PEPPER_CDMS) diff --git a/content/renderer/media/crypto/proxy_decryptor.cc b/content/renderer/media/crypto/proxy_decryptor.cc index 47c4fdd..d0b7084 100644 --- a/content/renderer/media/crypto/proxy_decryptor.cc +++ b/content/renderer/media/crypto/proxy_decryptor.cc @@ -8,6 +8,9 @@ #include "base/callback_helpers.h" #include "base/logging.h" #include "content/renderer/media/crypto/content_decryption_module_factory.h" +#if defined(OS_ANDROID) +#include "content/renderer/media/android/renderer_media_player_manager.h" +#endif // defined(OS_ANDROID) namespace content { @@ -23,7 +26,7 @@ ProxyDecryptor::ProxyDecryptor( WebKit::WebMediaPlayerClient* web_media_player_client, WebKit::WebFrame* web_frame, #elif defined(OS_ANDROID) - WebMediaPlayerProxyAndroid* proxy, + RendererMediaPlayerManager* manager, int media_keys_id, #endif // defined(ENABLE_PEPPER_CDMS) const media::KeyAddedCB& key_added_cb, @@ -34,7 +37,7 @@ ProxyDecryptor::ProxyDecryptor( web_media_player_client_(web_media_player_client), web_frame_(web_frame), #elif defined(OS_ANDROID) - proxy_(proxy), + manager_(manager), media_keys_id_(media_keys_id), #endif // defined(ENABLE_PEPPER_CDMS) key_added_cb_(key_added_cb), @@ -131,7 +134,7 @@ scoped_ptr<media::MediaKeys> ProxyDecryptor::CreateMediaKeys( base::Bind(&ProxyDecryptor::DestroyHelperPlugin, weak_ptr_factory_.GetWeakPtr()), #elif defined(OS_ANDROID) - proxy_, + manager_, media_keys_id_, frame_url, #endif // defined(ENABLE_PEPPER_CDMS) diff --git a/content/renderer/media/crypto/proxy_decryptor.h b/content/renderer/media/crypto/proxy_decryptor.h index 0202721..336819f 100644 --- a/content/renderer/media/crypto/proxy_decryptor.h +++ b/content/renderer/media/crypto/proxy_decryptor.h @@ -26,7 +26,9 @@ class WebMediaPlayerClient; namespace content { -class WebMediaPlayerProxyAndroid; +#if defined(OS_ANDROID) +class RendererMediaPlayerManager; +#endif // defined(OS_ANDROID) // ProxyDecryptor is for EME v0.1b only. It should not be used for the WD API. // A decryptor proxy that creates a real decryptor object on demand and @@ -41,7 +43,7 @@ class ProxyDecryptor : public media::MediaKeys { WebKit::WebMediaPlayerClient* web_media_player_client, WebKit::WebFrame* web_frame, #elif defined(OS_ANDROID) - WebMediaPlayerProxyAndroid* proxy, + RendererMediaPlayerManager* manager, int media_keys_id, #endif // defined(ENABLE_PEPPER_CDMS) const media::KeyAddedCB& key_added_cb, @@ -92,7 +94,7 @@ class ProxyDecryptor : public media::MediaKeys { WebKit::WebMediaPlayerClient* web_media_player_client_; WebKit::WebFrame* web_frame_; #elif defined(OS_ANDROID) - WebMediaPlayerProxyAndroid* proxy_; + RendererMediaPlayerManager* manager_; int media_keys_id_; #endif // defined(ENABLE_PEPPER_CDMS) diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 8fcfd89..022fcf3 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -220,7 +220,6 @@ #include "content/renderer/media/android/renderer_media_player_manager.h" #include "content/renderer/media/android/stream_texture_factory_android_impl.h" #include "content/renderer/media/android/webmediaplayer_android.h" -#include "content/renderer/media/android/webmediaplayer_proxy_android.h" #include "skia/ext/platform_canvas.h" #include "third_party/WebKit/public/platform/WebFloatPoint.h" #include "third_party/WebKit/public/platform/WebFloatRect.h" @@ -865,7 +864,7 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params) #if defined(OS_ANDROID) body_background_color_(SK_ColorWHITE), expected_content_intent_id_(0), - media_player_proxy_(NULL), + media_player_manager_(NULL), #endif #if defined(OS_WIN) focused_plugin_id_(-1), @@ -985,7 +984,7 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) { new SharedWorkerRepository(this); #if defined(OS_ANDROID) - media_player_manager_.reset(new RendererMediaPlayerManager()); + media_player_manager_ = new RendererMediaPlayerManager(this); new JavaBridgeDispatcher(this); #endif @@ -3120,18 +3119,12 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer( context_provider->Context3d(), gpu_channel_host, routing_id_)); } - if (!media_player_proxy_) { - media_player_proxy_ = new WebMediaPlayerProxyAndroid( - this, media_player_manager_.get()); - } - scoped_ptr<WebMediaPlayerAndroid> web_media_player_android( new WebMediaPlayerAndroid( frame, client, AsWeakPtr(), - media_player_manager_.get(), - media_player_proxy_, + media_player_manager_, stream_texture_factory.release(), RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(), new RenderMediaLog())); diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 53b291f..ccfd1b5 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h @@ -236,12 +236,6 @@ class CONTENT_EXPORT RenderViewImpl RendererWebCookieJarImpl* cookie_jar() { return &cookie_jar_; } -#if defined(OS_ANDROID) - RendererMediaPlayerManager* media_player_manager() { - return media_player_manager_.get(); - } -#endif - // Lazily initialize this view's BrowserPluginManager and return it. BrowserPluginManager* GetBrowserPluginManager(); @@ -1431,12 +1425,9 @@ class CONTENT_EXPORT RenderViewImpl typedef std::vector< linked_ptr<ContentDetector> > ContentDetectorList; ContentDetectorList content_detectors_; - // Proxy class for WebMediaPlayer to communicate with the real media player - // objects in browser process. - WebMediaPlayerProxyAndroid* media_player_proxy_; - - // The media player manager for managing all the media players on this view. - scoped_ptr<RendererMediaPlayerManager> media_player_manager_; + // The media player manager for managing all the media players on this view + // for communicating with the real media player objects in browser process. + RendererMediaPlayerManager* media_player_manager_; // A date/time picker object for date and time related input elements. scoped_ptr<RendererDateTimePicker> date_time_picker_client_; |