Index: content/browser/renderer_host/media/media_stream_manager.h |
diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h |
index 17f863e90fda9b5140ee47983298bb4f17ac1026..3082ac0f76fd6ec5434b6a81657bcb4ba6849261 100644 |
--- a/content/browser/renderer_host/media/media_stream_manager.h |
+++ b/content/browser/renderer_host/media/media_stream_manager.h |
@@ -29,19 +29,15 @@ |
#include "base/basictypes.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/ref_counted.h" |
-#include "base/supports_user_data.h" |
+#include "base/threading/thread.h" |
+#include "base/win/scoped_com_initializer.h" |
#include "content/browser/renderer_host/media/media_stream_provider.h" |
#include "content/browser/renderer_host/media/media_stream_settings_requester.h" |
#include "content/common/media/media_stream_options.h" |
#include "content/common/content_export.h" |
+#include "content/public/browser/browser_thread.h" |
-namespace content { |
-class ResourceContext; |
-} |
- |
-namespace media { |
-class AudioManager; |
-} |
+using base::win::ScopedCOMInitializer; |
namespace media_stream { |
@@ -50,22 +46,31 @@ class MediaStreamDeviceSettings; |
class MediaStreamRequester; |
class VideoCaptureManager; |
+// Thread that enters MTA on windows, and is base::Thread on linux and mac. |
+class DeviceThread : public base::Thread { |
+ public: |
+ explicit DeviceThread(const char* name) |
+ : base::Thread(name), |
+ com_init_(ScopedCOMInitializer::kMTA) {} |
+ |
+ private: |
+ ScopedCOMInitializer com_init_; |
+ DISALLOW_COPY_AND_ASSIGN(DeviceThread); |
+}; |
+ |
// MediaStreamManager is used to generate and close new media devices, not to |
// start the media flow. |
// The classes requesting new media streams are answered using |
// MediaStreamManager::Listener. |
class CONTENT_EXPORT MediaStreamManager |
: public MediaStreamProviderListener, |
- public SettingsRequester, |
- public base::SupportsUserData::Data { |
+ public SettingsRequester { |
public: |
- // Returns the MediaStreamManager for the given ResourceContext. If it hasn't |
- // been created yet, it will be constructed with the given AudioManager. |
- static MediaStreamManager* GetForResourceContext( |
- content::ResourceContext* resource_context, |
- media::AudioManager* audio_manager); |
+ // This class takes the ownerships of the |audio_input_device_manager| |
+ // and |video_capture_manager|. |
+ MediaStreamManager(AudioInputDeviceManager* audio_input_device_manager, |
+ VideoCaptureManager* video_capture_manager); |
- explicit MediaStreamManager(media::AudioManager* audio_manager); |
virtual ~MediaStreamManager(); |
// Used to access VideoCaptureManager. |
@@ -130,6 +135,8 @@ class CONTENT_EXPORT MediaStreamManager |
// Used by unit test to make sure fake devices are used instead of a real |
// devices, which is needed for server based testing. |
+ // TODO(xians): Remove this hack since we can create our own |
+ // MediaStreamManager in our unit tests. |
void UseFakeDevice(); |
private: |
@@ -149,9 +156,16 @@ class CONTENT_EXPORT MediaStreamManager |
void StartEnumeration(DeviceRequest* new_request, |
std::string* label); |
+ // Helper to ensure the device thread and pass the message loop to device |
+ // managers, it also register itself as the listener to the device managers. |
+ void EnsureDeviceThreadAndListener(); |
+ |
+ // Device thread shared by VideoCaptureManager and AudioInputDeviceManager. |
+ scoped_ptr<base::Thread> device_thread_; |
+ |
scoped_ptr<MediaStreamDeviceSettings> device_settings_; |
- scoped_refptr<VideoCaptureManager> video_capture_manager_; |
scoped_refptr<AudioInputDeviceManager> audio_input_device_manager_; |
+ scoped_refptr<VideoCaptureManager> video_capture_manager_; |
// Keeps track of device types currently being enumerated to not enumerate |
// when not necessary. |
@@ -160,7 +174,6 @@ class CONTENT_EXPORT MediaStreamManager |
// All non-closed request. |
typedef std::map<std::string, DeviceRequest> DeviceRequests; |
DeviceRequests requests_; |
- media::AudioManager* audio_manager_; |
DISALLOW_COPY_AND_ASSIGN(MediaStreamManager); |
}; |