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: review comments and windows build fix 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_.Clear(render_frame_host);
whywhat 2016/03/01 03:12:10 nit: s/Clear/RenderFrameDeleted?
mlamouri (slow - plz ping) 2016/03/07 19:28:08 Done.
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 id(render_frame_host, delegate_id);
whywhat 2016/03/01 03:12:10 nit: s/id/player_id to distinguish with other ids?
mlamouri (slow - plz ping) 2016/03/07 19:28:08 Done.
101 const bool removed_audio = RemoveMediaPlayerEntry(id, &active_audio_players_); 102 const bool removed_audio = RemoveMediaPlayerEntry(id, &active_audio_players_);
102 const bool removed_video = RemoveMediaPlayerEntry(id, &active_video_players_); 103 const bool removed_video = RemoveMediaPlayerEntry(id, &active_video_players_);
103 MaybeReleasePowerSaveBlockers(); 104 MaybeReleasePowerSaveBlockers();
104 105
105 if (removed_audio || removed_video) { 106 if (removed_audio || removed_video) {
106 // Notify observers the player has been "paused". 107 // Notify observers the player has been "paused".
107 static_cast<WebContentsImpl*>(web_contents())->MediaStoppedPlaying(id); 108 static_cast<WebContentsImpl*>(web_contents())->MediaStoppedPlaying(id);
108 } 109 }
110
111 if (reached_end_of_stream)
112 session_controllers_manager_.OnEnd(id);
113 else
114 session_controllers_manager_.OnPause(id);
109 } 115 }
110 116
111 void MediaWebContentsObserver::OnMediaPlaying( 117 void MediaWebContentsObserver::OnMediaPlaying(
112 RenderFrameHost* render_frame_host, 118 RenderFrameHost* render_frame_host,
113 int delegate_id, 119 int delegate_id,
114 bool has_video, 120 bool has_video,
115 bool has_audio, 121 bool has_audio,
116 bool is_remote, 122 bool is_remote,
117 base::TimeDelta duration) { 123 base::TimeDelta duration) {
118 // Ignore the videos playing remotely and don't hold the wake lock for the 124 // Ignore the videos playing remotely and don't hold the wake lock for the
(...skipping 17 matching lines...) Expand all
136 if (has_video) { 142 if (has_video) {
137 AddMediaPlayerEntry(id, &active_video_players_); 143 AddMediaPlayerEntry(id, &active_video_players_);
138 144
139 // If we're not hidden and have just created a player, create a blocker. 145 // If we're not hidden and have just created a player, create a blocker.
140 if (!video_power_save_blocker_ && 146 if (!video_power_save_blocker_ &&
141 !static_cast<WebContentsImpl*>(web_contents())->IsHidden()) { 147 !static_cast<WebContentsImpl*>(web_contents())->IsHidden()) {
142 CreateVideoPowerSaveBlocker(); 148 CreateVideoPowerSaveBlocker();
143 } 149 }
144 } 150 }
145 151
152 if (!session_controllers_manager_.RequestPlay(
153 id, has_audio, is_remote, duration)) {
154 return;
155 }
156
146 // Notify observers of the new player. 157 // Notify observers of the new player.
147 DCHECK(has_audio || has_video); 158 DCHECK(has_audio || has_video);
148 static_cast<WebContentsImpl*>(web_contents())->MediaStartedPlaying(id); 159 static_cast<WebContentsImpl*>(web_contents())->MediaStartedPlaying(id);
149 } 160 }
150 161
151 void MediaWebContentsObserver::ClearPowerSaveBlockers( 162 void MediaWebContentsObserver::ClearPowerSaveBlockers(
152 RenderFrameHost* render_frame_host) { 163 RenderFrameHost* render_frame_host) {
153 std::set<MediaPlayerId> removed_players; 164 std::set<MediaPlayerId> removed_players;
154 RemoveAllMediaPlayerEntries(render_frame_host, &active_audio_players_, 165 RemoveAllMediaPlayerEntries(render_frame_host, &active_audio_players_,
155 &removed_players); 166 &removed_players);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 if (it == player_map->end()) 245 if (it == player_map->end())
235 return; 246 return;
236 247
237 for (int delegate_id : it->second) 248 for (int delegate_id : it->second)
238 removed_players->insert(MediaPlayerId(render_frame_host, delegate_id)); 249 removed_players->insert(MediaPlayerId(render_frame_host, delegate_id));
239 250
240 player_map->erase(it); 251 player_map->erase(it);
241 } 252 }
242 253
243 } // namespace content 254 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698