123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // Copyright 2018 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/unsafe_shared_memory_region.h"
- #include <utility>
- #include "base/check_op.h"
- namespace base {
- UnsafeSharedMemoryRegion::CreateFunction*
- UnsafeSharedMemoryRegion::create_hook_ = nullptr;
- // static
- UnsafeSharedMemoryRegion UnsafeSharedMemoryRegion::Create(size_t size) {
- if (create_hook_)
- return create_hook_(size);
- subtle::PlatformSharedMemoryRegion handle =
- subtle::PlatformSharedMemoryRegion::CreateUnsafe(size);
- return UnsafeSharedMemoryRegion(std::move(handle));
- }
- // static
- UnsafeSharedMemoryRegion UnsafeSharedMemoryRegion::Deserialize(
- subtle::PlatformSharedMemoryRegion handle) {
- return UnsafeSharedMemoryRegion(std::move(handle));
- }
- // static
- subtle::PlatformSharedMemoryRegion
- UnsafeSharedMemoryRegion::TakeHandleForSerialization(
- UnsafeSharedMemoryRegion region) {
- return std::move(region.handle_);
- }
- UnsafeSharedMemoryRegion::UnsafeSharedMemoryRegion() = default;
- UnsafeSharedMemoryRegion::UnsafeSharedMemoryRegion(
- UnsafeSharedMemoryRegion&& region) = default;
- UnsafeSharedMemoryRegion& UnsafeSharedMemoryRegion::operator=(
- UnsafeSharedMemoryRegion&& region) = default;
- UnsafeSharedMemoryRegion::~UnsafeSharedMemoryRegion() = default;
- UnsafeSharedMemoryRegion UnsafeSharedMemoryRegion::Duplicate() const {
- return UnsafeSharedMemoryRegion(handle_.Duplicate());
- }
- WritableSharedMemoryMapping UnsafeSharedMemoryRegion::Map(
- SharedMemoryMapper* mapper) const {
- return MapAt(0, handle_.GetSize(), mapper);
- }
- WritableSharedMemoryMapping UnsafeSharedMemoryRegion::MapAt(
- uint64_t offset,
- size_t size,
- SharedMemoryMapper* mapper) const {
- if (!IsValid())
- return {};
- auto result = handle_.MapAt(offset, size, mapper);
- if (!result.has_value())
- return {};
- return WritableSharedMemoryMapping(result.value(), size, handle_.GetGUID(),
- mapper);
- }
- bool UnsafeSharedMemoryRegion::IsValid() const {
- return handle_.IsValid();
- }
- UnsafeSharedMemoryRegion::UnsafeSharedMemoryRegion(
- subtle::PlatformSharedMemoryRegion handle)
- : handle_(std::move(handle)) {
- if (handle_.IsValid()) {
- CHECK_EQ(handle_.GetMode(),
- subtle::PlatformSharedMemoryRegion::Mode::kUnsafe);
- }
- }
- } // namespace base
|