Chromium Code Reviews| 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..eb30f66fe81eadc1fc95a9b7b61417f2e3c2e6cc 100644 |
| --- a/chrome/browser/devtools/device/android_web_socket.cc |
| +++ b/chrome/browser/devtools/device/android_web_socket.cc |
| @@ -23,22 +23,29 @@ const int kBufferSize = 16 * 1024; |
| class AndroidDeviceManager::AndroidWebSocket::WebSocketImpl { |
| public: |
| - WebSocketImpl(scoped_refptr<base::MessageLoopProxy> response_message_loop, |
| + 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)) { |
| + encoder_(net::WebSocketEncoder::CreateClient(extensions)), |
| + response_buffer_(body_head) { |
| thread_checker_.DetachFromThread(); |
| } |
| void StartListening() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| DCHECK(socket_); |
| + |
| scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); |
| - Read(buffer); |
| + |
| + if (response_buffer_.size() > 0) |
| + ProcessResponseBuffer(buffer); |
| + else |
| + Read(buffer); |
| } |
| void SendFrame(const std::string& message) { |
| @@ -54,24 +61,17 @@ class AndroidDeviceManager::AndroidWebSocket::WebSocketImpl { |
| } |
| private: |
| - void Read(scoped_refptr<net::IOBuffer> response_buffer) { |
| + void Read(scoped_refptr<net::IOBuffer> response_io_buffer) { |
| int result = socket_->Read( |
| - response_buffer.get(), |
| + response_io_buffer.get(), |
| kBufferSize, |
| base::Bind(&WebSocketImpl::OnBytesRead, |
| - base::Unretained(this), response_buffer)); |
| + base::Unretained(this), response_io_buffer)); |
| if (result != net::ERR_IO_PENDING) |
| - OnBytesRead(response_buffer, result); |
| + OnBytesRead(response_io_buffer, result); |
| } |
| - void OnBytesRead(scoped_refptr<net::IOBuffer> response_buffer, int result) { |
| - DCHECK(thread_checker_.CalledOnValidThread()); |
| - if (result <= 0) { |
| - Disconnect(); |
| - return; |
| - } |
| - response_buffer_.append(response_buffer->data(), result); |
| - |
| + void ProcessResponseBuffer(scoped_refptr<net::IOBuffer> response_io_buffer) { |
|
dgozman
2015/04/09 14:05:22
I'd rename this to |io_buffer| to better different
tyoshino (SeeGerritForStatus)
2015/04/14 12:24:33
Done.
|
| int bytes_consumed; |
| std::string output; |
| WebSocket::ParseResult parse_result = encoder_->DecodeFrame( |
| @@ -91,7 +91,19 @@ class AndroidDeviceManager::AndroidWebSocket::WebSocketImpl { |
| Disconnect(); |
| return; |
| } |
| - Read(response_buffer); |
| + Read(response_io_buffer); |
| + } |
| + |
| + void OnBytesRead(scoped_refptr<net::IOBuffer> response_io_buffer, |
|
dgozman
2015/04/09 14:05:22
nit: mind moving this code back for cleaner diff?
tyoshino (SeeGerritForStatus)
2015/04/14 12:24:33
Done.
|
| + int result) { |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + if (result <= 0) { |
| + Disconnect(); |
| + return; |
| + } |
| + response_buffer_.append(response_io_buffer->data(), result); |
| + |
| + ProcessResponseBuffer(response_io_buffer); |
| } |
| void SendPendingRequests(int result) { |
| @@ -168,6 +180,7 @@ void AndroidDeviceManager::AndroidWebSocket::SendFrame( |
| void AndroidDeviceManager::AndroidWebSocket::Connected( |
| int result, |
| const std::string& extensions, |
| + const std::string& body_head, |
| scoped_ptr<net::StreamSocket> socket) { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| if (result != net::OK || !socket.get()) { |
| @@ -177,6 +190,7 @@ void AndroidDeviceManager::AndroidWebSocket::Connected( |
| socket_impl_ = new WebSocketImpl(base::MessageLoopProxy::current(), |
| weak_factory_.GetWeakPtr(), |
| extensions, |
| + body_head, |
| socket.Pass()); |
| device_->message_loop_proxy_->PostTask( |
| FROM_HERE, |