Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(505)

Unified Diff: content/browser/media/media_web_contents_observer.cc

Issue 1570043002: Implement MediaSession on top of the WebMediaPlayerDelegate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@media_session
Patch Set: Reorder. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/media/media_web_contents_observer.cc
diff --git a/content/browser/media/media_web_contents_observer.cc b/content/browser/media/media_web_contents_observer.cc
index 67ef0368680e8d6be542d65dd5b9f43a857ffd01..17e8fc56b8b87695f131e6dc71f6d4420254401e 100644
--- a/content/browser/media/media_web_contents_observer.cc
+++ b/content/browser/media/media_web_contents_observer.cc
@@ -11,7 +11,7 @@
#include "content/browser/media/audio_stream_monitor.h"
#include "content/browser/power_save_blocker_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
-#include "content/common/frame_messages.h"
+#include "content/common/media/media_player_delegate_messages.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "ipc/ipc_message_macros.h"
@@ -64,28 +64,64 @@ bool MediaWebContentsObserver::OnMessageReceived(
// TODO(dalecurtis): These should no longer be FrameHostMsg.
IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(MediaWebContentsObserver, msg,
render_frame_host)
- IPC_MESSAGE_HANDLER(FrameHostMsg_MediaPlayingNotification,
- OnMediaPlayingNotification)
- IPC_MESSAGE_HANDLER(FrameHostMsg_MediaPausedNotification,
- OnMediaPausedNotification)
+ IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaDestroyed,
+ OnMediaDestroyed)
+ IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaPaused, OnMediaPaused)
+ IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaPlaying,
+ OnMediaPlaying)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
-void MediaWebContentsObserver::OnMediaPlayingNotification(
+void MediaWebContentsObserver::WasShown() {
+ // Restore power save blocker if there are active video players running.
+ if (!active_video_players_.empty() && !video_power_save_blocker_)
+ CreateVideoPowerSaveBlocker();
+}
+
+void MediaWebContentsObserver::WasHidden() {
+ // If there are entities capturing screenshots or video (e.g., mirroring),
+ // don't release the power save blocker.
+ if (!web_contents()->GetCapturerCount())
+ video_power_save_blocker_.reset();
+}
+
+void MediaWebContentsObserver::OnMediaDestroyed(
RenderFrameHost* render_frame_host,
- int64_t player_cookie,
+ int delegate_id) {
+ OnMediaPaused(render_frame_host, delegate_id, true);
+}
+
+
+void MediaWebContentsObserver::OnMediaPaused(RenderFrameHost* render_frame_host,
+ int delegate_id,
+ bool reached_end_of_stream) {
+ const MediaPlayerId id(render_frame_host, delegate_id);
+ const bool removed_audio = RemoveMediaPlayerEntry(id, &active_audio_players_);
+ const bool removed_video = RemoveMediaPlayerEntry(id, &active_video_players_);
+ MaybeReleasePowerSaveBlockers();
+
+ if (removed_audio || removed_video) {
+ // Notify observers the player has been "paused".
+ static_cast<WebContentsImpl*>(web_contents())->MediaStoppedPlaying(id);
+ }
+}
+
+void MediaWebContentsObserver::OnMediaPlaying(
+ RenderFrameHost* render_frame_host,
+ int delegate_id,
bool has_video,
bool has_audio,
- bool is_remote) {
+ bool is_remote,
+ base::TimeDelta duration) {
// Ignore the videos playing remotely and don't hold the wake lock for the
// screen. TODO(dalecurtis): Is this correct? It means observers will not
// receive play and pause messages.
if (is_remote)
return;
- const MediaPlayerId id(render_frame_host, player_cookie);
+ const MediaPlayerId id(render_frame_host, delegate_id);
if (has_audio) {
AddMediaPlayerEntry(id, &active_audio_players_);
@@ -112,20 +148,6 @@ void MediaWebContentsObserver::OnMediaPlayingNotification(
static_cast<WebContentsImpl*>(web_contents())->MediaStartedPlaying(id);
}
-void MediaWebContentsObserver::OnMediaPausedNotification(
- RenderFrameHost* render_frame_host,
- int64_t player_cookie) {
- const MediaPlayerId id(render_frame_host, player_cookie);
- const bool removed_audio = RemoveMediaPlayerEntry(id, &active_audio_players_);
- const bool removed_video = RemoveMediaPlayerEntry(id, &active_video_players_);
- MaybeReleasePowerSaveBlockers();
-
- if (removed_audio || removed_video) {
- // Notify observers the player has been "paused".
- static_cast<WebContentsImpl*>(web_contents())->MediaStoppedPlaying(id);
- }
-}
-
void MediaWebContentsObserver::ClearPowerSaveBlockers(
RenderFrameHost* render_frame_host) {
std::set<MediaPlayerId> removed_players;
@@ -161,19 +183,6 @@ void MediaWebContentsObserver::CreateVideoPowerSaveBlocker() {
#endif
}
-void MediaWebContentsObserver::WasShown() {
- // Restore power save blocker if there are active video players running.
- if (!active_video_players_.empty() && !video_power_save_blocker_)
- CreateVideoPowerSaveBlocker();
-}
-
-void MediaWebContentsObserver::WasHidden() {
- // If there are entities capturing screenshots or video (e.g., mirroring),
- // don't release the power save blocker.
- if (!web_contents()->GetCapturerCount())
- video_power_save_blocker_.reset();
-}
-
void MediaWebContentsObserver::MaybeReleasePowerSaveBlockers() {
// If there are no more audio players and we don't have audio stream
// monitoring, release the audio power save blocker here instead of during
@@ -226,8 +235,8 @@ void MediaWebContentsObserver::RemoveAllMediaPlayerEntries(
if (it == player_map->end())
return;
- for (int64_t player_cookie : it->second)
- removed_players->insert(MediaPlayerId(render_frame_host, player_cookie));
+ for (int delegate_id : it->second)
+ removed_players->insert(MediaPlayerId(render_frame_host, delegate_id));
player_map->erase(it);
}
« no previous file with comments | « content/browser/media/media_web_contents_observer.h ('k') | content/browser/web_contents/web_contents_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698