| Index: ui/gfx/mojo/buffer_types_struct_traits.cc
 | 
| diff --git a/ui/gfx/mojo/buffer_types_struct_traits.cc b/ui/gfx/mojo/buffer_types_struct_traits.cc
 | 
| index 9450770235c362db5840257e14e9f6eb664f3071..6eb14953be589bc056068fcc2cdf7ae44014d092 100644
 | 
| --- a/ui/gfx/mojo/buffer_types_struct_traits.cc
 | 
| +++ b/ui/gfx/mojo/buffer_types_struct_traits.cc
 | 
| @@ -60,24 +60,14 @@ bool StructTraits<
 | 
|  #endif
 | 
|  }
 | 
|  
 | 
| -mojo::ScopedHandle StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
 | 
| -                                gfx::GpuMemoryBufferHandle>::
 | 
| +mojo::ScopedSharedBufferHandle
 | 
| +StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
 | 
| +             gfx::GpuMemoryBufferHandle>::
 | 
|      shared_memory_handle(const gfx::GpuMemoryBufferHandle& handle) {
 | 
|    if (handle.type != gfx::SHARED_MEMORY_BUFFER)
 | 
| -    return mojo::ScopedHandle();
 | 
| -#if defined(OS_MACOSX)
 | 
| -  base::SharedMemoryHandle shm_handle = handle.handle;
 | 
| -  size_t num_bytes = 0;
 | 
| -  if (!shm_handle.GetSize(&num_bytes))
 | 
| -    return mojo::ScopedHandle();
 | 
| -  mojo::ScopedSharedBufferHandle scoped_handle =
 | 
| -      mojo::WrapSharedMemoryHandle(shm_handle, num_bytes, false);
 | 
| -  mojo::Handle mojo_handle = scoped_handle.release();
 | 
| -  return mojo::MakeScopedHandle(mojo_handle);
 | 
| -#else  // defined(OS_MACOSX)
 | 
| -  base::PlatformFile platform_file = handle.handle.GetHandle();
 | 
| -  return mojo::WrapPlatformFile(platform_file);
 | 
| -#endif  // defined(OS_MACOSX)
 | 
| +    return mojo::ScopedSharedBufferHandle();
 | 
| +  return mojo::WrapSharedMemoryHandle(handle.handle, handle.handle.GetSize(),
 | 
| +                                      false);
 | 
|  }
 | 
|  
 | 
|  const gfx::NativePixmapHandle&
 | 
| @@ -112,35 +102,12 @@ bool StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
 | 
|      return false;
 | 
|  
 | 
|    if (out->type == gfx::SHARED_MEMORY_BUFFER) {
 | 
| -    mojo::ScopedHandle handle = data.TakeSharedMemoryHandle();
 | 
| +    mojo::ScopedSharedBufferHandle handle = data.TakeSharedMemoryHandle();
 | 
|      if (handle.is_valid()) {
 | 
| -#if defined(OS_MACOSX)
 | 
| -      mojo::Handle mojo_handle = handle.release();
 | 
| -      mojo::ScopedSharedBufferHandle buffer_handle =
 | 
| -          mojo::MakeScopedHandle(mojo::SharedBufferHandle(mojo_handle.value()));
 | 
|        MojoResult unwrap_result = mojo::UnwrapSharedMemoryHandle(
 | 
| -          std::move(buffer_handle), &out->handle, nullptr, nullptr);
 | 
| -      if (unwrap_result != MOJO_RESULT_OK)
 | 
| -        return false;
 | 
| -#else  // defined(OS_MACOSX)
 | 
| -      base::PlatformFile platform_file;
 | 
| -      MojoResult unwrap_result =
 | 
| -          mojo::UnwrapPlatformFile(std::move(handle), &platform_file);
 | 
| +          std::move(handle), &out->handle, nullptr, nullptr);
 | 
|        if (unwrap_result != MOJO_RESULT_OK)
 | 
|          return false;
 | 
| -      // TODO(rockot): Pass GUIDs through Mojo. https://crbug.com/713763.
 | 
| -      // TODO(erikchen): During serialization, the SharedMemoryHandle is
 | 
| -      // decomposed on Linux into a file_descriptor. The serialization path
 | 
| -      // should be changed to serialize a Mojo shared buffer instead.
 | 
| -      // https://crbug.com/713763.
 | 
| -      base::UnguessableToken guid = base::UnguessableToken::Create();
 | 
| -#if defined(OS_WIN)
 | 
| -      out->handle = base::SharedMemoryHandle(platform_file, guid);
 | 
| -#else
 | 
| -      out->handle = base::SharedMemoryHandle(
 | 
| -          base::FileDescriptor(platform_file, true), guid);
 | 
| -#endif
 | 
| -#endif  // defined(OS_MACOSX)
 | 
|      }
 | 
|  
 | 
|      out->offset = data.offset();
 | 
| 
 |