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.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.h')
-rw-r--r-- | ipc/mojo/ipc_channel_mojo.h | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/ipc/mojo/ipc_channel_mojo.h b/ipc/mojo/ipc_channel_mojo.h index dd57bc8..22c56a9 100644 --- a/ipc/mojo/ipc_channel_mojo.h +++ b/ipc/mojo/ipc_channel_mojo.h @@ -24,6 +24,13 @@ struct ChannelInfo; namespace IPC { +namespace internal { +class ControlReader; +class ServerControlReader; +class ClientControlReader; +class MessageReader; +} + // Mojo-based IPC::Channel implementation over a platform handle. // // ChannelMojo builds Mojo MessagePipe using underlying pipe given by @@ -74,6 +81,15 @@ class IPC_MOJO_EXPORT ChannelMojo : public Channel { #if defined(OS_POSIX) && !defined(OS_NACL) virtual int GetClientFileDescriptor() const OVERRIDE; virtual int TakeClientFileDescriptor() OVERRIDE; + + // These access protected API of IPC::Message, which has ChannelMojo + // as a friend class. + static MojoResult WriteToFileDescriptorSet( + const std::vector<MojoHandle>& handle_buffer, + Message* message); + static MojoResult ReadFromFileDescriptorSet(const Message& message, + std::vector<MojoHandle>* handles); + #endif // defined(OS_POSIX) && !defined(OS_NACL) // Called from MessagePipeReader implementations @@ -83,6 +99,12 @@ class IPC_MOJO_EXPORT ChannelMojo : public Channel { void OnPipeError(internal::MessagePipeReader* reader); void set_peer_pid(base::ProcessId pid) { peer_pid_ = pid; } + protected: + ChannelMojo(const ChannelHandle& channel_handle, + Mode mode, + Listener* listener, + scoped_refptr<base::TaskRunner> io_thread_task_runner); + private: struct ChannelInfoDeleter { void operator()(mojo::embedder::ChannelInfo* ptr) const; @@ -93,14 +115,6 @@ class IPC_MOJO_EXPORT ChannelMojo : public Channel { // notifications invoked by them. typedef internal::MessagePipeReader::DelayedDeleter ReaderDeleter; - class ControlReader; - class ServerControlReader; - class ClientControlReader; - class MessageReader; - - ChannelMojo(scoped_ptr<Channel> bootstrap, Mode mode, Listener* listener, - scoped_refptr<base::TaskRunner> io_thread_task_runner); - void InitOnIOThread(); scoped_ptr<Channel> bootstrap_; @@ -110,8 +124,8 @@ class IPC_MOJO_EXPORT ChannelMojo : public Channel { scoped_ptr<mojo::embedder::ChannelInfo, ChannelInfoDeleter> channel_info_; - scoped_ptr<ControlReader, ReaderDeleter> control_reader_; - scoped_ptr<MessageReader, ReaderDeleter> message_reader_; + scoped_ptr<internal::ControlReader, ReaderDeleter> control_reader_; + scoped_ptr<internal::MessageReader, ReaderDeleter> message_reader_; ScopedVector<Message> pending_messages_; base::WeakPtrFactory<ChannelMojo> weak_factory_; |