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

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

Issue 747903006: [DevTools] Support permessage-deflate in AndroidWebSocket. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@deflate
Patch Set: rebased Created 6 years 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
Index: chrome/browser/devtools/device/android_device_manager.cc
diff --git a/chrome/browser/devtools/device/android_device_manager.cc b/chrome/browser/devtools/device/android_device_manager.cc
index 6edd022ef3880f74f9514cffb6eafd01bcb14d02..e19c3bbeba5b9d6fc36f2fdba7041dd4764a98f4 100644
--- a/chrome/browser/devtools/device/android_device_manager.cc
+++ b/chrome/browser/devtools/device/android_device_manager.cc
@@ -28,6 +28,7 @@ static const char kWebSocketUpgradeRequest[] = "GET %s HTTP/1.1\r\n"
"Connection: Upgrade\r\n"
"Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
"Sec-WebSocket-Version: 13\r\n"
+ "%s"
"\r\n";
static void PostDeviceInfoCallback(
@@ -46,19 +47,21 @@ static void PostCommandCallback(
base::Bind(callback, result, response));
}
-static void PostSocketCallback(
+static void PostHttpUpgradeCallback(
scoped_refptr<base::MessageLoopProxy> response_message_loop,
- const AndroidDeviceManager::SocketCallback& callback,
+ const AndroidDeviceManager::HttpUpgradeCallback& callback,
int result,
+ const std::string& extensions,
scoped_ptr<net::StreamSocket> socket) {
response_message_loop->PostTask(
- FROM_HERE, base::Bind(callback, result, base::Passed(&socket)));
+ FROM_HERE,
+ base::Bind(callback, result, extensions, base::Passed(&socket)));
}
class HttpRequest {
public:
typedef AndroidDeviceManager::CommandCallback CommandCallback;
- typedef AndroidDeviceManager::SocketCallback SocketCallback;
+ typedef AndroidDeviceManager::HttpUpgradeCallback HttpUpgradeCallback;
static void CommandRequest(const std::string& request,
const CommandCallback& callback,
@@ -71,12 +74,12 @@ class HttpRequest {
new HttpRequest(socket.Pass(), request, callback);
}
- static void SocketRequest(const std::string& request,
- const SocketCallback& callback,
- int result,
- scoped_ptr<net::StreamSocket> socket) {
+ static void HttpUpgradeRequest(const std::string& request,
+ const HttpUpgradeCallback& callback,
+ int result,
+ scoped_ptr<net::StreamSocket> socket) {
if (result != net::OK) {
- callback.Run(result, make_scoped_ptr<net::StreamSocket>(NULL));
+ callback.Run(result, "", make_scoped_ptr<net::StreamSocket>(nullptr));
return;
}
new HttpRequest(socket.Pass(), request, callback);
@@ -94,9 +97,9 @@ class HttpRequest {
HttpRequest(scoped_ptr<net::StreamSocket> socket,
const std::string& request,
- const SocketCallback& callback)
+ const HttpUpgradeCallback& callback)
: socket_(socket.Pass()),
- socket_callback_(callback),
+ http_upgrade_callback_(callback),
body_pos_(0) {
SendRequest(request);
}
@@ -146,17 +149,11 @@ class HttpRequest {
int expected_length = 0;
if (bytes_total < 0) {
// TODO(kaznacheev): Use net::HttpResponseHeader to parse the header.
- size_t content_pos = response_.find("Content-Length:");
- if (content_pos != std::string::npos) {
- size_t endline_pos = response_.find("\n", content_pos);
- if (endline_pos != std::string::npos) {
- std::string len = response_.substr(content_pos + 15,
- endline_pos - content_pos - 15);
- base::TrimWhitespace(len, base::TRIM_ALL, &len);
- if (!base::StringToInt(len, &expected_length)) {
- CheckNetResultOrDie(net::ERR_FAILED);
- return;
- }
+ std::string content_length = ExtractHeader("Content-Length:");
+ if (!content_length.empty()) {
+ if (!base::StringToInt(content_length, &expected_length)) {
+ CheckNetResultOrDie(net::ERR_FAILED);
+ return;
}
}
@@ -168,10 +165,12 @@ class HttpRequest {
}
if (bytes_total == static_cast<int>(response_.length())) {
- if (!command_callback_.is_null())
+ if (!command_callback_.is_null()) {
command_callback_.Run(net::OK, response_.substr(body_pos_));
- else
- socket_callback_.Run(net::OK, socket_.Pass());
+ } else {
+ http_upgrade_callback_.Run(net::OK,
+ ExtractHeader("Sec-WebSocket-Extensions:"), socket_.Pass());
+ }
delete this;
return;
}
@@ -187,21 +186,38 @@ class HttpRequest {
OnResponseData(response_buffer, bytes_total, result);
}
+ std::string ExtractHeader(const std::string& header) {
+ size_t start_pos = response_.find(header);
+ if (start_pos == std::string::npos)
+ return std::string();
+
+ size_t endline_pos = response_.find("\n", start_pos);
+ if (endline_pos == std::string::npos)
+ return std::string();
+
+ std::string value = response_.substr(
+ start_pos + header.length(), endline_pos - start_pos - header.length());
+ base::TrimWhitespace(value, base::TRIM_ALL, &value);
+ return value;
+ }
+
bool CheckNetResultOrDie(int result) {
if (result >= 0)
return true;
- if (!command_callback_.is_null())
+ if (!command_callback_.is_null()) {
command_callback_.Run(result, std::string());
- else
- socket_callback_.Run(result, make_scoped_ptr<net::StreamSocket>(NULL));
+ } else {
+ http_upgrade_callback_.Run(
+ result, "", make_scoped_ptr<net::StreamSocket>(nullptr));
+ }
delete this;
return false;
}
scoped_ptr<net::StreamSocket> socket_;
std::string response_;
- AndroidDeviceManager::CommandCallback command_callback_;
- AndroidDeviceManager::SocketCallback socket_callback_;
+ CommandCallback command_callback_;
+ HttpUpgradeCallback http_upgrade_callback_;
size_t body_pos_;
};
@@ -305,12 +321,17 @@ void AndroidDeviceManager::DeviceProvider::HttpUpgrade(
const std::string& serial,
const std::string& socket_name,
const std::string& url,
- const SocketCallback& callback) {
+ const std::string& extensions,
+ const HttpUpgradeCallback& callback) {
+ std::string extensions_with_new_line =
+ extensions.empty() ? std::string() : extensions + "\r\n";
OpenSocket(
serial,
socket_name,
- base::Bind(&HttpRequest::SocketRequest,
- base::StringPrintf(kWebSocketUpgradeRequest, url.c_str()),
+ base::Bind(&HttpRequest::HttpUpgradeRequest,
+ base::StringPrintf(kWebSocketUpgradeRequest,
+ url.c_str(),
+ extensions_with_new_line.c_str()),
callback));
}
@@ -363,9 +384,11 @@ void AndroidDeviceManager::Device::SendJsonRequest(
callback)));
}
-void AndroidDeviceManager::Device::HttpUpgrade(const std::string& socket_name,
- const std::string& url,
- const SocketCallback& callback) {
+void AndroidDeviceManager::Device::HttpUpgrade(
+ const std::string& socket_name,
+ const std::string& url,
+ const std::string& extensions,
+ const HttpUpgradeCallback& callback) {
message_loop_proxy_->PostTask(
FROM_HERE,
base::Bind(&DeviceProvider::HttpUpgrade,
@@ -373,7 +396,8 @@ void AndroidDeviceManager::Device::HttpUpgrade(const std::string& socket_name,
serial_,
socket_name,
url,
- base::Bind(&PostSocketCallback,
+ extensions,
+ base::Bind(&PostHttpUpgradeCallback,
base::MessageLoopProxy::current(),
callback)));
}
« no previous file with comments | « chrome/browser/devtools/device/android_device_manager.h ('k') | chrome/browser/devtools/device/android_web_socket.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698