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

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

Issue 2845113005: Replace base::SharedMemory read-only methods with GetReadOnlyHandle. (Closed)
Patch Set: Comments from thakis. 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_mac.cc ('k') | base/memory/shared_memory_nacl.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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <mach/mach.h> 5 #include <mach/mach.h>
6 #include <mach/mach_vm.h> 6 #include <mach/mach_vm.h>
7 #include <servers/bootstrap.h> 7 #include <servers/bootstrap.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 SharedMemory shared_memory2(shm2, true); 387 SharedMemory shared_memory2(shm2, true);
388 shared_memory2.Map(s_memory_size); 388 shared_memory2.Map(s_memory_size);
389 389
390 ASSERT_EQ(0, memcmp(shared_memory->memory(), shared_memory2.memory(), 390 ASSERT_EQ(0, memcmp(shared_memory->memory(), shared_memory2.memory(),
391 s_memory_size)); 391 s_memory_size));
392 } 392 }
393 393
394 EXPECT_EQ(active_name_count, GetActiveNameCount()); 394 EXPECT_EQ(active_name_count, GetActiveNameCount());
395 } 395 }
396 396
397 // Tests that the method ShareReadOnlyToProcess() creates a memory object that 397 // Tests that the method GetReadOnlyHandle() creates a memory object that
398 // is read only. 398 // is read only.
399 TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcessReadonly) { 399 TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcessReadonly) {
400 std::unique_ptr<SharedMemory> shared_memory( 400 std::unique_ptr<SharedMemory> shared_memory(
401 CreateSharedMemory(s_memory_size)); 401 CreateSharedMemory(s_memory_size));
402 402
403 // Check the protection levels. 403 // Check the protection levels.
404 int current_prot, max_prot; 404 int current_prot, max_prot;
405 ASSERT_TRUE(GetProtections(shared_memory->memory(), 405 ASSERT_TRUE(GetProtections(shared_memory->memory(),
406 shared_memory->mapped_size(), &current_prot, 406 shared_memory->mapped_size(), &current_prot,
407 &max_prot)); 407 &max_prot));
408 ASSERT_EQ(VM_PROT_READ | VM_PROT_WRITE, current_prot); 408 ASSERT_EQ(VM_PROT_READ | VM_PROT_WRITE, current_prot);
409 ASSERT_EQ(VM_PROT_READ | VM_PROT_WRITE, max_prot); 409 ASSERT_EQ(VM_PROT_READ | VM_PROT_WRITE, max_prot);
410 410
411 // Make a new memory object. 411 // Make a new memory object.
412 SharedMemoryHandle shm2; 412 SharedMemoryHandle shm2 = shared_memory->GetReadOnlyHandle();
413 ASSERT_TRUE(shared_memory->ShareReadOnlyToProcess(GetCurrentProcId(), &shm2));
414 ASSERT_TRUE(shm2.IsValid()); 413 ASSERT_TRUE(shm2.IsValid());
415 414
416 // Mapping with |readonly| set to |false| should fail. 415 // Mapping with |readonly| set to |false| should fail.
417 SharedMemory shared_memory2(shm2, false); 416 SharedMemory shared_memory2(shm2, false);
418 shared_memory2.Map(s_memory_size); 417 shared_memory2.Map(s_memory_size);
419 ASSERT_EQ(nullptr, shared_memory2.memory()); 418 ASSERT_EQ(nullptr, shared_memory2.memory());
420 419
421 // Now trying mapping with |readonly| set to |true|. 420 // Now trying mapping with |readonly| set to |true|.
422 SharedMemory shared_memory3(shm2.Duplicate(), true); 421 SharedMemory shared_memory3(shm2.Duplicate(), true);
423 shared_memory3.Map(s_memory_size); 422 shared_memory3.Map(s_memory_size);
424 ASSERT_NE(nullptr, shared_memory3.memory()); 423 ASSERT_NE(nullptr, shared_memory3.memory());
425 424
426 // Check the protection levels. 425 // Check the protection levels.
427 ASSERT_TRUE(GetProtections(shared_memory3.memory(), 426 ASSERT_TRUE(GetProtections(shared_memory3.memory(),
428 shared_memory3.mapped_size(), &current_prot, 427 shared_memory3.mapped_size(), &current_prot,
429 &max_prot)); 428 &max_prot));
430 ASSERT_EQ(VM_PROT_READ, current_prot); 429 ASSERT_EQ(VM_PROT_READ, current_prot);
431 ASSERT_EQ(VM_PROT_READ, max_prot); 430 ASSERT_EQ(VM_PROT_READ, max_prot);
432 431
433 // The memory should still be readonly, since the underlying memory object 432 // The memory should still be readonly, since the underlying memory object
434 // is readonly. 433 // is readonly.
435 ASSERT_DEATH(memset(shared_memory2.memory(), 'b', s_memory_size), ""); 434 ASSERT_DEATH(memset(shared_memory2.memory(), 'b', s_memory_size), "");
436 } 435 }
437 436
438 // Tests that the method ShareReadOnlyToProcess() doesn't leak. 437 // Tests that the method GetReadOnlyHandle() doesn't leak.
439 TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcessReadonlyLeak) { 438 TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcessReadonlyLeak) {
440 mach_msg_type_number_t active_name_count = GetActiveNameCount(); 439 mach_msg_type_number_t active_name_count = GetActiveNameCount();
441 440
442 { 441 {
443 std::unique_ptr<SharedMemory> shared_memory( 442 std::unique_ptr<SharedMemory> shared_memory(
444 CreateSharedMemory(s_memory_size)); 443 CreateSharedMemory(s_memory_size));
445 444
446 SharedMemoryHandle shm2; 445 SharedMemoryHandle shm2 = shared_memory->GetReadOnlyHandle();
447 ASSERT_TRUE(
448 shared_memory->ShareReadOnlyToProcess(GetCurrentProcId(), &shm2));
449 ASSERT_TRUE(shm2.IsValid()); 446 ASSERT_TRUE(shm2.IsValid());
450 447
451 // Intentionally map with |readonly| set to |false|. 448 // Intentionally map with |readonly| set to |false|.
452 SharedMemory shared_memory2(shm2, false); 449 SharedMemory shared_memory2(shm2, false);
453 shared_memory2.Map(s_memory_size); 450 shared_memory2.Map(s_memory_size);
454 } 451 }
455 452
456 EXPECT_EQ(active_name_count, GetActiveNameCount()); 453 EXPECT_EQ(active_name_count, GetActiveNameCount());
457 } 454 }
458 455
459 } // namespace base 456 } // namespace base
OLDNEW
« no previous file with comments | « base/memory/shared_memory_mac.cc ('k') | base/memory/shared_memory_nacl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698