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

Unified Diff: mojo/system/platform_channel.h

Issue 134373005: Mojo: Refactor PlatformChannel stuff. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 | « mojo/system/multiprocess_message_pipe_unittest.cc ('k') | mojo/system/platform_channel.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/system/platform_channel.h
diff --git a/mojo/system/platform_channel.h b/mojo/system/platform_channel.h
index 172f1bb9ad70e6d0c258ae54b90eba65e4aabb86..47e1e6ac99e38973ebc067d7fe6a3bbdcc68109a 100644
--- a/mojo/system/platform_channel.h
+++ b/mojo/system/platform_channel.h
@@ -5,9 +5,6 @@
#ifndef MOJO_SYSTEM_PLATFORM_CHANNEL_H_
#define MOJO_SYSTEM_PLATFORM_CHANNEL_H_
-#include <string>
-#include <utility>
-
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "base/process/launch.h"
@@ -23,6 +20,11 @@ class MOJO_SYSTEM_IMPL_EXPORT PlatformChannel {
public:
virtual ~PlatformChannel();
+ // Creates a channel if you already have the underlying handle for it, taking
+ // ownership of |handle|.
+ static scoped_ptr<PlatformChannel> CreateFromHandle(
+ const PlatformChannelHandle& handle);
+
// Returns the channel's handle, passing ownership.
PlatformChannelHandle PassHandle();
@@ -39,71 +41,57 @@ class MOJO_SYSTEM_IMPL_EXPORT PlatformChannel {
DISALLOW_COPY_AND_ASSIGN(PlatformChannel);
};
-class PlatformClientChannel;
-
-// A server channel has an "implicit" client channel created with it. This may
-// be a real channel (in the case of POSIX, in which case there's an actual FD
-// for it) or fake.
-// - That client channel may then be used in-process (e.g., for single process
-// tests) by getting a |PlatformClientChannel| using |CreateClientChannel()|.
-// - Or it may be "passed" to a new child process using
-// |GetDataNeededToPassClientChannelToChildProcess()|, etc. (see below). The
-// child process would then get a |PlatformClientChannel| by using
-// |PlatformClientChannel::CreateFromParentProcess()|.
-// - In both these cases, "ownership" of the client channel is transferred (to
-// the |PlatformClientChannel| or the child process).
-// TODO(vtl): Add ways of passing it to other existing processes.
-class MOJO_SYSTEM_IMPL_EXPORT PlatformServerChannel : public PlatformChannel {
+// This is used to create a pair of connected |PlatformChannel|s. The resulting
+// channels can then be used in the same process (e.g., in tests) or between
+// processes. (The "server" channel is the one that will be used in the process
+// that created the pair, whereas the "client" channel is the one that will be
+// used in a different process.)
+//
+// This class provides facilities for passing the client channel to a child
+// process. The parent should call |PrepareToPassClientChannelToChildProcess()|
+// to get the data needed to do this, spawn the child using that data, and then
+// call |ChildProcessLaunched()|. Note that on Windows this facility (will) only
+// work on Vista and later (TODO(vtl)).
+//
+// Note: |PlatformChannelPair()|, |CreateClientChannelFromParentProcess()|,
+// |PrepareToPassClientChannelToChildProcess()|, and |ChildProcessLaunched()|
+// have platform-specific implementations.
+class MOJO_SYSTEM_IMPL_EXPORT PlatformChannelPair {
public:
- virtual ~PlatformServerChannel() {}
-
- static scoped_ptr<PlatformServerChannel> Create(const std::string& name);
-
- // For in-process use, from a server channel you can make a corresponding
- // client channel.
- virtual scoped_ptr<PlatformClientChannel> CreateClientChannel() = 0;
+ PlatformChannelPair();
+ ~PlatformChannelPair();
+
+ // This transfers ownership of the server channel to the caller. Returns null
+ // on failure.
+ scoped_ptr<PlatformChannel> CreateServerChannel();
+
+ // For in-process use (e.g., in tests). This transfers ownership of the client
+ // channel to the caller. Returns null on failure.
+ scoped_ptr<PlatformChannel> CreateClientChannel();
+
+ // To be called in the child process, after the parent process called
+ // |PrepareToPassClientChannelToChildProcess()| and launched the child (using
+ // the provided data), to create a client channel connected to the server
+ // channel (in the parent process). Returns null on failure.
+ static scoped_ptr<PlatformChannel> CreateClientChannelFromParentProcess(
+ const CommandLine& command_line);
// Prepares to pass the client channel to a new child process, to be launched
// using |LaunchProcess()| (from base/launch.h). Modifies |*command_line| and
// |*file_handle_mapping| as needed. (|file_handle_mapping| may be null on
// platforms that don't need it, like Windows.)
- virtual void GetDataNeededToPassClientChannelToChildProcess(
+ void PrepareToPassClientChannelToChildProcess(
CommandLine* command_line,
- base::FileHandleMappingVector* file_handle_mapping) const = 0;
+ base::FileHandleMappingVector* file_handle_mapping) const;
// To be called once the child process has been successfully launched, to do
// any cleanup necessary.
- virtual void ChildProcessLaunched() = 0;
-
- const std::string& name() const { return name_; }
-
- protected:
- explicit PlatformServerChannel(const std::string& name);
-
- private:
- const std::string name_;
-
- DISALLOW_COPY_AND_ASSIGN(PlatformServerChannel);
-};
-
-class MOJO_SYSTEM_IMPL_EXPORT PlatformClientChannel : public PlatformChannel {
- public:
- virtual ~PlatformClientChannel() {}
-
- // Creates a client channel if you already have the underlying handle for it.
- // Note: This takes ownership of |handle|.
- static scoped_ptr<PlatformClientChannel> CreateFromHandle(
- const PlatformChannelHandle& handle);
-
- // To be called to get a client channel passed from the parent process, using
- // |PlatformServerChannel::GetDataNeededToPassClientChannelToChildProcess()|,
- // etc. Returns null on failure.
- static scoped_ptr<PlatformClientChannel> CreateFromParentProcess(
- const CommandLine& command_line);
+ void ChildProcessLaunched();
private:
- PlatformClientChannel() {}
+ PlatformChannelHandle server_handle_;
+ PlatformChannelHandle client_handle_;
- DISALLOW_COPY_AND_ASSIGN(PlatformClientChannel);
+ DISALLOW_COPY_AND_ASSIGN(PlatformChannelPair);
};
} // namespace system
« no previous file with comments | « mojo/system/multiprocess_message_pipe_unittest.cc ('k') | mojo/system/platform_channel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698