OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/memory/shared_memory.h" | 5 #include "base/memory/shared_memory.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 else | 309 else |
310 EXPECT_EQ(0, pointers[j][0]); | 310 EXPECT_EQ(0, pointers[j][0]); |
311 } | 311 } |
312 } | 312 } |
313 | 313 |
314 for (int i = 0; i < count; i++) { | 314 for (int i = 0; i < count; i++) { |
315 memories[i].Close(); | 315 memories[i].Close(); |
316 } | 316 } |
317 } | 317 } |
318 | 318 |
319 TEST(SharedMemoryTest, ShareReadOnly) { | 319 TEST(SharedMemoryTest, GetReadOnlyHandle) { |
320 StringPiece contents = "Hello World"; | 320 StringPiece contents = "Hello World"; |
321 | 321 |
322 SharedMemory writable_shmem; | 322 SharedMemory writable_shmem; |
323 SharedMemoryCreateOptions options; | 323 SharedMemoryCreateOptions options; |
324 options.size = contents.size(); | 324 options.size = contents.size(); |
325 options.share_read_only = true; | 325 options.share_read_only = true; |
326 #if defined(OS_MACOSX) && !defined(OS_IOS) | 326 #if defined(OS_MACOSX) && !defined(OS_IOS) |
327 // The Mach functionality is tested in shared_memory_mac_unittest.cc. | 327 // The Mach functionality is tested in shared_memory_mac_unittest.cc. |
328 options.type = SharedMemoryHandle::POSIX; | 328 options.type = SharedMemoryHandle::POSIX; |
329 #endif | 329 #endif |
330 ASSERT_TRUE(writable_shmem.Create(options)); | 330 ASSERT_TRUE(writable_shmem.Create(options)); |
331 ASSERT_TRUE(writable_shmem.Map(options.size)); | 331 ASSERT_TRUE(writable_shmem.Map(options.size)); |
332 memcpy(writable_shmem.memory(), contents.data(), contents.size()); | 332 memcpy(writable_shmem.memory(), contents.data(), contents.size()); |
333 EXPECT_TRUE(writable_shmem.Unmap()); | 333 EXPECT_TRUE(writable_shmem.Unmap()); |
334 | 334 |
335 SharedMemoryHandle readonly_handle; | 335 SharedMemoryHandle readonly_handle = writable_shmem.GetReadOnlyHandle(); |
336 ASSERT_TRUE(writable_shmem.ShareReadOnlyToProcess(GetCurrentProcessHandle(), | 336 ASSERT_TRUE(readonly_handle.IsValid()); |
337 &readonly_handle)); | |
338 SharedMemory readonly_shmem(readonly_handle, /*readonly=*/true); | 337 SharedMemory readonly_shmem(readonly_handle, /*readonly=*/true); |
339 | 338 |
340 ASSERT_TRUE(readonly_shmem.Map(contents.size())); | 339 ASSERT_TRUE(readonly_shmem.Map(contents.size())); |
341 EXPECT_EQ(contents, | 340 EXPECT_EQ(contents, |
342 StringPiece(static_cast<const char*>(readonly_shmem.memory()), | 341 StringPiece(static_cast<const char*>(readonly_shmem.memory()), |
343 contents.size())); | 342 contents.size())); |
344 EXPECT_TRUE(readonly_shmem.Unmap()); | 343 EXPECT_TRUE(readonly_shmem.Unmap()); |
345 | 344 |
346 // Make sure the writable instance is still writable. | 345 // Make sure the writable instance is still writable. |
347 ASSERT_TRUE(writable_shmem.Map(contents.size())); | 346 ASSERT_TRUE(writable_shmem.Map(contents.size())); |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
701 memory.Close(); | 700 memory.Close(); |
702 SharedMemoryProcessTest::CleanUp(); | 701 SharedMemoryProcessTest::CleanUp(); |
703 } | 702 } |
704 | 703 |
705 MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain) { | 704 MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain) { |
706 return SharedMemoryProcessTest::TaskTestMain(); | 705 return SharedMemoryProcessTest::TaskTestMain(); |
707 } | 706 } |
708 #endif // !defined(OS_IOS) && !defined(OS_ANDROID) && !defined(OS_MACOSX) | 707 #endif // !defined(OS_IOS) && !defined(OS_ANDROID) && !defined(OS_MACOSX) |
709 | 708 |
710 } // namespace base | 709 } // namespace base |
OLD | NEW |