Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: chrome/browser/devtools/device/android_web_socket.cc

Issue 1071843003: Fix bug in AndroidDeviceManager::DeviceProvider::HttpUpgrade() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/devtools/device/android_device_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « chrome/browser/devtools/device/android_device_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698