| Index: content/common/media/media_devices.mojom
 | 
| diff --git a/content/common/media/media_devices.mojom b/content/common/media/media_devices.mojom
 | 
| index 97d11854a1a453fc3ac22bef39f9905f93606802..d53232e580266f2337d724cee50c8786666f33b9 100644
 | 
| --- a/content/common/media/media_devices.mojom
 | 
| +++ b/content/common/media/media_devices.mojom
 | 
| @@ -13,8 +13,8 @@ enum MediaDeviceType;
 | 
|  struct MediaDeviceInfo;
 | 
|  
 | 
|  // This object lives in the browser and is responsible for processing device
 | 
| -// enumeration requests.
 | 
| -// TODO(guidou): Add support for device-change notifications.
 | 
| +// enumeration requests and managing subscriptions for device-change
 | 
| +// notifications.
 | 
|  interface MediaDevicesDispatcherHost {
 | 
|    // The reply always contains NUM_MEDIA_DEVICE_TYPES elements.
 | 
|    // The result is indexed by device type as defined in 
 | 
| @@ -24,4 +24,32 @@ interface MediaDevicesDispatcherHost {
 | 
|                     bool request_audio_output,
 | 
|                     url.mojom.Origin security_origin)
 | 
|                         => (array<array<MediaDeviceInfo>> enumeration);
 | 
| +
 | 
| +  // Creates a subscription for device-change notifications for the calling
 | 
| +  // frame/security origin. It is the responsibility of the caller to send
 | 
| +  // |subscription_id| values that are unique per device type.
 | 
| +  // Requests to create a subscription with an ID that already exists for type
 | 
| +  // |type| are invalid and result in a renderer crash.
 | 
| +  SubscribeDeviceChangeNotifications(MediaDeviceType type,
 | 
| +                                     uint32 subscription_id,
 | 
| +                                     url.mojom.Origin security_origin);
 | 
| +
 | 
| +  // Removes a subscription to device-change notifications for the calling
 | 
| +  // frame. The caller is responsible for sending |subscription_id| values that
 | 
| +  // that refer to existing subscriptions for type |type|. Requests to remove
 | 
| +  // a nonexisting subscription with are invalid and result in a renderer crash.
 | 
| +  UnsubscribeDeviceChangeNotifications(MediaDeviceType type,
 | 
| +                                       uint32 subscription_id);
 | 
| +};
 | 
| +
 | 
| +// This object lives in the renderer process and is used by the browser process
 | 
| +// to pass device-change notifications to the renderer.
 | 
| +interface MediaDevicesListener {
 | 
| +  // Called to notify a change in the set of devices of type |type| for
 | 
| +  // subscription |subscription_id|. |device_infos| contains the new list of
 | 
| +  // devices of type |type|, with device and group IDs obfuscated according to
 | 
| +  // the subscription's security origin.
 | 
| +  OnDevicesChanged(MediaDeviceType type,
 | 
| +                   uint32 subscription_id,
 | 
| +                   array<MediaDeviceInfo> device_infos);
 | 
|  };
 | 
| 
 |