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

#ifndef BASE_TEST_TEST_SHARED_MEMORY_UTIL_H_
#define BASE_TEST_TEST_SHARED_MEMORY_UTIL_H_

#include "base/memory/platform_shared_memory_region.h"
#include "base/memory/read_only_shared_memory_region.h"
#include "base/memory/shared_memory_handle.h"
#include "base/memory/shared_memory_mapping.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace base {

// Check that the shared memory |handle| cannot be used to perform
// a writable mapping with low-level system APIs like mmap(). Return true
// in case of success (i.e. writable mappings are _not_ allowed), or false
// otherwise.
bool CheckReadOnlySharedMemoryHandleForTesting(SharedMemoryHandle handle);

bool CheckReadOnlyPlatformSharedMemoryRegionForTesting(
    subtle::PlatformSharedMemoryRegion region);

// Creates a scoped mapping from a PlatformSharedMemoryRegion. It's useful for
// PlatformSharedMemoryRegion testing to not leak mapped memory.
// WritableSharedMemoryMapping is used for wrapping because it has max
// capabilities but the actual permission depends on the |region|'s mode.
// This must not be used in production where PlatformSharedMemoryRegion should
// be wrapped with {Writable,Unsafe,ReadOnly}SharedMemoryRegion.
WritableSharedMemoryMapping MapAtForTesting(
    subtle::PlatformSharedMemoryRegion* region,
    off_t offset,
    size_t size);

WritableSharedMemoryMapping MapForTesting(
    subtle::PlatformSharedMemoryRegion* region);

template <typename SharedMemoryRegionType>
std::pair<SharedMemoryRegionType, WritableSharedMemoryMapping>
CreateMappedRegion(size_t size) {
  SharedMemoryRegionType region = SharedMemoryRegionType::Create(size);
  WritableSharedMemoryMapping mapping = region.Map();
  return {std::move(region), std::move(mapping)};
}

// Template specialization of CreateMappedRegion<>() for
// the ReadOnlySharedMemoryRegion. We need this because
// ReadOnlySharedMemoryRegion::Create() has a different return type.
template <>
std::pair<ReadOnlySharedMemoryRegion, WritableSharedMemoryMapping>
CreateMappedRegion(size_t size);

}  // namespace base

#endif  // BASE_TEST_TEST_SHARED_MEMORY_UTIL_H_
