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

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: with flag Created 4 years, 10 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_.Clear(render_frame_host);
DaleCurtis 2016/02/17 20:16:54 We are now mixing a pattern of a delegate, 2 manag
mlamouri (slow - plz ping) 2016/02/23 20:27:55 The delegate is really because of platform dependa
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 30 matching lines...) Expand all
80 CreateVideoPowerSaveBlocker(); 82 CreateVideoPowerSaveBlocker();
81 } 83 }
82 84
83 void MediaWebContentsObserver::WasHidden() { 85 void MediaWebContentsObserver::WasHidden() {
84 // If there are entities capturing screenshots or video (e.g., mirroring), 86 // If there are entities capturing screenshots or video (e.g., mirroring),
85 // don't release the power save blocker. 87 // don't release the power save blocker.
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
92 #if defined(OS_ANDROID)
93 bool MediaWebContentsObserver::RequestPlay(
94 RenderFrameHost* render_frame_host,
95 int delegate_id,
96 bool has_audio,
97 bool is_remote,
98 base::TimeDelta duration) {
99 // |has_video| forced to true since the value doesn't matter at present.
DaleCurtis 2016/02/17 20:16:54 This no longer does quite the right thing, we don'
mlamouri (slow - plz ping) 2016/02/23 20:27:55 This is actually neatly solved with the MediaSessi
100 OnMediaPlaying(render_frame_host, delegate_id, true, has_audio, is_remote,
101 duration);
102 return media_session_map_.find(MediaPlayerId(
DaleCurtis 2016/02/17 20:16:54 No media_session_map_ anymore.
mlamouri (slow - plz ping) 2016/02/23 20:27:55 Done.
103 render_frame_host, delegate_id)) != media_session_map_.end();
104 }
105 #endif // OS_ANDROID
106
90 void MediaWebContentsObserver::OnMediaDestroyed( 107 void MediaWebContentsObserver::OnMediaDestroyed(
91 RenderFrameHost* render_frame_host, 108 RenderFrameHost* render_frame_host,
92 int delegate_id) { 109 int delegate_id) {
93 OnMediaPaused(render_frame_host, delegate_id, true); 110 OnMediaPaused(render_frame_host, delegate_id, true);
94 } 111 }
95 112
96
97 void MediaWebContentsObserver::OnMediaPaused(RenderFrameHost* render_frame_host, 113 void MediaWebContentsObserver::OnMediaPaused(RenderFrameHost* render_frame_host,
98 int delegate_id, 114 int delegate_id,
99 bool reached_end_of_stream) { 115 bool reached_end_of_stream) {
100 const MediaPlayerId id(render_frame_host, delegate_id); 116 const MediaPlayerId id(render_frame_host, delegate_id);
101 const bool removed_audio = RemoveMediaPlayerEntry(id, &active_audio_players_); 117 const bool removed_audio = RemoveMediaPlayerEntry(id, &active_audio_players_);
102 const bool removed_video = RemoveMediaPlayerEntry(id, &active_video_players_); 118 const bool removed_video = RemoveMediaPlayerEntry(id, &active_video_players_);
103 MaybeReleasePowerSaveBlockers(); 119 MaybeReleasePowerSaveBlockers();
104 120
105 if (removed_audio || removed_video) { 121 if (removed_audio || removed_video) {
106 // Notify observers the player has been "paused". 122 // Notify observers the player has been "paused".
107 static_cast<WebContentsImpl*>(web_contents())->MediaStoppedPlaying(id); 123 static_cast<WebContentsImpl*>(web_contents())->MediaStoppedPlaying(id);
108 } 124 }
125
126 if (reached_end_of_stream)
127 session_controllers_manager_.OnEnd(id);
128 else
129 session_controllers_manager_.OnPause(id);
109 } 130 }
110 131
111 void MediaWebContentsObserver::OnMediaPlaying( 132 void MediaWebContentsObserver::OnMediaPlaying(
112 RenderFrameHost* render_frame_host, 133 RenderFrameHost* render_frame_host,
113 int delegate_id, 134 int delegate_id,
114 bool has_video, 135 bool has_video,
115 bool has_audio, 136 bool has_audio,
116 bool is_remote, 137 bool is_remote,
117 base::TimeDelta duration) { 138 base::TimeDelta duration) {
118 // Ignore the videos playing remotely and don't hold the wake lock for the 139 // Ignore the videos playing remotely and don't hold the wake lock for the
(...skipping 17 matching lines...) Expand all
136 if (has_video) { 157 if (has_video) {
137 AddMediaPlayerEntry(id, &active_video_players_); 158 AddMediaPlayerEntry(id, &active_video_players_);
138 159
139 // If we're not hidden and have just created a player, create a blocker. 160 // If we're not hidden and have just created a player, create a blocker.
140 if (!video_power_save_blocker_ && 161 if (!video_power_save_blocker_ &&
141 !static_cast<WebContentsImpl*>(web_contents())->IsHidden()) { 162 !static_cast<WebContentsImpl*>(web_contents())->IsHidden()) {
142 CreateVideoPowerSaveBlocker(); 163 CreateVideoPowerSaveBlocker();
143 } 164 }
144 } 165 }
145 166
167 if (!session_controllers_manager_.RequestPlay(
168 id, has_audio, is_remote, duration)) {
169 return;
170 }
171
146 // Notify observers of the new player. 172 // Notify observers of the new player.
147 DCHECK(has_audio || has_video); 173 DCHECK(has_audio || has_video);
148 static_cast<WebContentsImpl*>(web_contents())->MediaStartedPlaying(id); 174 static_cast<WebContentsImpl*>(web_contents())->MediaStartedPlaying(id);
149 } 175 }
150 176
151 void MediaWebContentsObserver::ClearPowerSaveBlockers( 177 void MediaWebContentsObserver::ClearPowerSaveBlockers(
152 RenderFrameHost* render_frame_host) { 178 RenderFrameHost* render_frame_host) {
153 std::set<MediaPlayerId> removed_players; 179 std::set<MediaPlayerId> removed_players;
154 RemoveAllMediaPlayerEntries(render_frame_host, &active_audio_players_, 180 RemoveAllMediaPlayerEntries(render_frame_host, &active_audio_players_,
155 &removed_players); 181 &removed_players);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 if (it == player_map->end()) 260 if (it == player_map->end())
235 return; 261 return;
236 262
237 for (int delegate_id : it->second) 263 for (int delegate_id : it->second)
238 removed_players->insert(MediaPlayerId(render_frame_host, delegate_id)); 264 removed_players->insert(MediaPlayerId(render_frame_host, delegate_id));
239 265
240 player_map->erase(it); 266 player_map->erase(it);
241 } 267 }
242 268
243 } // namespace content 269 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698