| 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
 | 
| 
 |