summaryrefslogtreecommitdiffstats
path: root/ipc/mojo/ipc_channel_mojo_readers.h
diff options
context:
space:
mode:
authormorrita <morrita@chromium.org>2014-09-11 12:06:29 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-11 19:09:46 +0000
commit3b41d6ca4deea242d5fa916d4c4864fd08bddf06 (patch)
treeb8bda2dae559e03c4a033135a0e5e9542166a088 /ipc/mojo/ipc_channel_mojo_readers.h
parentba249ef277f2fe628f82b8280f70491d0d4a535a (diff)
downloadchromium_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.h102
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_