| Index: media/remoting/remote_demuxer_stream_adapter.h
 | 
| diff --git a/media/remoting/remote_demuxer_stream_adapter.h b/media/remoting/remote_demuxer_stream_adapter.h
 | 
| index 8c9464a2dd6e564cc29f0418a9cbfc0bc8535acb..8b46a09b1db98fc70edb1a9c3233779247c9965d 100644
 | 
| --- a/media/remoting/remote_demuxer_stream_adapter.h
 | 
| +++ b/media/remoting/remote_demuxer_stream_adapter.h
 | 
| @@ -10,6 +10,7 @@
 | 
|  #include <memory>
 | 
|  #include <vector>
 | 
|  
 | 
| +#include "base/callback_forward.h"
 | 
|  #include "base/macros.h"
 | 
|  #include "base/memory/weak_ptr.h"
 | 
|  #include "base/optional.h"
 | 
| @@ -18,6 +19,7 @@
 | 
|  #include "media/base/video_decoder_config.h"
 | 
|  #include "media/mojo/interfaces/remoting.mojom.h"
 | 
|  #include "media/remoting/rpc/rpc_broker.h"
 | 
| +#include "media/remoting/triggers.h"
 | 
|  #include "mojo/public/cpp/system/data_pipe.h"
 | 
|  
 | 
|  namespace base {
 | 
| @@ -36,6 +38,8 @@ namespace remoting {
 | 
|  // while RPC message should be sent on main thread using |main_task_runner|.
 | 
|  class RemoteDemuxerStreamAdapter {
 | 
|   public:
 | 
| +  using ErrorCallback = base::Callback<void(StopTrigger)>;
 | 
| +
 | 
|    // |main_task_runner|: Task runner to post RPC message on main thread
 | 
|    // |media_task_runner|: Task runner to run whole class on media thread.
 | 
|    // |name|: Demuxer stream name. For troubleshooting purposes.
 | 
| @@ -46,6 +50,8 @@ class RemoteDemuxerStreamAdapter {
 | 
|    // |stream_sender_info|: Transfer of pipe binding on the media thread. It is
 | 
|    //                       to access mojo interface for sending data stream.
 | 
|    // |producer_handle|: handle to send data using mojo data pipe.
 | 
| +  // |error_callback|: Run if a fatal runtime error occurs and remoting should
 | 
| +  //                   be shut down.
 | 
|    RemoteDemuxerStreamAdapter(
 | 
|        scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
 | 
|        scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
 | 
| @@ -54,13 +60,19 @@ class RemoteDemuxerStreamAdapter {
 | 
|        const base::WeakPtr<RpcBroker>& rpc_broker,
 | 
|        int rpc_handle,
 | 
|        mojom::RemotingDataStreamSenderPtrInfo stream_sender_info,
 | 
| -      mojo::ScopedDataPipeProducerHandle producer_handle);
 | 
| +      mojo::ScopedDataPipeProducerHandle producer_handle,
 | 
| +      const ErrorCallback& error_callback);
 | 
|    ~RemoteDemuxerStreamAdapter();
 | 
|  
 | 
|    // Rpc handle for this class. This is used for sending/receiving RPC message
 | 
|    // with specific hanle using Rpcbroker.
 | 
|    int rpc_handle() const { return rpc_handle_; }
 | 
|  
 | 
| +  // Returns the number of bytes that have been written to the data pipe since
 | 
| +  // the last call to this method. This is polled periodically by
 | 
| +  // RemoteRendererImpl for metrics purposes.
 | 
| +  int64_t GetBytesWrittenAndReset();
 | 
| +
 | 
|    // Signals if system is in flushing state. The caller uses |flushing| to
 | 
|    // signal when flush starts and when is done. During flush operation, all
 | 
|    // fetching data actions will be discarded. The return value indicates frame
 | 
| @@ -94,8 +106,8 @@ class RemoteDemuxerStreamAdapter {
 | 
|      return read_until_callback_handle_ != kInvalidHandle;
 | 
|    }
 | 
|  
 | 
| -  // Callback function when data pipe error occurs.
 | 
| -  void OnFatalError(const char* reason);
 | 
| +  // Callback function when a fatal runtime error occurs.
 | 
| +  void OnFatalError(StopTrigger stop_trigger);
 | 
|  
 | 
|    const scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
 | 
|    const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_;
 | 
| @@ -114,6 +126,11 @@ class RemoteDemuxerStreamAdapter {
 | 
|    ::media::DemuxerStream* const demuxer_stream_;
 | 
|    const ::media::DemuxerStream::Type type_;
 | 
|  
 | 
| +  // Run by OnFatalError to propagate StopTriggers back to the
 | 
| +  // RemoteRendererImpl that owns this instance. This is not-null at
 | 
| +  // construction time, and set to null the first time OnFatalError() is called.
 | 
| +  ErrorCallback error_callback_;
 | 
| +
 | 
|    // Remote RPC handle for demuxer initialization. The value is provided by
 | 
|    // receiver from RPC_DS_INITIALIZE message and will be used as handle in
 | 
|    // RPC_DS_INITIALIZE_CALLBACK message.
 | 
| @@ -156,6 +173,9 @@ class RemoteDemuxerStreamAdapter {
 | 
|    ::media::mojom::RemotingDataStreamSenderPtr stream_sender_;
 | 
|    mojo::ScopedDataPipeProducerHandle producer_handle_;
 | 
|  
 | 
| +  // Tracks the number of bytes written to the pipe.
 | 
| +  int64_t bytes_written_to_pipe_;
 | 
| +
 | 
|    // WeakPtrFactory only for reading buffer from demuxer stream. This is used
 | 
|    // for canceling all read callbacks provided to the |demuxer_stream_| before a
 | 
|    // flush.
 | 
| 
 |