| 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 84eea201d2b557555dc1ca2538f57e0e1cdef57b..dae8077127c79ec0bb5f2bfe0464b165c1a4cf47 100644 | 
| --- a/chrome/browser/devtools/device/android_web_socket.cc | 
| +++ b/chrome/browser/devtools/device/android_web_socket.cc | 
| @@ -23,14 +23,16 @@ 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, | 
| -                 scoped_ptr<net::StreamSocket> socket) | 
| -       : response_message_loop_(response_message_loop), | 
| -         weak_socket_(weak_socket), | 
| -         socket_(socket.Pass()), | 
| -         encoder_(net::WebSocketEncoder::CreateClient(extensions)) { | 
| +  WebSocketImpl(scoped_refptr<base::MessageLoopProxy> response_message_loop, | 
| +                base::WeakPtr<AndroidWebSocket> weak_socket, | 
| +                const std::string& extensions, | 
| +                const std::string& leading_bytes, | 
| +                scoped_ptr<net::StreamSocket> socket) | 
| +      : response_message_loop_(response_message_loop), | 
| +        weak_socket_(weak_socket), | 
| +        socket_(socket.Pass()), | 
| +        encoder_(net::WebSocketEncoder::CreateClient(extensions)), | 
| +        leading_bytes_(leading_bytes) { | 
| thread_checker_.DetachFromThread(); | 
| } | 
|  | 
| @@ -38,7 +40,12 @@ class AndroidDeviceManager::AndroidWebSocket::WebSocketImpl { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| DCHECK(socket_); | 
| scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); | 
| -    Read(buffer); | 
| +    if (leading_bytes_.length()) { | 
| +      leading_bytes_.swap(response_buffer_); | 
| +      ConsumeResponse(buffer); | 
| +    } else { | 
| +      Read(buffer); | 
| +    } | 
| } | 
|  | 
| void SendFrame(const std::string& message) { | 
| @@ -71,7 +78,10 @@ class AndroidDeviceManager::AndroidWebSocket::WebSocketImpl { | 
| return; | 
| } | 
| response_buffer_.append(response_buffer->data(), result); | 
| +    ConsumeResponse(response_buffer); | 
| +  } | 
|  | 
| +  void ConsumeResponse(scoped_refptr<net::IOBuffer> response_buffer) { | 
| int bytes_consumed; | 
| std::string output; | 
| WebSocket::ParseResult parse_result = encoder_->DecodeFrame( | 
| @@ -127,6 +137,7 @@ class AndroidDeviceManager::AndroidWebSocket::WebSocketImpl { | 
| scoped_ptr<net::WebSocketEncoder> encoder_; | 
| std::string response_buffer_; | 
| std::string request_buffer_; | 
| +  std::string leading_bytes_; | 
| base::ThreadChecker thread_checker_; | 
| DISALLOW_COPY_AND_ASSIGN(WebSocketImpl); | 
| }; | 
| @@ -168,6 +179,7 @@ void AndroidDeviceManager::AndroidWebSocket::SendFrame( | 
| void AndroidDeviceManager::AndroidWebSocket::Connected( | 
| int result, | 
| const std::string& extensions, | 
| +    const std::string& leading_bytes, | 
| scoped_ptr<net::StreamSocket> socket) { | 
| DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| if (result != net::OK || !socket.get()) { | 
| @@ -175,9 +187,8 @@ void AndroidDeviceManager::AndroidWebSocket::Connected( | 
| return; | 
| } | 
| socket_impl_ = new WebSocketImpl(base::MessageLoopProxy::current(), | 
| -                                   weak_factory_.GetWeakPtr(), | 
| -                                   extensions, | 
| -                                   socket.Pass()); | 
| +                                   weak_factory_.GetWeakPtr(), extensions, | 
| +                                   leading_bytes, socket.Pass()); | 
| device_->message_loop_proxy_->PostTask( | 
| FROM_HERE, | 
| base::Bind(&WebSocketImpl::StartListening, | 
|  |