| 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 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 685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |