diff options
author | Luis Hector Chavez <lhchavez@google.com> | 2017-07-26 17:38:05 +0000 |
---|---|---|
committer | Luis Hector Chavez <lhchavez@google.com> | 2017-07-26 17:38:05 +0000 |
commit | 21a249e4d9cb0b2ec6f0ff84ed5f7939ea67ac52 (patch) | |
tree | d380c2689495d31fd250cf8f1d0ceebbdd4cf250 /ipc/ipc_channel_handle.h | |
parent | 8ac9103e05b66812c25348943383f9365d1ce3e0 (diff) | |
download | libmojo-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.h | 59 |
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 |