Index: content/browser/media/android/browser_media_session_manager.cc |
diff --git a/content/browser/media/android/browser_media_session_manager.cc b/content/browser/media/android/browser_media_session_manager.cc |
index 146a60fe970ae9da7f0fe9a4b56f044ecdfeec77..10d3a56f56e36b2fb3a4d29676c3bb6713a79088 100644 |
--- a/content/browser/media/android/browser_media_session_manager.cc |
+++ b/content/browser/media/android/browser_media_session_manager.cc |
@@ -13,13 +13,32 @@ BrowserMediaSessionManager::BrowserMediaSessionManager( |
RenderFrameHost* render_frame_host) |
: render_frame_host_(render_frame_host) {} |
+MediaSession* BrowserMediaSessionManager::GetSession(int session_id) { |
+ WebContents* web_contents = |
+ WebContents::FromRenderFrameHost(render_frame_host_); |
+ |
+ if (session_id == 0) |
+ return MediaSession::Get(web_contents); |
+ |
+ for (ScopedVector<MediaSession>::iterator it = sessions_.begin(); |
+ it != sessions_.end(); ++it) { |
+ if ((*it)->session_id() == session_id) |
+ return *it; |
+ } |
+ |
+ MediaSession* session = MediaSession::Create(web_contents, session_id); |
+ sessions_.push_back(session); |
+ return session; |
+} |
+ |
void BrowserMediaSessionManager::OnActivate(int session_id, int request_id) { |
- NOTIMPLEMENTED(); |
- Send(new MediaSessionMsg_DidActivate(GetRoutingID(), request_id, false)); |
+ bool success = GetSession(session_id)->Activate(); |
+ Send(new MediaSessionMsg_DidActivate(GetRoutingID(), request_id, success)); |
} |
void BrowserMediaSessionManager::OnDeactivate(int session_id, int request_id) { |
- NOTIMPLEMENTED(); |
+ if (MediaSession* media_session = GetSession(session_id)) |
+ media_session->Deactivate(); |
Send(new MediaSessionMsg_DidDeactivate(GetRoutingID(), request_id)); |
} |
@@ -27,6 +46,40 @@ int BrowserMediaSessionManager::GetRoutingID() const { |
return render_frame_host_->GetRoutingID(); |
} |
+void BrowserMediaSessionManager::RemovePlayers(MediaSessionObserver* observer) { |
+ // Remove observer from default session and user created sessions. |
+ |
+ WebContents* web_contents = |
+ WebContents::FromRenderFrameHost(render_frame_host_); |
+ MediaSession::Get(web_contents)->RemovePlayers(observer); |
+ |
+ for (ScopedVector<MediaSession>::iterator it = sessions_.begin(); |
+ it != sessions_.end(); ++it) |
+ (*it)->RemovePlayers(observer); |
+} |
+ |
+void BrowserMediaSessionManager::RemovePlayer(MediaSessionObserver* observer, |
+ int player_id) { |
+ WebContents* web_contents = |
+ WebContents::FromRenderFrameHost(render_frame_host_); |
+ MediaSession::Get(web_contents)->RemovePlayer(observer, player_id); |
+ |
+ for (ScopedVector<MediaSession>::iterator it = sessions_.begin(); |
+ it != sessions_.end(); ++it) |
+ (*it)->RemovePlayer(observer, player_id); |
+} |
+ |
+void BrowserMediaSessionManager::OnPlayerPaused(MediaSessionObserver* observer, |
+ int player_id) { |
+ WebContents* web_contents = |
+ WebContents::FromRenderFrameHost(render_frame_host_); |
+ MediaSession::Get(web_contents)->OnPlayerPaused(observer, player_id); |
+ |
+ for (ScopedVector<MediaSession>::iterator it = sessions_.begin(); |
+ it != sessions_.end(); ++it) |
+ (*it)->OnPlayerPaused(observer, player_id); |
+} |
+ |
bool BrowserMediaSessionManager::Send(IPC::Message* msg) { |
return render_frame_host_->Send(msg); |
} |