| Index: chrome/plugin/command_buffer_stub.cc | 
| =================================================================== | 
| --- chrome/plugin/command_buffer_stub.cc	(revision 35153) | 
| +++ chrome/plugin/command_buffer_stub.cc	(working copy) | 
| @@ -8,6 +8,8 @@ | 
| #include "chrome/plugin/command_buffer_stub.h" | 
| #include "chrome/plugin/plugin_channel.h" | 
|  | 
| +using gpu::Buffer; | 
| + | 
| CommandBufferStub::CommandBufferStub(PluginChannel* channel, | 
| gfx::NativeView view) | 
| : channel_(channel), | 
| @@ -42,23 +44,25 @@ | 
| // Assume service is responsible for duplicating the handle from the calling | 
| // process. | 
| base::ProcessHandle peer_handle; | 
| -  if (base::OpenProcessHandle(channel_->peer_pid(), &peer_handle)) | 
| +  if (!base::OpenProcessHandle(channel_->peer_pid(), &peer_handle)) | 
| return; | 
|  | 
| command_buffer_.reset(new gpu::CommandBufferService); | 
|  | 
| // Initialize the CommandBufferService and GPUProcessor. | 
| -  base::SharedMemory* shared_memory = command_buffer_->Initialize(size); | 
| -  if (shared_memory) { | 
| -    processor_ = new gpu::GPUProcessor(command_buffer_.get()); | 
| -    if (processor_->Initialize(view_)) { | 
| -      command_buffer_->SetPutOffsetChangeCallback( | 
| -          NewCallback(processor_.get(), | 
| -                      &gpu::GPUProcessor::ProcessCommands)); | 
| -      shared_memory->ShareToProcess(peer_handle, ring_buffer); | 
| -    } else { | 
| -      processor_ = NULL; | 
| -      command_buffer_.reset(); | 
| +  if (command_buffer_->Initialize(size)) { | 
| +    Buffer buffer = command_buffer_->GetRingBuffer(); | 
| +    if (buffer.shared_memory) { | 
| +      processor_ = new gpu::GPUProcessor(command_buffer_.get()); | 
| +      if (processor_->Initialize(view_)) { | 
| +        command_buffer_->SetPutOffsetChangeCallback( | 
| +            NewCallback(processor_.get(), | 
| +                        &gpu::GPUProcessor::ProcessCommands)); | 
| +        buffer.shared_memory->ShareToProcess(peer_handle, ring_buffer); | 
| +      } else { | 
| +        processor_ = NULL; | 
| +        command_buffer_.reset(); | 
| +      } | 
| } | 
| } | 
|  | 
| @@ -85,19 +89,23 @@ | 
| command_buffer_->DestroyTransferBuffer(id); | 
| } | 
|  | 
| -void CommandBufferStub::OnGetTransferBuffer(int32 id, | 
| -                         base::SharedMemoryHandle* transfer_buffer) { | 
| +void CommandBufferStub::OnGetTransferBuffer( | 
| +    int32 id, | 
| +    base::SharedMemoryHandle* transfer_buffer, | 
| +    size_t* size) { | 
| *transfer_buffer = 0; | 
| +  *size = 0; | 
|  | 
| // Assume service is responsible for duplicating the handle to the calling | 
| // process. | 
| base::ProcessHandle peer_handle; | 
| -  if (base::OpenProcessHandle(channel_->peer_pid(), &peer_handle)) | 
| +  if (!base::OpenProcessHandle(channel_->peer_pid(), &peer_handle)) | 
| return; | 
|  | 
| -  base::SharedMemory* shared_memory = command_buffer_->GetTransferBuffer(id); | 
| -  if (shared_memory) { | 
| -    shared_memory->ShareToProcess(peer_handle, transfer_buffer); | 
| +  Buffer buffer = command_buffer_->GetTransferBuffer(id); | 
| +  if (buffer.shared_memory) { | 
| +    buffer.shared_memory->ShareToProcess(peer_handle, transfer_buffer); | 
| +    *size = buffer.shared_memory->max_size(); | 
| } | 
|  | 
| base::CloseProcessHandle(peer_handle); | 
|  |