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 98a51e2e572d760dfa7040241a58911f035e1f36..b08bf73a628a8c4c9adf02b1ea46eca22b64489f 100644 |
| --- a/content/browser/android/media_player_manager_android.cc |
| +++ b/content/browser/android/media_player_manager_android.cc |
| @@ -5,12 +5,14 @@ |
| #include "content/browser/android/media_player_manager_android.h" |
| #include "base/bind.h" |
| +#include "base/command_line.h" |
| #include "content/browser/android/cookie_getter_impl.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" |
| #include "content/public/browser/render_view_host.h" |
| +#include "content/public/common/content_switches.h" |
| using media::MediaPlayerBridge; |
| @@ -24,7 +26,7 @@ MediaPlayerManagerAndroid::MediaPlayerManagerAndroid( |
| RenderViewHost* render_view_host) |
| : RenderViewHostObserver(render_view_host), |
| ALLOW_THIS_IN_INITIALIZER_LIST(video_view_(this)), |
| - fullscreen_player_id_(-1) { |
| + video_view_player_id_(-1) { |
| } |
| MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {} |
| @@ -53,7 +55,7 @@ void MediaPlayerManagerAndroid::FullscreenPlayerPlay() { |
| if (player) { |
| player->Start(); |
| Send(new MediaPlayerMsg_DidMediaPlayerPlay( |
| - routing_id(), fullscreen_player_id_)); |
| + routing_id(), video_view_player_id_)); |
| } |
| } |
| @@ -62,7 +64,7 @@ void MediaPlayerManagerAndroid::FullscreenPlayerPause() { |
| if (player) { |
| player->Pause(); |
| Send(new MediaPlayerMsg_DidMediaPlayerPause( |
| - routing_id(), fullscreen_player_id_)); |
| + routing_id(), video_view_player_id_)); |
| } |
| } |
| @@ -74,9 +76,9 @@ void MediaPlayerManagerAndroid::FullscreenPlayerSeek(int msec) { |
| void MediaPlayerManagerAndroid::ExitFullscreen(bool release_media_player) { |
| Send(new MediaPlayerMsg_DidExitFullscreen( |
| - routing_id(), fullscreen_player_id_)); |
| + routing_id(), video_view_player_id_)); |
| MediaPlayerBridge* player = GetFullscreenPlayer(); |
| - fullscreen_player_id_ = -1; |
| + video_view_player_id_ = -1; |
| if (!player) |
| return; |
| if (release_media_player) |
| @@ -86,11 +88,18 @@ void MediaPlayerManagerAndroid::ExitFullscreen(bool release_media_player) { |
| } |
| void MediaPlayerManagerAndroid::SetVideoSurface(jobject surface) { |
| - MediaPlayerBridge* player = GetFullscreenPlayer(); |
| + MediaPlayerBridge* player = GetPlayer(video_view_player_id_); |
| if (player) { |
| player->SetVideoSurface(surface); |
| - Send(new MediaPlayerMsg_DidEnterFullscreen( |
| - routing_id(), player->player_id())); |
| + if (video_view_.getPersonality() == |
| + ContentVideoView::PERSONALITY_FULL_SCREEN) { |
| + Send(new MediaPlayerMsg_DidEnterFullscreen( |
| + routing_id(), player->player_id())); |
|
qinmin
2012/12/17 19:34:06
Just collapse these 2 into a single message, new M
wonsik2
2013/02/14 14:56:38
Done.
|
| + } else { |
| + // TODO(wonsik): Find better way to communicate this event. |
| + Send(new MediaPlayerMsg_DidEnterVideoView( |
| + routing_id(), player->player_id())); |
| + } |
| } |
| } |
| @@ -134,8 +143,20 @@ void MediaPlayerManagerAndroid::OnInitialize( |
| void MediaPlayerManagerAndroid::OnStart(int player_id) { |
| MediaPlayerBridge* player = GetPlayer(player_id); |
| - if (player) |
| + if (player) { |
| + if (CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kRenderVideoOnExternalSurface)) { |
| + // TODO(wonsik): Find a way to enable this feature only when it is |
| + // absolutely necessary (e.g. protected content). |
| + if (video_view_player_id_ != -1) { |
|
qinmin
2012/12/17 19:34:06
no { needed
wonsik2
2013/02/14 14:56:38
Done.
|
| + ExitFromVideoView(video_view_player_id_); |
|
qinmin
2012/12/17 19:34:06
do we pause the player afterwards?
wonsik2
2013/02/14 14:56:38
Done.
|
| + } |
| + video_view_player_id_ = player_id; |
| + video_view_.CreateContentVideoView( |
| + ContentVideoView::PERSONALITY_EMBEDDED); |
| + } |
| player->Start(); |
| + } |
| } |
| void MediaPlayerManagerAndroid::OnSeek(int player_id, base::TimeDelta time) { |
| @@ -151,19 +172,30 @@ void MediaPlayerManagerAndroid::OnPause(int player_id) { |
| } |
| void MediaPlayerManagerAndroid::OnEnterFullscreen(int player_id) { |
| - DCHECK_EQ(fullscreen_player_id_, -1); |
| + if (video_view_player_id_ != -1) { |
|
qinmin
2012/12/17 19:34:06
no { needed
wonsik2
2013/02/14 14:56:38
Done.
|
| + ExitFromVideoView(video_view_player_id_); |
| + } |
| - fullscreen_player_id_ = player_id; |
| - video_view_.CreateContentVideoView(); |
| + video_view_player_id_ = player_id; |
| + video_view_.CreateContentVideoView(ContentVideoView::PERSONALITY_FULL_SCREEN); |
| } |
| void MediaPlayerManagerAndroid::OnExitFullscreen(int player_id) { |
| - if (fullscreen_player_id_ == player_id) { |
| + ExitFromVideoView(player_id); |
| +} |
| + |
| +void MediaPlayerManagerAndroid::ExitFromVideoView(int player_id) { |
| + if (video_view_player_id_ == player_id) { |
| + if (video_view_.getPersonality() != |
| + ContentVideoView::PERSONALITY_FULL_SCREEN) { |
| + Send(new MediaPlayerMsg_DidExitVideoView( |
|
qinmin
2012/12/17 19:34:06
combine this message with DidExitFullscreen
wonsik2
2013/02/14 14:56:38
Done.
|
| + routing_id(), video_view_player_id_)); |
| + } |
| MediaPlayerBridge* player = GetPlayer(player_id); |
| if (player) |
| player->SetVideoSurface(NULL); |
| video_view_.DestroyContentVideoView(); |
| - fullscreen_player_id_ = -1; |
| + video_view_player_id_ = -1; |
| } |
| } |
| @@ -172,7 +204,7 @@ void MediaPlayerManagerAndroid::OnReleaseResources(int player_id) { |
| // Don't release the fullscreen player when tab visibility changes, |
| // it will be released when user hit the back/home button or when |
| // OnDestroyPlayer is called. |
| - if (player && player_id != fullscreen_player_id_) |
| + if (player && player_id != video_view_player_id_) |
| player->Release(); |
| } |
| @@ -184,15 +216,15 @@ void MediaPlayerManagerAndroid::OnDestroyPlayer(int player_id) { |
| break; |
| } |
| } |
| - if (fullscreen_player_id_ == player_id) |
| - fullscreen_player_id_ = -1; |
| + if (video_view_player_id_ == player_id) |
| + video_view_player_id_ = -1; |
| } |
| void MediaPlayerManagerAndroid::DestroyAllMediaPlayers() { |
| players_.clear(); |
| - if (fullscreen_player_id_ != -1) { |
| + if (video_view_player_id_ != -1) { |
| video_view_.DestroyContentVideoView(); |
| - fullscreen_player_id_ = -1; |
| + video_view_player_id_ = -1; |
| } |
| } |
| @@ -206,19 +238,23 @@ MediaPlayerBridge* MediaPlayerManagerAndroid::GetPlayer(int player_id) { |
| } |
| MediaPlayerBridge* MediaPlayerManagerAndroid::GetFullscreenPlayer() { |
|
qinmin
2012/12/17 19:34:06
This function name should be changed getVideoViewP
wonsik2
2013/02/14 14:56:38
This indeed returns fullscreen player since it onl
|
| - return GetPlayer(fullscreen_player_id_); |
| + if (video_view_.getPersonality() != |
| + ContentVideoView::PERSONALITY_FULL_SCREEN) { |
| + return NULL; |
| + } |
| + return GetPlayer(video_view_player_id_); |
| } |
| void MediaPlayerManagerAndroid::OnPrepared(int player_id, |
| base::TimeDelta duration) { |
| Send(new MediaPlayerMsg_MediaPrepared(routing_id(), player_id, duration)); |
| - if (fullscreen_player_id_ != -1) |
| + if (video_view_player_id_ != -1) |
| video_view_.UpdateMediaMetadata(); |
| } |
| void MediaPlayerManagerAndroid::OnPlaybackComplete(int player_id) { |
| Send(new MediaPlayerMsg_MediaPlaybackCompleted(routing_id(), player_id)); |
| - if (fullscreen_player_id_ != -1) |
| + if (video_view_player_id_ != -1) |
| video_view_.OnPlaybackComplete(); |
| } |
| @@ -232,7 +268,7 @@ void MediaPlayerManagerAndroid::OnBufferingUpdate( |
| int player_id, int percentage) { |
| Send(new MediaPlayerMsg_MediaBufferingUpdate( |
| routing_id(), player_id, percentage)); |
| - if (fullscreen_player_id_ != -1) |
| + if (video_view_player_id_ != -1) |
| video_view_.OnBufferingUpdate(percentage); |
| } |
| @@ -244,7 +280,7 @@ void MediaPlayerManagerAndroid::OnSeekComplete(int player_id, |
| void MediaPlayerManagerAndroid::OnError(int player_id, int error) { |
| Send(new MediaPlayerMsg_MediaError(routing_id(), player_id, error)); |
| - if (fullscreen_player_id_ != -1) |
| + if (video_view_player_id_ != -1) |
| video_view_.OnMediaPlayerError(error); |
| } |
| @@ -252,7 +288,7 @@ void MediaPlayerManagerAndroid::OnVideoSizeChanged( |
| int player_id, int width, int height) { |
| Send(new MediaPlayerMsg_MediaVideoSizeChanged(routing_id(), player_id, |
| width, height)); |
| - if (fullscreen_player_id_ != -1) |
| + if (video_view_player_id_ != -1) |
| video_view_.OnVideoSizeChanged(width, height); |
| } |
| @@ -286,7 +322,7 @@ void MediaPlayerManagerAndroid::RequestMediaResources( |
| for (it = players_.begin(); it != players_.end(); ++it) { |
| if ((*it)->prepared() && !(*it)->IsPlaying() && |
| - fullscreen_player_id_ != (*it)->player_id()) { |
| + video_view_player_id_ != (*it)->player_id()) { |
| (*it)->Release(); |
| Send(new MediaPlayerMsg_MediaPlayerReleased( |
| routing_id(), (*it)->player_id())); |