1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef IPC_MOJO_IPC_CHANNEL_MOJO_READERS_H_ 6#define IPC_MOJO_IPC_CHANNEL_MOJO_READERS_H_ 7 8#include <vector> 9 10#include "base/macros.h" 11#include "base/memory/scoped_ptr.h" 12#include "ipc/mojo/ipc_message_pipe_reader.h" 13#include "mojo/public/cpp/system/core.h" 14 15namespace mojo { 16namespace embedder { 17struct ChannelInfo; 18} 19} 20 21namespace IPC { 22 23class ChannelMojo; 24class Message; 25 26namespace internal { 27 28// A MessagePipeReader implementation for IPC::Message communication. 29class MessageReader : public MessagePipeReader { 30 public: 31 MessageReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); 32 33 bool Send(scoped_ptr<Message> message); 34 35 // MessagePipeReader implementation 36 virtual void OnMessageReceived() OVERRIDE; 37 virtual void OnPipeClosed() OVERRIDE; 38 virtual void OnPipeError(MojoResult error) OVERRIDE; 39 40 private: 41 ChannelMojo* owner_; 42 43 DISALLOW_COPY_AND_ASSIGN(MessageReader); 44}; 45 46// MessagePipeReader implementation for control messages. 47// Actual message handling is implemented by sublcasses. 48class ControlReader : public MessagePipeReader { 49 public: 50 ControlReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); 51 52 virtual bool Connect(); 53 54 // MessagePipeReader implementation 55 virtual void OnPipeClosed() OVERRIDE; 56 virtual void OnPipeError(MojoResult error) OVERRIDE; 57 58 protected: 59 ChannelMojo* owner_; 60 61 DISALLOW_COPY_AND_ASSIGN(ControlReader); 62}; 63 64// ControlReader for server-side ChannelMojo. 65class ServerControlReader : public ControlReader { 66 public: 67 ServerControlReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); 68 virtual ~ServerControlReader(); 69 70 // ControlReader override 71 virtual bool Connect() OVERRIDE; 72 73 // MessagePipeReader implementation 74 virtual void OnMessageReceived() OVERRIDE; 75 76 private: 77 MojoResult SendHelloRequest(); 78 MojoResult RespondHelloResponse(); 79 80 mojo::ScopedMessagePipeHandle message_pipe_; 81 82 DISALLOW_COPY_AND_ASSIGN(ServerControlReader); 83}; 84 85// ControlReader for client-side ChannelMojo. 86class ClientControlReader : public ControlReader { 87 public: 88 ClientControlReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); 89 90 // MessagePipeReader implementation 91 virtual void OnMessageReceived() OVERRIDE; 92 93 private: 94 MojoResult RespondHelloRequest(MojoHandle message_channel); 95 96 DISALLOW_COPY_AND_ASSIGN(ClientControlReader); 97}; 98 99} // namespace internal 100} // namespace IPC 101 102#endif // IPC_MOJO_IPC_CHANNEL_MOJO_READERS_H_ 103