summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormichaelbai@chromium.org <michaelbai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-14 21:09:37 +0000
committermichaelbai@chromium.org <michaelbai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-14 21:09:37 +0000
commit060ffdbd222874de5208580d4a1e33e021a34375 (patch)
tree02a3431ec33936b956f19de149740d70fd4b04ef
parent29957af3773acac8b16aa37d33d4bde727a32a21 (diff)
downloadchromium_src-060ffdbd222874de5208580d4a1e33e021a34375.zip
chromium_src-060ffdbd222874de5208580d4a1e33e021a34375.tar.gz
chromium_src-060ffdbd222874de5208580d4a1e33e021a34375.tar.bz2
Implement MediaCaptureDevices.
- Added MediaCaptureDevices to cache the MediaCaptureDevice in content layer. - Removed the correspoding methods in MediaObserver. - Removed the MediaDevicesMonitor APIs. BUG=348867 TBR=mnissler Review URL: https://codereview.chromium.org/183743021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257198 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/media/media_capture_devices_dispatcher.cc69
-rw-r--r--chrome/browser/media/media_capture_devices_dispatcher.h26
-rw-r--r--chrome/browser/policy/policy_browsertest.cc9
-rw-r--r--content/browser/media/media_devices_monitor.cc28
-rw-r--r--content/browser/renderer_host/media/media_capture_devices_impl.cc99
-rw-r--r--content/browser/renderer_host/media/media_capture_devices_impl.h49
-rw-r--r--content/browser/renderer_host/media/media_stream_manager.cc9
-rw-r--r--content/browser/renderer_host/media/mock_media_observer.h4
-rw-r--r--content/content_browser.gypi5
-rw-r--r--content/public/browser/media_capture_devices.h32
-rw-r--r--content/public/browser/media_devices_monitor.h19
-rw-r--r--content/public/browser/media_observer.h6
12 files changed, 244 insertions, 111 deletions
diff --git a/chrome/browser/media/media_capture_devices_dispatcher.cc b/chrome/browser/media/media_capture_devices_dispatcher.cc
index 6030ab2..0da0a4c 100644
--- a/chrome/browser/media/media_capture_devices_dispatcher.cc
+++ b/chrome/browser/media/media_capture_devices_dispatcher.cc
@@ -25,7 +25,7 @@
#include "components/user_prefs/pref_registry_syncable.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/desktop_media_id.h"
-#include "content/public/browser/media_devices_monitor.h"
+#include "content/public/browser/media_capture_devices.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_source.h"
#include "content/public/browser/notification_types.h"
@@ -51,6 +51,7 @@
#endif // !defined(OS_ANDROID) && !defined(OS_IOS)
using content::BrowserThread;
+using content::MediaCaptureDevices;
using content::MediaStreamDevices;
namespace {
@@ -247,8 +248,7 @@ MediaCaptureDevicesDispatcher* MediaCaptureDevicesDispatcher::GetInstance() {
}
MediaCaptureDevicesDispatcher::MediaCaptureDevicesDispatcher()
- : devices_enumerated_(false),
- is_device_enumeration_disabled_(false),
+ : is_device_enumeration_disabled_(false),
media_stream_capture_indicator_(new MediaStreamCaptureIndicator()) {
// MediaCaptureDevicesDispatcher is a singleton. It should be created on
// UI thread. Otherwise, it will not receive
@@ -288,21 +288,19 @@ void MediaCaptureDevicesDispatcher::RemoveObserver(Observer* observer) {
const MediaStreamDevices&
MediaCaptureDevicesDispatcher::GetAudioCaptureDevices() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!is_device_enumeration_disabled_ && !devices_enumerated_) {
- content::EnsureMonitorCaptureDevices();
- devices_enumerated_ = true;
- }
- return audio_devices_;
+ if (is_device_enumeration_disabled_ || !test_audio_devices_.empty())
+ return test_audio_devices_;
+
+ return MediaCaptureDevices::GetInstance()->GetAudioCaptureDevices();
}
const MediaStreamDevices&
MediaCaptureDevicesDispatcher::GetVideoCaptureDevices() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!is_device_enumeration_disabled_ && !devices_enumerated_) {
- content::EnsureMonitorCaptureDevices();
- devices_enumerated_ = true;
- }
- return video_devices_;
+ if (is_device_enumeration_disabled_ || !test_video_devices_.empty())
+ return test_video_devices_;
+
+ return MediaCaptureDevices::GetInstance()->GetVideoCaptureDevices();
}
void MediaCaptureDevicesDispatcher::Observe(
@@ -743,22 +741,22 @@ MediaCaptureDevicesDispatcher::GetDesktopStreamsRegistry() {
return desktop_streams_registry_.get();
}
-void MediaCaptureDevicesDispatcher::OnAudioCaptureDevicesChanged(
- const content::MediaStreamDevices& devices) {
+void MediaCaptureDevicesDispatcher::OnAudioCaptureDevicesChanged() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
- base::Bind(&MediaCaptureDevicesDispatcher::UpdateAudioDevicesOnUIThread,
- base::Unretained(this), devices));
+ base::Bind(
+ &MediaCaptureDevicesDispatcher::NotifyAudioDevicesChangedOnUIThread,
+ base::Unretained(this)));
}
-void MediaCaptureDevicesDispatcher::OnVideoCaptureDevicesChanged(
- const content::MediaStreamDevices& devices) {
+void MediaCaptureDevicesDispatcher::OnVideoCaptureDevicesChanged() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
- base::Bind(&MediaCaptureDevicesDispatcher::UpdateVideoDevicesOnUIThread,
- base::Unretained(this), devices));
+ base::Bind(
+ &MediaCaptureDevicesDispatcher::NotifyVideoDevicesChangedOnUIThread,
+ base::Unretained(this)));
}
void MediaCaptureDevicesDispatcher::OnMediaRequestStateChanged(
@@ -822,22 +820,16 @@ void MediaCaptureDevicesDispatcher::OnCreatingAudioStream(
base::Unretained(this), render_process_id, render_frame_id));
}
-void MediaCaptureDevicesDispatcher::UpdateAudioDevicesOnUIThread(
- const content::MediaStreamDevices& devices) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- devices_enumerated_ = true;
- audio_devices_ = devices;
+void MediaCaptureDevicesDispatcher::NotifyAudioDevicesChangedOnUIThread() {
+ MediaStreamDevices devices = GetAudioCaptureDevices();
FOR_EACH_OBSERVER(Observer, observers_,
- OnUpdateAudioDevices(audio_devices_));
+ OnUpdateAudioDevices(devices));
}
-void MediaCaptureDevicesDispatcher::UpdateVideoDevicesOnUIThread(
- const content::MediaStreamDevices& devices) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- devices_enumerated_ = true;
- video_devices_ = devices;
+void MediaCaptureDevicesDispatcher::NotifyVideoDevicesChangedOnUIThread() {
+ MediaStreamDevices devices = GetVideoCaptureDevices();
FOR_EACH_OBSERVER(Observer, observers_,
- OnUpdateVideoDevices(video_devices_));
+ OnUpdateVideoDevices(devices));
}
void MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread(
@@ -931,3 +923,14 @@ bool MediaCaptureDevicesDispatcher::IsDesktopCaptureInProgress() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
return desktop_capture_sessions_.size() > 0;
}
+
+
+void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices(
+ const MediaStreamDevices& devices) {
+ test_audio_devices_ = devices;
+}
+
+void MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices(
+ const MediaStreamDevices& devices) {
+ test_video_devices_ = devices;
+}
diff --git a/chrome/browser/media/media_capture_devices_dispatcher.h b/chrome/browser/media/media_capture_devices_dispatcher.h
index 129c0ed1f..0c16f3b 100644
--- a/chrome/browser/media/media_capture_devices_dispatcher.h
+++ b/chrome/browser/media/media_capture_devices_dispatcher.h
@@ -112,10 +112,8 @@ class MediaCaptureDevicesDispatcher : public content::MediaObserver,
void DisableDeviceEnumerationForTesting();
// Overridden from content::MediaObserver:
- virtual void OnAudioCaptureDevicesChanged(
- const content::MediaStreamDevices& devices) OVERRIDE;
- virtual void OnVideoCaptureDevicesChanged(
- const content::MediaStreamDevices& devices) OVERRIDE;
+ virtual void OnAudioCaptureDevicesChanged() OVERRIDE;
+ virtual void OnVideoCaptureDevicesChanged() OVERRIDE;
virtual void OnMediaRequestStateChanged(
int render_process_id,
int render_view_id,
@@ -141,6 +139,10 @@ class MediaCaptureDevicesDispatcher : public content::MediaObserver,
bool IsDesktopCaptureInProgress();
+ // Only for testing.
+ void SetTestAudioCaptureDevices(const content::MediaStreamDevices& devices);
+ void SetTestVideoCaptureDevices(const content::MediaStreamDevices& devices);
+
private:
friend struct DefaultSingletonTraits<MediaCaptureDevicesDispatcher>;
@@ -197,8 +199,8 @@ class MediaCaptureDevicesDispatcher : public content::MediaObserver,
scoped_ptr<content::MediaStreamUI> ui);
// Called by the MediaObserver() functions, executed on UI thread.
- void UpdateAudioDevicesOnUIThread(const content::MediaStreamDevices& devices);
- void UpdateVideoDevicesOnUIThread(const content::MediaStreamDevices& devices);
+ void NotifyAudioDevicesChangedOnUIThread();
+ void NotifyVideoDevicesChangedOnUIThread();
void UpdateMediaRequestStateOnUIThread(
int render_process_id,
int render_view_id,
@@ -209,19 +211,15 @@ class MediaCaptureDevicesDispatcher : public content::MediaObserver,
void OnCreatingAudioStreamOnUIThread(int render_process_id,
int render_frame_id);
- // A list of cached audio capture devices.
- content::MediaStreamDevices audio_devices_;
+ // Only for testing, a list of cached audio capture devices.
+ content::MediaStreamDevices test_audio_devices_;
- // A list of cached video capture devices.
- content::MediaStreamDevices video_devices_;
+ // Only for testing, a list of cached video capture devices.
+ content::MediaStreamDevices test_video_devices_;
// A list of observers for the device update notifications.
ObserverList<Observer> observers_;
- // Flag to indicate if device enumeration has been done/doing.
- // Only accessed on UI thread.
- bool devices_enumerated_;
-
// Flag used by unittests to disable device enumeration.
bool is_device_enumeration_disabled_;
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc
index 5271130..9c3ee31 100644
--- a/chrome/browser/policy/policy_browsertest.cc
+++ b/chrome/browser/policy/policy_browsertest.cc
@@ -2795,7 +2795,7 @@ IN_PROC_BROWSER_TEST_P(MediaStreamDevicesControllerBrowserTest,
content::BrowserThread::PostTaskAndReply(
content::BrowserThread::IO, FROM_HERE,
- base::Bind(&MediaCaptureDevicesDispatcher::OnAudioCaptureDevicesChanged,
+ base::Bind(&MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices,
base::Unretained(MediaCaptureDevicesDispatcher::GetInstance()),
audio_devices),
base::Bind(&MediaStreamDevicesControllerBrowserTest::FinishAudioTest,
@@ -2828,7 +2828,7 @@ IN_PROC_BROWSER_TEST_P(MediaStreamDevicesControllerBrowserTest,
content::BrowserThread::PostTaskAndReply(
content::BrowserThread::IO, FROM_HERE,
base::Bind(
- &MediaCaptureDevicesDispatcher::OnAudioCaptureDevicesChanged,
+ &MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices,
base::Unretained(MediaCaptureDevicesDispatcher::GetInstance()),
audio_devices),
base::Bind(
@@ -2852,7 +2852,7 @@ IN_PROC_BROWSER_TEST_P(MediaStreamDevicesControllerBrowserTest,
content::BrowserThread::PostTaskAndReply(
content::BrowserThread::IO, FROM_HERE,
- base::Bind(&MediaCaptureDevicesDispatcher::OnVideoCaptureDevicesChanged,
+ base::Bind(&MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices,
base::Unretained(MediaCaptureDevicesDispatcher::GetInstance()),
video_devices),
base::Bind(&MediaStreamDevicesControllerBrowserTest::FinishVideoTest,
@@ -2884,8 +2884,7 @@ IN_PROC_BROWSER_TEST_P(MediaStreamDevicesControllerBrowserTest,
content::BrowserThread::PostTaskAndReply(
content::BrowserThread::IO, FROM_HERE,
- base::Bind(
- &MediaCaptureDevicesDispatcher::OnVideoCaptureDevicesChanged,
+ base::Bind(&MediaCaptureDevicesDispatcher::SetTestVideoCaptureDevices,
base::Unretained(MediaCaptureDevicesDispatcher::GetInstance()),
video_devices),
base::Bind(
diff --git a/content/browser/media/media_devices_monitor.cc b/content/browser/media/media_devices_monitor.cc
deleted file mode 100644
index 9f2c183..0000000
--- a/content/browser/media/media_devices_monitor.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/public/browser/media_devices_monitor.h"
-
-#include "content/browser/browser_main_loop.h"
-#include "content/browser/renderer_host/media/media_stream_manager.h"
-#include "content/public/browser/browser_thread.h"
-
-namespace content {
-namespace {
-void EnsureMonitorCaptureDevicesInternal(
- MediaStreamManager* media_stream_manager) {
- media_stream_manager->EnsureDeviceMonitorStarted();
-}
-}
-
-void EnsureMonitorCaptureDevices() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&EnsureMonitorCaptureDevicesInternal,
- BrowserMainLoop::GetInstance()->media_stream_manager()));
-}
-
-} // namespace content
diff --git a/content/browser/renderer_host/media/media_capture_devices_impl.cc b/content/browser/renderer_host/media/media_capture_devices_impl.cc
new file mode 100644
index 0000000..f4e13ab
--- /dev/null
+++ b/content/browser/renderer_host/media/media_capture_devices_impl.cc
@@ -0,0 +1,99 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/renderer_host/media/media_capture_devices_impl.h"
+
+#include "content/browser/browser_main_loop.h"
+#include "content/browser/renderer_host/media/media_stream_manager.h"
+#include "content/public/browser/browser_thread.h"
+
+namespace content {
+
+namespace {
+
+void EnsureMonitorCaptureDevices() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&MediaStreamManager::EnsureDeviceMonitorStarted,
+ base::Unretained(
+ BrowserMainLoop::GetInstance()->media_stream_manager())));
+}
+
+} // namespace
+
+MediaCaptureDevices* MediaCaptureDevices::GetInstance() {
+ return MediaCaptureDevicesImpl::GetInstance();
+}
+
+MediaCaptureDevicesImpl* MediaCaptureDevicesImpl::GetInstance() {
+ return Singleton<MediaCaptureDevicesImpl>::get();
+}
+
+const MediaStreamDevices&
+MediaCaptureDevicesImpl::GetAudioCaptureDevices() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (!devices_enumerated_) {
+ EnsureMonitorCaptureDevices();
+ devices_enumerated_ = true;
+ }
+ return audio_devices_;
+}
+
+const MediaStreamDevices&
+MediaCaptureDevicesImpl::GetVideoCaptureDevices() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (!devices_enumerated_) {
+ EnsureMonitorCaptureDevices();
+ devices_enumerated_ = true;
+ }
+ return video_devices_;
+}
+
+void MediaCaptureDevicesImpl::OnAudioCaptureDevicesChanged(
+ const MediaStreamDevices& devices) {
+ if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ UpdateAudioDevicesOnUIThread(devices);
+ } else {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&MediaCaptureDevicesImpl::UpdateAudioDevicesOnUIThread,
+ base::Unretained(this), devices));
+ }
+}
+
+void MediaCaptureDevicesImpl::OnVideoCaptureDevicesChanged(
+ const MediaStreamDevices& devices) {
+ if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ UpdateVideoDevicesOnUIThread(devices);
+ } else {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&MediaCaptureDevicesImpl::UpdateVideoDevicesOnUIThread,
+ base::Unretained(this), devices));
+ }
+}
+
+MediaCaptureDevicesImpl::MediaCaptureDevicesImpl()
+ : devices_enumerated_(false) {
+}
+
+MediaCaptureDevicesImpl::~MediaCaptureDevicesImpl() {
+}
+
+void MediaCaptureDevicesImpl::UpdateAudioDevicesOnUIThread(
+ const MediaStreamDevices& devices) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ devices_enumerated_ = true;
+ audio_devices_ = devices;
+}
+
+void MediaCaptureDevicesImpl::UpdateVideoDevicesOnUIThread(
+ const MediaStreamDevices& devices) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ devices_enumerated_ = true;
+ video_devices_ = devices;
+}
+
+} // namespace content
diff --git a/content/browser/renderer_host/media/media_capture_devices_impl.h b/content/browser/renderer_host/media/media_capture_devices_impl.h
new file mode 100644
index 0000000..078f659
--- /dev/null
+++ b/content/browser/renderer_host/media/media_capture_devices_impl.h
@@ -0,0 +1,49 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_CAPTURE_DEVICES_H
+#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_CAPTURE_DEVICES_H
+
+#include "base/memory/singleton.h"
+#include "content/public/browser/media_capture_devices.h"
+
+namespace content {
+
+class MediaCaptureDevicesImpl : public MediaCaptureDevices {
+ public:
+ static MediaCaptureDevicesImpl* GetInstance();
+
+ // Overriden from MediaCaptureDevices
+ virtual const MediaStreamDevices& GetAudioCaptureDevices() OVERRIDE;
+ virtual const MediaStreamDevices& GetVideoCaptureDevices() OVERRIDE;
+
+ // Called by MediaStreamManager to notify the change of media capture
+ // devices, these 2 methods are called in IO thread.
+ void OnAudioCaptureDevicesChanged(const MediaStreamDevices& devices);
+ void OnVideoCaptureDevicesChanged(const MediaStreamDevices& devices);
+
+ private:
+ friend struct DefaultSingletonTraits<MediaCaptureDevicesImpl>;
+ MediaCaptureDevicesImpl();
+ virtual ~MediaCaptureDevicesImpl();
+
+ void UpdateAudioDevicesOnUIThread(const content::MediaStreamDevices& devices);
+ void UpdateVideoDevicesOnUIThread(const content::MediaStreamDevices& devices);
+
+ // Flag to indicate if device enumeration has been done/doing.
+ // Only accessed on UI thread.
+ bool devices_enumerated_;
+
+ // A list of cached audio capture devices.
+ MediaStreamDevices audio_devices_;
+
+ // A list of cached video capture devices.
+ MediaStreamDevices video_devices_;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaCaptureDevicesImpl);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_CAPTURE_DEVICES_H
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
index e07c2da..c533891 100644
--- a/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -19,6 +19,7 @@
#include "content/browser/media/capture/web_contents_capture_util.h"
#include "content/browser/renderer_host/media/audio_input_device_manager.h"
#include "content/browser/renderer_host/media/device_request_message_filter.h"
+#include "content/browser/renderer_host/media/media_capture_devices_impl.h"
#include "content/browser/renderer_host/media/media_stream_requester.h"
#include "content/browser/renderer_host/media/media_stream_ui_proxy.h"
#include "content/browser/renderer_host/media/video_capture_manager.h"
@@ -1791,9 +1792,13 @@ void MediaStreamManager::NotifyDevicesChanged(
}
if (IsAudioMediaType(stream_type)) {
- media_observer->OnAudioCaptureDevicesChanged(new_devices);
+ MediaCaptureDevicesImpl::GetInstance()->OnAudioCaptureDevicesChanged(
+ new_devices);
+ media_observer->OnAudioCaptureDevicesChanged();
} else if (IsVideoMediaType(stream_type)) {
- media_observer->OnVideoCaptureDevicesChanged(new_devices);
+ MediaCaptureDevicesImpl::GetInstance()->OnVideoCaptureDevicesChanged(
+ new_devices);
+ media_observer->OnVideoCaptureDevicesChanged();
} else {
NOTREACHED();
}
diff --git a/content/browser/renderer_host/media/mock_media_observer.h b/content/browser/renderer_host/media/mock_media_observer.h
index 24f0b24..04678c9 100644
--- a/content/browser/renderer_host/media/mock_media_observer.h
+++ b/content/browser/renderer_host/media/mock_media_observer.h
@@ -20,10 +20,6 @@ class MockMediaObserver : public MediaObserver {
MockMediaObserver();
virtual ~MockMediaObserver();
- MOCK_METHOD1(OnAudioCaptureDevicesChanged,
- void(const MediaStreamDevices& devices));
- MOCK_METHOD1(OnVideoCaptureDevicesChanged,
- void(const MediaStreamDevices& devices));
MOCK_METHOD6(OnMediaRequestStateChanged,
void(int render_process_id, int render_view_id,
int page_request_id, const GURL& security_origin,
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index dacc1d4..4e943fc 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -129,9 +129,9 @@
'public/browser/load_notification_details.h',
'public/browser/local_storage_usage_info.cc',
'public/browser/local_storage_usage_info.h',
+ 'public/browser/media_capture_devices.h',
'public/browser/media_device_id.cc',
'public/browser/media_device_id.h',
- 'public/browser/media_devices_monitor.h',
'public/browser/native_web_keyboard_event.h',
'public/browser/navigation_controller.cc',
'public/browser/navigation_controller.h',
@@ -761,7 +761,6 @@
'browser/media/capture/web_contents_tracker.h',
'browser/media/capture/web_contents_video_capture_device.cc',
'browser/media/capture/web_contents_video_capture_device.h',
- 'browser/media/media_devices_monitor.cc',
'browser/media/media_internals.cc',
'browser/media/media_internals.h',
'browser/media/media_internals_handler.cc',
@@ -973,6 +972,8 @@
'browser/renderer_host/media/audio_sync_reader.h',
'browser/renderer_host/media/device_request_message_filter.cc',
'browser/renderer_host/media/device_request_message_filter.h',
+ 'browser/renderer_host/media/media_capture_devices_impl.cc',
+ 'browser/renderer_host/media/media_capture_devices_impl.h',
'browser/renderer_host/media/media_stream_dispatcher_host.cc',
'browser/renderer_host/media/media_stream_dispatcher_host.h',
'browser/renderer_host/media/media_stream_manager.cc',
diff --git a/content/public/browser/media_capture_devices.h b/content/public/browser/media_capture_devices.h
new file mode 100644
index 0000000..925fff6
--- /dev/null
+++ b/content/public/browser/media_capture_devices.h
@@ -0,0 +1,32 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_BROWSER_MEDIA_CAPTURE_DEVICES_H_
+#define CONTENT_PUBLIC_BROWSER_MEDIA_CAPTURE_DEVICES_H_
+
+#include "content/public/common/media_stream_request.h"
+
+namespace content {
+
+// This is a singleton class, used to get Audio/Video devices, it must be
+// called in UI thread.
+class CONTENT_EXPORT MediaCaptureDevices {
+ public:
+ // Get signleton instance of MediaCaptureDevices.
+ static MediaCaptureDevices* GetInstance();
+
+ // Return all Audio/Video devices.
+ virtual const MediaStreamDevices& GetAudioCaptureDevices() = 0;
+ virtual const MediaStreamDevices& GetVideoCaptureDevices() = 0;
+
+ private:
+ // This interface should only be implemented inside content.
+ friend class MediaCaptureDevicesImpl;
+ MediaCaptureDevices() {}
+ virtual ~MediaCaptureDevices() {}
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_BROWSER_MEDIA_CAPTURE_DEVICES_H_
diff --git a/content/public/browser/media_devices_monitor.h b/content/public/browser/media_devices_monitor.h
deleted file mode 100644
index 044c8ad..0000000
--- a/content/public/browser/media_devices_monitor.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_PUBLIC_BROWSER_MEDIA_DEVICES_MONITOR_H_
-#define CONTENT_PUBLIC_BROWSER_MEDIA_DEVICES_MONITOR_H_
-
-#include "content/common/content_export.h"
-
-namespace content {
-
-// Called to ensure the MediaStreamManager has started monitoring the capture
-// devices, this will trigger OnAudioCaptureDevicesChanged() and
-// OnVideoCaptureDevicesChanged() callbacks.
-CONTENT_EXPORT void EnsureMonitorCaptureDevices();
-
-} // namespace content
-
-#endif // CONTENT_PUBLIC_BROWSER_MEDIA_DEVICES_MONITOR_H_
diff --git a/content/public/browser/media_observer.h b/content/public/browser/media_observer.h
index 20d47a5..dca5b85 100644
--- a/content/public/browser/media_observer.h
+++ b/content/public/browser/media_observer.h
@@ -16,12 +16,10 @@ namespace content {
class MediaObserver {
public:
// Called when a audio capture device is plugged in or unplugged.
- virtual void OnAudioCaptureDevicesChanged(
- const MediaStreamDevices& devices) = 0;
+ virtual void OnAudioCaptureDevicesChanged() = 0;
// Called when a video capture device is plugged in or unplugged.
- virtual void OnVideoCaptureDevicesChanged(
- const MediaStreamDevices& devices) = 0;
+ virtual void OnVideoCaptureDevicesChanged() = 0;
// Called when a media request changes state.
virtual void OnMediaRequestStateChanged(