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

Side by Side Diff: chrome/browser/devtools/device/android_device_manager.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 unified diff | Download patch
OLDNEW
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
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
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
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
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 }
OLDNEW
« 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