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