|  | // Copyright 2017 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 "base/memory/shared_memory_handle.h" | 
|  |  | 
|  | #include <zircon/syscalls.h> | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "base/unguessable_token.h" | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | SharedMemoryHandle::SharedMemoryHandle() {} | 
|  |  | 
|  | SharedMemoryHandle::SharedMemoryHandle(zx_handle_t h, | 
|  | size_t size, | 
|  | const base::UnguessableToken& guid) | 
|  | : handle_(h), guid_(guid), size_(size) {} | 
|  |  | 
|  | void SharedMemoryHandle::Close() const { | 
|  | DCHECK(handle_ != ZX_HANDLE_INVALID); | 
|  | zx_handle_close(handle_); | 
|  | } | 
|  |  | 
|  | bool SharedMemoryHandle::IsValid() const { | 
|  | return handle_ != ZX_HANDLE_INVALID; | 
|  | } | 
|  |  | 
|  | SharedMemoryHandle SharedMemoryHandle::Duplicate() const { | 
|  | zx_handle_t duped_handle; | 
|  | zx_status_t status = | 
|  | zx_handle_duplicate(handle_, ZX_RIGHT_SAME_RIGHTS, &duped_handle); | 
|  | if (status != ZX_OK) | 
|  | return SharedMemoryHandle(); | 
|  |  | 
|  | SharedMemoryHandle handle(duped_handle, GetSize(), GetGUID()); | 
|  | handle.SetOwnershipPassesToIPC(true); | 
|  | return handle; | 
|  | } | 
|  |  | 
|  | zx_handle_t SharedMemoryHandle::GetHandle() const { | 
|  | return handle_; | 
|  | } | 
|  |  | 
|  | void SharedMemoryHandle::SetOwnershipPassesToIPC(bool ownership_passes) { | 
|  | ownership_passes_to_ipc_ = ownership_passes; | 
|  | } | 
|  |  | 
|  | bool SharedMemoryHandle::OwnershipPassesToIPC() const { | 
|  | return ownership_passes_to_ipc_; | 
|  | } | 
|  |  | 
|  | }  // namespace base |