| Index: mojo/edk/embedder/named_platform_handle_utils_win.cc
 | 
| diff --git a/mojo/edk/embedder/named_platform_handle_utils_win.cc b/mojo/edk/embedder/named_platform_handle_utils_win.cc
 | 
| index ccf506217ae222e89e57de95ba85089c7fc575f0..1a602d1a4c74559dd92f4f5e1cd2ba68b05c76a4 100644
 | 
| --- a/mojo/edk/embedder/named_platform_handle_utils_win.cc
 | 
| +++ b/mojo/edk/embedder/named_platform_handle_utils_win.cc
 | 
| @@ -15,6 +15,18 @@
 | 
|  
 | 
|  namespace mojo {
 | 
|  namespace edk {
 | 
| +namespace {
 | 
| +
 | 
| +// A DACL to grant:
 | 
| +// GA = Generic All
 | 
| +// access to:
 | 
| +// SY = LOCAL_SYSTEM
 | 
| +// BA = BUILTIN_ADMINISTRATORS
 | 
| +// OW = OWNER_RIGHTS
 | 
| +constexpr base::char16 kDefaultSecurityDescriptor[] =
 | 
| +    L"D:(A;;GA;;;SY)(A;;GA;;;BA)(A;;GA;;;OW)";
 | 
| +
 | 
| +}  // namespace
 | 
|  
 | 
|  ScopedPlatformHandle CreateClientHandle(
 | 
|      const NamedPlatformHandle& named_handle) {
 | 
| @@ -41,27 +53,23 @@ ScopedPlatformHandle CreateClientHandle(
 | 
|    return handle;
 | 
|  }
 | 
|  
 | 
| -ScopedPlatformHandle CreateServerHandle(const NamedPlatformHandle& named_handle,
 | 
| -                                        bool enforce_uniqueness) {
 | 
| +ScopedPlatformHandle CreateServerHandle(
 | 
| +    const NamedPlatformHandle& named_handle,
 | 
| +    const CreateServerHandleOptions& options) {
 | 
|    if (!named_handle.is_valid())
 | 
|      return ScopedPlatformHandle();
 | 
|  
 | 
|    PSECURITY_DESCRIPTOR security_desc = nullptr;
 | 
|    ULONG security_desc_len = 0;
 | 
| -  // Create a DACL to grant:
 | 
| -  // GA = Generic All
 | 
| -  // access to:
 | 
| -  // SY = LOCAL_SYSTEM
 | 
| -  // BA = BUILTIN_ADMINISTRATORS
 | 
| -  // OW = OWNER_RIGHTS
 | 
|    PCHECK(ConvertStringSecurityDescriptorToSecurityDescriptor(
 | 
| -      L"D:(A;;GA;;;SY)(A;;GA;;;BA)(A;;GA;;;OW)", SDDL_REVISION_1,
 | 
| -      &security_desc, &security_desc_len));
 | 
| +      options.security_descriptor.empty() ? kDefaultSecurityDescriptor
 | 
| +                                          : options.security_descriptor.c_str(),
 | 
| +      SDDL_REVISION_1, &security_desc, &security_desc_len));
 | 
|    std::unique_ptr<void, decltype(::LocalFree)*> p(security_desc, ::LocalFree);
 | 
|    SECURITY_ATTRIBUTES security_attributes = {sizeof(SECURITY_ATTRIBUTES),
 | 
|                                               security_desc, FALSE};
 | 
|  
 | 
| -  const DWORD kOpenMode = enforce_uniqueness
 | 
| +  const DWORD kOpenMode = options.enforce_uniqueness
 | 
|                                ? PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED |
 | 
|                                      FILE_FLAG_FIRST_PIPE_INSTANCE
 | 
|                                : PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED;
 | 
| @@ -69,9 +77,9 @@ ScopedPlatformHandle CreateServerHandle(const NamedPlatformHandle& named_handle,
 | 
|        PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_REJECT_REMOTE_CLIENTS;
 | 
|    PlatformHandle handle(
 | 
|        CreateNamedPipeW(named_handle.pipe_name().c_str(), kOpenMode, kPipeMode,
 | 
| -                       enforce_uniqueness ? 1 : 255,  // Max instances.
 | 
| -                       4096,                          // Out buffer size.
 | 
| -                       4096,                          // In buffer size.
 | 
| +                       options.enforce_uniqueness ? 1 : 255,  // Max instances.
 | 
| +                       4096,  // Out buffer size.
 | 
| +                       4096,  // In buffer size.
 | 
|                         5000,  // Timeout in milliseconds.
 | 
|                         &security_attributes));
 | 
|    handle.needs_connection = true;
 | 
| 
 |