| Index: mojo/edk/embedder/named_platform_channel_pair_win.cc
|
| diff --git a/mojo/edk/embedder/named_platform_channel_pair_win.cc b/mojo/edk/embedder/named_platform_channel_pair_win.cc
|
| deleted file mode 100644
|
| index f7f16ae1ac26987cbb0a50ca6fa3e20bcf3ba17a..0000000000000000000000000000000000000000
|
| --- a/mojo/edk/embedder/named_platform_channel_pair_win.cc
|
| +++ /dev/null
|
| @@ -1,131 +0,0 @@
|
| -// Copyright 2016 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.
|
| -
|
| -#include "mojo/edk/embedder/named_platform_channel_pair.h"
|
| -
|
| -#include <sddl.h>
|
| -#include <windows.h>
|
| -
|
| -#include <memory>
|
| -#include <string>
|
| -#include <utility>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/logging.h"
|
| -#include "base/rand_util.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/win/windows_version.h"
|
| -#include "mojo/edk/embedder/platform_handle.h"
|
| -
|
| -namespace mojo {
|
| -namespace edk {
|
| -
|
| -namespace {
|
| -
|
| -const char kMojoNamedPlatformChannelPipeSwitch[] =
|
| - "mojo-named-platform-channel-pipe";
|
| -
|
| -std::wstring GeneratePipeName() {
|
| - return base::StringPrintf(L"\\\\.\\pipe\\mojo.%u.%u.%I64u",
|
| - GetCurrentProcessId(), GetCurrentThreadId(),
|
| - base::RandUint64());
|
| -
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -NamedPlatformChannelPair::NamedPlatformChannelPair() {
|
| - pipe_name_ = GeneratePipeName();
|
| -
|
| - 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));
|
| - std::unique_ptr<void, decltype(::LocalFree)*> p(security_desc, ::LocalFree);
|
| - SECURITY_ATTRIBUTES security_attributes = {
|
| - sizeof(SECURITY_ATTRIBUTES), security_desc, FALSE };
|
| -
|
| - const DWORD kOpenMode =
|
| - PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED | FILE_FLAG_FIRST_PIPE_INSTANCE;
|
| - const DWORD kPipeMode =
|
| - PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_REJECT_REMOTE_CLIENTS;
|
| - PlatformHandle handle(
|
| - CreateNamedPipeW(pipe_name_.c_str(), kOpenMode, kPipeMode,
|
| - 1, // Max instances.
|
| - 4096, // Out buffer size.
|
| - 4096, // In buffer size.
|
| - 5000, // Timeout in milliseconds.
|
| - &security_attributes));
|
| - handle.needs_connection = true;
|
| - server_handle_.reset(handle);
|
| - PCHECK(server_handle_.is_valid());
|
| -}
|
| -
|
| -NamedPlatformChannelPair::~NamedPlatformChannelPair() {}
|
| -
|
| -ScopedPlatformHandle NamedPlatformChannelPair::PassServerHandle() {
|
| - return std::move(server_handle_);
|
| -}
|
| -
|
| -// static
|
| -ScopedPlatformHandle
|
| -NamedPlatformChannelPair::PassClientHandleFromParentProcess(
|
| - const base::CommandLine& command_line) {
|
| - std::wstring client_handle_string =
|
| - command_line.GetSwitchValueNative(kMojoNamedPlatformChannelPipeSwitch);
|
| -
|
| - if (client_handle_string.empty())
|
| - return ScopedPlatformHandle();
|
| -
|
| - // Note: This may block.
|
| - BOOL ok = WaitNamedPipeW(client_handle_string.c_str(),
|
| - NMPWAIT_USE_DEFAULT_WAIT);
|
| - if (!ok)
|
| - return ScopedPlatformHandle();
|
| -
|
| - // In order to support passing the pipe name on the command line, the pipe
|
| - // handle is lazily created from the pipe name when requested.
|
| - const DWORD kDesiredAccess = GENERIC_READ | GENERIC_WRITE;
|
| - // The SECURITY_ANONYMOUS flag means that the server side cannot impersonate
|
| - // the client.
|
| - const DWORD kFlags =
|
| - SECURITY_SQOS_PRESENT | SECURITY_ANONYMOUS | FILE_FLAG_OVERLAPPED;
|
| - ScopedPlatformHandle handle(
|
| - PlatformHandle(CreateFileW(client_handle_string.c_str(), kDesiredAccess,
|
| - 0, // No sharing.
|
| - nullptr, OPEN_EXISTING, kFlags,
|
| - nullptr))); // No template file.
|
| - PCHECK(handle.is_valid());
|
| - return handle;
|
| -}
|
| -
|
| -void NamedPlatformChannelPair::PrepareToPassClientHandleToChildProcess(
|
| - base::CommandLine* command_line) const {
|
| - DCHECK(command_line);
|
| -
|
| - // Log a warning if the command line already has the switch, but "clobber" it
|
| - // anyway, since it's reasonably likely that all the switches were just copied
|
| - // from the parent.
|
| - LOG_IF(WARNING,
|
| - command_line->HasSwitch(kMojoNamedPlatformChannelPipeSwitch))
|
| - << "Child command line already has switch --"
|
| - << kMojoNamedPlatformChannelPipeSwitch << "="
|
| - << command_line->GetSwitchValueNative(
|
| - kMojoNamedPlatformChannelPipeSwitch);
|
| - // (Any existing switch won't actually be removed from the command line, but
|
| - // the last one appended takes precedence.)
|
| - command_line->AppendSwitchNative(
|
| - kMojoNamedPlatformChannelPipeSwitch, pipe_name_);
|
| -}
|
| -
|
| -} // namespace edk
|
| -} // namespace mojo
|
|
|