| Index: gpu/command_buffer/client/gl_in_process_context.cc | 
| diff --git a/gpu/command_buffer/client/gl_in_process_context.cc b/gpu/command_buffer/client/gl_in_process_context.cc | 
| index c87f23396c7d7d5096f012fd9d4962715d78ac8d..b70f57b6c43ac1f428978f00ae441d92c622ff3a 100644 | 
| --- a/gpu/command_buffer/client/gl_in_process_context.cc | 
| +++ b/gpu/command_buffer/client/gl_in_process_context.cc | 
| @@ -26,6 +26,7 @@ | 
| #include "base/macros.h" | 
| #include "base/memory/weak_ptr.h" | 
| #include "base/message_loop/message_loop.h" | 
| +#include "base/threading/thread_task_runner_handle.h" | 
| #include "gpu/command_buffer/client/gles2_cmd_helper.h" | 
| #include "gpu/command_buffer/client/gles2_implementation.h" | 
| #include "gpu/command_buffer/client/shared_memory_limits.h" | 
| @@ -103,6 +104,15 @@ bool GLInProcessContextImpl::Initialize( | 
| DCHECK_GE(attribs.offscreen_framebuffer_size.width(), 0); | 
| DCHECK_GE(attribs.offscreen_framebuffer_size.height(), 0); | 
|  | 
| +  // Setup the task runner which will be used by both the CommandBuffer and | 
| +  // GLES2Implementation. | 
| +  scoped_refptr<base::SingleThreadTaskRunner> task_runner; | 
| +  // If a surface is provided, we are running in a webview and do not have a | 
| +  // task runner. | 
| +  if (!surface) { | 
| +    task_runner = base::ThreadTaskRunnerHandle::Get(); | 
| +  } | 
| + | 
| command_buffer_.reset(new InProcessCommandBuffer(service)); | 
|  | 
| scoped_refptr<gles2::ShareGroup> share_group; | 
| @@ -116,13 +126,9 @@ bool GLInProcessContextImpl::Initialize( | 
| DCHECK(share_command_buffer); | 
| } | 
|  | 
| -  if (!command_buffer_->Initialize(surface, | 
| -                                   is_offscreen, | 
| -                                   window, | 
| -                                   attribs, | 
| -                                   share_command_buffer, | 
| -                                   gpu_memory_buffer_manager, | 
| -                                   image_factory)) { | 
| +  if (!command_buffer_->Initialize( | 
| +          surface, is_offscreen, window, attribs, share_command_buffer, | 
| +          gpu_memory_buffer_manager, image_factory, task_runner)) { | 
| DLOG(ERROR) << "Failed to initialize InProcessCommmandBuffer"; | 
| return false; | 
| } | 
| @@ -144,14 +150,11 @@ bool GLInProcessContextImpl::Initialize( | 
| const bool support_client_side_arrays = false; | 
|  | 
| // Create the object exposing the OpenGL API. | 
| -  gles2_implementation_.reset( | 
| -      new gles2::GLES2Implementation(gles2_helper_.get(), | 
| -                                     share_group.get(), | 
| -                                     transfer_buffer_.get(), | 
| -                                     bind_generates_resource, | 
| -                                     attribs.lose_context_when_out_of_memory, | 
| -                                     support_client_side_arrays, | 
| -                                     command_buffer_.get())); | 
| +  gles2_implementation_.reset(new gles2::GLES2Implementation( | 
| +      gles2_helper_.get(), share_group.get(), transfer_buffer_.get(), | 
| +      bind_generates_resource, attribs.lose_context_when_out_of_memory, | 
| +      support_client_side_arrays, command_buffer_.get(), | 
| +      std::move(task_runner))); | 
|  | 
| if (!gles2_implementation_->Initialize( | 
| mem_limits.start_transfer_buffer_size, | 
|  |