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

Side by Side Diff: content/browser/media/media_web_contents_observer.cc

Issue 1698933004: Make MediaSession a runtime-enabled feature on Desktop. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/media/media_web_contents_observer.h" 5 #include "content/browser/media/media_web_contents_observer.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 #include "content/browser/media/audible_metrics.h" 10 #include "content/browser/media/audible_metrics.h"
11 #include "content/browser/media/audio_stream_monitor.h" 11 #include "content/browser/media/audio_stream_monitor.h"
12 #include "content/browser/power_save_blocker_impl.h" 12 #include "content/browser/power_save_blocker_impl.h"
13 #include "content/browser/web_contents/web_contents_impl.h" 13 #include "content/browser/web_contents/web_contents_impl.h"
14 #include "content/common/media/media_player_delegate_messages.h" 14 #include "content/common/media/media_player_delegate_messages.h"
15 #include "content/public/browser/render_frame_host.h" 15 #include "content/public/browser/render_frame_host.h"
16 #include "content/public/browser/web_contents.h" 16 #include "content/public/browser/web_contents.h"
17 #include "ipc/ipc_message_macros.h" 17 #include "ipc/ipc_message_macros.h"
18 18
19 namespace content { 19 namespace content {
20 20
21 namespace { 21 namespace {
22 22
23 static base::LazyInstance<AudibleMetrics>::Leaky g_audible_metrics = 23 static base::LazyInstance<AudibleMetrics>::Leaky g_audible_metrics =
24 LAZY_INSTANCE_INITIALIZER; 24 LAZY_INSTANCE_INITIALIZER;
25 25
26 } // anonymous namespace 26 } // anonymous namespace
27 27
28 MediaWebContentsObserver::MediaWebContentsObserver(WebContents* web_contents) 28 MediaWebContentsObserver::MediaWebContentsObserver(WebContents* web_contents)
29 : WebContentsObserver(web_contents) {} 29 : WebContentsObserver(web_contents),
30 session_controllers_manager_(this) {}
30 31
31 MediaWebContentsObserver::~MediaWebContentsObserver() {} 32 MediaWebContentsObserver::~MediaWebContentsObserver() {}
32 33
33 void MediaWebContentsObserver::WebContentsDestroyed() { 34 void MediaWebContentsObserver::WebContentsDestroyed() {
34 g_audible_metrics.Get().UpdateAudibleWebContentsState(web_contents(), false); 35 g_audible_metrics.Get().UpdateAudibleWebContentsState(web_contents(), false);
35 } 36 }
36 37
37 void MediaWebContentsObserver::RenderFrameDeleted( 38 void MediaWebContentsObserver::RenderFrameDeleted(
38 RenderFrameHost* render_frame_host) { 39 RenderFrameHost* render_frame_host) {
39 ClearPowerSaveBlockers(render_frame_host); 40 ClearPowerSaveBlockers(render_frame_host);
41 session_controllers_manager_.RenderFrameDeleted(render_frame_host);
40 } 42 }
41 43
42 void MediaWebContentsObserver::MaybeUpdateAudibleState() { 44 void MediaWebContentsObserver::MaybeUpdateAudibleState() {
43 if (!AudioStreamMonitor::monitoring_available()) 45 if (!AudioStreamMonitor::monitoring_available())
44 return; 46 return;
45 47
46 AudioStreamMonitor* audio_stream_monitor = 48 AudioStreamMonitor* audio_stream_monitor =
47 static_cast<WebContentsImpl*>(web_contents())->audio_stream_monitor(); 49 static_cast<WebContentsImpl*>(web_contents())->audio_stream_monitor();
48 50
49 if (audio_stream_monitor->WasRecentlyAudible()) { 51 if (audio_stream_monitor->WasRecentlyAudible()) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 if (!web_contents()->GetCapturerCount()) 88 if (!web_contents()->GetCapturerCount())
87 video_power_save_blocker_.reset(); 89 video_power_save_blocker_.reset();
88 } 90 }
89 91
90 void MediaWebContentsObserver::OnMediaDestroyed( 92 void MediaWebContentsObserver::OnMediaDestroyed(
91 RenderFrameHost* render_frame_host, 93 RenderFrameHost* render_frame_host,
92 int delegate_id) { 94 int delegate_id) {
93 OnMediaPaused(render_frame_host, delegate_id, true); 95 OnMediaPaused(render_frame_host, delegate_id, true);
94 } 96 }
95 97
96
97 void MediaWebContentsObserver::OnMediaPaused(RenderFrameHost* render_frame_host, 98 void MediaWebContentsObserver::OnMediaPaused(RenderFrameHost* render_frame_host,
98 int delegate_id, 99 int delegate_id,
99 bool reached_end_of_stream) { 100 bool reached_end_of_stream) {
100 const MediaPlayerId id(render_frame_host, delegate_id); 101 const MediaPlayerId player_id(render_frame_host, delegate_id);
101 const bool removed_audio = RemoveMediaPlayerEntry(id, &active_audio_players_); 102 const bool removed_audio =
102 const bool removed_video = RemoveMediaPlayerEntry(id, &active_video_players_); 103 RemoveMediaPlayerEntry(player_id, &active_audio_players_);
104 const bool removed_video =
105 RemoveMediaPlayerEntry(player_id, &active_video_players_);
103 MaybeReleasePowerSaveBlockers(); 106 MaybeReleasePowerSaveBlockers();
104 107
105 if (removed_audio || removed_video) { 108 if (removed_audio || removed_video) {
106 // Notify observers the player has been "paused". 109 // Notify observers the player has been "paused".
107 static_cast<WebContentsImpl*>(web_contents())->MediaStoppedPlaying(id); 110 static_cast<WebContentsImpl*>(web_contents())
111 ->MediaStoppedPlaying(player_id);
108 } 112 }
113
114 if (reached_end_of_stream)
115 session_controllers_manager_.OnEnd(player_id);
116 else
117 session_controllers_manager_.OnPause(player_id);
109 } 118 }
110 119
111 void MediaWebContentsObserver::OnMediaPlaying( 120 void MediaWebContentsObserver::OnMediaPlaying(
112 RenderFrameHost* render_frame_host, 121 RenderFrameHost* render_frame_host,
113 int delegate_id, 122 int delegate_id,
114 bool has_video, 123 bool has_video,
115 bool has_audio, 124 bool has_audio,
116 bool is_remote, 125 bool is_remote,
117 base::TimeDelta duration) { 126 base::TimeDelta duration) {
118 // Ignore the videos playing remotely and don't hold the wake lock for the 127 // Ignore the videos playing remotely and don't hold the wake lock for the
(...skipping 17 matching lines...) Expand all
136 if (has_video) { 145 if (has_video) {
137 AddMediaPlayerEntry(id, &active_video_players_); 146 AddMediaPlayerEntry(id, &active_video_players_);
138 147
139 // If we're not hidden and have just created a player, create a blocker. 148 // If we're not hidden and have just created a player, create a blocker.
140 if (!video_power_save_blocker_ && 149 if (!video_power_save_blocker_ &&
141 !static_cast<WebContentsImpl*>(web_contents())->IsHidden()) { 150 !static_cast<WebContentsImpl*>(web_contents())->IsHidden()) {
142 CreateVideoPowerSaveBlocker(); 151 CreateVideoPowerSaveBlocker();
143 } 152 }
144 } 153 }
145 154
155 if (!session_controllers_manager_.RequestPlay(
156 id, has_audio, is_remote, duration)) {
157 return;
158 }
159
146 // Notify observers of the new player. 160 // Notify observers of the new player.
147 DCHECK(has_audio || has_video); 161 DCHECK(has_audio || has_video);
148 static_cast<WebContentsImpl*>(web_contents())->MediaStartedPlaying(id); 162 static_cast<WebContentsImpl*>(web_contents())->MediaStartedPlaying(id);
149 } 163 }
150 164
151 void MediaWebContentsObserver::ClearPowerSaveBlockers( 165 void MediaWebContentsObserver::ClearPowerSaveBlockers(
152 RenderFrameHost* render_frame_host) { 166 RenderFrameHost* render_frame_host) {
153 std::set<MediaPlayerId> removed_players; 167 std::set<MediaPlayerId> removed_players;
154 RemoveAllMediaPlayerEntries(render_frame_host, &active_audio_players_, 168 RemoveAllMediaPlayerEntries(render_frame_host, &active_audio_players_,
155 &removed_players); 169 &removed_players);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 if (it == player_map->end()) 248 if (it == player_map->end())
235 return; 249 return;
236 250
237 for (int delegate_id : it->second) 251 for (int delegate_id : it->second)
238 removed_players->insert(MediaPlayerId(render_frame_host, delegate_id)); 252 removed_players->insert(MediaPlayerId(render_frame_host, delegate_id));
239 253
240 player_map->erase(it); 254 player_map->erase(it);
241 } 255 }
242 256
243 } // namespace content 257 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/media/media_web_contents_observer.h ('k') | content/browser/media/session/OWNERS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698