summaryrefslogtreecommitdiffstats
path: root/ipc/mojo/ipc_message_pipe_reader.h
diff options
context:
space:
mode:
authormorrita <morrita@chromium.org>2014-11-25 15:35:57 -0800
committerCommit bot <commit-bot@chromium.org>2014-11-25 23:36:16 +0000
commitd68bedf4a9ff1d36fdef445021ae663007c19e9f (patch)
treee1b39d82c9d568d8d296a1cff0729c5eb31bf5d2 /ipc/mojo/ipc_message_pipe_reader.h
parent8d4f5ec4f26857fd8081f88bad83e99be7c4dab4 (diff)
downloadchromium_src-d68bedf4a9ff1d36fdef445021ae663007c19e9f.zip
chromium_src-d68bedf4a9ff1d36fdef445021ae663007c19e9f.tar.gz
chromium_src-d68bedf4a9ff1d36fdef445021ae663007c19e9f.tar.bz2
ChannelMojo Refactoring: Merge MessageReader into MessagePipeReader
MessageReader was the sole subclass of MessageReader. There is no need to have two classes. This CL also decouple ChannelMojo from MessagePipeReader through a delegate interface. R=viettrungluu@chromium.org BUG=377980 Review URL: https://codereview.chromium.org/750673002 Cr-Commit-Position: refs/heads/master@{#305728}
Diffstat (limited to 'ipc/mojo/ipc_message_pipe_reader.h')
-rw-r--r--ipc/mojo/ipc_message_pipe_reader.h30
1 files changed, 21 insertions, 9 deletions
diff --git a/ipc/mojo/ipc_message_pipe_reader.h b/ipc/mojo/ipc_message_pipe_reader.h
index ecfa018..ee1d3b5 100644
--- a/ipc/mojo/ipc_message_pipe_reader.h
+++ b/ipc/mojo/ipc_message_pipe_reader.h
@@ -7,7 +7,9 @@
#include <vector>
+#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
+#include "ipc/ipc_message.h"
#include "mojo/public/c/environment/async_waiter.h"
#include "mojo/public/cpp/system/core.h"
@@ -30,6 +32,13 @@ namespace internal {
//
class MessagePipeReader {
public:
+ class Delegate {
+ public:
+ virtual void OnMessageReceived(Message& message) = 0;
+ virtual void OnPipeClosed(MessagePipeReader* reader) = 0;
+ virtual void OnPipeError(MessagePipeReader* reader) = 0;
+ };
+
// Delay the object deletion using the current message loop.
// This is intended to used by MessagePipeReader owners.
class DelayedDeleter {
@@ -39,13 +48,16 @@ class MessagePipeReader {
static void DeleteNow(MessagePipeReader* ptr) { delete ptr; }
DelayedDeleter() {}
- DelayedDeleter(const DefaultType&) {}
+ explicit DelayedDeleter(const DefaultType&) {}
DelayedDeleter& operator=(const DefaultType&) { return *this; }
void operator()(MessagePipeReader* ptr) const;
};
- explicit MessagePipeReader(mojo::ScopedMessagePipeHandle handle);
+ // Both parameters must be non-null.
+ // Build a reader that reads messages from |handle| and lets |delegate| know.
+ // Note that MessagePipeReader doesn't delete |delete|.
+ MessagePipeReader(mojo::ScopedMessagePipeHandle handle, Delegate* delegate);
virtual ~MessagePipeReader();
MojoHandle handle() const { return pipe_.get().value(); }
@@ -68,17 +80,15 @@ class MessagePipeReader {
// Return true if the MessagePipe is alive.
bool IsValid() { return pipe_.is_valid(); }
- //
- // The client have to implment these callback to get the readiness
- // event from the reader
- //
- virtual void OnMessageReceived() = 0;
- virtual void OnPipeClosed() = 0;
- virtual void OnPipeError(MojoResult error) = 0;
+ bool Send(scoped_ptr<Message> message);
private:
static void InvokePipeIsReady(void* closure, MojoResult result);
+ void OnMessageReceived();
+ void OnPipeClosed();
+ void OnPipeError(MojoResult error);
+
MojoResult ReadMessageBytes();
void PipeIsReady(MojoResult wait_result);
void StartWaiting();
@@ -88,6 +98,8 @@ class MessagePipeReader {
std::vector<MojoHandle> handle_buffer_;
MojoAsyncWaitID pipe_wait_id_;
mojo::ScopedMessagePipeHandle pipe_;
+ // Is null once the message pipe is closed.
+ Delegate* delegate_;
DISALLOW_COPY_AND_ASSIGN(MessagePipeReader);
};