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

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: Cleanup. 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 #include "media/audio/audio_manager_base.h" 51 #include "media/audio/audio_manager_base.h"
52 #include "media/base/media_switches.h" 52 #include "media/base/media_switches.h"
53 #include "net/base/net_util.h" 53 #include "net/base/net_util.h"
54 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_types.h" 54 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_types.h"
55 #include "ui/base/l10n/l10n_util.h" 55 #include "ui/base/l10n/l10n_util.h"
56 56
57 #if defined(OS_CHROMEOS) 57 #if defined(OS_CHROMEOS)
58 #include "ash/shell.h" 58 #include "ash/shell.h"
59 #endif // defined(OS_CHROMEOS) 59 #endif // defined(OS_CHROMEOS)
60 60
61 // Only do audio stream monitoring for platforms that use it for the tab media
62 // indicator UI or the OOM killer.
63 #if !defined(OS_ANDROID) && !defined(OS_IOS)
64 #define AUDIO_STREAM_MONITORING
65 #include "chrome/browser/media/audio_stream_monitor.h"
66 #endif // !defined(OS_ANDROID) && !defined(OS_IOS)
67 61
68 #if defined(ENABLE_EXTENSIONS) 62 #if defined(ENABLE_EXTENSIONS)
69 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" 63 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h"
70 #endif 64 #endif
71 65
72 using content::BrowserThread; 66 using content::BrowserThread;
73 using content::MediaCaptureDevices; 67 using content::MediaCaptureDevices;
74 using content::MediaStreamDevices; 68 using content::MediaStreamDevices;
75 69
76 namespace { 70 namespace {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 ui = ScreenCaptureNotificationUI::Create(l10n_util::GetStringFUTF16( 183 ui = ScreenCaptureNotificationUI::Create(l10n_util::GetStringFUTF16(
190 IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_TEXT_DELEGATED, 184 IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_TEXT_DELEGATED,
191 registered_extension_name, 185 registered_extension_name,
192 application_title)); 186 application_title));
193 } 187 }
194 } 188 }
195 189
196 return ui.Pass(); 190 return ui.Pass();
197 } 191 }
198 192
199 #if defined(AUDIO_STREAM_MONITORING)
200
201 AudioStreamMonitor* AudioStreamMonitorFromRenderFrame(
202 int render_process_id,
203 int render_frame_id) {
204 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
205 content::WebContents* const web_contents =
206 content::WebContents::FromRenderFrameHost(
207 content::RenderFrameHost::FromID(render_process_id, render_frame_id));
208 if (!web_contents)
209 return NULL;
210 return AudioStreamMonitor::FromWebContents(web_contents);
211 }
212
213 void StartAudioStreamMonitoringOnUIThread(
214 int render_process_id,
215 int render_frame_id,
216 int stream_id,
217 const AudioStreamMonitor::ReadPowerAndClipCallback& read_power_callback) {
218 AudioStreamMonitor* const audio_stream_monitor =
219 AudioStreamMonitorFromRenderFrame(render_process_id, render_frame_id);
220 if (audio_stream_monitor)
221 audio_stream_monitor->StartMonitoringStream(stream_id, read_power_callback);
222 }
223
224 void StopAudioStreamMonitoringOnUIThread(
225 int render_process_id,
226 int render_frame_id,
227 int stream_id) {
228 AudioStreamMonitor* const audio_stream_monitor =
229 AudioStreamMonitorFromRenderFrame(render_process_id, render_frame_id);
230 if (audio_stream_monitor)
231 audio_stream_monitor->StopMonitoringStream(stream_id);
232 }
233
234 #endif // defined(AUDIO_STREAM_MONITORING)
235
236 #if !defined(OS_ANDROID) 193 #if !defined(OS_ANDROID)
237 // Find browser or app window from a given |web_contents|. 194 // Find browser or app window from a given |web_contents|.
238 gfx::NativeWindow FindParentWindowForWebContents( 195 gfx::NativeWindow FindParentWindowForWebContents(
239 content::WebContents* web_contents) { 196 content::WebContents* web_contents) {
240 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 197 Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
241 if (browser && browser->window()) 198 if (browser && browser->window())
242 return browser->window()->GetNativeWindow(); 199 return browser->window()->GetNativeWindow();
243 200
244 const extensions::AppWindowRegistry::AppWindowList& window_list = 201 const extensions::AppWindowRegistry::AppWindowList& window_list =
245 extensions::AppWindowRegistry::Get( 202 extensions::AppWindowRegistry::Get(
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 content::MediaRequestState state) { 888 content::MediaRequestState state) {
932 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 889 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
933 BrowserThread::PostTask( 890 BrowserThread::PostTask(
934 BrowserThread::UI, FROM_HERE, 891 BrowserThread::UI, FROM_HERE,
935 base::Bind( 892 base::Bind(
936 &MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread, 893 &MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread,
937 base::Unretained(this), render_process_id, render_frame_id, 894 base::Unretained(this), render_process_id, render_frame_id,
938 page_request_id, security_origin, stream_type, state)); 895 page_request_id, security_origin, stream_type, state));
939 } 896 }
940 897
941 void MediaCaptureDevicesDispatcher::OnAudioStreamPlaying(
942 int render_process_id,
943 int render_frame_id,
944 int stream_id,
945 const ReadPowerAndClipCallback& read_power_callback) {
946 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
947 #if defined(AUDIO_STREAM_MONITORING)
948 BrowserThread::PostTask(
949 BrowserThread::UI,
950 FROM_HERE,
951 base::Bind(&StartAudioStreamMonitoringOnUIThread,
952 render_process_id,
953 render_frame_id,
954 stream_id,
955 read_power_callback));
956 #endif
957 }
958
959 void MediaCaptureDevicesDispatcher::OnAudioStreamStopped(
960 int render_process_id,
961 int render_frame_id,
962 int stream_id) {
963 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
964 #if defined(AUDIO_STREAM_MONITORING)
965 BrowserThread::PostTask(
966 BrowserThread::UI,
967 FROM_HERE,
968 base::Bind(&StopAudioStreamMonitoringOnUIThread,
969 render_process_id,
970 render_frame_id,
971 stream_id));
972 #endif
973 }
974
975 void MediaCaptureDevicesDispatcher::OnCreatingAudioStream( 898 void MediaCaptureDevicesDispatcher::OnCreatingAudioStream(
976 int render_process_id, 899 int render_process_id,
977 int render_frame_id) { 900 int render_frame_id) {
978 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 901 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
979 BrowserThread::PostTask( 902 BrowserThread::PostTask(
980 BrowserThread::UI, FROM_HERE, 903 BrowserThread::UI, FROM_HERE,
981 base::Bind( 904 base::Bind(
982 &MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread, 905 &MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread,
983 base::Unretained(this), render_process_id, render_frame_id)); 906 base::Unretained(this), render_process_id, render_frame_id));
984 } 907 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1063 stream_type, 986 stream_type,
1064 state)); 987 state));
1065 } 988 }
1066 989
1067 void MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread( 990 void MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread(
1068 int render_process_id, 991 int render_process_id,
1069 int render_frame_id) { 992 int render_frame_id) {
1070 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 993 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1071 FOR_EACH_OBSERVER(Observer, observers_, 994 FOR_EACH_OBSERVER(Observer, observers_,
1072 OnCreatingAudioStream(render_process_id, render_frame_id)); 995 OnCreatingAudioStream(render_process_id, render_frame_id));
1073 #if defined(AUDIO_STREAM_MONITORING)
1074 content::WebContents* const web_contents =
1075 content::WebContents::FromRenderFrameHost(
1076 content::RenderFrameHost::FromID(render_process_id, render_frame_id));
1077 if (web_contents) {
1078 // Note: Calling CreateForWebContents() multiple times is valid (see usage
1079 // info for content::WebContentsUserData).
1080 AudioStreamMonitor::CreateForWebContents(web_contents);
1081 }
1082 #endif
1083 } 996 }
1084 997
1085 bool MediaCaptureDevicesDispatcher::IsDesktopCaptureInProgress() { 998 bool MediaCaptureDevicesDispatcher::IsDesktopCaptureInProgress() {
1086 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 999 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1087 return desktop_capture_sessions_.size() > 0; 1000 return desktop_capture_sessions_.size() > 0;
1088 } 1001 }
1089 1002
1090
1091 void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices( 1003 void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices(
1092 const MediaStreamDevices& devices) { 1004 const MediaStreamDevices& devices) {
1093 test_audio_devices_ = devices; 1005 test_audio_devices_ = devices;
1094 } 1006 }
1095 1007
1096 void MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices( 1008 void MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices(
1097 const MediaStreamDevices& devices) { 1009 const MediaStreamDevices& devices) {
1098 test_video_devices_ = devices; 1010 test_video_devices_ = devices;
1099 } 1011 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698