• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2019 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/memory/shared_memory_hooks.h"
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "third_party/abseil-cpp/absl/types/optional.h"
9 
10 namespace base {
11 
12 class SharedMemoryHooksTest : public ::testing::Test {
13  protected:
TearDown()14   void TearDown() override { SetCreateHooks(nullptr, nullptr, nullptr); }
15 
SetCreateHooks(ReadOnlySharedMemoryRegion::CreateFunction * read_only_hook,UnsafeSharedMemoryRegion::CreateFunction * unsafe_hook,WritableSharedMemoryRegion::CreateFunction * writable_hook)16   void SetCreateHooks(
17       ReadOnlySharedMemoryRegion::CreateFunction* read_only_hook,
18       UnsafeSharedMemoryRegion::CreateFunction* unsafe_hook,
19       WritableSharedMemoryRegion::CreateFunction* writable_hook) {
20     SharedMemoryHooks::SetCreateHooks(read_only_hook, unsafe_hook,
21                                       writable_hook);
22   }
23 };
24 
25 absl::optional<size_t> requested_read_only_shmem_size;
26 absl::optional<size_t> requested_unsafe_shmem_size;
27 absl::optional<size_t> requested_writable_shmem_size;
28 
ReadOnlyShmemCreateHook(size_t size,SharedMemoryMapper * mapper)29 MappedReadOnlyRegion ReadOnlyShmemCreateHook(size_t size, SharedMemoryMapper* mapper) {
30   requested_read_only_shmem_size = size;
31   return {};
32 }
33 
UnsafeShmemCreateHook(size_t size)34 UnsafeSharedMemoryRegion UnsafeShmemCreateHook(size_t size) {
35   requested_unsafe_shmem_size = size;
36   return {};
37 }
38 
WritableShmemCreateHook(size_t size)39 WritableSharedMemoryRegion WritableShmemCreateHook(size_t size) {
40   requested_writable_shmem_size = size;
41   return {};
42 }
43 
TEST_F(SharedMemoryHooksTest,Basic)44 TEST_F(SharedMemoryHooksTest, Basic) {
45   {
46     auto region = ReadOnlySharedMemoryRegion::Create(3);
47     EXPECT_TRUE(region.IsValid());
48     EXPECT_FALSE(requested_read_only_shmem_size.has_value());
49   }
50 
51   {
52     auto region = UnsafeSharedMemoryRegion::Create(25);
53     EXPECT_TRUE(region.IsValid());
54     EXPECT_FALSE(requested_unsafe_shmem_size.has_value());
55   }
56 
57   {
58     auto region = WritableSharedMemoryRegion::Create(777);
59     EXPECT_TRUE(region.IsValid());
60     EXPECT_FALSE(requested_writable_shmem_size.has_value());
61   }
62 
63   SetCreateHooks(&ReadOnlyShmemCreateHook, &UnsafeShmemCreateHook,
64                  &WritableShmemCreateHook);
65 
66   {
67     auto region = ReadOnlySharedMemoryRegion::Create(3);
68     EXPECT_FALSE(region.IsValid());
69     EXPECT_EQ(3u, *requested_read_only_shmem_size);
70   }
71 
72   {
73     auto region = UnsafeSharedMemoryRegion::Create(25);
74     EXPECT_FALSE(region.IsValid());
75     EXPECT_EQ(25u, *requested_unsafe_shmem_size);
76   }
77 
78   {
79     auto region = WritableSharedMemoryRegion::Create(777);
80     EXPECT_FALSE(region.IsValid());
81     EXPECT_EQ(777u, *requested_writable_shmem_size);
82   }
83 }
84 
85 }  // namespace base
86