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

Side by Side Diff: chrome/browser/media/media_capture_devices_dispatcher.cc

Issue 478543003: Use AudioStreamMonitor to control power save blocking. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move it with style! Created 6 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/media/media_capture_devices_dispatcher.h" 5 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 #include "media/audio/audio_manager_base.h" 46 #include "media/audio/audio_manager_base.h"
47 #include "media/base/media_switches.h" 47 #include "media/base/media_switches.h"
48 #include "net/base/net_util.h" 48 #include "net/base/net_util.h"
49 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_types.h" 49 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_types.h"
50 #include "ui/base/l10n/l10n_util.h" 50 #include "ui/base/l10n/l10n_util.h"
51 51
52 #if defined(OS_CHROMEOS) 52 #if defined(OS_CHROMEOS)
53 #include "ash/shell.h" 53 #include "ash/shell.h"
54 #endif // defined(OS_CHROMEOS) 54 #endif // defined(OS_CHROMEOS)
55 55
56 // Only do audio stream monitoring for platforms that use it for the tab media
57 // indicator UI or the OOM killer.
58 #if !defined(OS_ANDROID) && !defined(OS_IOS)
59 #define AUDIO_STREAM_MONITORING
60 #include "chrome/browser/media/audio_stream_monitor.h"
61 #endif // !defined(OS_ANDROID) && !defined(OS_IOS)
62 56
63 #if defined(ENABLE_EXTENSIONS) 57 #if defined(ENABLE_EXTENSIONS)
64 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" 58 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h"
65 #endif 59 #endif
66 60
67 using content::BrowserThread; 61 using content::BrowserThread;
68 using content::MediaCaptureDevices; 62 using content::MediaCaptureDevices;
69 using content::MediaStreamDevices; 63 using content::MediaStreamDevices;
70 64
71 namespace { 65 namespace {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 ui = ScreenCaptureNotificationUI::Create(l10n_util::GetStringFUTF16( 178 ui = ScreenCaptureNotificationUI::Create(l10n_util::GetStringFUTF16(
185 IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_TEXT_DELEGATED, 179 IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_TEXT_DELEGATED,
186 registered_extension_name, 180 registered_extension_name,
187 application_title)); 181 application_title));
188 } 182 }
189 } 183 }
190 184
191 return ui.Pass(); 185 return ui.Pass();
192 } 186 }
193 187
194 #if defined(AUDIO_STREAM_MONITORING)
195
196 AudioStreamMonitor* AudioStreamMonitorFromRenderFrame(
197 int render_process_id,
198 int render_frame_id) {
199 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
200 content::WebContents* const web_contents =
201 content::WebContents::FromRenderFrameHost(
202 content::RenderFrameHost::FromID(render_process_id, render_frame_id));
203 if (!web_contents)
204 return NULL;
205 return AudioStreamMonitor::FromWebContents(web_contents);
206 }
207
208 void StartAudioStreamMonitoringOnUIThread(
209 int render_process_id,
210 int render_frame_id,
211 int stream_id,
212 const AudioStreamMonitor::ReadPowerAndClipCallback& read_power_callback) {
213 AudioStreamMonitor* const audio_stream_monitor =
214 AudioStreamMonitorFromRenderFrame(render_process_id, render_frame_id);
215 if (audio_stream_monitor)
216 audio_stream_monitor->StartMonitoringStream(stream_id, read_power_callback);
217 }
218
219 void StopAudioStreamMonitoringOnUIThread(
220 int render_process_id,
221 int render_frame_id,
222 int stream_id) {
223 AudioStreamMonitor* const audio_stream_monitor =
224 AudioStreamMonitorFromRenderFrame(render_process_id, render_frame_id);
225 if (audio_stream_monitor)
226 audio_stream_monitor->StopMonitoringStream(stream_id);
227 }
228
229 #endif // defined(AUDIO_STREAM_MONITORING)
230
231 #if !defined(OS_ANDROID) 188 #if !defined(OS_ANDROID)
232 // Find browser or app window from a given |web_contents|. 189 // Find browser or app window from a given |web_contents|.
233 gfx::NativeWindow FindParentWindowForWebContents( 190 gfx::NativeWindow FindParentWindowForWebContents(
234 content::WebContents* web_contents) { 191 content::WebContents* web_contents) {
235 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 192 Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
236 if (browser && browser->window()) 193 if (browser && browser->window())
237 return browser->window()->GetNativeWindow(); 194 return browser->window()->GetNativeWindow();
238 195
239 const extensions::AppWindowRegistry::AppWindowList& window_list = 196 const extensions::AppWindowRegistry::AppWindowList& window_list =
240 extensions::AppWindowRegistry::Get( 197 extensions::AppWindowRegistry::Get(
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 content::MediaRequestState state) { 813 content::MediaRequestState state) {
857 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 814 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
858 BrowserThread::PostTask( 815 BrowserThread::PostTask(
859 BrowserThread::UI, FROM_HERE, 816 BrowserThread::UI, FROM_HERE,
860 base::Bind( 817 base::Bind(
861 &MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread, 818 &MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread,
862 base::Unretained(this), render_process_id, render_frame_id, 819 base::Unretained(this), render_process_id, render_frame_id,
863 page_request_id, security_origin, stream_type, state)); 820 page_request_id, security_origin, stream_type, state));
864 } 821 }
865 822
866 void MediaCaptureDevicesDispatcher::OnAudioStreamPlaying(
867 int render_process_id,
868 int render_frame_id,
869 int stream_id,
870 const ReadPowerAndClipCallback& read_power_callback) {
871 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
872 #if defined(AUDIO_STREAM_MONITORING)
873 BrowserThread::PostTask(
874 BrowserThread::UI,
875 FROM_HERE,
876 base::Bind(&StartAudioStreamMonitoringOnUIThread,
877 render_process_id,
878 render_frame_id,
879 stream_id,
880 read_power_callback));
881 #endif
882 }
883
884 void MediaCaptureDevicesDispatcher::OnAudioStreamStopped(
885 int render_process_id,
886 int render_frame_id,
887 int stream_id) {
888 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
889 #if defined(AUDIO_STREAM_MONITORING)
890 BrowserThread::PostTask(
891 BrowserThread::UI,
892 FROM_HERE,
893 base::Bind(&StopAudioStreamMonitoringOnUIThread,
894 render_process_id,
895 render_frame_id,
896 stream_id));
897 #endif
898 }
899
900 void MediaCaptureDevicesDispatcher::OnCreatingAudioStream( 823 void MediaCaptureDevicesDispatcher::OnCreatingAudioStream(
901 int render_process_id, 824 int render_process_id,
902 int render_frame_id) { 825 int render_frame_id) {
903 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 826 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
904 BrowserThread::PostTask( 827 BrowserThread::PostTask(
905 BrowserThread::UI, FROM_HERE, 828 BrowserThread::UI, FROM_HERE,
906 base::Bind( 829 base::Bind(
907 &MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread, 830 &MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread,
908 base::Unretained(this), render_process_id, render_frame_id)); 831 base::Unretained(this), render_process_id, render_frame_id));
909 } 832 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 stream_type, 911 stream_type,
989 state)); 912 state));
990 } 913 }
991 914
992 void MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread( 915 void MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread(
993 int render_process_id, 916 int render_process_id,
994 int render_frame_id) { 917 int render_frame_id) {
995 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 918 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
996 FOR_EACH_OBSERVER(Observer, observers_, 919 FOR_EACH_OBSERVER(Observer, observers_,
997 OnCreatingAudioStream(render_process_id, render_frame_id)); 920 OnCreatingAudioStream(render_process_id, render_frame_id));
998 #if defined(AUDIO_STREAM_MONITORING)
999 content::WebContents* const web_contents =
1000 content::WebContents::FromRenderFrameHost(
1001 content::RenderFrameHost::FromID(render_process_id, render_frame_id));
1002 if (web_contents) {
1003 // Note: Calling CreateForWebContents() multiple times is valid (see usage
1004 // info for content::WebContentsUserData).
1005 AudioStreamMonitor::CreateForWebContents(web_contents);
1006 }
1007 #endif
1008 } 921 }
1009 922
1010 bool MediaCaptureDevicesDispatcher::IsDesktopCaptureInProgress() { 923 bool MediaCaptureDevicesDispatcher::IsDesktopCaptureInProgress() {
1011 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 924 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1012 return desktop_capture_sessions_.size() > 0; 925 return desktop_capture_sessions_.size() > 0;
1013 } 926 }
1014 927
1015
1016 void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices( 928 void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices(
1017 const MediaStreamDevices& devices) { 929 const MediaStreamDevices& devices) {
1018 test_audio_devices_ = devices; 930 test_audio_devices_ = devices;
1019 } 931 }
1020 932
1021 void MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices( 933 void MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices(
1022 const MediaStreamDevices& devices) { 934 const MediaStreamDevices& devices) {
1023 test_video_devices_ = devices; 935 test_video_devices_ = devices;
1024 } 936 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698