Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: base/memory/shared_memory_unittest.cc

Issue 2875453002: Add a size parameter to SharedMemoryHandle. (Closed)
Patch Set: Remove extraneous period. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/memory/shared_memory_posix.cc ('k') | base/memory/shared_memory_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 // The Mach functionality is tested in shared_memory_mac_unittest.cc. 328 // The Mach functionality is tested in shared_memory_mac_unittest.cc.
329 options.type = SharedMemoryHandle::POSIX; 329 options.type = SharedMemoryHandle::POSIX;
330 #endif 330 #endif
331 ASSERT_TRUE(writable_shmem.Create(options)); 331 ASSERT_TRUE(writable_shmem.Create(options));
332 ASSERT_TRUE(writable_shmem.Map(options.size)); 332 ASSERT_TRUE(writable_shmem.Map(options.size));
333 memcpy(writable_shmem.memory(), contents.data(), contents.size()); 333 memcpy(writable_shmem.memory(), contents.data(), contents.size());
334 EXPECT_TRUE(writable_shmem.Unmap()); 334 EXPECT_TRUE(writable_shmem.Unmap());
335 335
336 SharedMemoryHandle readonly_handle = writable_shmem.GetReadOnlyHandle(); 336 SharedMemoryHandle readonly_handle = writable_shmem.GetReadOnlyHandle();
337 EXPECT_EQ(writable_shmem.handle().GetGUID(), readonly_handle.GetGUID()); 337 EXPECT_EQ(writable_shmem.handle().GetGUID(), readonly_handle.GetGUID());
338 EXPECT_EQ(writable_shmem.handle().GetSize(), readonly_handle.GetSize());
338 ASSERT_TRUE(readonly_handle.IsValid()); 339 ASSERT_TRUE(readonly_handle.IsValid());
339 SharedMemory readonly_shmem(readonly_handle, /*readonly=*/true); 340 SharedMemory readonly_shmem(readonly_handle, /*readonly=*/true);
340 341
341 ASSERT_TRUE(readonly_shmem.Map(contents.size())); 342 ASSERT_TRUE(readonly_shmem.Map(contents.size()));
342 EXPECT_EQ(contents, 343 EXPECT_EQ(contents,
343 StringPiece(static_cast<const char*>(readonly_shmem.memory()), 344 StringPiece(static_cast<const char*>(readonly_shmem.memory()),
344 contents.size())); 345 contents.size()));
345 EXPECT_TRUE(readonly_shmem.Unmap()); 346 EXPECT_TRUE(readonly_shmem.Unmap());
346 347
347 // Make sure the writable instance is still writable. 348 // Make sure the writable instance is still writable.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 TEST(SharedMemoryTest, ShareToSelf) { 408 TEST(SharedMemoryTest, ShareToSelf) {
408 StringPiece contents = "Hello World"; 409 StringPiece contents = "Hello World";
409 410
410 SharedMemory shmem; 411 SharedMemory shmem;
411 ASSERT_TRUE(shmem.CreateAndMapAnonymous(contents.size())); 412 ASSERT_TRUE(shmem.CreateAndMapAnonymous(contents.size()));
412 memcpy(shmem.memory(), contents.data(), contents.size()); 413 memcpy(shmem.memory(), contents.data(), contents.size());
413 EXPECT_TRUE(shmem.Unmap()); 414 EXPECT_TRUE(shmem.Unmap());
414 415
415 SharedMemoryHandle shared_handle = shmem.handle().Duplicate(); 416 SharedMemoryHandle shared_handle = shmem.handle().Duplicate();
416 ASSERT_TRUE(shared_handle.IsValid()); 417 ASSERT_TRUE(shared_handle.IsValid());
417 #if defined(OS_WIN) 418 EXPECT_TRUE(shared_handle.OwnershipPassesToIPC());
418 ASSERT_TRUE(shared_handle.OwnershipPassesToIPC()); 419 EXPECT_EQ(shared_handle.GetGUID(), shmem.handle().GetGUID());
419 #endif 420 EXPECT_EQ(shared_handle.GetSize(), shmem.handle().GetSize());
420 SharedMemory shared(shared_handle, /*readonly=*/false); 421 SharedMemory shared(shared_handle, /*readonly=*/false);
421 422
422 ASSERT_TRUE(shared.Map(contents.size())); 423 ASSERT_TRUE(shared.Map(contents.size()));
423 EXPECT_EQ( 424 EXPECT_EQ(
424 contents, 425 contents,
425 StringPiece(static_cast<const char*>(shared.memory()), contents.size())); 426 StringPiece(static_cast<const char*>(shared.memory()), contents.size()));
426 427
427 shared_handle = shmem.handle().Duplicate(); 428 shared_handle = shmem.handle().Duplicate();
428 ASSERT_TRUE(shared_handle.IsValid()); 429 ASSERT_TRUE(shared_handle.IsValid());
429 #if defined(OS_WIN)
430 ASSERT_TRUE(shared_handle.OwnershipPassesToIPC()); 430 ASSERT_TRUE(shared_handle.OwnershipPassesToIPC());
431 #endif
432 SharedMemory readonly(shared_handle, /*readonly=*/true); 431 SharedMemory readonly(shared_handle, /*readonly=*/true);
433 432
434 ASSERT_TRUE(readonly.Map(contents.size())); 433 ASSERT_TRUE(readonly.Map(contents.size()));
435 EXPECT_EQ(contents, 434 EXPECT_EQ(contents,
436 StringPiece(static_cast<const char*>(readonly.memory()), 435 StringPiece(static_cast<const char*>(readonly.memory()),
437 contents.size())); 436 contents.size()));
438 } 437 }
439 438
440 TEST(SharedMemoryTest, MapAt) { 439 TEST(SharedMemoryTest, MapAt) {
441 ASSERT_TRUE(SysInfo::VMAllocationGranularity() >= sizeof(uint32_t)); 440 ASSERT_TRUE(SysInfo::VMAllocationGranularity() >= sizeof(uint32_t));
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 PAGE_READONLY | SEC_IMAGE, 0, 0, kTestSectionName)); 599 PAGE_READONLY | SEC_IMAGE, 0, 0, kTestSectionName));
601 EXPECT_TRUE(section_handle.IsValid()); 600 EXPECT_TRUE(section_handle.IsValid());
602 601
603 // Check direct opening by name, from handle and duplicated from handle. 602 // Check direct opening by name, from handle and duplicated from handle.
604 SharedMemory shared_memory_open; 603 SharedMemory shared_memory_open;
605 EXPECT_TRUE(shared_memory_open.Open(kTestSectionName, true)); 604 EXPECT_TRUE(shared_memory_open.Open(kTestSectionName, true));
606 EXPECT_FALSE(shared_memory_open.Map(1)); 605 EXPECT_FALSE(shared_memory_open.Map(1));
607 EXPECT_EQ(nullptr, shared_memory_open.memory()); 606 EXPECT_EQ(nullptr, shared_memory_open.memory());
608 607
609 SharedMemory shared_memory_handle_local( 608 SharedMemory shared_memory_handle_local(
610 SharedMemoryHandle(section_handle.Take(), UnguessableToken::Create()), 609 SharedMemoryHandle(section_handle.Take(), 1, UnguessableToken::Create()),
611 true); 610 true);
612 EXPECT_FALSE(shared_memory_handle_local.Map(1)); 611 EXPECT_FALSE(shared_memory_handle_local.Map(1));
613 EXPECT_EQ(nullptr, shared_memory_handle_local.memory()); 612 EXPECT_EQ(nullptr, shared_memory_handle_local.memory());
614 613
615 // Check that a handle without SECTION_QUERY also can't be mapped as it can't 614 // Check that a handle without SECTION_QUERY also can't be mapped as it can't
616 // be checked. 615 // be checked.
617 SharedMemory shared_memory_handle_dummy; 616 SharedMemory shared_memory_handle_dummy;
618 SharedMemoryCreateOptions options; 617 SharedMemoryCreateOptions options;
619 options.size = 0x1000; 618 options.size = 0x1000;
620 EXPECT_TRUE(shared_memory_handle_dummy.Create(options)); 619 EXPECT_TRUE(shared_memory_handle_dummy.Create(options));
621 HANDLE handle_no_query; 620 HANDLE handle_no_query;
622 EXPECT_TRUE(::DuplicateHandle( 621 EXPECT_TRUE(::DuplicateHandle(
623 ::GetCurrentProcess(), shared_memory_handle_dummy.handle().GetHandle(), 622 ::GetCurrentProcess(), shared_memory_handle_dummy.handle().GetHandle(),
624 ::GetCurrentProcess(), &handle_no_query, FILE_MAP_READ, FALSE, 0)); 623 ::GetCurrentProcess(), &handle_no_query, FILE_MAP_READ, FALSE, 0));
625 SharedMemory shared_memory_handle_no_query( 624 SharedMemory shared_memory_handle_no_query(
626 SharedMemoryHandle(handle_no_query, UnguessableToken::Create()), true); 625 SharedMemoryHandle(handle_no_query, options.size,
626 UnguessableToken::Create()),
627 true);
627 EXPECT_FALSE(shared_memory_handle_no_query.Map(1)); 628 EXPECT_FALSE(shared_memory_handle_no_query.Map(1));
628 EXPECT_EQ(nullptr, shared_memory_handle_no_query.memory()); 629 EXPECT_EQ(nullptr, shared_memory_handle_no_query.memory());
629 } 630 }
630 #endif // defined(OS_WIN) 631 #endif // defined(OS_WIN)
631 632
632 // iOS does not allow multiple processes. 633 // iOS does not allow multiple processes.
633 // Android ashmem does not support named shared memory. 634 // Android ashmem does not support named shared memory.
634 // Mac SharedMemory does not support named shared memory. crbug.com/345734 635 // Mac SharedMemory does not support named shared memory. crbug.com/345734
635 #if !defined(OS_IOS) && !defined(OS_ANDROID) && !defined(OS_MACOSX) 636 #if !defined(OS_IOS) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
636 // On POSIX it is especially important we test shmem across processes, 637 // On POSIX it is especially important we test shmem across processes,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 memory.Close(); 704 memory.Close();
704 SharedMemoryProcessTest::CleanUp(); 705 SharedMemoryProcessTest::CleanUp();
705 } 706 }
706 707
707 MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain) { 708 MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain) {
708 return SharedMemoryProcessTest::TaskTestMain(); 709 return SharedMemoryProcessTest::TaskTestMain();
709 } 710 }
710 #endif // !defined(OS_IOS) && !defined(OS_ANDROID) && !defined(OS_MACOSX) 711 #endif // !defined(OS_IOS) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
711 712
712 } // namespace base 713 } // namespace base
OLDNEW
« no previous file with comments | « base/memory/shared_memory_posix.cc ('k') | base/memory/shared_memory_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698