Chromium Code Reviews| Index: content/browser/android/media_player_manager_android.cc |
| diff --git a/content/browser/android/media_player_manager_android.cc b/content/browser/android/media_player_manager_android.cc |
| index e442a418e85ce4df5ef45b46d8d68cbb4a913431..45adff045a971b419d7c85e249db5c38395551db 100644 |
| --- a/content/browser/android/media_player_manager_android.cc |
| +++ b/content/browser/android/media_player_manager_android.cc |
| @@ -6,7 +6,7 @@ |
| #include "base/bind.h" |
| #include "content/browser/android/cookie_getter_impl.h" |
| -#include "content/common/view_messages.h" |
| +#include "content/common/media/media_player_messages.h" |
| #include "content/public/browser/browser_context.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/render_process_host.h" |
| @@ -22,7 +22,9 @@ namespace content { |
| MediaPlayerManagerAndroid::MediaPlayerManagerAndroid( |
| RenderViewHost* render_view_host) |
| - : RenderViewHostObserver(render_view_host) { |
| + : RenderViewHostObserver(render_view_host), |
| + ALLOW_THIS_IN_INITIALIZER_LIST(video_view_(this)), |
| + fullscreen_player_id_(-1) { |
| } |
| MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {} |
| @@ -30,25 +32,61 @@ MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {} |
| bool MediaPlayerManagerAndroid::OnMessageReceived(const IPC::Message& msg) { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(MediaPlayerManagerAndroid, msg) |
| - IPC_MESSAGE_HANDLER(ViewHostMsg_MediaPlayerInitialize, |
| - OnInitialize) |
| - IPC_MESSAGE_HANDLER(ViewHostMsg_MediaPlayerStart, |
| - OnStart) |
| - IPC_MESSAGE_HANDLER(ViewHostMsg_MediaPlayerSeek, |
| - OnSeek) |
| - IPC_MESSAGE_HANDLER(ViewHostMsg_MediaPlayerPause, |
| - OnPause) |
| - IPC_MESSAGE_HANDLER(ViewHostMsg_MediaPlayerRelease, |
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen) |
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ExitFullscreen, OnExitFullscreen) |
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerInitialize, OnInitialize) |
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerStart, OnStart) |
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerSeek, OnSeek) |
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerPause, OnPause) |
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerRelease, |
| OnReleaseResources) |
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DestroyMediaPlayer, |
| - OnDestroyPlayer) |
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DestroyAllMediaPlayers, |
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer) |
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers, |
| DestroyAllMediaPlayers) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| } |
| +void MediaPlayerManagerAndroid::FullscreenPlayerPlay() { |
| + MediaPlayerBridge* player = GetFullscreenPlayer(); |
| + player->Start(); |
| + Send(new MediaPlayerMsg_DidMediaPlayerPlay( |
| + routing_id(), fullscreen_player_id_)); |
| +} |
| + |
| +void MediaPlayerManagerAndroid::FullscreenPlayerPause() { |
| + MediaPlayerBridge* player = GetFullscreenPlayer(); |
| + player->Pause(); |
| + Send(new MediaPlayerMsg_DidMediaPlayerPause( |
| + routing_id(), fullscreen_player_id_)); |
| +} |
| + |
| +void MediaPlayerManagerAndroid::FullscreenPlayerSeek(int msec) { |
| + MediaPlayerBridge* player = GetFullscreenPlayer(); |
| + player->SeekTo(base::TimeDelta::FromMilliseconds(msec)); |
| +} |
| + |
| +void MediaPlayerManagerAndroid::ExitFullscreen(bool release_media_player) { |
| + Send(new MediaPlayerMsg_DidExitFullscreen( |
| + routing_id(), fullscreen_player_id_)); |
| + MediaPlayerBridge* player = GetFullscreenPlayer(); |
| + if (release_media_player) |
| + player->Release(); |
| + else |
| + player->SetVideoSurface(NULL); |
| + fullscreen_player_id_ = -1; |
| +} |
| + |
| +void MediaPlayerManagerAndroid::SetVideoSurface(jobject surface) { |
| + MediaPlayerBridge* player = GetFullscreenPlayer(); |
| + if (player) { |
| + player->SetVideoSurface(surface); |
| + Send(new MediaPlayerMsg_DidEnterFullscreen( |
| + routing_id(), player->player_id())); |
| + } |
| +} |
| + |
| void MediaPlayerManagerAndroid::OnInitialize( |
| int player_id, const std::string& url, |
| const std::string& first_party_for_cookies) { |
| @@ -81,7 +119,7 @@ void MediaPlayerManagerAndroid::OnInitialize( |
| base::Unretained(this)))); |
| // Send a MediaPrepared message to webkit so that Load() can finish. |
| - Send(new ViewMsg_MediaPrepared(routing_id(), player_id, |
| + Send(new MediaPlayerMsg_MediaPrepared(routing_id(), player_id, |
| GetPlayer(player_id)->GetDuration())); |
|
scherkus (not reviewing)
2012/10/02 16:20:16
fix indent
qinmin
2012/10/03 02:32:48
Done.
|
| } |
| @@ -103,6 +141,24 @@ void MediaPlayerManagerAndroid::OnPause(int player_id) { |
| player->Pause(); |
| } |
| +void MediaPlayerManagerAndroid::OnEnterFullscreen(int player_id) { |
| + if (fullscreen_player_id_ != -1 && fullscreen_player_id_ != player_id) |
|
Yaron
2012/10/02 00:29:23
Do these cases happen? It seems like you shouldn't
qinmin
2012/10/03 02:32:48
Changed to DCHECK
On 2012/10/02 00:29:23, Yaron wr
|
| + return; |
| + |
| + fullscreen_player_id_ = player_id; |
| + video_view_.CreateContentVideoView(); |
| +} |
| + |
| +void MediaPlayerManagerAndroid::OnExitFullscreen(int player_id) { |
| + if (fullscreen_player_id_ == player_id) { |
|
Yaron
2012/10/02 00:29:23
Same here. Is it race-y such that we can't be conf
qinmin
2012/10/03 02:32:48
This could happen if user hit the back button duri
|
| + MediaPlayerBridge* player = GetPlayer(player_id); |
| + if (player) |
| + player->SetVideoSurface(NULL); |
| + video_view_.DestroyContentVideoView(); |
| + fullscreen_player_id_ = -1; |
| + } |
| +} |
| + |
| void MediaPlayerManagerAndroid::OnReleaseResources(int player_id) { |
| MediaPlayerBridge* player = GetPlayer(player_id); |
| if (player) |
| @@ -117,10 +173,16 @@ void MediaPlayerManagerAndroid::OnDestroyPlayer(int player_id) { |
| break; |
| } |
| } |
| + if (fullscreen_player_id_ == player_id) |
| + fullscreen_player_id_ = -1; |
| } |
| void MediaPlayerManagerAndroid::DestroyAllMediaPlayers() { |
| players_.clear(); |
| + if (fullscreen_player_id_ != -1) { |
| + video_view_.DestroyContentVideoView(); |
| + fullscreen_player_id_ = -1; |
| + } |
| } |
| MediaPlayerBridge* MediaPlayerManagerAndroid::GetPlayer(int player_id) { |
| @@ -132,38 +194,55 @@ MediaPlayerBridge* MediaPlayerManagerAndroid::GetPlayer(int player_id) { |
| return NULL; |
| } |
| +MediaPlayerBridge* MediaPlayerManagerAndroid::GetFullscreenPlayer() { |
| + return GetPlayer(fullscreen_player_id_); |
| +} |
| + |
| void MediaPlayerManagerAndroid::OnPrepared(int player_id, |
| base::TimeDelta duration) { |
| - Send(new ViewMsg_MediaPrepared(routing_id(), player_id, duration)); |
| + Send(new MediaPlayerMsg_MediaPrepared(routing_id(), player_id, duration)); |
| + if (fullscreen_player_id_ != -1) |
| + video_view_.UpdateMediaMetadata(); |
| } |
| void MediaPlayerManagerAndroid::OnPlaybackComplete(int player_id) { |
| - Send(new ViewMsg_MediaPlaybackCompleted(routing_id(), player_id)); |
| + Send(new MediaPlayerMsg_MediaPlaybackCompleted(routing_id(), player_id)); |
| + if (fullscreen_player_id_ != -1) |
| + video_view_.OnPlaybackComplete(); |
| } |
| void MediaPlayerManagerAndroid::OnBufferingUpdate( |
| int player_id, int percentage) { |
| - Send(new ViewMsg_MediaBufferingUpdate(routing_id(), player_id, percentage)); |
| + Send(new MediaPlayerMsg_MediaBufferingUpdate( |
| + routing_id(), player_id, percentage)); |
| + if (fullscreen_player_id_ != -1) |
| + video_view_.OnBufferingUpdate(percentage); |
| } |
| void MediaPlayerManagerAndroid::OnSeekComplete(int player_id, |
| base::TimeDelta current_time) { |
| - Send(new ViewMsg_MediaSeekCompleted(routing_id(), player_id, current_time)); |
| + Send(new MediaPlayerMsg_MediaSeekCompleted( |
| + routing_id(), player_id, current_time)); |
| } |
| void MediaPlayerManagerAndroid::OnError(int player_id, int error) { |
| - Send(new ViewMsg_MediaError(routing_id(), player_id, error)); |
| + Send(new MediaPlayerMsg_MediaError(routing_id(), player_id, error)); |
| + if (fullscreen_player_id_ != -1) |
| + video_view_.OnMediaPlayerError(error); |
| } |
| void MediaPlayerManagerAndroid::OnVideoSizeChanged( |
| int player_id, int width, int height) { |
| - Send(new ViewMsg_MediaVideoSizeChanged(routing_id(), player_id, |
| + Send(new MediaPlayerMsg_MediaVideoSizeChanged(routing_id(), player_id, |
| width, height)); |
| + if (fullscreen_player_id_ != -1) |
| + video_view_.OnVideoSizeChanged(width, height); |
| } |
| void MediaPlayerManagerAndroid::OnTimeUpdate(int player_id, |
| base::TimeDelta current_time) { |
| - Send(new ViewMsg_MediaTimeUpdate(routing_id(), player_id, current_time)); |
| + Send(new MediaPlayerMsg_MediaTimeUpdate( |
| + routing_id(), player_id, current_time)); |
| } |
| void MediaPlayerManagerAndroid::RequestMediaResources( |
| @@ -189,9 +268,11 @@ void MediaPlayerManagerAndroid::RequestMediaResources( |
| return; |
| for (it = players_.begin(); it != players_.end(); ++it) { |
| - if ((*it)->prepared() && !(*it)->IsPlaying()) { |
| + if ((*it)->prepared() && !(*it)->IsPlaying() && |
| + fullscreen_player_id_ != (*it)->player_id()) { |
| (*it)->Release(); |
| - Send(new ViewMsg_MediaPlayerReleased(routing_id(), (*it)->player_id())); |
| + Send(new MediaPlayerMsg_MediaPlayerReleased( |
| + routing_id(), (*it)->player_id())); |
| } |
| } |
| } |