| Index: content/browser/device_sensors/data_fetcher_shared_memory_base.cc
 | 
| diff --git a/content/browser/device_sensors/data_fetcher_shared_memory_base.cc b/content/browser/device_sensors/data_fetcher_shared_memory_base.cc
 | 
| index 053807680fd4f211a38492dbfd3e89b54f4da4d4..6a746fafe0987581ebc68baabd212986208c3b08 100644
 | 
| --- a/content/browser/device_sensors/data_fetcher_shared_memory_base.cc
 | 
| +++ b/content/browser/device_sensors/data_fetcher_shared_memory_base.cc
 | 
| @@ -119,9 +119,6 @@ DataFetcherSharedMemoryBase::~DataFetcherSharedMemoryBase() {
 | 
|    // make sure polling thread stops asap.
 | 
|    if (polling_thread_)
 | 
|      polling_thread_->Stop();
 | 
| -
 | 
| -  STLDeleteContainerPairSecondPointers(shared_memory_map_.begin(),
 | 
| -      shared_memory_map_.end());
 | 
|  }
 | 
|  
 | 
|  bool DataFetcherSharedMemoryBase::StartFetchingDeviceData(
 | 
| @@ -183,16 +180,11 @@ void DataFetcherSharedMemoryBase::Shutdown() {
 | 
|    StopFetchingDeviceData(CONSUMER_TYPE_LIGHT);
 | 
|  }
 | 
|  
 | 
| -base::SharedMemoryHandle
 | 
| -DataFetcherSharedMemoryBase::GetSharedMemoryHandleForProcess(
 | 
| -    ConsumerType consumer_type, base::ProcessHandle process) {
 | 
| -  SharedMemoryMap::const_iterator it = shared_memory_map_.find(consumer_type);
 | 
| -  if (it == shared_memory_map_.end())
 | 
| -    return base::SharedMemory::NULLHandle();
 | 
| -
 | 
| -  base::SharedMemoryHandle renderer_handle;
 | 
| -  it->second->ShareToProcess(process, &renderer_handle);
 | 
| -  return renderer_handle;
 | 
| +mojo::ScopedSharedBufferHandle
 | 
| +DataFetcherSharedMemoryBase::GetSharedMemoryHandle(ConsumerType consumer_type) {
 | 
| +  auto it = shared_memory_map_.find(consumer_type);
 | 
| +  DCHECK(it != shared_memory_map_.end());
 | 
| +  return it->second.first->Clone();
 | 
|  }
 | 
|  
 | 
|  bool DataFetcherSharedMemoryBase::InitAndStartPollingThreadIfNecessary() {
 | 
| @@ -222,34 +214,26 @@ base::TimeDelta DataFetcherSharedMemoryBase::GetInterval() const {
 | 
|    return base::TimeDelta::FromMicroseconds(kInertialSensorIntervalMicroseconds);
 | 
|  }
 | 
|  
 | 
| -base::SharedMemory* DataFetcherSharedMemoryBase::GetSharedMemory(
 | 
| +void* DataFetcherSharedMemoryBase::GetSharedMemoryBuffer(
 | 
|      ConsumerType consumer_type) {
 | 
| -  SharedMemoryMap::const_iterator it = shared_memory_map_.find(consumer_type);
 | 
| +  auto it = shared_memory_map_.find(consumer_type);
 | 
|    if (it != shared_memory_map_.end())
 | 
| -    return it->second;
 | 
| +    return it->second.second.get();
 | 
|  
 | 
|    size_t buffer_size = GetConsumerSharedMemoryBufferSize(consumer_type);
 | 
|    if (buffer_size == 0)
 | 
|      return nullptr;
 | 
|  
 | 
| -  std::unique_ptr<base::SharedMemory> new_shared_mem(new base::SharedMemory);
 | 
| -  if (new_shared_mem->CreateAndMapAnonymous(buffer_size)) {
 | 
| -    if (void* mem = new_shared_mem->memory()) {
 | 
| -      memset(mem, 0, buffer_size);
 | 
| -      base::SharedMemory* shared_mem = new_shared_mem.release();
 | 
| -      shared_memory_map_[consumer_type] = shared_mem;
 | 
| -      return shared_mem;
 | 
| -    }
 | 
| -  }
 | 
| -  LOG(ERROR) << "Failed to initialize shared memory";
 | 
| -  return nullptr;
 | 
| -}
 | 
| -
 | 
| -void* DataFetcherSharedMemoryBase::GetSharedMemoryBuffer(
 | 
| -    ConsumerType consumer_type) {
 | 
| -  if (base::SharedMemory* shared_memory = GetSharedMemory(consumer_type))
 | 
| -    return shared_memory->memory();
 | 
| -  return nullptr;
 | 
| +  mojo::ScopedSharedBufferHandle buffer =
 | 
| +      mojo::SharedBufferHandle::Create(buffer_size);
 | 
| +  mojo::ScopedSharedBufferMapping mapping = buffer->Map(buffer_size);
 | 
| +  if (!mapping)
 | 
| +    return nullptr;
 | 
| +  void* mem = mapping.get();
 | 
| +  memset(mem, 0, buffer_size);
 | 
| +  shared_memory_map_[consumer_type] =
 | 
| +      std::make_pair(std::move(buffer), std::move(mapping));
 | 
| +  return mem;
 | 
|  }
 | 
|  
 | 
|  base::MessageLoop* DataFetcherSharedMemoryBase::GetPollingMessageLoop() const {
 | 
| 
 |