diff options
author | morrita <morrita@chromium.org> | 2014-09-11 12:06:29 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-11 19:09:46 +0000 |
commit | 3b41d6ca4deea242d5fa916d4c4864fd08bddf06 (patch) | |
tree | b8bda2dae559e03c4a033135a0e5e9542166a088 /ipc/mojo/ipc_channel_mojo_readers.h | |
parent | ba249ef277f2fe628f82b8280f70491d0d4a535a (diff) | |
download | chromium_src-3b41d6ca4deea242d5fa916d4c4864fd08bddf06.zip chromium_src-3b41d6ca4deea242d5fa916d4c4864fd08bddf06.tar.gz chromium_src-3b41d6ca4deea242d5fa916d4c4864fd08bddf06.tar.bz2 |
Refactoring: Move MessagePipeReader subclasess out from ChannelMojo
There are a few MessagePipeReader sublcasses defined as inter-classes
of ChannelMojo. This makes it harder to hook them for unit testing.
This CL moves these classes their own file. Now unittest can
define subclasses of these to hook some behavor for testing.
This is a preparation for a crash fix.
BUG=410813
TEST=none
R=viettrungluu@chromium.org,yzshen@chromium.org
Review URL: https://codereview.chromium.org/559723002
Cr-Commit-Position: refs/heads/master@{#294439}
Diffstat (limited to 'ipc/mojo/ipc_channel_mojo_readers.h')
-rw-r--r-- | ipc/mojo/ipc_channel_mojo_readers.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/ipc/mojo/ipc_channel_mojo_readers.h b/ipc/mojo/ipc_channel_mojo_readers.h new file mode 100644 index 0000000..13ddead --- /dev/null +++ b/ipc/mojo/ipc_channel_mojo_readers.h @@ -0,0 +1,102 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IPC_MOJO_IPC_CHANNEL_MOJO_READERS_H_ +#define IPC_MOJO_IPC_CHANNEL_MOJO_READERS_H_ + +#include <vector> + +#include "base/macros.h" +#include "base/memory/scoped_ptr.h" +#include "ipc/mojo/ipc_message_pipe_reader.h" +#include "mojo/public/cpp/system/core.h" + +namespace mojo { +namespace embedder { +struct ChannelInfo; +} +} + +namespace IPC { + +class ChannelMojo; +class Message; + +namespace internal { + +// A MessagePipeReader implementation for IPC::Message communication. +class MessageReader : public MessagePipeReader { + public: + MessageReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); + + bool Send(scoped_ptr<Message> message); + + // MessagePipeReader implementation + virtual void OnMessageReceived() OVERRIDE; + virtual void OnPipeClosed() OVERRIDE; + virtual void OnPipeError(MojoResult error) OVERRIDE; + + private: + ChannelMojo* owner_; + + DISALLOW_COPY_AND_ASSIGN(MessageReader); +}; + +// MessagePipeReader implementation for control messages. +// Actual message handling is implemented by sublcasses. +class ControlReader : public MessagePipeReader { + public: + ControlReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); + + virtual bool Connect(); + + // MessagePipeReader implementation + virtual void OnPipeClosed() OVERRIDE; + virtual void OnPipeError(MojoResult error) OVERRIDE; + + protected: + ChannelMojo* owner_; + + DISALLOW_COPY_AND_ASSIGN(ControlReader); +}; + +// ControlReader for server-side ChannelMojo. +class ServerControlReader : public ControlReader { + public: + ServerControlReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); + virtual ~ServerControlReader(); + + // ControlReader override + virtual bool Connect() OVERRIDE; + + // MessagePipeReader implementation + virtual void OnMessageReceived() OVERRIDE; + + private: + MojoResult SendHelloRequest(); + MojoResult RespondHelloResponse(); + + mojo::ScopedMessagePipeHandle message_pipe_; + + DISALLOW_COPY_AND_ASSIGN(ServerControlReader); +}; + +// ControlReader for client-side ChannelMojo. +class ClientControlReader : public ControlReader { + public: + ClientControlReader(mojo::ScopedMessagePipeHandle pipe, ChannelMojo* owner); + + // MessagePipeReader implementation + virtual void OnMessageReceived() OVERRIDE; + + private: + MojoResult RespondHelloRequest(MojoHandle message_channel); + + DISALLOW_COPY_AND_ASSIGN(ClientControlReader); +}; + +} // namespace internal +} // namespace IPC + +#endif // IPC_MOJO_IPC_CHANNEL_MOJO_READERS_H_ |