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

Side by Side Diff: content/browser/devtools/tethering_handler.cc

Issue 558613002: [DevTools] Explicitly add Tethering domain to browser protocol. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « content/browser/devtools/tethering_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/devtools/tethering_handler.h" 5 #include "content/browser/devtools/tethering_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "content/browser/devtools/devtools_http_handler_impl.h" 11 #include "content/browser/devtools/devtools_http_handler_impl.h"
12 #include "content/browser/devtools/devtools_protocol_constants.h"
12 #include "content/public/browser/devtools_http_handler_delegate.h" 13 #include "content/public/browser/devtools_http_handler_delegate.h"
13 #include "net/base/io_buffer.h" 14 #include "net/base/io_buffer.h"
14 #include "net/base/ip_endpoint.h" 15 #include "net/base/ip_endpoint.h"
15 #include "net/base/net_errors.h" 16 #include "net/base/net_errors.h"
16 #include "net/base/net_log.h" 17 #include "net/base/net_log.h"
17 #include "net/socket/stream_listen_socket.h" 18 #include "net/socket/stream_listen_socket.h"
18 #include "net/socket/stream_socket.h" 19 #include "net/socket/stream_socket.h"
19 #include "net/socket/tcp_server_socket.h" 20 #include "net/socket/tcp_server_socket.h"
20 21
21 namespace content { 22 namespace content {
22 23
23 namespace { 24 namespace {
24 25
25 const char kTetheringBind[] = "Tethering.bind";
26 const char kTetheringUnbind[] = "Tethering.unbind";
27
28 const char kTetheringAccepted[] = "Tethering.accepted";
29
30 const char kPortParam[] = "port";
31 const char kConnectionIdParam[] = "connectionId";
32
33 const char kLocalhost[] = "127.0.0.1"; 26 const char kLocalhost[] = "127.0.0.1";
34 27
35 const int kListenBacklog = 5; 28 const int kListenBacklog = 5;
36 const int kBufferSize = 16 * 1024; 29 const int kBufferSize = 16 * 1024;
37 30
38 const int kMinTetheringPort = 1024; 31 const int kMinTetheringPort = 1024;
39 const int kMaxTetheringPort = 32767; 32 const int kMaxTetheringPort = 32767;
40 33
41 class SocketPump : public net::StreamListenSocket::Delegate { 34 class SocketPump : public net::StreamListenSocket::Delegate {
42 public: 35 public:
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 scoped_ptr<net::StreamListenSocket> accepted_socket_; 156 scoped_ptr<net::StreamListenSocket> accepted_socket_;
164 scoped_refptr<net::IOBuffer> buffer_; 157 scoped_refptr<net::IOBuffer> buffer_;
165 scoped_refptr<net::GrowableIOBuffer> wire_buffer_; 158 scoped_refptr<net::GrowableIOBuffer> wire_buffer_;
166 DevToolsHttpHandlerDelegate* delegate_; 159 DevToolsHttpHandlerDelegate* delegate_;
167 int wire_buffer_size_; 160 int wire_buffer_size_;
168 bool pending_destruction_; 161 bool pending_destruction_;
169 }; 162 };
170 163
171 } // namespace 164 } // namespace
172 165
173 const char TetheringHandler::kDomain[] = "Tethering";
174
175 class TetheringHandler::BoundSocket { 166 class TetheringHandler::BoundSocket {
176 public: 167 public:
177 BoundSocket(TetheringHandler* handler, 168 BoundSocket(TetheringHandler* handler,
178 DevToolsHttpHandlerDelegate* delegate) 169 DevToolsHttpHandlerDelegate* delegate)
179 : handler_(handler), 170 : handler_(handler),
180 delegate_(delegate), 171 delegate_(delegate),
181 socket_(new net::TCPServerSocket(NULL, net::NetLog::Source())), 172 socket_(new net::TCPServerSocket(NULL, net::NetLog::Source())),
182 port_(0) { 173 port_(0) {
183 } 174 }
184 175
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 229
239 TetheringHandler* handler_; 230 TetheringHandler* handler_;
240 DevToolsHttpHandlerDelegate* delegate_; 231 DevToolsHttpHandlerDelegate* delegate_;
241 scoped_ptr<net::ServerSocket> socket_; 232 scoped_ptr<net::ServerSocket> socket_;
242 scoped_ptr<net::StreamSocket> accept_socket_; 233 scoped_ptr<net::StreamSocket> accept_socket_;
243 int port_; 234 int port_;
244 }; 235 };
245 236
246 TetheringHandler::TetheringHandler(DevToolsHttpHandlerDelegate* delegate) 237 TetheringHandler::TetheringHandler(DevToolsHttpHandlerDelegate* delegate)
247 : delegate_(delegate) { 238 : delegate_(delegate) {
248 RegisterCommandHandler(kTetheringBind, 239 RegisterCommandHandler(devtools::Tethering::bind::kName,
249 base::Bind(&TetheringHandler::OnBind, 240 base::Bind(&TetheringHandler::OnBind,
250 base::Unretained(this))); 241 base::Unretained(this)));
251 RegisterCommandHandler(kTetheringUnbind, 242 RegisterCommandHandler(devtools::Tethering::unbind::kName,
252 base::Bind(&TetheringHandler::OnUnbind, 243 base::Bind(&TetheringHandler::OnUnbind,
253 base::Unretained(this))); 244 base::Unretained(this)));
254 } 245 }
255 246
256 TetheringHandler::~TetheringHandler() { 247 TetheringHandler::~TetheringHandler() {
257 STLDeleteContainerPairSecondPointers(bound_sockets_.begin(), 248 STLDeleteContainerPairSecondPointers(bound_sockets_.begin(),
258 bound_sockets_.end()); 249 bound_sockets_.end());
259 } 250 }
260 251
261 void TetheringHandler::Accepted(int port, const std::string& name) { 252 void TetheringHandler::Accepted(int port, const std::string& name) {
262 base::DictionaryValue* params = new base::DictionaryValue(); 253 base::DictionaryValue* params = new base::DictionaryValue();
263 params->SetInteger(kPortParam, port); 254 params->SetInteger(devtools::Tethering::accepted::kParamPort, port);
264 params->SetString(kConnectionIdParam, name); 255 params->SetString(devtools::Tethering::accepted::kParamConnectionId, name);
265 SendNotification(kTetheringAccepted, params); 256 SendNotification(devtools::Tethering::accepted::kName, params);
266 } 257 }
267 258
268 static int GetPort(scoped_refptr<DevToolsProtocol::Command> command) { 259 static int GetPort(scoped_refptr<DevToolsProtocol::Command> command,
260 const std::string& paramName) {
269 base::DictionaryValue* params = command->params(); 261 base::DictionaryValue* params = command->params();
270 int port = 0; 262 int port = 0;
271 if (!params || !params->GetInteger(kPortParam, &port) || 263 if (!params ||
264 !params->GetInteger(paramName, &port) ||
272 port < kMinTetheringPort || port > kMaxTetheringPort) 265 port < kMinTetheringPort || port > kMaxTetheringPort)
273 return 0; 266 return 0;
274 return port; 267 return port;
275 } 268 }
276 269
277 scoped_refptr<DevToolsProtocol::Response> 270 scoped_refptr<DevToolsProtocol::Response>
278 TetheringHandler::OnBind(scoped_refptr<DevToolsProtocol::Command> command) { 271 TetheringHandler::OnBind(scoped_refptr<DevToolsProtocol::Command> command) {
279 int port = GetPort(command); 272 const std::string& portParamName = devtools::Tethering::bind::kParamPort;
273 int port = GetPort(command, portParamName);
280 if (port == 0) 274 if (port == 0)
281 return command->InvalidParamResponse(kPortParam); 275 return command->InvalidParamResponse(portParamName);
282 276
283 if (bound_sockets_.find(port) != bound_sockets_.end()) 277 if (bound_sockets_.find(port) != bound_sockets_.end())
284 return command->InternalErrorResponse("Port already bound"); 278 return command->InternalErrorResponse("Port already bound");
285 279
286 scoped_ptr<BoundSocket> bound_socket(new BoundSocket(this, delegate_)); 280 scoped_ptr<BoundSocket> bound_socket(new BoundSocket(this, delegate_));
287 if (!bound_socket->Listen(port)) 281 if (!bound_socket->Listen(port))
288 return command->InternalErrorResponse("Could not bind port"); 282 return command->InternalErrorResponse("Could not bind port");
289 283
290 bound_sockets_[port] = bound_socket.release(); 284 bound_sockets_[port] = bound_socket.release();
291 return command->SuccessResponse(NULL); 285 return command->SuccessResponse(NULL);
292 } 286 }
293 287
294 scoped_refptr<DevToolsProtocol::Response> 288 scoped_refptr<DevToolsProtocol::Response>
295 TetheringHandler::OnUnbind(scoped_refptr<DevToolsProtocol::Command> command) { 289 TetheringHandler::OnUnbind(scoped_refptr<DevToolsProtocol::Command> command) {
296 int port = GetPort(command); 290 const std::string& portParamName = devtools::Tethering::unbind::kParamPort;
291 int port = GetPort(command, portParamName);
297 if (port == 0) 292 if (port == 0)
298 return command->InvalidParamResponse(kPortParam); 293 return command->InvalidParamResponse(portParamName);
299 294
300 BoundSockets::iterator it = bound_sockets_.find(port); 295 BoundSockets::iterator it = bound_sockets_.find(port);
301 if (it == bound_sockets_.end()) 296 if (it == bound_sockets_.end())
302 return command->InternalErrorResponse("Port is not bound"); 297 return command->InternalErrorResponse("Port is not bound");
303 298
304 delete it->second; 299 delete it->second;
305 bound_sockets_.erase(it); 300 bound_sockets_.erase(it);
306 return command->SuccessResponse(NULL); 301 return command->SuccessResponse(NULL);
307 } 302 }
308 303
309 } // namespace content 304 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/devtools/tethering_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698