| Index: ipc/ipc_channel_handle.h
|
| diff --git a/ipc/ipc_channel_handle.h b/ipc/ipc_channel_handle.h
|
| index ba034cca23b87b51557d6f3e53ab992ee0716e79..7eceebbff222b80313e6765a451158e9d575432c 100644
|
| --- a/ipc/ipc_channel_handle.h
|
| +++ b/ipc/ipc_channel_handle.h
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -12,17 +12,24 @@
|
|
|
| #if defined(OS_POSIX)
|
| #include "base/file_descriptor_posix.h"
|
| -#endif
|
| +#elif defined(OS_WIN)
|
| +#include <windows.h>
|
| +#endif // defined (OS_WIN)
|
|
|
| // 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.
|
| +
|
| // 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, when passing a handle to a channel over IPC, use this data structure
|
| -// to work on both Windows and POSIX.
|
| +// 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 {
|
|
|
| @@ -35,7 +42,9 @@ struct ChannelHandle {
|
| // processes with different working directories.
|
| ChannelHandle(const std::string& n) : name(n) {}
|
| ChannelHandle(const char* n) : name(n) {}
|
| -#if defined(OS_POSIX)
|
| +#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)
|
| @@ -43,8 +52,15 @@ struct ChannelHandle {
|
| std::string name;
|
| #if defined(OS_POSIX)
|
| base::FileDescriptor socket;
|
| -#endif // defined(OS_POSIX)
|
| -
|
| +#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)
|
| };
|
|
|
| } // namespace IPC
|
|
|