| Index: ipc/ipc_message.cc
 | 
| diff --git a/ipc/ipc_message.cc b/ipc/ipc_message.cc
 | 
| index 1ac4d6e3026a35e7817b068a95ba446e72d15b4f..7bd7a697c4fdc9d1c8cc649204de3228b76608d3 100644
 | 
| --- a/ipc/ipc_message.cc
 | 
| +++ b/ipc/ipc_message.cc
 | 
| @@ -9,6 +9,7 @@
 | 
|  #include "build/build_config.h"
 | 
|  
 | 
|  #if defined(OS_POSIX)
 | 
| +#include "base/file_descriptor_posix.h"
 | 
|  #include "ipc/file_descriptor_set_posix.h"
 | 
|  #endif
 | 
|  
 | 
| @@ -122,19 +123,21 @@ void Message::set_received_time(int64 time) const {
 | 
|  #endif
 | 
|  
 | 
|  #if defined(OS_POSIX)
 | 
| -bool Message::WriteFileDescriptor(const base::FileDescriptor& descriptor) {
 | 
| +bool Message::WriteFile(base::ScopedFD descriptor) {
 | 
|    // We write the index of the descriptor so that we don't have to
 | 
|    // keep the current descriptor as extra decoding state when deserialising.
 | 
|    WriteInt(file_descriptor_set()->size());
 | 
| -  if (descriptor.auto_close) {
 | 
| -    return file_descriptor_set()->AddAndAutoClose(descriptor.fd);
 | 
| -  } else {
 | 
| -    return file_descriptor_set()->Add(descriptor.fd);
 | 
| -  }
 | 
| +  return file_descriptor_set()->AddToOwn(descriptor.Pass());
 | 
|  }
 | 
|  
 | 
| -bool Message::ReadFileDescriptor(PickleIterator* iter,
 | 
| -                                 base::FileDescriptor* descriptor) const {
 | 
| +bool Message::WriteBorrowingFile(const base::PlatformFile& descriptor) {
 | 
| +  // We write the index of the descriptor so that we don't have to
 | 
| +  // keep the current descriptor as extra decoding state when deserialising.
 | 
| +  WriteInt(file_descriptor_set()->size());
 | 
| +  return file_descriptor_set()->AddToBorrow(descriptor);
 | 
| +}
 | 
| +
 | 
| +bool Message::ReadFile(PickleIterator* iter, base::ScopedFD* descriptor) const {
 | 
|    int descriptor_index;
 | 
|    if (!ReadInt(iter, &descriptor_index))
 | 
|      return false;
 | 
| @@ -143,10 +146,13 @@ bool Message::ReadFileDescriptor(PickleIterator* iter,
 | 
|    if (!file_descriptor_set)
 | 
|      return false;
 | 
|  
 | 
| -  descriptor->fd = file_descriptor_set->GetDescriptorAt(descriptor_index);
 | 
| -  descriptor->auto_close = true;
 | 
| +  base::PlatformFile file =
 | 
| +      file_descriptor_set->TakeDescriptorAt(descriptor_index);
 | 
| +  if (file < 0)
 | 
| +    return false;
 | 
|  
 | 
| -  return descriptor->fd >= 0;
 | 
| +  descriptor->reset(file);
 | 
| +  return true;
 | 
|  }
 | 
|  
 | 
|  bool Message::HasFileDescriptors() const {
 | 
| 
 |