summaryrefslogtreecommitdiffstats
path: root/ipc/mojo/ipc_channel_mojo.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.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.h')
-rw-r--r--ipc/mojo/ipc_channel_mojo.h34
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_;