Index: content/browser/renderer_host/media/media_devices_dispatcher_host.h |
diff --git a/content/browser/renderer_host/media/media_devices_dispatcher_host.h b/content/browser/renderer_host/media/media_devices_dispatcher_host.h |
index 9302e1304c31798dc0d2e4f05830ecd6e4e6b674..46d8b4cb9aadda610364a8750bec732fbce7a429 100644 |
--- a/content/browser/renderer_host/media/media_devices_dispatcher_host.h |
+++ b/content/browser/renderer_host/media/media_devices_dispatcher_host.h |
@@ -7,6 +7,7 @@ |
#include <memory> |
#include <string> |
+#include <vector> |
#include "base/macros.h" |
#include "content/browser/media/media_devices_permission_checker.h" |
@@ -25,16 +26,17 @@ namespace content { |
class MediaStreamManager; |
class CONTENT_EXPORT MediaDevicesDispatcherHost |
- : public ::mojom::MediaDevicesDispatcherHost { |
+ : public ::mojom::MediaDevicesDispatcherHost, |
+ public MediaDeviceChangeSubscriber { |
public: |
MediaDevicesDispatcherHost(int render_process_id, |
- int routing_id, |
+ int render_frame_id, |
const std::string& device_id_salt, |
MediaStreamManager* media_stream_manager); |
~MediaDevicesDispatcherHost() override; |
static void Create(int render_process_id, |
- int routing_id, |
+ int render_frame_id, |
const std::string& device_id_salt, |
MediaStreamManager* media_stream_manager, |
::mojom::MediaDevicesDispatcherHostRequest request); |
@@ -46,10 +48,23 @@ class CONTENT_EXPORT MediaDevicesDispatcherHost |
bool request_audio_output, |
const url::Origin& security_origin, |
const EnumerateDevicesCallback& client_callback) override; |
+ void SubscribeDeviceChangeNotifications( |
+ MediaDeviceType type, |
+ uint32_t subscription_id, |
+ const url::Origin& security_origin) override; |
+ void UnsubscribeDeviceChangeNotifications(MediaDeviceType type, |
+ uint32_t subscription_id) override; |
+ |
+ // MediaDeviceChangeSubscriber implementation. |
+ void OnDevicesChanged(MediaDeviceType type, |
+ const MediaDeviceInfoArray& device_infos) override; |
void SetPermissionChecker( |
const MediaDevicesPermissionChecker& permission_checker); |
+ void SetDeviceChangeListenerForTesting( |
+ ::mojom::MediaDevicesListenerPtr listener); |
+ |
private: |
void DoEnumerateDevices( |
const MediaDevicesManager::BoolDeviceTypes& requested_types, |
@@ -64,12 +79,26 @@ class CONTENT_EXPORT MediaDevicesDispatcherHost |
const MediaDevicesManager::BoolDeviceTypes& has_permissions, |
const MediaDeviceEnumeration& enumeration); |
- int render_process_id_; |
- int routing_id_; |
- std::string device_id_salt_; |
- std::string group_id_salt_; |
+ struct SubscriptionInfo; |
+ void NotifyDeviceChangeOnUIThread( |
+ const std::vector<SubscriptionInfo>& subscriptions, |
+ MediaDeviceType type, |
+ const MediaDeviceInfoArray& device_infos); |
+ |
+ // The following const fields can be accessed on any thread. |
+ const int render_process_id_; |
+ const int render_frame_id_; |
+ const std::string device_id_salt_; |
+ const std::string group_id_salt_; |
+ |
+ // The following fields can only be accessed on the IO thread. |
MediaStreamManager* media_stream_manager_; |
MediaDevicesPermissionChecker permission_checker_; |
+ std::vector<SubscriptionInfo> |
+ device_change_subscriptions_[NUM_MEDIA_DEVICE_TYPES]; |
+ |
+ // This field can only be accessed on the UI thread. |
+ ::mojom::MediaDevicesListenerPtr device_change_listener_; |
base::WeakPtrFactory<MediaDevicesDispatcherHost> weak_factory_; |