Index: base/memory/shared_memory_mac_unittest.cc |
diff --git a/base/memory/shared_memory_mac_unittest.cc b/base/memory/shared_memory_mac_unittest.cc |
index c29302f490b4bf5d5e8d151a7a603a375d9d8192..e4c5e8b19b8d0dd6b426a77c895b16324ee9b5e1 100644 |
--- a/base/memory/shared_memory_mac_unittest.cc |
+++ b/base/memory/shared_memory_mac_unittest.cc |
@@ -7,7 +7,6 @@ |
#include <servers/bootstrap.h> |
#include "base/command_line.h" |
-#include "base/mac/mac_util.h" |
#include "base/mac/mach_logging.h" |
#include "base/mac/scoped_mach_port.h" |
#include "base/memory/shared_memory.h" |
@@ -22,46 +21,6 @@ |
namespace base { |
namespace { |
- |
-// Gets the current and maximum protection levels of the memory region. |
-// Returns whether the operation was successful. |
-// |current| and |max| are output variables only populated on success. |
-bool GetProtections(void* address, size_t size, int* current, int* max) { |
- vm_region_info_t region_info; |
- mach_vm_address_t mem_address = reinterpret_cast<mach_vm_address_t>(address); |
- mach_vm_size_t mem_size = size; |
- vm_region_basic_info_64 basic_info; |
- |
- region_info = reinterpret_cast<vm_region_recurse_info_t>(&basic_info); |
- vm_region_flavor_t flavor = VM_REGION_BASIC_INFO_64; |
- memory_object_name_t memory_object; |
- mach_port_t ctype; |
- |
- kern_return_t kr = |
- mach_vm_region(mach_task_self(), &mem_address, &mem_size, flavor, |
- region_info, &memory_object, &ctype); |
- if (kr != KERN_SUCCESS) { |
- LOG(ERROR) << "Failed to get region info."; |
- return false; |
- } |
- |
- *current = basic_info.protection; |
- *max = basic_info.max_protection; |
- return true; |
-} |
- |
-// Creates a new SharedMemory with the given |size|, filled with 'a'. |
-scoped_ptr<SharedMemory> CreateSharedMemory(int size) { |
- SharedMemoryHandle shm(size); |
- if (!shm.IsValid()) { |
- LOG(ERROR) << "Failed to make SharedMemoryHandle"; |
- return nullptr; |
- } |
- scoped_ptr<SharedMemory> shared_memory(new SharedMemory(shm, false)); |
- shared_memory->Map(size); |
- memset(shared_memory->memory(), 'a', size); |
- return shared_memory; |
-} |
static const std::string g_service_switch_name = "service_name"; |
@@ -225,18 +184,17 @@ |
// Tests that content written to shared memory in the server process can be read |
// by the child process. |
TEST_F(SharedMemoryMacMultiProcessTest, MachBasedSharedMemory) { |
- // Mach-based SharedMemory isn't support on OSX 10.6. |
- if (mac::IsOSSnowLeopard()) |
- return; |
- |
SetUpChild("MachBasedSharedMemoryClient"); |
- scoped_ptr<SharedMemory> shared_memory( |
- CreateSharedMemory(s_memory_size).Pass()); |
+ SharedMemoryHandle shm(s_memory_size); |
+ ASSERT_TRUE(shm.IsValid()); |
+ SharedMemory shared_memory(shm, false); |
+ shared_memory.Map(s_memory_size); |
+ memset(shared_memory.memory(), 'a', s_memory_size); |
// Send the underlying memory object to the client process. |
- SendMachPort(client_port_.get(), shared_memory->handle().GetMemoryObject(), |
- MACH_MSG_TYPE_COPY_SEND); |
+ SendMachPort( |
+ client_port_.get(), shm.GetMemoryObject(), MACH_MSG_TYPE_COPY_SEND); |
int rv = -1; |
ASSERT_TRUE(child_process_.WaitForExitWithTimeout( |
TestTimeouts::action_timeout(), &rv)); |
@@ -261,10 +219,6 @@ |
// Tests that mapping shared memory with an offset works correctly. |
TEST_F(SharedMemoryMacMultiProcessTest, MachBasedSharedMemoryWithOffset) { |
- // Mach-based SharedMemory isn't support on OSX 10.6. |
- if (mac::IsOSSnowLeopard()) |
- return; |
- |
SetUpChild("MachBasedSharedMemoryWithOffsetClient"); |
SharedMemoryHandle shm(s_memory_size); |
@@ -310,10 +264,6 @@ |
// Tests that duplication and closing has the right effect on Mach reference |
// counts. |
TEST_F(SharedMemoryMacMultiProcessTest, MachDuplicateAndClose) { |
- // Mach-based SharedMemory isn't support on OSX 10.6. |
- if (mac::IsOSSnowLeopard()) |
- return; |
- |
mach_msg_type_number_t active_name_count = GetActiveNameCount(); |
// Making a new SharedMemoryHandle increments the name count. |
@@ -341,10 +291,6 @@ |
// ownership, and that destroying the SharedMemory closes the SharedMemoryHandle |
// as well. |
TEST_F(SharedMemoryMacMultiProcessTest, MachSharedMemoryTakesOwnership) { |
- // Mach-based SharedMemory isn't support on OSX 10.6. |
- if (mac::IsOSSnowLeopard()) |
- return; |
- |
mach_msg_type_number_t active_name_count = GetActiveNameCount(); |
// Making a new SharedMemoryHandle increments the name count. |
@@ -364,113 +310,17 @@ |
// Tests that the read-only flag works. |
TEST_F(SharedMemoryMacMultiProcessTest, MachReadOnly) { |
- // Mach-based SharedMemory isn't support on OSX 10.6. |
- if (mac::IsOSSnowLeopard()) |
- return; |
- |
- scoped_ptr<SharedMemory> shared_memory( |
- CreateSharedMemory(s_memory_size).Pass()); |
- |
- SharedMemoryHandle shm2 = shared_memory->handle().Duplicate(); |
+ SharedMemoryHandle shm(s_memory_size); |
+ ASSERT_TRUE(shm.IsValid()); |
+ SharedMemory shared_memory(shm, false); |
+ shared_memory.Map(s_memory_size); |
+ memset(shared_memory.memory(), 'a', s_memory_size); |
+ |
+ SharedMemoryHandle shm2 = shm.Duplicate(); |
ASSERT_TRUE(shm2.IsValid()); |
- SharedMemory shared_memory2(shm2, true); |
+ SharedMemory shared_memory2(shm, true); |
shared_memory2.Map(s_memory_size); |
ASSERT_DEATH(memset(shared_memory2.memory(), 'b', s_memory_size), ""); |
} |
-// Tests that the method ShareToProcess() works. |
-TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcess) { |
- // Mach-based SharedMemory isn't support on OSX 10.6. |
- if (mac::IsOSSnowLeopard()) |
- return; |
- |
- mach_msg_type_number_t active_name_count = GetActiveNameCount(); |
- |
- { |
- scoped_ptr<SharedMemory> shared_memory( |
- CreateSharedMemory(s_memory_size).Pass()); |
- |
- SharedMemoryHandle shm2; |
- ASSERT_TRUE(shared_memory->ShareToProcess(GetCurrentProcId(), &shm2)); |
- ASSERT_TRUE(shm2.IsValid()); |
- SharedMemory shared_memory2(shm2, true); |
- shared_memory2.Map(s_memory_size); |
- |
- ASSERT_EQ(0, memcmp(shared_memory->memory(), shared_memory2.memory(), |
- s_memory_size)); |
- } |
- |
- EXPECT_EQ(active_name_count, GetActiveNameCount()); |
-} |
- |
-// Tests that the method ShareReadOnlyToProcess() creates a memory object that |
-// is read only. |
-TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcessReadonly) { |
- // Mach-based SharedMemory isn't support on OSX 10.6. |
- if (mac::IsOSSnowLeopard()) |
- return; |
- |
- scoped_ptr<SharedMemory> shared_memory( |
- CreateSharedMemory(s_memory_size).Pass()); |
- |
- // Check the protection levels. |
- int current_prot, max_prot; |
- ASSERT_TRUE(GetProtections(shared_memory->memory(), |
- shared_memory->mapped_size(), ¤t_prot, |
- &max_prot)); |
- ASSERT_EQ(VM_PROT_READ | VM_PROT_WRITE, current_prot); |
- ASSERT_EQ(VM_PROT_READ | VM_PROT_WRITE, max_prot); |
- |
- // Make a new memory object. |
- SharedMemoryHandle shm2; |
- ASSERT_TRUE(shared_memory->ShareReadOnlyToProcess(GetCurrentProcId(), &shm2)); |
- ASSERT_TRUE(shm2.IsValid()); |
- |
- // Mapping with |readonly| set to |false| should fail. |
- SharedMemory shared_memory2(shm2, false); |
- shared_memory2.Map(s_memory_size); |
- ASSERT_EQ(nullptr, shared_memory2.memory()); |
- |
- // Now trying mapping with |readonly| set to |true|. |
- SharedMemory shared_memory3(shm2.Duplicate(), true); |
- shared_memory3.Map(s_memory_size); |
- ASSERT_NE(nullptr, shared_memory3.memory()); |
- |
- // Check the protection levels. |
- ASSERT_TRUE(GetProtections(shared_memory3.memory(), |
- shared_memory3.mapped_size(), ¤t_prot, |
- &max_prot)); |
- ASSERT_EQ(VM_PROT_READ, current_prot); |
- ASSERT_EQ(VM_PROT_READ, max_prot); |
- |
- // The memory should still be readonly, since the underlying memory object |
- // is readonly. |
- ASSERT_DEATH(memset(shared_memory2.memory(), 'b', s_memory_size), ""); |
-} |
- |
-// Tests that the method ShareReadOnlyToProcess() doesn't leak. |
-TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcessReadonlyLeak) { |
- // Mach-based SharedMemory isn't support on OSX 10.6. |
- if (mac::IsOSSnowLeopard()) |
- return; |
- |
- mach_msg_type_number_t active_name_count = GetActiveNameCount(); |
- |
- { |
- scoped_ptr<SharedMemory> shared_memory( |
- CreateSharedMemory(s_memory_size).Pass()); |
- |
- SharedMemoryHandle shm2; |
- ASSERT_TRUE( |
- shared_memory->ShareReadOnlyToProcess(GetCurrentProcId(), &shm2)); |
- ASSERT_TRUE(shm2.IsValid()); |
- |
- // Intentionally map with |readonly| set to |false|. |
- SharedMemory shared_memory2(shm2, false); |
- shared_memory2.Map(s_memory_size); |
- } |
- |
- EXPECT_EQ(active_name_count, GetActiveNameCount()); |
-} |
- |
} // namespace base |