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...) Expand 10 before | Expand all | Expand 10 after 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) |
57 | 63 |
58 #if defined(ENABLE_EXTENSIONS) | 64 #if defined(ENABLE_EXTENSIONS) |
59 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" | 65 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" |
60 #include "chrome/browser/extensions/extension_service.h" | 66 #include "chrome/browser/extensions/extension_service.h" |
61 #include "extensions/browser/app_window/app_window.h" | 67 #include "extensions/browser/app_window/app_window.h" |
62 #include "extensions/browser/app_window/app_window_registry.h" | 68 #include "extensions/browser/app_window/app_window_registry.h" |
63 #include "extensions/browser/extension_system.h" | 69 #include "extensions/browser/extension_system.h" |
64 #endif | 70 #endif |
65 | 71 |
66 using content::BrowserThread; | 72 using content::BrowserThread; |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 ui = ScreenCaptureNotificationUI::Create(l10n_util::GetStringFUTF16( | 189 ui = ScreenCaptureNotificationUI::Create(l10n_util::GetStringFUTF16( |
184 IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_TEXT_DELEGATED, | 190 IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_TEXT_DELEGATED, |
185 registered_extension_name, | 191 registered_extension_name, |
186 application_title)); | 192 application_title)); |
187 } | 193 } |
188 } | 194 } |
189 | 195 |
190 return ui.Pass(); | 196 return ui.Pass(); |
191 } | 197 } |
192 | 198 |
| 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 |
193 #if !defined(OS_ANDROID) | 236 #if !defined(OS_ANDROID) |
194 // Find browser or app window from a given |web_contents|. | 237 // Find browser or app window from a given |web_contents|. |
195 gfx::NativeWindow FindParentWindowForWebContents( | 238 gfx::NativeWindow FindParentWindowForWebContents( |
196 content::WebContents* web_contents) { | 239 content::WebContents* web_contents) { |
197 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); | 240 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); |
198 if (browser && browser->window()) | 241 if (browser && browser->window()) |
199 return browser->window()->GetNativeWindow(); | 242 return browser->window()->GetNativeWindow(); |
200 | 243 |
201 const extensions::AppWindowRegistry::AppWindowList& window_list = | 244 const extensions::AppWindowRegistry::AppWindowList& window_list = |
202 extensions::AppWindowRegistry::Get( | 245 extensions::AppWindowRegistry::Get( |
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
887 content::MediaRequestState state) { | 930 content::MediaRequestState state) { |
888 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 931 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
889 BrowserThread::PostTask( | 932 BrowserThread::PostTask( |
890 BrowserThread::UI, FROM_HERE, | 933 BrowserThread::UI, FROM_HERE, |
891 base::Bind( | 934 base::Bind( |
892 &MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread, | 935 &MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread, |
893 base::Unretained(this), render_process_id, render_frame_id, | 936 base::Unretained(this), render_process_id, render_frame_id, |
894 page_request_id, security_origin, stream_type, state)); | 937 page_request_id, security_origin, stream_type, state)); |
895 } | 938 } |
896 | 939 |
| 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 |
897 void MediaCaptureDevicesDispatcher::OnCreatingAudioStream( | 974 void MediaCaptureDevicesDispatcher::OnCreatingAudioStream( |
898 int render_process_id, | 975 int render_process_id, |
899 int render_frame_id) { | 976 int render_frame_id) { |
900 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 977 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
901 BrowserThread::PostTask( | 978 BrowserThread::PostTask( |
902 BrowserThread::UI, FROM_HERE, | 979 BrowserThread::UI, FROM_HERE, |
903 base::Bind( | 980 base::Bind( |
904 &MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread, | 981 &MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread, |
905 base::Unretained(this), render_process_id, render_frame_id)); | 982 base::Unretained(this), render_process_id, render_frame_id)); |
906 } | 983 } |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
985 stream_type, | 1062 stream_type, |
986 state)); | 1063 state)); |
987 } | 1064 } |
988 | 1065 |
989 void MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread( | 1066 void MediaCaptureDevicesDispatcher::OnCreatingAudioStreamOnUIThread( |
990 int render_process_id, | 1067 int render_process_id, |
991 int render_frame_id) { | 1068 int render_frame_id) { |
992 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1069 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
993 FOR_EACH_OBSERVER(Observer, observers_, | 1070 FOR_EACH_OBSERVER(Observer, observers_, |
994 OnCreatingAudioStream(render_process_id, render_frame_id)); | 1071 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 |
995 } | 1082 } |
996 | 1083 |
997 bool MediaCaptureDevicesDispatcher::IsDesktopCaptureInProgress() { | 1084 bool MediaCaptureDevicesDispatcher::IsDesktopCaptureInProgress() { |
998 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1085 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
999 return desktop_capture_sessions_.size() > 0; | 1086 return desktop_capture_sessions_.size() > 0; |
1000 } | 1087 } |
1001 | 1088 |
| 1089 |
1002 void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices( | 1090 void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices( |
1003 const MediaStreamDevices& devices) { | 1091 const MediaStreamDevices& devices) { |
1004 test_audio_devices_ = devices; | 1092 test_audio_devices_ = devices; |
1005 } | 1093 } |
1006 | 1094 |
1007 void MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices( | 1095 void MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices( |
1008 const MediaStreamDevices& devices) { | 1096 const MediaStreamDevices& devices) { |
1009 test_video_devices_ = devices; | 1097 test_video_devices_ = devices; |
1010 } | 1098 } |
OLD | NEW |