OLD | NEW |
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 36 matching lines...) Loading... |
47 #include "media/audio/audio_manager_base.h" | 47 #include "media/audio/audio_manager_base.h" |
48 #include "media/base/media_switches.h" | 48 #include "media/base/media_switches.h" |
49 #include "net/base/net_util.h" | 49 #include "net/base/net_util.h" |
50 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_types.h" | 50 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_types.h" |
51 #include "ui/base/l10n/l10n_util.h" | 51 #include "ui/base/l10n/l10n_util.h" |
52 | 52 |
53 #if defined(OS_CHROMEOS) | 53 #if defined(OS_CHROMEOS) |
54 #include "ash/shell.h" | 54 #include "ash/shell.h" |
55 #endif // defined(OS_CHROMEOS) | 55 #endif // defined(OS_CHROMEOS) |
56 | 56 |
57 // Only do audio stream monitoring for platforms that use it for the tab media | |
58 // indicator UI or the OOM killer. | |
59 #if !defined(OS_ANDROID) && !defined(OS_IOS) | |
60 #define AUDIO_STREAM_MONITORING | |
61 #include "chrome/browser/media/audio_stream_monitor.h" | |
62 #endif // !defined(OS_ANDROID) && !defined(OS_IOS) | |
63 | 57 |
64 #if defined(ENABLE_EXTENSIONS) | 58 #if defined(ENABLE_EXTENSIONS) |
65 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" | 59 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" |
66 #include "chrome/browser/extensions/extension_service.h" | 60 #include "chrome/browser/extensions/extension_service.h" |
67 #include "extensions/browser/app_window/app_window.h" | 61 #include "extensions/browser/app_window/app_window.h" |
68 #include "extensions/browser/app_window/app_window_registry.h" | 62 #include "extensions/browser/app_window/app_window_registry.h" |
69 #include "extensions/browser/extension_system.h" | 63 #include "extensions/browser/extension_system.h" |
70 #endif | 64 #endif |
71 | 65 |
72 using content::BrowserThread; | 66 using content::BrowserThread; |
(...skipping 116 matching lines...) Loading... |
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 684 matching lines...) Loading... |
930 content::MediaRequestState state) { | 887 content::MediaRequestState state) { |
931 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 888 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
932 BrowserThread::PostTask( | 889 BrowserThread::PostTask( |
933 BrowserThread::UI, FROM_HERE, | 890 BrowserThread::UI, FROM_HERE, |
934 base::Bind( | 891 base::Bind( |
935 &MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread, | 892 &MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread, |
936 base::Unretained(this), render_process_id, render_frame_id, | 893 base::Unretained(this), render_process_id, render_frame_id, |
937 page_request_id, security_origin, stream_type, state)); | 894 page_request_id, security_origin, stream_type, state)); |
938 } | 895 } |
939 | 896 |
940 void MediaCaptureDevicesDispatcher::OnAudioStreamPlaying( | |
941 int render_process_id, | |
942 int render_frame_id, | |
943 int stream_id, | |
944 const ReadPowerAndClipCallback& read_power_callback) { | |
945 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | |
946 #if defined(AUDIO_STREAM_MONITORING) | |
947 BrowserThread::PostTask( | |
948 BrowserThread::UI, | |
949 FROM_HERE, | |
950 base::Bind(&StartAudioStreamMonitoringOnUIThread, | |
951 render_process_id, | |
952 render_frame_id, | |
953 stream_id, | |
954 read_power_callback)); | |
955 #endif | |
956 } | |
957 | |
958 void MediaCaptureDevicesDispatcher::OnAudioStreamStopped( | |
959 int render_process_id, | |
960 int render_frame_id, | |
961 int stream_id) { | |
962 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | |
963 #if defined(AUDIO_STREAM_MONITORING) | |
964 BrowserThread::PostTask( | |
965 BrowserThread::UI, | |
966 FROM_HERE, | |
967 base::Bind(&StopAudioStreamMonitoringOnUIThread, | |
968 render_process_id, | |
969 render_frame_id, | |
970 stream_id)); | |
971 #endif | |
972 } | |
973 | |
974 void MediaCaptureDevicesDispatcher::OnCreatingAudioStream( | 897 void MediaCaptureDevicesDispatcher::OnCreatingAudioStream( |
975 int render_process_id, | 898 int render_process_id, |
976 int render_frame_id) { | 899 int render_frame_id) { |
977 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 900 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
978 BrowserThread::PostTask( | 901 BrowserThread::PostTask( |
979 BrowserThread::UI, FROM_HERE, | 902 BrowserThread::UI, FROM_HERE, |
980 base::Bind( | 903 base::Bind( |
981 &MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread, | 904 &MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread, |
982 base::Unretained(this), render_process_id, render_frame_id)); | 905 base::Unretained(this), render_process_id, render_frame_id)); |
983 } | 906 } |
(...skipping 78 matching lines...) Loading... |
1062 stream_type, | 985 stream_type, |
1063 state)); | 986 state)); |
1064 } | 987 } |
1065 | 988 |
1066 void MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread( | 989 void MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread( |
1067 int render_process_id, | 990 int render_process_id, |
1068 int render_frame_id) { | 991 int render_frame_id) { |
1069 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 992 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1070 FOR_EACH_OBSERVER(Observer, observers_, | 993 FOR_EACH_OBSERVER(Observer, observers_, |
1071 OnCreatingAudioStream(render_process_id, render_frame_id)); | 994 OnCreatingAudioStream(render_process_id, render_frame_id)); |
1072 #if defined(AUDIO_STREAM_MONITORING) | |
1073 content::WebContents* const web_contents = | |
1074 content::WebContents::FromRenderFrameHost( | |
1075 content::RenderFrameHost::FromID(render_process_id, render_frame_id)); | |
1076 if (web_contents) { | |
1077 // Note: Calling CreateForWebContents() multiple times is valid (see usage | |
1078 // info for content::WebContentsUserData). | |
1079 AudioStreamMonitor::CreateForWebContents(web_contents); | |
1080 } | |
1081 #endif | |
1082 } | 995 } |
1083 | 996 |
1084 bool MediaCaptureDevicesDispatcher::IsDesktopCaptureInProgress() { | 997 bool MediaCaptureDevicesDispatcher::IsDesktopCaptureInProgress() { |
1085 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 998 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1086 return desktop_capture_sessions_.size() > 0; | 999 return desktop_capture_sessions_.size() > 0; |
1087 } | 1000 } |
1088 | 1001 |
1089 | |
1090 void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices( | 1002 void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices( |
1091 const MediaStreamDevices& devices) { | 1003 const MediaStreamDevices& devices) { |
1092 test_audio_devices_ = devices; | 1004 test_audio_devices_ = devices; |
1093 } | 1005 } |
1094 | 1006 |
1095 void MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices( | 1007 void MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices( |
1096 const MediaStreamDevices& devices) { | 1008 const MediaStreamDevices& devices) { |
1097 test_video_devices_ = devices; | 1009 test_video_devices_ = devices; |
1098 } | 1010 } |
OLD | NEW |