| Index: content/browser/renderer_host/media/media_devices_manager.h
 | 
| diff --git a/content/browser/renderer_host/media/media_devices_manager.h b/content/browser/renderer_host/media/media_devices_manager.h
 | 
| index 9610acbbaa7f47a940a9ffb0f8167a236cb50ed5..63b0040959f7bedf4693ce79d0ac9a0cc76c3c7b 100644
 | 
| --- a/content/browser/renderer_host/media/media_devices_manager.h
 | 
| +++ b/content/browser/renderer_host/media/media_devices_manager.h
 | 
| @@ -29,6 +29,18 @@ class VideoCaptureManager;
 | 
|  using MediaDeviceEnumeration =
 | 
|      std::array<MediaDeviceInfoArray, NUM_MEDIA_DEVICE_TYPES>;
 | 
|  
 | 
| +// MediaDeviceChangeSubscriber is an interface to be implemented by classes
 | 
| +// that can register with MediaDevicesManager to get notifications about changes
 | 
| +// in the set of media devices.
 | 
| +class CONTENT_EXPORT MediaDeviceChangeSubscriber {
 | 
| + public:
 | 
| +  // This function is invoked to notify about changes in the set of media
 | 
| +  // devices of type |type|. |device_infos| contains the updated list of
 | 
| +  // devices of type |type|.
 | 
| +  virtual void OnDevicesChanged(MediaDeviceType type,
 | 
| +                                const MediaDeviceInfoArray& device_infos) = 0;
 | 
| +};
 | 
| +
 | 
|  // MediaDevicesManager is responsible for doing media-device enumerations.
 | 
|  // In addition it implements caching for enumeration results and device
 | 
|  // monitoring in order to keep caches consistent.
 | 
| @@ -63,6 +75,22 @@ class CONTENT_EXPORT MediaDevicesManager
 | 
|    void EnumerateDevices(const BoolDeviceTypes& requested_types,
 | 
|                          const EnumerationCallback& callback);
 | 
|  
 | 
| +  // Subscribes |subscriber| to receive device-change notifications for devices
 | 
| +  // of type |type|. If |subscriber| is already subscribed, this function has
 | 
| +  // no side effects. MediaDevicesManager does not own |subscriber|. It is the
 | 
| +  // responsibility of the caller to ensure that all registered subscribers
 | 
| +  // remain valid while the they are subscribed.
 | 
| +  void SubscribeDeviceChangeNotifications(
 | 
| +      MediaDeviceType type,
 | 
| +      MediaDeviceChangeSubscriber* subscriber);
 | 
| +
 | 
| +  // Unubscribes |subscriber| from device-change notifications for the devices
 | 
| +  // of type |type|. If |subscriber| is not subscribed, this function has no
 | 
| +  // side effects.
 | 
| +  void UnsubscribeDeviceChangeNotifications(
 | 
| +      MediaDeviceType type,
 | 
| +      MediaDeviceChangeSubscriber* subscriber);
 | 
| +
 | 
|    // Tries to start device monitoring. If successful, enables caching of
 | 
|    // enumeration results for the device types supported by the monitor.
 | 
|    void StartMonitoring();
 | 
| @@ -145,6 +173,9 @@ class CONTENT_EXPORT MediaDevicesManager
 | 
|    MediaDeviceEnumeration current_snapshot_;
 | 
|    bool monitoring_started_;
 | 
|  
 | 
| +  std::vector<MediaDeviceChangeSubscriber*>
 | 
| +      device_change_subscribers_[NUM_MEDIA_DEVICE_TYPES];
 | 
| +
 | 
|    base::WeakPtrFactory<MediaDevicesManager> weak_factory_;
 | 
|  
 | 
|    DISALLOW_COPY_AND_ASSIGN(MediaDevicesManager);
 | 
| 
 |