| Index: base/memory/shared_memory_win.cc
 | 
| diff --git a/base/memory/shared_memory_win.cc b/base/memory/shared_memory_win.cc
 | 
| index 1dfa10fbe58b54b689d69c7ccde9e03015f9e758..54b8f688de4114b73faf947d9322e77e49bf61f0 100644
 | 
| --- a/base/memory/shared_memory_win.cc
 | 
| +++ b/base/memory/shared_memory_win.cc
 | 
| @@ -152,12 +152,11 @@ SharedMemory::SharedMemory(const std::wstring& name)
 | 
|  
 | 
|  SharedMemory::SharedMemory(const SharedMemoryHandle& handle, bool read_only)
 | 
|      : external_section_(true),
 | 
| +      shm_(handle),
 | 
|        mapped_size_(0),
 | 
|        memory_(NULL),
 | 
|        read_only_(read_only),
 | 
| -      requested_size_(0) {
 | 
| -  mapped_file_.Set(handle.GetHandle());
 | 
| -}
 | 
| +      requested_size_(0) {}
 | 
|  
 | 
|  SharedMemory::~SharedMemory() {
 | 
|    Unmap();
 | 
| @@ -196,7 +195,7 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
 | 
|    // wasting 32k per mapping on average.
 | 
|    static const size_t kSectionMask = 65536 - 1;
 | 
|    DCHECK(!options.executable);
 | 
| -  DCHECK(!mapped_file_.Get());
 | 
| +  DCHECK(!shm_.IsValid());
 | 
|    if (options.size == 0) {
 | 
|      LogError(SIZE_ZERO, 0);
 | 
|      return false;
 | 
| @@ -241,9 +240,9 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
 | 
|                           rand_values[2], rand_values[3]);
 | 
|    }
 | 
|    DCHECK(!name_.empty());
 | 
| -  mapped_file_.Set(CreateFileMappingWithReducedPermissions(&sa, rounded_size,
 | 
| -                                                           name_.c_str()));
 | 
| -  if (!mapped_file_.IsValid()) {
 | 
| +  shm_ = SharedMemoryHandle(CreateFileMappingWithReducedPermissions(
 | 
| +      &sa, rounded_size, name_.c_str()));
 | 
| +  if (!shm_.IsValid()) {
 | 
|      // The error is logged within CreateFileMappingWithReducedPermissions().
 | 
|      return false;
 | 
|    }
 | 
| @@ -274,15 +273,15 @@ bool SharedMemory::Delete(const std::string& name) {
 | 
|  }
 | 
|  
 | 
|  bool SharedMemory::Open(const std::string& name, bool read_only) {
 | 
| -  DCHECK(!mapped_file_.Get());
 | 
| +  DCHECK(!shm_.IsValid());
 | 
|    DWORD access = FILE_MAP_READ | SECTION_QUERY;
 | 
|    if (!read_only)
 | 
|      access |= FILE_MAP_WRITE;
 | 
|    name_ = ASCIIToUTF16(name);
 | 
|    read_only_ = read_only;
 | 
| -  mapped_file_.Set(
 | 
| +  shm_ = SharedMemoryHandle(
 | 
|        OpenFileMapping(access, false, name_.empty() ? nullptr : name_.c_str()));
 | 
| -  if (!mapped_file_.IsValid())
 | 
| +  if (!shm_.IsValid())
 | 
|      return false;
 | 
|    // If a name specified assume it's an external section.
 | 
|    if (!name_.empty())
 | 
| @@ -292,7 +291,7 @@ bool SharedMemory::Open(const std::string& name, bool read_only) {
 | 
|  }
 | 
|  
 | 
|  bool SharedMemory::MapAt(off_t offset, size_t bytes) {
 | 
| -  if (!mapped_file_.Get())
 | 
| +  if (!shm_.IsValid())
 | 
|      return false;
 | 
|  
 | 
|    if (bytes > static_cast<size_t>(std::numeric_limits<int>::max()))
 | 
| @@ -301,11 +300,11 @@ bool SharedMemory::MapAt(off_t offset, size_t bytes) {
 | 
|    if (memory_)
 | 
|      return false;
 | 
|  
 | 
| -  if (external_section_ && !IsSectionSafeToMap(mapped_file_.Get()))
 | 
| +  if (external_section_ && !IsSectionSafeToMap(shm_.GetHandle()))
 | 
|      return false;
 | 
|  
 | 
|    memory_ = MapViewOfFile(
 | 
| -      mapped_file_.Get(),
 | 
| +      shm_.GetHandle(),
 | 
|        read_only_ ? FILE_MAP_READ : FILE_MAP_READ | FILE_MAP_WRITE,
 | 
|        static_cast<uint64_t>(offset) >> 32, static_cast<DWORD>(offset), bytes);
 | 
|    if (memory_ != NULL) {
 | 
| @@ -329,7 +328,7 @@ bool SharedMemory::Unmap() {
 | 
|  SharedMemoryHandle SharedMemory::GetReadOnlyHandle() {
 | 
|    HANDLE result;
 | 
|    ProcessHandle process = GetCurrentProcess();
 | 
| -  if (!::DuplicateHandle(process, mapped_file_.Get(), process, &result,
 | 
| +  if (!::DuplicateHandle(process, shm_.GetHandle(), process, &result,
 | 
|                           FILE_MAP_READ | SECTION_QUERY, FALSE, 0)) {
 | 
|      return SharedMemoryHandle();
 | 
|    }
 | 
| @@ -339,16 +338,18 @@ SharedMemoryHandle SharedMemory::GetReadOnlyHandle() {
 | 
|  }
 | 
|  
 | 
|  void SharedMemory::Close() {
 | 
| -  mapped_file_.Close();
 | 
| +  shm_.Close();
 | 
| +  shm_ = SharedMemoryHandle();
 | 
|  }
 | 
|  
 | 
|  SharedMemoryHandle SharedMemory::handle() const {
 | 
| -  return SharedMemoryHandle(mapped_file_.Get());
 | 
| +  return shm_;
 | 
|  }
 | 
|  
 | 
|  SharedMemoryHandle SharedMemory::TakeHandle() {
 | 
| -  SharedMemoryHandle handle(mapped_file_.Take());
 | 
| +  SharedMemoryHandle handle(shm_);
 | 
|    handle.SetOwnershipPassesToIPC(true);
 | 
| +  shm_ = SharedMemoryHandle();
 | 
|    memory_ = nullptr;
 | 
|    mapped_size_ = 0;
 | 
|    return handle;
 | 
| 
 |