aboutsummaryrefslogtreecommitdiff
path: root/ipc/ipc_channel_handle.h
diff options
context:
space:
mode:
authorLuis Hector Chavez <lhchavez@google.com>2017-07-26 17:38:05 +0000
committerLuis Hector Chavez <lhchavez@google.com>2017-07-26 17:38:05 +0000
commit21a249e4d9cb0b2ec6f0ff84ed5f7939ea67ac52 (patch)
treed380c2689495d31fd250cf8f1d0ceebbdd4cf250 /ipc/ipc_channel_handle.h
parent8ac9103e05b66812c25348943383f9365d1ce3e0 (diff)
downloadlibmojo-21a249e4d9cb0b2ec6f0ff84ed5f7939ea67ac52.tar.gz
Revert "libmojo: Uprev the library to r456626 from Chromium"
This reverts commit 8ac9103e05b66812c25348943383f9365d1ce3e0. Reason for revert: Broke the mac_sdk Exempt-From-Owner-Approval: Fixing mac_sdk Change-Id: I0b74d1abaa66933a93fd6f82ff018e8948c1204e
Diffstat (limited to 'ipc/ipc_channel_handle.h')
-rw-r--r--ipc/ipc_channel_handle.h59
1 files changed, 44 insertions, 15 deletions
diff --git a/ipc/ipc_channel_handle.h b/ipc/ipc_channel_handle.h
index ef31b84..2e9dc3e 100644
--- a/ipc/ipc_channel_handle.h
+++ b/ipc/ipc_channel_handle.h
@@ -10,31 +10,60 @@
#include "build/build_config.h"
#include "mojo/public/cpp/system/message_pipe.h"
-#if defined(OS_NACL_SFI)
+#if defined(OS_POSIX)
#include "base/file_descriptor_posix.h"
-#endif // defined (OS_NACL_SFI)
+#elif defined(OS_WIN)
+#include <windows.h>
+#endif // defined (OS_WIN)
-namespace IPC {
+// On Windows, any process can create an IPC channel and others can fetch
+// it by name. We pass around the channel names over IPC.
+// On Windows the initialization of ChannelHandle with an existing pipe
+// handle is provided for convenience.
+// NOTE: A ChannelHandle with a pipe handle Will NOT be marshalled over IPC.
-// Note that serialization for this object is defined in the ParamTraits
-// template specialization in ipc_message_utils.h.
-#if defined(OS_NACL_SFI)
-struct ChannelHandle {
- ChannelHandle() {}
- explicit ChannelHandle(const base::FileDescriptor& s) : socket(s) {}
+// On POSIX, we instead pass around handles to channel endpoints via IPC.
+// When it's time to IPC a new channel endpoint around, we send both the
+// channel name as well as a base::FileDescriptor, which is itself a special
+// type that knows how to copy a socket endpoint over IPC.
+//
+// In sum, this data structure can be used to pass channel information by name
+// in both Windows and Posix. When passing a handle to a channel over IPC,
+// use this data structure only for POSIX.
+
+namespace IPC {
- base::FileDescriptor socket;
-};
-#else
struct ChannelHandle {
+ // Note that serialization for this object is defined in the ParamTraits
+ // template specialization in ipc_message_utils.h.
ChannelHandle() {}
+ // The name that is passed in should be an absolute path for Posix.
+ // Otherwise there may be a problem in IPC communication between
+ // processes with different working directories.
+ ChannelHandle(const std::string& n) : name(n) {}
+ ChannelHandle(const char* n) : name(n) {}
+#if defined(OS_WIN)
+ explicit ChannelHandle(HANDLE h) : pipe(h) {}
+#elif defined(OS_POSIX)
+ ChannelHandle(const std::string& n, const base::FileDescriptor& s)
+ : name(n), socket(s) {}
+#endif // defined(OS_POSIX)
ChannelHandle(mojo::MessagePipeHandle h) : mojo_handle(h) {}
- bool is_mojo_channel_handle() const { return mojo_handle.is_valid(); }
-
+ std::string name;
+#if defined(OS_POSIX)
+ base::FileDescriptor socket;
+#elif defined(OS_WIN)
+ // A simple container to automatically initialize pipe handle
+ struct PipeHandle {
+ PipeHandle() : handle(NULL) {}
+ PipeHandle(HANDLE h) : handle(h) {}
+ HANDLE handle;
+ };
+ PipeHandle pipe;
+#endif // defined (OS_WIN)
mojo::MessagePipeHandle mojo_handle;
};
-#endif // defined(OS_NACL_SFI)
} // namespace IPC