| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/devtools/device/android_device_manager.h" | 5 #include "chrome/browser/devtools/device/android_device_manager.h" |
| 6 | 6 |
| 7 #include "base/strings/string_number_conversions.h" | 7 #include "base/strings/string_number_conversions.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "net/base/io_buffer.h" | 10 #include "net/base/io_buffer.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 const std::string& response) { | 45 const std::string& response) { |
| 46 response_message_loop->PostTask(FROM_HERE, | 46 response_message_loop->PostTask(FROM_HERE, |
| 47 base::Bind(callback, result, response)); | 47 base::Bind(callback, result, response)); |
| 48 } | 48 } |
| 49 | 49 |
| 50 static void PostHttpUpgradeCallback( | 50 static void PostHttpUpgradeCallback( |
| 51 scoped_refptr<base::MessageLoopProxy> response_message_loop, | 51 scoped_refptr<base::MessageLoopProxy> response_message_loop, |
| 52 const AndroidDeviceManager::HttpUpgradeCallback& callback, | 52 const AndroidDeviceManager::HttpUpgradeCallback& callback, |
| 53 int result, | 53 int result, |
| 54 const std::string& extensions, | 54 const std::string& extensions, |
| 55 const std::string& leading_bytes, |
| 55 scoped_ptr<net::StreamSocket> socket) { | 56 scoped_ptr<net::StreamSocket> socket) { |
| 56 response_message_loop->PostTask( | 57 response_message_loop->PostTask( |
| 57 FROM_HERE, | 58 FROM_HERE, base::Bind(callback, result, extensions, leading_bytes, |
| 58 base::Bind(callback, result, extensions, base::Passed(&socket))); | 59 base::Passed(&socket))); |
| 59 } | 60 } |
| 60 | 61 |
| 61 class HttpRequest { | 62 class HttpRequest { |
| 62 public: | 63 public: |
| 63 typedef AndroidDeviceManager::CommandCallback CommandCallback; | 64 typedef AndroidDeviceManager::CommandCallback CommandCallback; |
| 64 typedef AndroidDeviceManager::HttpUpgradeCallback HttpUpgradeCallback; | 65 typedef AndroidDeviceManager::HttpUpgradeCallback HttpUpgradeCallback; |
| 65 | 66 |
| 66 static void CommandRequest(const std::string& request, | 67 static void CommandRequest(const std::string& request, |
| 67 const CommandCallback& callback, | 68 const CommandCallback& callback, |
| 68 int result, | 69 int result, |
| 69 scoped_ptr<net::StreamSocket> socket) { | 70 scoped_ptr<net::StreamSocket> socket) { |
| 70 if (result != net::OK) { | 71 if (result != net::OK) { |
| 71 callback.Run(result, std::string()); | 72 callback.Run(result, std::string()); |
| 72 return; | 73 return; |
| 73 } | 74 } |
| 74 new HttpRequest(socket.Pass(), request, callback); | 75 new HttpRequest(socket.Pass(), request, callback); |
| 75 } | 76 } |
| 76 | 77 |
| 77 static void HttpUpgradeRequest(const std::string& request, | 78 static void HttpUpgradeRequest(const std::string& request, |
| 78 const HttpUpgradeCallback& callback, | 79 const HttpUpgradeCallback& callback, |
| 79 int result, | 80 int result, |
| 80 scoped_ptr<net::StreamSocket> socket) { | 81 scoped_ptr<net::StreamSocket> socket) { |
| 81 if (result != net::OK) { | 82 if (result != net::OK) { |
| 82 callback.Run(result, "", make_scoped_ptr<net::StreamSocket>(nullptr)); | 83 callback.Run(result, "", "", make_scoped_ptr<net::StreamSocket>(nullptr)); |
| 83 return; | 84 return; |
| 84 } | 85 } |
| 85 new HttpRequest(socket.Pass(), request, callback); | 86 new HttpRequest(socket.Pass(), request, callback); |
| 86 } | 87 } |
| 87 | 88 |
| 88 private: | 89 private: |
| 89 HttpRequest(scoped_ptr<net::StreamSocket> socket, | 90 HttpRequest(scoped_ptr<net::StreamSocket> socket, |
| 90 const std::string& request, | 91 const std::string& request, |
| 91 const CommandCallback& callback) | 92 const CommandCallback& callback) |
| 92 : socket_(socket.Pass()), | 93 : socket_(socket.Pass()), |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 } | 158 } |
| 158 } | 159 } |
| 159 | 160 |
| 160 body_pos_ = response_.find("\r\n\r\n"); | 161 body_pos_ = response_.find("\r\n\r\n"); |
| 161 if (body_pos_ != std::string::npos) { | 162 if (body_pos_ != std::string::npos) { |
| 162 body_pos_ += 4; | 163 body_pos_ += 4; |
| 163 bytes_total = body_pos_ + expected_length; | 164 bytes_total = body_pos_ + expected_length; |
| 164 } | 165 } |
| 165 } | 166 } |
| 166 | 167 |
| 167 if (bytes_total == static_cast<int>(response_.length())) { | 168 if (!command_callback_.is_null() && |
| 168 if (!command_callback_.is_null()) { | 169 bytes_total == static_cast<int>(response_.length())) { |
| 169 command_callback_.Run(net::OK, response_.substr(body_pos_)); | 170 command_callback_.Run(net::OK, response_.substr(body_pos_)); |
| 170 } else { | |
| 171 http_upgrade_callback_.Run(net::OK, | |
| 172 ExtractHeader("Sec-WebSocket-Extensions:"), socket_.Pass()); | |
| 173 } | |
| 174 delete this; | 171 delete this; |
| 175 return; | 172 return; |
| 176 } | 173 } |
| 174 |
| 175 if (!http_upgrade_callback_.is_null() && body_pos_ != std::string::npos && |
| 176 body_pos_ > 0) { |
| 177 http_upgrade_callback_.Run(net::OK, |
| 178 ExtractHeader("Sec-WebSocket-Extensions:"), |
| 179 response_.substr(body_pos_), socket_.Pass()); |
| 180 delete this; |
| 181 return; |
| 182 } |
| 177 | 183 |
| 178 result = socket_->Read( | 184 result = socket_->Read( |
| 179 response_buffer.get(), | 185 response_buffer.get(), |
| 180 kBufferSize, | 186 kBufferSize, |
| 181 base::Bind(&HttpRequest::OnResponseData, | 187 base::Bind(&HttpRequest::OnResponseData, |
| 182 base::Unretained(this), | 188 base::Unretained(this), |
| 183 response_buffer, | 189 response_buffer, |
| 184 bytes_total)); | 190 bytes_total)); |
| 185 if (result != net::ERR_IO_PENDING) | 191 if (result != net::ERR_IO_PENDING) |
| 186 OnResponseData(response_buffer, bytes_total, result); | 192 OnResponseData(response_buffer, bytes_total, result); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 200 base::TrimWhitespace(value, base::TRIM_ALL, &value); | 206 base::TrimWhitespace(value, base::TRIM_ALL, &value); |
| 201 return value; | 207 return value; |
| 202 } | 208 } |
| 203 | 209 |
| 204 bool CheckNetResultOrDie(int result) { | 210 bool CheckNetResultOrDie(int result) { |
| 205 if (result >= 0) | 211 if (result >= 0) |
| 206 return true; | 212 return true; |
| 207 if (!command_callback_.is_null()) { | 213 if (!command_callback_.is_null()) { |
| 208 command_callback_.Run(result, std::string()); | 214 command_callback_.Run(result, std::string()); |
| 209 } else { | 215 } else { |
| 210 http_upgrade_callback_.Run( | 216 http_upgrade_callback_.Run(result, "", "", |
| 211 result, "", make_scoped_ptr<net::StreamSocket>(nullptr)); | 217 make_scoped_ptr<net::StreamSocket>(nullptr)); |
| 212 } | 218 } |
| 213 delete this; | 219 delete this; |
| 214 return false; | 220 return false; |
| 215 } | 221 } |
| 216 | 222 |
| 217 scoped_ptr<net::StreamSocket> socket_; | 223 scoped_ptr<net::StreamSocket> socket_; |
| 218 std::string response_; | 224 std::string response_; |
| 219 CommandCallback command_callback_; | 225 CommandCallback command_callback_; |
| 220 HttpUpgradeCallback http_upgrade_callback_; | 226 HttpUpgradeCallback http_upgrade_callback_; |
| 221 size_t body_pos_; | 227 size_t body_pos_; |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 it->provider, it->serial); | 529 it->provider, it->serial); |
| 524 } else { | 530 } else { |
| 525 device = found->second.get(); | 531 device = found->second.get(); |
| 526 } | 532 } |
| 527 response.push_back(device); | 533 response.push_back(device); |
| 528 new_devices[it->serial] = device->weak_factory_.GetWeakPtr(); | 534 new_devices[it->serial] = device->weak_factory_.GetWeakPtr(); |
| 529 } | 535 } |
| 530 devices_.swap(new_devices); | 536 devices_.swap(new_devices); |
| 531 callback.Run(response); | 537 callback.Run(response); |
| 532 } | 538 } |
| OLD | NEW |