diff options
Diffstat (limited to 'content/browser/media/android/browser_media_player_manager.cc')
-rw-r--r-- | content/browser/media/android/browser_media_player_manager.cc | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc index 68268f7..c77ead0 100644 --- a/content/browser/media/android/browser_media_player_manager.cc +++ b/content/browser/media/android/browser_media_player_manager.cc @@ -10,6 +10,7 @@ #include "content/browser/android/media_players_observer.h" #include "content/browser/media/android/browser_demuxer_android.h" #include "content/browser/media/android/media_resource_getter_impl.h" +#include "content/browser/media/android/media_session.h" #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/web_contents/web_contents_view_android.h" #include "content/common/media/media_player_messages_android.h" @@ -44,6 +45,9 @@ namespace content { const int kMediaPlayerThreshold = 1; const int kInvalidMediaPlayerId = -1; +// Minimal duration of a media player in order to be considered as Content type. +const int kMinimumDurationForContentInSeconds = 5; + static BrowserMediaPlayerManager::Factory g_factory = NULL; static media::MediaUrlInterceptor* media_url_interceptor_ = NULL; @@ -160,6 +164,7 @@ BrowserMediaPlayerManager::~BrowserMediaPlayerManager() { for (MediaPlayerAndroid* player : players_) player->DeleteOnCorrectThread(); + MediaSession::Get(web_contents())->RemovePlayers(this); players_.weak_clear(); } @@ -228,6 +233,8 @@ void BrowserMediaPlayerManager::OnMediaMetadataChanged( void BrowserMediaPlayerManager::OnPlaybackComplete(int player_id) { Send(new MediaPlayerMsg_MediaPlaybackCompleted(RoutingID(), player_id)); + MediaSession::Get(web_contents())->RemovePlayer(this, player_id); + if (fullscreen_player_id_ == player_id) video_view_->OnPlaybackComplete(); } @@ -341,6 +348,21 @@ void BrowserMediaPlayerManager::RequestFullScreen(int player_id) { Send(new MediaPlayerMsg_RequestFullscreen(RoutingID(), player_id)); } +bool BrowserMediaPlayerManager::RequestPlay(int player_id) { + MediaPlayerAndroid* player = GetPlayer(player_id); + DCHECK(player); + + MediaSession::Type media_session_type = + player->GetDuration().InSeconds() > kMinimumDurationForContentInSeconds + ? MediaSession::Type::Content : MediaSession::Type::Transient; + + bool succeeded = MediaSession::Get(web_contents())->AddPlayer( + this, player_id, media_session_type); + if (!succeeded) + Send(new MediaPlayerMsg_DidMediaPlayerPause(RoutingID(), player_id)); + return succeeded; +} + #if defined(VIDEO_HOLE) void BrowserMediaPlayerManager::AttachExternalVideoSurface(int player_id, jobject surface) { @@ -365,6 +387,22 @@ void BrowserMediaPlayerManager::OnFrameInfoUpdated() { external_video_surface_container_->OnFrameInfoUpdated(); } +void BrowserMediaPlayerManager::OnSuspend(int player_id) { + MediaPlayerAndroid* player = GetPlayer(player_id); + DCHECK(player); + + player->Pause(true); + Send(new MediaPlayerMsg_DidMediaPlayerPause(RoutingID(), player_id)); +} + +void BrowserMediaPlayerManager::OnResume(int player_id) { + MediaPlayerAndroid* player = GetPlayer(player_id); + DCHECK(player); + + player->Start(); + Send(new MediaPlayerMsg_DidMediaPlayerPlay(RoutingID(), player_id)); +} + void BrowserMediaPlayerManager::OnNotifyExternalSurface( int player_id, bool is_request, const gfx::RectF& rect) { if (!web_contents_) @@ -503,6 +541,8 @@ void BrowserMediaPlayerManager::OnPause( MediaPlayerAndroid* player = GetPlayer(player_id); if (player) player->Pause(is_media_related_action); + + MediaSession::Get(web_contents())->RemovePlayer(this, player_id); } void BrowserMediaPlayerManager::OnSetVolume(int player_id, double volume) { |