11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef IPC_MOJO_IPC_CHANNEL_MOJO_READERS_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define IPC_MOJO_IPC_CHANNEL_MOJO_READERS_H_ 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <vector> 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/macros.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ipc/mojo/ipc_message_pipe_reader.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/public/cpp/system/core.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace mojo { 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace embedder { 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct ChannelInfo; 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace IPC { 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ChannelMojo; 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass Message; 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace internal { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// A MessagePipeReader implementation for IPC::Message communication. 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MessageReader : public MessagePipeReader { 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MessageReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool Send(scoped_ptr<Message> message); 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // MessagePipeReader implementation 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnMessageReceived() OVERRIDE; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnPipeClosed() OVERRIDE; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnPipeError(MojoResult error) OVERRIDE; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ChannelMojo* owner_; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(MessageReader); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// MessagePipeReader implementation for control messages. 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Actual message handling is implemented by sublcasses. 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ControlReader : public MessagePipeReader { 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ControlReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool Connect(); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // MessagePipeReader implementation 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnPipeClosed() OVERRIDE; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnPipeError(MojoResult error) OVERRIDE; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ChannelMojo* owner_; 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ControlReader); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// ControlReader for server-side ChannelMojo. 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ServerControlReader : public ControlReader { 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ServerControlReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ServerControlReader(); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ControlReader override 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool Connect() OVERRIDE; 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // MessagePipeReader implementation 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnMessageReceived() OVERRIDE; 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MojoResult SendHelloRequest(); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MojoResult RespondHelloResponse(); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mojo::ScopedMessagePipeHandle message_pipe_; 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ServerControlReader); 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// ControlReader for client-side ChannelMojo. 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ClientControlReader : public ControlReader { 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ClientControlReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // MessagePipeReader implementation 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnMessageReceived() OVERRIDE; 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MojoResult RespondHelloRequest(MojoHandle message_channel); 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ClientControlReader); 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace internal 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace IPC 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // IPC_MOJO_IPC_CHANNEL_MOJO_READERS_H_ 103