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