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