summaryrefslogtreecommitdiffstats
path: root/content/browser/media/android/browser_media_player_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/media/android/browser_media_player_manager.cc')
-rw-r--r--content/browser/media/android/browser_media_player_manager.cc40
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) {