Chromium Code Reviews| 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, |
|
tommi (sloooow) - chröme
2013/04/23 11:20:47
const &
Sergey Ulanov
2013/04/29 18:17:56
Done.
|
| + content::MediaResponseCallback callback); |
|
tommi (sloooow) - chröme
2013/04/23 11:20:47
const &
Sergey Ulanov
2013/04/29 18:17:56
Done.
|
| + ~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_ |