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 |