OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |