| Index: chrome/browser/devtools/device/android_web_socket.cc | 
| diff --git a/chrome/browser/devtools/device/android_web_socket.cc b/chrome/browser/devtools/device/android_web_socket.cc | 
| index 98bae3d31d826ac98ea2d08966f81791aee37cc2..fba70b2f8c44ffe17dd743488fd3ade9e97a68f1 100644 | 
| --- a/chrome/browser/devtools/device/android_web_socket.cc | 
| +++ b/chrome/browser/devtools/device/android_web_socket.cc | 
| @@ -2,9 +2,11 @@ | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| +#include "base/location.h" | 
| #include "base/memory/weak_ptr.h" | 
| -#include "base/message_loop/message_loop.h" | 
| #include "base/rand_util.h" | 
| +#include "base/single_thread_task_runner.h" | 
| +#include "base/thread_task_runner_handle.h" | 
| #include "chrome/browser/devtools/device/android_device_manager.h" | 
| #include "content/public/browser/browser_thread.h" | 
| #include "net/base/io_buffer.h" | 
| @@ -23,16 +25,17 @@ const int kBufferSize = 16 * 1024; | 
|  | 
| class AndroidDeviceManager::AndroidWebSocket::WebSocketImpl { | 
| public: | 
| -  WebSocketImpl(scoped_refptr<base::MessageLoopProxy> response_message_loop, | 
| -                 base::WeakPtr<AndroidWebSocket> weak_socket, | 
| -                 const std::string& extensions, | 
| -                 const std::string& body_head, | 
| -                 scoped_ptr<net::StreamSocket> socket) | 
| -       : response_message_loop_(response_message_loop), | 
| -         weak_socket_(weak_socket), | 
| -         socket_(socket.Pass()), | 
| -         encoder_(net::WebSocketEncoder::CreateClient(extensions)), | 
| -         response_buffer_(body_head) { | 
| +  WebSocketImpl( | 
| +      scoped_refptr<base::SingleThreadTaskRunner> response_task_runner, | 
| +      base::WeakPtr<AndroidWebSocket> weak_socket, | 
| +      const std::string& extensions, | 
| +      const std::string& body_head, | 
| +      scoped_ptr<net::StreamSocket> socket) | 
| +      : response_task_runner_(response_task_runner), | 
| +        weak_socket_(weak_socket), | 
| +        socket_(socket.Pass()), | 
| +        encoder_(net::WebSocketEncoder::CreateClient(extensions)), | 
| +        response_buffer_(body_head) { | 
| thread_checker_.DetachFromThread(); | 
| } | 
|  | 
| @@ -90,7 +93,7 @@ class AndroidDeviceManager::AndroidWebSocket::WebSocketImpl { | 
|  | 
| while (parse_result == WebSocket::FRAME_OK) { | 
| response_buffer_ = response_buffer_.substr(bytes_consumed); | 
| -      response_message_loop_->PostTask( | 
| +      response_task_runner_->PostTask( | 
| FROM_HERE, | 
| base::Bind(&AndroidWebSocket::OnFrameRead, weak_socket_, output)); | 
| parse_result = encoder_->DecodeFrame( | 
| @@ -127,12 +130,11 @@ class AndroidDeviceManager::AndroidWebSocket::WebSocketImpl { | 
| void Disconnect() { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| socket_.reset(); | 
| -    response_message_loop_->PostTask( | 
| -        FROM_HERE, | 
| -        base::Bind(&AndroidWebSocket::OnSocketClosed, weak_socket_)); | 
| +    response_task_runner_->PostTask( | 
| +        FROM_HERE, base::Bind(&AndroidWebSocket::OnSocketClosed, weak_socket_)); | 
| } | 
|  | 
| -  scoped_refptr<base::MessageLoopProxy> response_message_loop_; | 
| +  scoped_refptr<base::SingleThreadTaskRunner> response_task_runner_; | 
| base::WeakPtr<AndroidWebSocket> weak_socket_; | 
| scoped_ptr<net::StreamSocket> socket_; | 
| scoped_ptr<net::WebSocketEncoder> encoder_; | 
| @@ -170,10 +172,9 @@ void AndroidDeviceManager::AndroidWebSocket::SendFrame( | 
| DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| DCHECK(socket_impl_); | 
| DCHECK(device_); | 
| -  device_->message_loop_proxy_->PostTask( | 
| -      FROM_HERE, | 
| -      base::Bind(&WebSocketImpl::SendFrame, | 
| -                 base::Unretained(socket_impl_), message)); | 
| +  device_->task_runner_->PostTask( | 
| +      FROM_HERE, base::Bind(&WebSocketImpl::SendFrame, | 
| +                            base::Unretained(socket_impl_), message)); | 
| } | 
|  | 
| void AndroidDeviceManager::AndroidWebSocket::Connected( | 
| @@ -186,15 +187,12 @@ void AndroidDeviceManager::AndroidWebSocket::Connected( | 
| OnSocketClosed(); | 
| return; | 
| } | 
| -  socket_impl_ = new WebSocketImpl(base::MessageLoopProxy::current(), | 
| -                                   weak_factory_.GetWeakPtr(), | 
| -                                   extensions, | 
| -                                   body_head, | 
| -                                   socket.Pass()); | 
| -  device_->message_loop_proxy_->PostTask( | 
| -      FROM_HERE, | 
| -      base::Bind(&WebSocketImpl::StartListening, | 
| -                 base::Unretained(socket_impl_))); | 
| +  socket_impl_ = new WebSocketImpl(base::ThreadTaskRunnerHandle::Get(), | 
| +                                   weak_factory_.GetWeakPtr(), extensions, | 
| +                                   body_head, socket.Pass()); | 
| +  device_->task_runner_->PostTask(FROM_HERE, | 
| +                                  base::Bind(&WebSocketImpl::StartListening, | 
| +                                             base::Unretained(socket_impl_))); | 
| delegate_->OnSocketOpened(); | 
| } | 
|  | 
| @@ -214,7 +212,7 @@ void AndroidDeviceManager::AndroidWebSocket::Terminate() { | 
| DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| if (socket_impl_) { | 
| DCHECK(device_); | 
| -    device_->message_loop_proxy_->DeleteSoon(FROM_HERE, socket_impl_); | 
| +    device_->task_runner_->DeleteSoon(FROM_HERE, socket_impl_); | 
| socket_impl_ = nullptr; | 
| } | 
| if (device_) { | 
|  |