| Index: mojo/edk/system/data_pipe_consumer_dispatcher.h
 | 
| diff --git a/third_party/mojo/src/mojo/edk/system/data_pipe_consumer_dispatcher.h b/mojo/edk/system/data_pipe_consumer_dispatcher.h
 | 
| similarity index 61%
 | 
| copy from third_party/mojo/src/mojo/edk/system/data_pipe_consumer_dispatcher.h
 | 
| copy to mojo/edk/system/data_pipe_consumer_dispatcher.h
 | 
| index 29df228efc0c581cf097950b257ba5ef0b8ca47f..9fb10dae43b50152cf93ccc4d9635a8eb69412a6 100644
 | 
| --- a/third_party/mojo/src/mojo/edk/system/data_pipe_consumer_dispatcher.h
 | 
| +++ b/mojo/edk/system/data_pipe_consumer_dispatcher.h
 | 
| @@ -6,27 +6,28 @@
 | 
|  #define MOJO_EDK_SYSTEM_DATA_PIPE_CONSUMER_DISPATCHER_H_
 | 
|  
 | 
|  #include "base/memory/ref_counted.h"
 | 
| +#include "mojo/edk/system/awakable_list.h"
 | 
|  #include "mojo/edk/system/dispatcher.h"
 | 
| +#include "mojo/edk/system/raw_channel.h"
 | 
|  #include "mojo/edk/system/system_impl_export.h"
 | 
|  #include "mojo/public/cpp/system/macros.h"
 | 
|  
 | 
|  namespace mojo {
 | 
|  namespace system {
 | 
|  
 | 
| -class DataPipe;
 | 
| -
 | 
|  // This is the |Dispatcher| implementation for the consumer handle for data
 | 
|  // pipes (created by the Mojo primitive |MojoCreateDataPipe()|). This class is
 | 
|  // thread-safe.
 | 
|  class MOJO_SYSTEM_IMPL_EXPORT DataPipeConsumerDispatcher final
 | 
| -    : public Dispatcher {
 | 
| +    : public Dispatcher, public RawChannel::Delegate {
 | 
|   public:
 | 
| -  static scoped_refptr<DataPipeConsumerDispatcher> Create() {
 | 
| -    return make_scoped_refptr(new DataPipeConsumerDispatcher());
 | 
| +  static scoped_refptr<DataPipeConsumerDispatcher> Create(
 | 
| +      const MojoCreateDataPipeOptions& options) {
 | 
| +    return make_scoped_refptr(new DataPipeConsumerDispatcher(options));
 | 
|    }
 | 
|  
 | 
|    // Must be called before any other methods.
 | 
| -  void Init(scoped_refptr<DataPipe> data_pipe) MOJO_NOT_THREAD_SAFE;
 | 
| +  void Init(embedder::ScopedPlatformHandle message_pipe);
 | 
|  
 | 
|    // |Dispatcher| public methods:
 | 
|    Type GetType() const override;
 | 
| @@ -34,15 +35,17 @@ class MOJO_SYSTEM_IMPL_EXPORT DataPipeConsumerDispatcher final
 | 
|    // The "opposite" of |SerializeAndClose()|. (Typically this is called by
 | 
|    // |Dispatcher::Deserialize()|.)
 | 
|    static scoped_refptr<DataPipeConsumerDispatcher>
 | 
| -  Deserialize(Channel* channel, const void* source, size_t size);
 | 
| -
 | 
| -  // Get access to the |DataPipe| for testing.
 | 
| -  DataPipe* GetDataPipeForTest();
 | 
| +  Deserialize(const void* source,
 | 
| +              size_t size,
 | 
| +              embedder::PlatformHandleVector* platform_handles);
 | 
|  
 | 
|   private:
 | 
| -  DataPipeConsumerDispatcher();
 | 
| +  DataPipeConsumerDispatcher(const MojoCreateDataPipeOptions& options);
 | 
|    ~DataPipeConsumerDispatcher() override;
 | 
|  
 | 
| +  void InitOnIO();
 | 
| +  void CloseOnIO();
 | 
| +
 | 
|    // |Dispatcher| protected methods:
 | 
|    void CancelAllAwakablesNoLock() override;
 | 
|    void CloseImplNoLock() override;
 | 
| @@ -62,20 +65,48 @@ class MOJO_SYSTEM_IMPL_EXPORT DataPipeConsumerDispatcher final
 | 
|                                     HandleSignalsState* signals_state) override;
 | 
|    void RemoveAwakableImplNoLock(Awakable* awakable,
 | 
|                                  HandleSignalsState* signals_state) override;
 | 
| -  void StartSerializeImplNoLock(Channel* channel,
 | 
| -                                size_t* max_size,
 | 
| -                                size_t* max_platform_handles) override
 | 
| -      MOJO_NOT_THREAD_SAFE;
 | 
| +  void StartSerializeImplNoLock(size_t* max_size,
 | 
| +                                size_t* max_platform_handles) override;
 | 
|    bool EndSerializeAndCloseImplNoLock(
 | 
| -      Channel* channel,
 | 
|        void* destination,
 | 
|        size_t* actual_size,
 | 
| -      embedder::PlatformHandleVector* platform_handles) override
 | 
| -      MOJO_NOT_THREAD_SAFE;
 | 
| +      embedder::PlatformHandleVector* platform_handles) override;
 | 
| +  void TransportStarted() override;
 | 
| +  void TransportEnded() override;
 | 
|    bool IsBusyNoLock() const override;
 | 
|  
 | 
| -  // This will be null if closed.
 | 
| -  scoped_refptr<DataPipe> data_pipe_ MOJO_GUARDED_BY(mutex());
 | 
| +  // |RawChannel::Delegate methods:
 | 
| +  void OnReadMessage(
 | 
| +    const MessageInTransit::View& message_view,
 | 
| +    embedder::ScopedPlatformHandleVectorPtr platform_handles) override;
 | 
| +  void OnError(Error error) override;
 | 
| +
 | 
| +  // See comment in MessagePipeDispatcher for this method.
 | 
| +  void SerializeInternal();
 | 
| +
 | 
| +  MojoCreateDataPipeOptions options_;
 | 
| +
 | 
| +  // Protected by |lock()|:
 | 
| +  RawChannel* channel_;  // This will be null if closed.
 | 
| +
 | 
| +  // Queue of incoming messages.
 | 
| +  std::vector<char> data_;
 | 
| +  AwakableList awakable_list_;
 | 
| +
 | 
| +  // if DispatcherTransport crated. must be set before lock() is called to avoid
 | 
| +  // deadlocks with RawChannel calling us.
 | 
| +  base::Lock started_transport_;
 | 
| +
 | 
| +  bool calling_init_;
 | 
| +
 | 
| +  bool in_two_phase_read_;
 | 
| +  uint32_t two_phase_max_bytes_read_;
 | 
| +
 | 
| +  bool error_;
 | 
| +
 | 
| +  bool serialized_;
 | 
| +  std::vector<char> serialized_read_buffer_;
 | 
| +  embedder::ScopedPlatformHandle serialized_platform_handle_;
 | 
|  
 | 
|    MOJO_DISALLOW_COPY_AND_ASSIGN(DataPipeConsumerDispatcher);
 | 
|  };
 | 
| 
 |