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

Unified Diff: ipc/ipc_channel.h

Issue 307653003: Introduce IPC::Channel::Create*() to ensure it being heap-allocated. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing windows build, landing again. Created 6 years, 7 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/ipc.gypi ('k') | ipc/ipc_channel_common.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/ipc_channel.h
diff --git a/ipc/ipc_channel.h b/ipc/ipc_channel.h
index 4426e5d5c7b38aa75365b4740694d3ed10f9ce13..be8f83ce9995575037b5b43090e88e308712d1de 100644
--- a/ipc/ipc_channel.h
+++ b/ipc/ipc_channel.h
@@ -55,21 +55,15 @@ class IPC_EXPORT Channel : public Sender {
};
// Some Standard Modes
+ // TODO(morrita): These are under deprecation work. You should use Create*()
+ // functions instead.
enum Mode {
MODE_NONE = MODE_NO_FLAG,
MODE_SERVER = MODE_SERVER_FLAG,
MODE_CLIENT = MODE_CLIENT_FLAG,
- // Channels on Windows are named by default and accessible from other
- // processes. On POSIX channels are anonymous by default and not accessible
- // from other processes. Named channels work via named unix domain sockets.
- // On Windows MODE_NAMED_SERVER is equivalent to MODE_SERVER and
- // MODE_NAMED_CLIENT is equivalent to MODE_CLIENT.
MODE_NAMED_SERVER = MODE_SERVER_FLAG | MODE_NAMED_FLAG,
MODE_NAMED_CLIENT = MODE_CLIENT_FLAG | MODE_NAMED_FLAG,
#if defined(OS_POSIX)
- // An "open" named server accepts connections from ANY client.
- // The caller must then implement their own access-control based on the
- // client process' user Id.
MODE_OPEN_NAMED_SERVER = MODE_OPEN_ACCESS_FLAG | MODE_SERVER_FLAG |
MODE_NAMED_FLAG
#endif
@@ -106,15 +100,47 @@ class IPC_EXPORT Channel : public Sender {
// the file descriptor in the channel handle is != -1, the channel takes
// ownership of the file descriptor and will close it appropriately, otherwise
// it will create a new descriptor internally.
- // |mode| specifies whether this Channel is to operate in server mode or
- // client mode. In server mode, the Channel is responsible for setting up the
- // IPC object, whereas in client mode, the Channel merely connects to the
- // already established IPC object.
// |listener| receives a callback on the current thread for each newly
// received message.
//
- Channel(const IPC::ChannelHandle &channel_handle, Mode mode,
- Listener* listener);
+ // There are four type of modes how channels operate:
+ //
+ // - Server and named server: In these modes, the Channel is
+ // responsible for settingb up the IPC object
+ // - An "open" named server: It accepts connections from ANY client.
+ // The caller must then implement their own access-control based on the
+ // client process' user Id.
+ // - Client and named client: In these mode, the Channel merely
+ // connects to the already established IPC object.
+ //
+ // Each mode has its own Create*() API to create the Channel object.
+ //
+ // TODO(morrita): Replace CreateByModeForProxy() with one of above Create*().
+ //
+ static scoped_ptr<Channel> CreateByModeForProxy(
+ const IPC::ChannelHandle &channel_handle, Mode mode,Listener* listener);
+ static scoped_ptr<Channel> CreateClient(
+ const IPC::ChannelHandle &channel_handle, Listener* listener);
+
+ // Channels on Windows are named by default and accessible from other
+ // processes. On POSIX channels are anonymous by default and not accessible
+ // from other processes. Named channels work via named unix domain sockets.
+ // On Windows MODE_NAMED_SERVER is equivalent to MODE_SERVER and
+ // MODE_NAMED_CLIENT is equivalent to MODE_CLIENT.
+ static scoped_ptr<Channel> CreateNamedServer(
+ const IPC::ChannelHandle &channel_handle, Listener* listener);
+ static scoped_ptr<Channel> CreateNamedClient(
+ const IPC::ChannelHandle &channel_handle, Listener* listener);
+#if defined(OS_POSIX)
+ // An "open" named server accepts connections from ANY client.
+ // The caller must then implement their own access-control based on the
+ // client process' user Id.
+ static scoped_ptr<Channel> CreateOpenNamedServer(
+ const IPC::ChannelHandle &channel_handle, Listener* listener);
+#endif
+ static scoped_ptr<Channel> CreateServer(
+ const IPC::ChannelHandle &channel_handle, Listener* listener);
+
virtual ~Channel();
@@ -220,6 +246,9 @@ class IPC_EXPORT Channel : public Sender {
Channel() : channel_impl_(0) { }
private:
+ Channel(const IPC::ChannelHandle &channel_handle, Mode mode,
+ Listener* listener);
+
// PIMPL to which all channel calls are delegated.
class ChannelImpl;
ChannelImpl *channel_impl_;
« no previous file with comments | « ipc/ipc.gypi ('k') | ipc/ipc_channel_common.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698