diff options
author | morrita <morrita@chromium.org> | 2014-11-25 15:35:57 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-25 23:36:16 +0000 |
commit | d68bedf4a9ff1d36fdef445021ae663007c19e9f (patch) | |
tree | e1b39d82c9d568d8d296a1cff0729c5eb31bf5d2 /ipc/mojo/ipc_message_pipe_reader.h | |
parent | 8d4f5ec4f26857fd8081f88bad83e99be7c4dab4 (diff) | |
download | chromium_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.h | 30 |
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); }; |