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/lazy_instance.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" |
10 #include "content/browser/media/audible_metrics.h" | |
11 #include "content/browser/media/audio_stream_monitor.h" | |
9 #include "content/browser/power_save_blocker_impl.h" | 12 #include "content/browser/power_save_blocker_impl.h" |
10 #include "content/browser/web_contents/web_contents_impl.h" | 13 #include "content/browser/web_contents/web_contents_impl.h" |
11 #include "content/common/frame_messages.h" | 14 #include "content/common/frame_messages.h" |
12 #include "content/public/browser/render_frame_host.h" | 15 #include "content/public/browser/render_frame_host.h" |
13 #include "content/public/browser/web_contents.h" | 16 #include "content/public/browser/web_contents.h" |
14 #include "ipc/ipc_message_macros.h" | 17 #include "ipc/ipc_message_macros.h" |
15 | 18 |
16 namespace content { | 19 namespace content { |
17 | 20 |
21 namespace { | |
22 | |
23 static base::LazyInstance<AudibleMetrics> g_audible_metrics = | |
DaleCurtis
2016/01/15 19:02:03
::Leaky
mlamouri (slow - plz ping)
2016/01/19 12:18:43
Done.
| |
24 LAZY_INSTANCE_INITIALIZER; | |
25 | |
26 } // anonymous namespace | |
27 | |
18 MediaWebContentsObserver::MediaWebContentsObserver(WebContents* web_contents) | 28 MediaWebContentsObserver::MediaWebContentsObserver(WebContents* web_contents) |
19 : WebContentsObserver(web_contents) {} | 29 : WebContentsObserver(web_contents) {} |
20 | 30 |
21 MediaWebContentsObserver::~MediaWebContentsObserver() {} | 31 MediaWebContentsObserver::~MediaWebContentsObserver() {} |
22 | 32 |
33 void MediaWebContentsObserver::WebContentsDestroyed() { | |
34 g_audible_metrics.Get().UpdateAudibleWebContentsState(web_contents(), false); | |
35 } | |
36 | |
23 void MediaWebContentsObserver::RenderFrameDeleted( | 37 void MediaWebContentsObserver::RenderFrameDeleted( |
24 RenderFrameHost* render_frame_host) { | 38 RenderFrameHost* render_frame_host) { |
25 ClearPowerSaveBlockers(render_frame_host); | 39 ClearPowerSaveBlockers(render_frame_host); |
26 } | 40 } |
27 | 41 |
28 void MediaWebContentsObserver::MaybeUpdateAudibleState(bool recently_audible) { | 42 void MediaWebContentsObserver::MaybeUpdateAudibleState() { |
29 if (recently_audible) { | 43 if (!AudioStreamMonitor::monitoring_available()) |
44 return; | |
45 | |
46 AudioStreamMonitor* audio_stream_monitor = | |
47 static_cast<WebContentsImpl*>(web_contents())->audio_stream_monitor(); | |
48 | |
49 if (audio_stream_monitor->WasRecentlyAudible()) { | |
30 if (!audio_power_save_blocker_) | 50 if (!audio_power_save_blocker_) |
31 CreateAudioPowerSaveBlocker(); | 51 CreateAudioPowerSaveBlocker(); |
32 } else { | 52 } else { |
33 audio_power_save_blocker_.reset(); | 53 audio_power_save_blocker_.reset(); |
34 } | 54 } |
55 | |
56 g_audible_metrics.Get().UpdateAudibleWebContentsState( | |
57 web_contents(), audio_stream_monitor->IsCurrentlyAudible()); | |
35 } | 58 } |
36 | 59 |
37 bool MediaWebContentsObserver::OnMessageReceived( | 60 bool MediaWebContentsObserver::OnMessageReceived( |
38 const IPC::Message& msg, | 61 const IPC::Message& msg, |
39 RenderFrameHost* render_frame_host) { | 62 RenderFrameHost* render_frame_host) { |
40 bool handled = true; | 63 bool handled = true; |
41 // TODO(dalecurtis): These should no longer be FrameHostMsg. | 64 // TODO(dalecurtis): These should no longer be FrameHostMsg. |
42 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(MediaWebContentsObserver, msg, | 65 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(MediaWebContentsObserver, msg, |
43 render_frame_host) | 66 render_frame_host) |
44 IPC_MESSAGE_HANDLER(FrameHostMsg_MediaPlayingNotification, | 67 IPC_MESSAGE_HANDLER(FrameHostMsg_MediaPlayingNotification, |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
203 if (it == player_map->end()) | 226 if (it == player_map->end()) |
204 return; | 227 return; |
205 | 228 |
206 for (int64_t player_cookie : it->second) | 229 for (int64_t player_cookie : it->second) |
207 removed_players->insert(MediaPlayerId(render_frame_host, player_cookie)); | 230 removed_players->insert(MediaPlayerId(render_frame_host, player_cookie)); |
208 | 231 |
209 player_map->erase(it); | 232 player_map->erase(it); |
210 } | 233 } |
211 | 234 |
212 } // namespace content | 235 } // namespace content |
OLD | NEW |