| Index: content/renderer/media/audio_message_filter.h
 | 
| diff --git a/content/renderer/media/audio_message_filter.h b/content/renderer/media/audio_message_filter.h
 | 
| index 47a5ed8c8da4ee75c2cb5133bd387bf078908e6c..d1a73ce910d3a0d60a7aea8a33d75f2a14b5eeb2 100644
 | 
| --- a/content/renderer/media/audio_message_filter.h
 | 
| +++ b/content/renderer/media/audio_message_filter.h
 | 
| @@ -16,9 +16,11 @@
 | 
|  #include "base/sync_socket.h"
 | 
|  #include "base/synchronization/lock.h"
 | 
|  #include "content/common/content_export.h"
 | 
| +#include "content/renderer/media/audio_output_client.h"
 | 
|  #include "ipc/message_filter.h"
 | 
|  #include "media/audio/audio_output_ipc.h"
 | 
|  #include "media/base/audio_hardware_config.h"
 | 
| +#include "media/mojo/interfaces/audio_output.mojom.h"
 | 
|  
 | 
|  namespace base {
 | 
|  class SingleThreadTaskRunner;
 | 
| @@ -46,11 +48,32 @@ class CONTENT_EXPORT AudioMessageFilter : public IPC::MessageFilter {
 | 
|    std::unique_ptr<media::AudioOutputIPC> CreateAudioOutputIPC(
 | 
|        int render_frame_id);
 | 
|  
 | 
| +  virtual void CloseStream(int stream_id);
 | 
| +
 | 
|    // IO task runner associated with this message filter.
 | 
|    base::SingleThreadTaskRunner* io_task_runner() const {
 | 
|      return io_task_runner_.get();
 | 
|    }
 | 
|  
 | 
| +  // Received when browser process has created an audio output stream.
 | 
| +  virtual void StreamCreated(
 | 
| +      int stream_id,
 | 
| +      base::SharedMemoryHandle handle,
 | 
| +      base::SyncSocket::TransitDescriptor socket_descriptor,
 | 
| +      uint32_t length);
 | 
| +
 | 
| +  // Received when internal state of browser process' audio output device has
 | 
| +  // changed.
 | 
| +  virtual void OnStreamStateChanged(int stream_id,
 | 
| +                                    media::AudioOutputIPCDelegateState state);
 | 
| +
 | 
| +  // Register |audio_output_client_| for a frame.
 | 
| +  void RegisterAudioOutputClient(
 | 
| +      int id,
 | 
| +      scoped_refptr<content::AudioOutputClient> audio_output_client) {
 | 
| +    audio_output_clients_.insert(std::make_pair(id, audio_output_client));
 | 
| +  }
 | 
| +
 | 
|   protected:
 | 
|    ~AudioMessageFilter() override;
 | 
|  
 | 
| @@ -78,23 +101,14 @@ class CONTENT_EXPORT AudioMessageFilter : public IPC::MessageFilter {
 | 
|                            const media::AudioParameters& output_params,
 | 
|                            const std::string& matched_device_id);
 | 
|  
 | 
| -  // Received when browser process has created an audio output stream.
 | 
| -  void OnStreamCreated(int stream_id,
 | 
| -                       base::SharedMemoryHandle handle,
 | 
| -                       base::SyncSocket::TransitDescriptor socket_descriptor,
 | 
| -                       uint32_t length);
 | 
| -
 | 
| -  // Received when internal state of browser process' audio output device has
 | 
| -  // changed.
 | 
| -  void OnStreamStateChanged(int stream_id,
 | 
| -                            media::AudioOutputIPCDelegateState state);
 | 
| -
 | 
|    // IPC sender for Send(); must only be accessed on |io_task_runner_|.
 | 
|    IPC::Sender* sender_;
 | 
|  
 | 
|    // A map of stream ids to delegates; must only be accessed on
 | 
|    // |io_task_runner_|.
 | 
|    IDMap<media::AudioOutputIPCDelegate> delegates_;
 | 
| +  std::map<int, scoped_refptr<content::AudioOutputClient>>
 | 
| +      audio_output_clients_;
 | 
|  
 | 
|    // Task runner on which IPC calls are executed.
 | 
|    const scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
 | 
| 
 |