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

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: Rebase. 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 "media/base/bind_to_current_loop.h"
17 #include "ipc/ipc_message_macros.h" 18 #include "ipc/ipc_message_macros.h"
18 19
19 namespace content { 20 namespace content {
20 21
21 namespace { 22 namespace {
22 23
23 static base::LazyInstance<AudibleMetrics>::Leaky g_audible_metrics = 24 static base::LazyInstance<AudibleMetrics>::Leaky g_audible_metrics =
24 LAZY_INSTANCE_INITIALIZER; 25 LAZY_INSTANCE_INITIALIZER;
25 26
26 } // anonymous namespace 27 } // anonymous namespace
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 CreateVideoPowerSaveBlocker(); 81 CreateVideoPowerSaveBlocker();
81 } 82 }
82 83
83 void MediaWebContentsObserver::WasHidden() { 84 void MediaWebContentsObserver::WasHidden() {
84 // If there are entities capturing screenshots or video (e.g., mirroring), 85 // If there are entities capturing screenshots or video (e.g., mirroring),
85 // don't release the power save blocker. 86 // don't release the power save blocker.
86 if (!web_contents()->GetCapturerCount()) 87 if (!web_contents()->GetCapturerCount())
87 video_power_save_blocker_.reset(); 88 video_power_save_blocker_.reset();
88 } 89 }
89 90
91 // static
92 void MediaWebContentsObserver::WaitForAudioFocusAsync(
93 int render_process_id,
94 int render_frame_id,
95 const base::Closure& focus_cb) {
96 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
97 BrowserThread::PostTask(
98 BrowserThread::UI, FROM_HERE,
99 base::Bind(&MediaWebContentsObserver::WaitForAudioFocusAsync,
100 render_process_id, render_frame_id,
101 media::BindToCurrentLoop(focus_cb)));
102 return;
103 }
104 WebContents* web_contents = WebContents::FromRenderFrameHost(
105 RenderFrameHost::FromID(render_process_id, render_frame_id));
106 if (!web_contents)
107 return;
108 MediaWebContentsObserver* p_this = static_cast<WebContentsImpl*>(web_contents)
109 ->media_web_contents_observer();
110 p_this->WaitForAudioFocusAsyncInternal(render_frame_id, focus_cb);
111 }
112
113 void MediaWebContentsObserver::WaitForAudioFocusAsyncInternal(
114 int render_frame_id,
115 const base::Closure& focus_cb) {
116 NOTIMPLEMENTED();
117 }
118
90 void MediaWebContentsObserver::OnMediaDestroyed( 119 void MediaWebContentsObserver::OnMediaDestroyed(
91 RenderFrameHost* render_frame_host, 120 RenderFrameHost* render_frame_host,
92 int delegate_id) { 121 int delegate_id) {
93 OnMediaPaused(render_frame_host, delegate_id, true); 122 OnMediaPaused(render_frame_host, delegate_id, true);
94 } 123 }
95 124
96
97 void MediaWebContentsObserver::OnMediaPaused(RenderFrameHost* render_frame_host, 125 void MediaWebContentsObserver::OnMediaPaused(RenderFrameHost* render_frame_host,
98 int delegate_id, 126 int delegate_id,
99 bool reached_end_of_stream) { 127 bool reached_end_of_stream) {
100 const MediaPlayerId id(render_frame_host, delegate_id); 128 const MediaPlayerId id(render_frame_host, delegate_id);
101 const bool removed_audio = RemoveMediaPlayerEntry(id, &active_audio_players_); 129 const bool removed_audio = RemoveMediaPlayerEntry(id, &active_audio_players_);
102 const bool removed_video = RemoveMediaPlayerEntry(id, &active_video_players_); 130 const bool removed_video = RemoveMediaPlayerEntry(id, &active_video_players_);
103 MaybeReleasePowerSaveBlockers(); 131 MaybeReleasePowerSaveBlockers();
104 132
105 if (removed_audio || removed_video) { 133 if (removed_audio || removed_video) {
106 // Notify observers the player has been "paused". 134 // Notify observers the player has been "paused".
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 if (it == player_map->end()) 262 if (it == player_map->end())
235 return; 263 return;
236 264
237 for (int delegate_id : it->second) 265 for (int delegate_id : it->second)
238 removed_players->insert(MediaPlayerId(render_frame_host, delegate_id)); 266 removed_players->insert(MediaPlayerId(render_frame_host, delegate_id));
239 267
240 player_map->erase(it); 268 player_map->erase(it);
241 } 269 }
242 270
243 } // namespace content 271 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698