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

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

Issue 1580493004: Plumb audio focus support for spitzer clients. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@delegate_hookup
Patch Set: Fix crash, plumb. 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 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/callback.h"
7 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
8 #include "build/build_config.h" 9 #include "build/build_config.h"
9 #include "content/browser/power_save_blocker_impl.h" 10 #include "content/browser/power_save_blocker_impl.h"
10 #include "content/browser/web_contents/web_contents_impl.h" 11 #include "content/browser/web_contents/web_contents_impl.h"
11 #include "content/common/frame_messages.h" 12 #include "content/common/frame_messages.h"
12 #include "content/public/browser/render_frame_host.h" 13 #include "content/public/browser/render_frame_host.h"
13 #include "content/public/browser/web_contents.h" 14 #include "content/public/browser/web_contents.h"
14 #include "ipc/ipc_message_macros.h" 15 #include "ipc/ipc_message_macros.h"
16 #include "media/base/bind_to_current_loop.h"
15 17
16 namespace content { 18 namespace content {
17 19
18 MediaWebContentsObserver::MediaWebContentsObserver(WebContents* web_contents) 20 MediaWebContentsObserver::MediaWebContentsObserver(WebContents* web_contents)
19 : WebContentsObserver(web_contents) {} 21 : WebContentsObserver(web_contents) {}
20 22
21 MediaWebContentsObserver::~MediaWebContentsObserver() {} 23 MediaWebContentsObserver::~MediaWebContentsObserver() {}
22 24
23 void MediaWebContentsObserver::RenderFrameDeleted( 25 void MediaWebContentsObserver::RenderFrameDeleted(
24 RenderFrameHost* render_frame_host) { 26 RenderFrameHost* render_frame_host) {
(...skipping 20 matching lines...) Expand all
45 OnMediaDestroyedNotification) 47 OnMediaDestroyedNotification)
46 IPC_MESSAGE_HANDLER(FrameHostMsg_MediaPlayingNotification, 48 IPC_MESSAGE_HANDLER(FrameHostMsg_MediaPlayingNotification,
47 OnMediaPlayingNotification) 49 OnMediaPlayingNotification)
48 IPC_MESSAGE_HANDLER(FrameHostMsg_MediaPausedNotification, 50 IPC_MESSAGE_HANDLER(FrameHostMsg_MediaPausedNotification,
49 OnMediaPausedNotification) 51 OnMediaPausedNotification)
50 IPC_MESSAGE_UNHANDLED(handled = false) 52 IPC_MESSAGE_UNHANDLED(handled = false)
51 IPC_END_MESSAGE_MAP() 53 IPC_END_MESSAGE_MAP()
52 return handled; 54 return handled;
53 } 55 }
54 56
57 void MediaWebContentsObserver::WasShown() {
58 // Restore power save blocker if there are active video players running.
59 if (!active_video_players_.empty() && !video_power_save_blocker_)
60 CreateVideoPowerSaveBlocker();
61 }
62
63 void MediaWebContentsObserver::WasHidden() {
64 // If there are entities capturing screenshots or video (e.g., mirroring),
65 // don't release the power save blocker.
66 if (!web_contents()->GetCapturerCount())
67 video_power_save_blocker_.reset();
68 }
69
70 // static
71 void MediaWebContentsObserver::HasAudioFocus(int render_process_id,
72 int render_frame_id,
73 const base::Closure& on_focus_cb) {
74 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
75 BrowserThread::PostTask(
76 BrowserThread::UI, FROM_HERE,
77 base::Bind(&MediaWebContentsObserver::HasAudioFocus, render_process_id,
78 render_frame_id, media::BindToCurrentLoop(on_focus_cb)));
79 return;
80 }
81
82 RenderFrameHost* rfh =
83 RenderFrameHost::FromID(render_process_id, render_frame_id);
84 if (rfh) {
mlamouri (slow - plz ping) 2016/01/14 15:03:41 nit: ``` if (!rfh) return; ``` Also, probably n
DaleCurtis 2016/01/14 23:16:10 There was some reason I wrote it this way, but I d
85 WebContents* wc = WebContents::FromRenderFrameHost(rfh);
mlamouri (slow - plz ping) 2016/01/14 15:03:41 nit: we usually use `web_contents`, I can't rememb
DaleCurtis 2016/01/14 23:16:10 Done.
86 if (wc) {
mlamouri (slow - plz ping) 2016/01/14 15:03:41 nit: ``` if (!wc) return; ```
DaleCurtis 2016/01/14 23:16:10 Done.
87 MediaWebContentsObserver* p_this =
88 static_cast<WebContentsImpl*>(wc)->media_web_contents_observer();
89 p_this->CheckFocus(render_frame_id, on_focus_cb);
90 return;
91 }
92 }
93 }
94
95 void MediaWebContentsObserver::CheckFocus(int render_frame_id,
96 const base::Closure& on_focus_cb) {
97 NOTIMPLEMENTED();
98 }
99
55 void MediaWebContentsObserver::OnMediaDestroyedNotification( 100 void MediaWebContentsObserver::OnMediaDestroyedNotification(
56 RenderFrameHost* render_frame_host, 101 RenderFrameHost* render_frame_host,
57 int64_t player_cookie) { 102 int64_t player_cookie) {
58 OnMediaPausedNotification(render_frame_host, player_cookie, true); 103 OnMediaPausedNotification(render_frame_host, player_cookie, true);
59 } 104 }
60 105
61 void MediaWebContentsObserver::OnMediaPlayingNotification( 106 void MediaWebContentsObserver::OnMediaPlayingNotification(
62 RenderFrameHost* render_frame_host, 107 RenderFrameHost* render_frame_host,
63 int64_t player_cookie, 108 int64_t player_cookie,
64 bool has_video, 109 bool has_video,
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 video_power_save_blocker_ = PowerSaveBlocker::Create( 186 video_power_save_blocker_ = PowerSaveBlocker::Create(
142 PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep, 187 PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep,
143 PowerSaveBlocker::kReasonVideoPlayback, "Playing video"); 188 PowerSaveBlocker::kReasonVideoPlayback, "Playing video");
144 // TODO(mfomitchev): Support PowerSaveBlocker on Aura - crbug.com/546718. 189 // TODO(mfomitchev): Support PowerSaveBlocker on Aura - crbug.com/546718.
145 #if defined(OS_ANDROID) && !defined(USE_AURA) 190 #if defined(OS_ANDROID) && !defined(USE_AURA)
146 static_cast<PowerSaveBlockerImpl*>(video_power_save_blocker_.get()) 191 static_cast<PowerSaveBlockerImpl*>(video_power_save_blocker_.get())
147 ->InitDisplaySleepBlocker(web_contents()); 192 ->InitDisplaySleepBlocker(web_contents());
148 #endif 193 #endif
149 } 194 }
150 195
151 void MediaWebContentsObserver::WasShown() {
152 // Restore power save blocker if there are active video players running.
153 if (!active_video_players_.empty() && !video_power_save_blocker_)
154 CreateVideoPowerSaveBlocker();
155 }
156
157 void MediaWebContentsObserver::WasHidden() {
158 // If there are entities capturing screenshots or video (e.g., mirroring),
159 // don't release the power save blocker.
160 if (!web_contents()->GetCapturerCount())
161 video_power_save_blocker_.reset();
162 }
163
164 void MediaWebContentsObserver::MaybeReleasePowerSaveBlockers() { 196 void MediaWebContentsObserver::MaybeReleasePowerSaveBlockers() {
165 // If there are no more audio players and we don't have audio stream 197 // If there are no more audio players and we don't have audio stream
166 // monitoring, release the audio power save blocker here instead of during 198 // monitoring, release the audio power save blocker here instead of during
167 // NotifyNavigationStateChanged(). 199 // NotifyNavigationStateChanged().
168 if (active_audio_players_.empty() && 200 if (active_audio_players_.empty() &&
169 !AudioStreamMonitor::monitoring_available()) { 201 !AudioStreamMonitor::monitoring_available()) {
170 audio_power_save_blocker_.reset(); 202 audio_power_save_blocker_.reset();
171 } 203 }
172 204
173 // If there are no more video players, clear the video power save blocker. 205 // If there are no more video players, clear the video power save blocker.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 if (it == player_map->end()) 245 if (it == player_map->end())
214 return; 246 return;
215 247
216 for (int64_t player_cookie : it->second) 248 for (int64_t player_cookie : it->second)
217 removed_players->insert(MediaPlayerId(render_frame_host, player_cookie)); 249 removed_players->insert(MediaPlayerId(render_frame_host, player_cookie));
218 250
219 player_map->erase(it); 251 player_map->erase(it);
220 } 252 }
221 253
222 } // namespace content 254 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/media/media_web_contents_observer.h ('k') | content/browser/renderer_host/media/audio_renderer_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698