Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(386)

Unified Diff: ipc/mojo/ipc_channel_mojo.h

Issue 553283002: IPC::ChannelMojo: Introduce IPC::MojoBootstrap for Windows (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed build error Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ipc/mojo/BUILD.gn ('k') | ipc/mojo/ipc_channel_mojo.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/mojo/ipc_channel_mojo.h
diff --git a/ipc/mojo/ipc_channel_mojo.h b/ipc/mojo/ipc_channel_mojo.h
index 22c56a9e6894643e51f6f3838131dc6da513c8ce..9964a8f80b74f5a82ff156d5e58c9d110208ef55 100644
--- a/ipc/mojo/ipc_channel_mojo.h
+++ b/ipc/mojo/ipc_channel_mojo.h
@@ -14,6 +14,7 @@
#include "ipc/ipc_channel_factory.h"
#include "ipc/ipc_export.h"
#include "ipc/mojo/ipc_message_pipe_reader.h"
+#include "ipc/mojo/ipc_mojo_bootstrap.h"
#include "mojo/public/cpp/system/core.h"
namespace mojo {
@@ -31,6 +32,8 @@ class ClientControlReader;
class MessageReader;
}
+class ChannelMojoHost;
+
// Mojo-based IPC::Channel implementation over a platform handle.
//
// ChannelMojo builds Mojo MessagePipe using underlying pipe given by
@@ -55,21 +58,31 @@ class MessageReader;
// TODO(morrita): Add APIs to create extra MessagePipes to let
// Mojo-based objects talk over this Channel.
//
-class IPC_MOJO_EXPORT ChannelMojo : public Channel {
+class IPC_MOJO_EXPORT ChannelMojo : public Channel,
+ public MojoBootstrap::Delegate {
public:
// Create ChannelMojo. A bootstrap channel is created as well.
- static scoped_ptr<ChannelMojo> Create(
- const ChannelHandle &channel_handle, Mode mode, Listener* listener,
- scoped_refptr<base::TaskRunner> io_thread_task_runner);
+ // |host| must not be null.
+ static scoped_ptr<ChannelMojo> Create(ChannelMojoHost* host,
+ const ChannelHandle& channel_handle,
+ Mode mode,
+ Listener* listener);
// Create a factory object for ChannelMojo.
// The factory is used to create Mojo-based ChannelProxy family.
- static scoped_ptr<ChannelFactory> CreateFactory(
- const ChannelHandle &channel_handle, Mode mode,
- scoped_refptr<base::TaskRunner> io_thread_task_runner);
+ // |host| must not be null.
+ static scoped_ptr<ChannelFactory> CreateServerFactory(
+ ChannelMojoHost* host,
+ const ChannelHandle& channel_handle);
+
+ static scoped_ptr<ChannelFactory> CreateClientFactory(
+ const ChannelHandle& channel_handle);
virtual ~ChannelMojo();
+ // ChannelMojoHost tells the client handle using this API.
+ void OnClientLaunched(base::ProcessHandle handle);
+
// Channel implementation
virtual bool Connect() OVERRIDE;
virtual void Close() OVERRIDE;
@@ -92,6 +105,11 @@ class IPC_MOJO_EXPORT ChannelMojo : public Channel {
#endif // defined(OS_POSIX) && !defined(OS_NACL)
+ // MojoBootstrapDelegate implementation
+ virtual void OnPipeAvailable(
+ mojo::embedder::ScopedPlatformHandle handle) OVERRIDE;
+ virtual void OnBootstrapError() OVERRIDE;
+
// Called from MessagePipeReader implementations
void OnMessageReceived(Message& message);
void OnConnected(mojo::ScopedMessagePipeHandle pipe);
@@ -100,10 +118,10 @@ class IPC_MOJO_EXPORT ChannelMojo : public Channel {
void set_peer_pid(base::ProcessId pid) { peer_pid_ = pid; }
protected:
- ChannelMojo(const ChannelHandle& channel_handle,
+ ChannelMojo(ChannelMojoHost* host,
+ const ChannelHandle& channel_handle,
Mode mode,
- Listener* listener,
- scoped_refptr<base::TaskRunner> io_thread_task_runner);
+ Listener* listener);
private:
struct ChannelInfoDeleter {
@@ -115,9 +133,10 @@ class IPC_MOJO_EXPORT ChannelMojo : public Channel {
// notifications invoked by them.
typedef internal::MessagePipeReader::DelayedDeleter ReaderDeleter;
- void InitOnIOThread();
+ void InitControlReader(mojo::embedder::ScopedPlatformHandle handle);
- scoped_ptr<Channel> bootstrap_;
+ scoped_ptr<MojoBootstrap> bootstrap_;
+ ChannelMojoHost* const host_;
Mode mode_;
Listener* listener_;
base::ProcessId peer_pid_;
« no previous file with comments | « ipc/mojo/BUILD.gn ('k') | ipc/mojo/ipc_channel_mojo.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698