| Index: chrome/browser/media/media_capture_devices_dispatcher.h
|
| diff --git a/chrome/browser/media/media_capture_devices_dispatcher.h b/chrome/browser/media/media_capture_devices_dispatcher.h
|
| index 3c97263883239aa3c60453ed35003bcdb8a9b870..b7f411a07c592be302212ccf3e1da40c6d2bd4f4 100644
|
| --- a/chrome/browser/media/media_capture_devices_dispatcher.h
|
| +++ b/chrome/browser/media/media_capture_devices_dispatcher.h
|
| @@ -5,11 +5,15 @@
|
| #ifndef CHROME_BROWSER_MEDIA_MEDIA_CAPTURE_DEVICES_DISPATCHER_H_
|
| #define CHROME_BROWSER_MEDIA_MEDIA_CAPTURE_DEVICES_DISPATCHER_H_
|
|
|
| +#include <queue>
|
| +
|
| #include "base/callback.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/memory/singleton.h"
|
| #include "base/observer_list.h"
|
| #include "content/public/browser/media_observer.h"
|
| +#include "content/public/browser/notification_observer.h"
|
| +#include "content/public/browser/notification_registrar.h"
|
| #include "content/public/browser/web_contents_delegate.h"
|
| #include "content/public/common/media_stream_request.h"
|
|
|
| @@ -24,7 +28,8 @@ class Profile;
|
|
|
| // This singleton is used to receive updates about media events from the content
|
| // layer.
|
| -class MediaCaptureDevicesDispatcher : public content::MediaObserver {
|
| +class MediaCaptureDevicesDispatcher : public content::MediaObserver,
|
| + public content::NotificationObserver {
|
| public:
|
| class Observer {
|
| public:
|
| @@ -111,9 +116,24 @@ class MediaCaptureDevicesDispatcher : public content::MediaObserver {
|
| private:
|
| friend struct DefaultSingletonTraits<MediaCaptureDevicesDispatcher>;
|
|
|
| + struct PendingAccessRequest {
|
| + PendingAccessRequest(content::MediaStreamRequest request,
|
| + content::MediaResponseCallback callback);
|
| + ~PendingAccessRequest();
|
| +
|
| + content::MediaStreamRequest request;
|
| + content::MediaResponseCallback callback;
|
| + };
|
| + typedef std::queue<PendingAccessRequest> RequestsQueue;
|
| +
|
| MediaCaptureDevicesDispatcher();
|
| virtual ~MediaCaptureDevicesDispatcher();
|
|
|
| + // content::NotificationObserver implementation.
|
| + virtual void Observe(int type,
|
| + const content::NotificationSource& source,
|
| + const content::NotificationDetails& details) OVERRIDE;
|
| +
|
| // Helpers for ProcessMediaAccessRequest().
|
| void ProcessScreenCaptureAccessRequest(
|
| content::WebContents* web_contents,
|
| @@ -124,6 +144,15 @@ class MediaCaptureDevicesDispatcher : public content::MediaObserver {
|
| const content::MediaStreamRequest& request,
|
| const content::MediaResponseCallback& callback,
|
| const extensions::Extension* extension);
|
| + void ProcessRegularMediaAccessRequest(
|
| + content::WebContents* web_contents,
|
| + const content::MediaStreamRequest& request,
|
| + const content::MediaResponseCallback& callback);
|
| + void ProcessQueuedAccessRequest(content::WebContents* web_contents,
|
| + PendingAccessRequest& request);
|
| + void OnAccessRequestResponse(content::WebContents* web_contents,
|
| + const content::MediaStreamDevices& devices,
|
| + scoped_ptr<content::MediaStreamUI> ui);
|
|
|
| // Called by the MediaObserver() functions, executed on UI thread.
|
| void UpdateAudioDevicesOnUIThread(const content::MediaStreamDevices& devices);
|
| @@ -147,9 +176,15 @@ class MediaCaptureDevicesDispatcher : public content::MediaObserver {
|
| // Only accessed on UI thread.
|
| bool devices_enumerated_;
|
|
|
| + std::map<content::WebContents*, RequestsQueue> pending_requests_;
|
| +
|
| scoped_refptr<MediaStreamCaptureIndicator> media_stream_capture_indicator_;
|
|
|
| scoped_refptr<AudioStreamIndicator> audio_stream_indicator_;
|
| +
|
| + content::NotificationRegistrar notifications_registrar_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MediaCaptureDevicesDispatcher);
|
| };
|
|
|
| #endif // CHROME_BROWSER_MEDIA_MEDIA_CAPTURE_DEVICES_DISPATCHER_H_
|
|
|