| Index: ppapi/proxy/ppb_graphics_3d_proxy.cc
 | 
| diff --git a/ppapi/proxy/ppb_graphics_3d_proxy.cc b/ppapi/proxy/ppb_graphics_3d_proxy.cc
 | 
| index 847e294680d2acaa5b4a5d07f0c53f0fc4ed7215..20c55de7b9acb09cda5016fda16ddfcd672acc7b 100644
 | 
| --- a/ppapi/proxy/ppb_graphics_3d_proxy.cc
 | 
| +++ b/ppapi/proxy/ppb_graphics_3d_proxy.cc
 | 
| @@ -28,18 +28,10 @@ namespace {
 | 
|  const int32 kCommandBufferSize = 1024 * 1024;
 | 
|  const int32 kTransferBufferSize = 1024 * 1024;
 | 
|  
 | 
| -base::SharedMemoryHandle TransportSHMHandleFromInt(Dispatcher* dispatcher,
 | 
| -                                                   int shm_handle) {
 | 
| -  // TODO(piman): Change trusted interface to return a PP_FileHandle, those
 | 
| -  // casts are ugly.
 | 
| +base::SharedMemoryHandle TransportSHMHandle(Dispatcher* dispatcher,
 | 
| +                                            base::SharedMemory* shm) {
 | 
|    base::PlatformFile source =
 | 
| -#if defined(OS_WIN)
 | 
| -      reinterpret_cast<HANDLE>(static_cast<intptr_t>(shm_handle));
 | 
| -#elif defined(OS_POSIX)
 | 
| -      shm_handle;
 | 
| -#else
 | 
| -  #error Not implemented.
 | 
| -#endif
 | 
| +      IPC::PlatformFileForTransitToPlatformFile(shm->handle());
 | 
|    // Don't close the handle, it doesn't belong to us.
 | 
|    return dispatcher->ShareHandleWithRemote(source, false);
 | 
|  }
 | 
| @@ -84,20 +76,17 @@ PP_Bool Graphics3D::Flush(int32_t put_offset) {
 | 
|    return PP_FALSE;
 | 
|  }
 | 
|  
 | 
| -int32_t Graphics3D::CreateTransferBuffer(uint32_t size) {
 | 
| -  return PP_FALSE;
 | 
| +scoped_refptr<gpu::Buffer> Graphics3D::CreateTransferBuffer(
 | 
| +    uint32_t size,
 | 
| +    int32_t* id) {
 | 
| +  *id = -1;
 | 
| +  return NULL;
 | 
|  }
 | 
|  
 | 
|  PP_Bool Graphics3D::DestroyTransferBuffer(int32_t id) {
 | 
|    return PP_FALSE;
 | 
|  }
 | 
|  
 | 
| -PP_Bool Graphics3D::GetTransferBuffer(int32_t id,
 | 
| -                                      int* shm_handle,
 | 
| -                                      uint32_t* shm_size) {
 | 
| -  return PP_FALSE;
 | 
| -}
 | 
| -
 | 
|  gpu::CommandBuffer::State Graphics3D::WaitForTokenInRange(int32_t start,
 | 
|                                                            int32_t end) {
 | 
|    return GetErrorState();
 | 
| @@ -203,8 +192,6 @@ bool PPB_Graphics3D_Proxy::OnMessageReceived(const IPC::Message& msg) {
 | 
|                          OnMsgCreateTransferBuffer)
 | 
|      IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBGraphics3D_DestroyTransferBuffer,
 | 
|                          OnMsgDestroyTransferBuffer)
 | 
| -    IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBGraphics3D_GetTransferBuffer,
 | 
| -                        OnMsgGetTransferBuffer)
 | 
|      IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBGraphics3D_SwapBuffers,
 | 
|                          OnMsgSwapBuffers)
 | 
|      IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBGraphics3D_InsertSyncPoint,
 | 
| @@ -301,12 +288,22 @@ void PPB_Graphics3D_Proxy::OnMsgAsyncFlush(const HostResource& context,
 | 
|  void PPB_Graphics3D_Proxy::OnMsgCreateTransferBuffer(
 | 
|      const HostResource& context,
 | 
|      uint32 size,
 | 
| -    int32* id) {
 | 
| +    int32* id,
 | 
| +    ppapi::proxy::SerializedHandle* transfer_buffer) {
 | 
| +  transfer_buffer->set_null_shmem();
 | 
|    EnterHostFromHostResource<PPB_Graphics3D_API> enter(context);
 | 
| -  if (enter.succeeded())
 | 
| -    *id = enter.object()->CreateTransferBuffer(size);
 | 
| -  else
 | 
| +  if (enter.succeeded()) {
 | 
| +    scoped_refptr<gpu::Buffer> buffer =
 | 
| +        enter.object()->CreateTransferBuffer(size, id);
 | 
| +    if (!buffer)
 | 
| +      return;
 | 
| +    DCHECK(buffer->shared_memory());
 | 
| +    transfer_buffer->set_shmem(
 | 
| +        TransportSHMHandle(dispatcher(), buffer->shared_memory()),
 | 
| +        buffer->size());
 | 
| +  } else {
 | 
|      *id = -1;
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  void PPB_Graphics3D_Proxy::OnMsgDestroyTransferBuffer(
 | 
| @@ -317,23 +314,6 @@ void PPB_Graphics3D_Proxy::OnMsgDestroyTransferBuffer(
 | 
|      enter.object()->DestroyTransferBuffer(id);
 | 
|  }
 | 
|  
 | 
| -void PPB_Graphics3D_Proxy::OnMsgGetTransferBuffer(
 | 
| -    const HostResource& context,
 | 
| -    int32 id,
 | 
| -    ppapi::proxy::SerializedHandle* transfer_buffer) {
 | 
| -  transfer_buffer->set_null_shmem();
 | 
| -
 | 
| -  EnterHostFromHostResource<PPB_Graphics3D_API> enter(context);
 | 
| -  int shm_handle = 0;
 | 
| -  uint32_t shm_size = 0;
 | 
| -  if (enter.succeeded() &&
 | 
| -      enter.object()->GetTransferBuffer(id, &shm_handle, &shm_size)) {
 | 
| -    transfer_buffer->set_shmem(
 | 
| -        TransportSHMHandleFromInt(dispatcher(), shm_handle),
 | 
| -        shm_size);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
|  void PPB_Graphics3D_Proxy::OnMsgSwapBuffers(const HostResource& context) {
 | 
|    EnterHostFromHostResourceForceCallback<PPB_Graphics3D_API> enter(
 | 
|        context, callback_factory_,
 | 
| 
 |