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 "extensions/browser/api/sockets_tcp/sockets_tcp_api.h" | 5 #include "extensions/browser/api/sockets_tcp/sockets_tcp_api.h" |
6 | 6 |
7 #include "content/public/browser/browser_context.h" | 7 #include "content/public/browser/browser_context.h" |
8 #include "content/public/common/socket_permission_request.h" | 8 #include "content/public/common/socket_permission_request.h" |
9 #include "extensions/browser/api/socket/tcp_socket.h" | 9 #include "extensions/browser/api/socket/tcp_socket.h" |
10 #include "extensions/browser/api/socket/tls_socket.h" | 10 #include "extensions/browser/api/socket/tls_socket.h" |
11 #include "extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.h" | 11 #include "extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.h" |
12 #include "extensions/common/api/sockets/sockets_manifest_data.h" | 12 #include "extensions/common/api/sockets/sockets_manifest_data.h" |
13 #include "net/base/net_errors.h" | 13 #include "net/base/net_errors.h" |
14 #include "net/url_request/url_request_context.h" | 14 #include "net/url_request/url_request_context.h" |
15 #include "net/url_request/url_request_context_getter.h" | 15 #include "net/url_request/url_request_context_getter.h" |
16 | 16 |
17 using extensions::ResumableTCPSocket; | 17 using extensions::ResumableTCPSocket; |
18 using extensions::core_api::sockets_tcp::SocketInfo; | 18 using extensions::api::sockets_tcp::SocketInfo; |
19 using extensions::core_api::sockets_tcp::SocketProperties; | 19 using extensions::api::sockets_tcp::SocketProperties; |
20 | 20 |
21 namespace { | 21 namespace { |
22 | 22 |
23 const char kSocketNotFoundError[] = "Socket not found"; | 23 const char kSocketNotFoundError[] = "Socket not found"; |
24 const char kPermissionError[] = "Does not have permission"; | 24 const char kPermissionError[] = "Does not have permission"; |
25 const char kInvalidSocketStateError[] = | 25 const char kInvalidSocketStateError[] = |
26 "Socket must be a connected client TCP socket."; | 26 "Socket must be a connected client TCP socket."; |
27 const char kSocketNotConnectedError[] = "Socket not connected"; | 27 const char kSocketNotConnectedError[] = "Socket not connected"; |
28 | 28 |
29 linked_ptr<SocketInfo> CreateSocketInfo(int socket_id, | 29 linked_ptr<SocketInfo> CreateSocketInfo(int socket_id, |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 if (properties->buffer_size.get()) { | 75 if (properties->buffer_size.get()) { |
76 // buffer size is validated when issuing the actual Recv operation | 76 // buffer size is validated when issuing the actual Recv operation |
77 // on the socket. | 77 // on the socket. |
78 socket->set_buffer_size(*properties->buffer_size.get()); | 78 socket->set_buffer_size(*properties->buffer_size.get()); |
79 } | 79 } |
80 } | 80 } |
81 | 81 |
82 } // namespace | 82 } // namespace |
83 | 83 |
84 namespace extensions { | 84 namespace extensions { |
85 namespace core_api { | 85 namespace api { |
86 | 86 |
87 using content::SocketPermissionRequest; | 87 using content::SocketPermissionRequest; |
88 | 88 |
89 TCPSocketAsyncApiFunction::~TCPSocketAsyncApiFunction() {} | 89 TCPSocketAsyncApiFunction::~TCPSocketAsyncApiFunction() {} |
90 | 90 |
91 scoped_ptr<SocketResourceManagerInterface> | 91 scoped_ptr<SocketResourceManagerInterface> |
92 TCPSocketAsyncApiFunction::CreateSocketResourceManager() { | 92 TCPSocketAsyncApiFunction::CreateSocketResourceManager() { |
93 return scoped_ptr<SocketResourceManagerInterface>( | 93 return scoped_ptr<SocketResourceManagerInterface>( |
94 new SocketResourceManager<ResumableTCPSocket>()).Pass(); | 94 new SocketResourceManager<ResumableTCPSocket>()).Pass(); |
95 } | 95 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 SetSocketProperties(socket, ¶ms_.get()->properties); | 155 SetSocketProperties(socket, ¶ms_.get()->properties); |
156 results_ = sockets_tcp::Update::Results::Create(); | 156 results_ = sockets_tcp::Update::Results::Create(); |
157 } | 157 } |
158 | 158 |
159 SocketsTcpSetPausedFunction::SocketsTcpSetPausedFunction() | 159 SocketsTcpSetPausedFunction::SocketsTcpSetPausedFunction() |
160 : socket_event_dispatcher_(NULL) {} | 160 : socket_event_dispatcher_(NULL) {} |
161 | 161 |
162 SocketsTcpSetPausedFunction::~SocketsTcpSetPausedFunction() {} | 162 SocketsTcpSetPausedFunction::~SocketsTcpSetPausedFunction() {} |
163 | 163 |
164 bool SocketsTcpSetPausedFunction::Prepare() { | 164 bool SocketsTcpSetPausedFunction::Prepare() { |
165 params_ = core_api::sockets_tcp::SetPaused::Params::Create(*args_); | 165 params_ = api::sockets_tcp::SetPaused::Params::Create(*args_); |
166 EXTENSION_FUNCTION_VALIDATE(params_.get()); | 166 EXTENSION_FUNCTION_VALIDATE(params_.get()); |
167 | 167 |
168 socket_event_dispatcher_ = TCPSocketEventDispatcher::Get(browser_context()); | 168 socket_event_dispatcher_ = TCPSocketEventDispatcher::Get(browser_context()); |
169 DCHECK(socket_event_dispatcher_) | 169 DCHECK(socket_event_dispatcher_) |
170 << "There is no socket event dispatcher. " | 170 << "There is no socket event dispatcher. " |
171 "If this assertion is failing during a test, then it is likely that " | 171 "If this assertion is failing during a test, then it is likely that " |
172 "TestExtensionSystem is failing to provide an instance of " | 172 "TestExtensionSystem is failing to provide an instance of " |
173 "TCPSocketEventDispatcher."; | 173 "TCPSocketEventDispatcher."; |
174 return socket_event_dispatcher_ != NULL; | 174 return socket_event_dispatcher_ != NULL; |
175 } | 175 } |
(...skipping 14 matching lines...) Expand all Loading... |
190 } | 190 } |
191 | 191 |
192 results_ = sockets_tcp::SetPaused::Results::Create(); | 192 results_ = sockets_tcp::SetPaused::Results::Create(); |
193 } | 193 } |
194 | 194 |
195 SocketsTcpSetKeepAliveFunction::SocketsTcpSetKeepAliveFunction() {} | 195 SocketsTcpSetKeepAliveFunction::SocketsTcpSetKeepAliveFunction() {} |
196 | 196 |
197 SocketsTcpSetKeepAliveFunction::~SocketsTcpSetKeepAliveFunction() {} | 197 SocketsTcpSetKeepAliveFunction::~SocketsTcpSetKeepAliveFunction() {} |
198 | 198 |
199 bool SocketsTcpSetKeepAliveFunction::Prepare() { | 199 bool SocketsTcpSetKeepAliveFunction::Prepare() { |
200 params_ = core_api::sockets_tcp::SetKeepAlive::Params::Create(*args_); | 200 params_ = api::sockets_tcp::SetKeepAlive::Params::Create(*args_); |
201 EXTENSION_FUNCTION_VALIDATE(params_.get()); | 201 EXTENSION_FUNCTION_VALIDATE(params_.get()); |
202 return true; | 202 return true; |
203 } | 203 } |
204 | 204 |
205 void SocketsTcpSetKeepAliveFunction::Work() { | 205 void SocketsTcpSetKeepAliveFunction::Work() { |
206 ResumableTCPSocket* socket = GetTcpSocket(params_->socket_id); | 206 ResumableTCPSocket* socket = GetTcpSocket(params_->socket_id); |
207 if (!socket) { | 207 if (!socket) { |
208 error_ = kSocketNotFoundError; | 208 error_ = kSocketNotFoundError; |
209 return; | 209 return; |
210 } | 210 } |
211 | 211 |
212 int delay = params_->delay ? *params_->delay.get() : 0; | 212 int delay = params_->delay ? *params_->delay.get() : 0; |
213 | 213 |
214 bool success = socket->SetKeepAlive(params_->enable, delay); | 214 bool success = socket->SetKeepAlive(params_->enable, delay); |
215 int net_result = (success ? net::OK : net::ERR_FAILED); | 215 int net_result = (success ? net::OK : net::ERR_FAILED); |
216 if (net_result != net::OK) | 216 if (net_result != net::OK) |
217 error_ = net::ErrorToString(net_result); | 217 error_ = net::ErrorToString(net_result); |
218 results_ = sockets_tcp::SetKeepAlive::Results::Create(net_result); | 218 results_ = sockets_tcp::SetKeepAlive::Results::Create(net_result); |
219 } | 219 } |
220 | 220 |
221 SocketsTcpSetNoDelayFunction::SocketsTcpSetNoDelayFunction() {} | 221 SocketsTcpSetNoDelayFunction::SocketsTcpSetNoDelayFunction() {} |
222 | 222 |
223 SocketsTcpSetNoDelayFunction::~SocketsTcpSetNoDelayFunction() {} | 223 SocketsTcpSetNoDelayFunction::~SocketsTcpSetNoDelayFunction() {} |
224 | 224 |
225 bool SocketsTcpSetNoDelayFunction::Prepare() { | 225 bool SocketsTcpSetNoDelayFunction::Prepare() { |
226 params_ = core_api::sockets_tcp::SetNoDelay::Params::Create(*args_); | 226 params_ = api::sockets_tcp::SetNoDelay::Params::Create(*args_); |
227 EXTENSION_FUNCTION_VALIDATE(params_.get()); | 227 EXTENSION_FUNCTION_VALIDATE(params_.get()); |
228 return true; | 228 return true; |
229 } | 229 } |
230 | 230 |
231 void SocketsTcpSetNoDelayFunction::Work() { | 231 void SocketsTcpSetNoDelayFunction::Work() { |
232 ResumableTCPSocket* socket = GetTcpSocket(params_->socket_id); | 232 ResumableTCPSocket* socket = GetTcpSocket(params_->socket_id); |
233 if (!socket) { | 233 if (!socket) { |
234 error_ = kSocketNotFoundError; | 234 error_ = kSocketNotFoundError; |
235 return; | 235 return; |
236 } | 236 } |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 } | 450 } |
451 | 451 |
452 SocketsTcpSecureFunction::SocketsTcpSecureFunction() { | 452 SocketsTcpSecureFunction::SocketsTcpSecureFunction() { |
453 } | 453 } |
454 | 454 |
455 SocketsTcpSecureFunction::~SocketsTcpSecureFunction() { | 455 SocketsTcpSecureFunction::~SocketsTcpSecureFunction() { |
456 } | 456 } |
457 | 457 |
458 bool SocketsTcpSecureFunction::Prepare() { | 458 bool SocketsTcpSecureFunction::Prepare() { |
459 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 459 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
460 params_ = core_api::sockets_tcp::Secure::Params::Create(*args_); | 460 params_ = api::sockets_tcp::Secure::Params::Create(*args_); |
461 EXTENSION_FUNCTION_VALIDATE(params_.get()); | 461 EXTENSION_FUNCTION_VALIDATE(params_.get()); |
462 url_request_getter_ = browser_context()->GetRequestContext(); | 462 url_request_getter_ = browser_context()->GetRequestContext(); |
463 return true; | 463 return true; |
464 } | 464 } |
465 | 465 |
466 // Override the regular implementation, which would call AsyncWorkCompleted | 466 // Override the regular implementation, which would call AsyncWorkCompleted |
467 // immediately after Work(). | 467 // immediately after Work(). |
468 void SocketsTcpSecureFunction::AsyncWorkStart() { | 468 void SocketsTcpSecureFunction::AsyncWorkStart() { |
469 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 469 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
470 | 470 |
(...skipping 23 matching lines...) Expand all Loading... |
494 error_ = kSocketNotConnectedError; | 494 error_ = kSocketNotConnectedError; |
495 AsyncWorkCompleted(); | 495 AsyncWorkCompleted(); |
496 return; | 496 return; |
497 } | 497 } |
498 | 498 |
499 net::URLRequestContext* url_request_context = | 499 net::URLRequestContext* url_request_context = |
500 url_request_getter_->GetURLRequestContext(); | 500 url_request_getter_->GetURLRequestContext(); |
501 | 501 |
502 // UpgradeSocketToTLS() uses the older API's SecureOptions. Copy over the | 502 // UpgradeSocketToTLS() uses the older API's SecureOptions. Copy over the |
503 // only values inside -- TLSVersionConstraints's |min| and |max|, | 503 // only values inside -- TLSVersionConstraints's |min| and |max|, |
504 core_api::socket::SecureOptions legacy_params; | 504 api::socket::SecureOptions legacy_params; |
505 if (params_->options.get() && params_->options->tls_version.get()) { | 505 if (params_->options.get() && params_->options->tls_version.get()) { |
506 legacy_params.tls_version.reset( | 506 legacy_params.tls_version.reset(new api::socket::TLSVersionConstraints); |
507 new core_api::socket::TLSVersionConstraints); | |
508 if (params_->options->tls_version->min.get()) { | 507 if (params_->options->tls_version->min.get()) { |
509 legacy_params.tls_version->min.reset( | 508 legacy_params.tls_version->min.reset( |
510 new std::string(*params_->options->tls_version->min.get())); | 509 new std::string(*params_->options->tls_version->min.get())); |
511 } | 510 } |
512 if (params_->options->tls_version->max.get()) { | 511 if (params_->options->tls_version->max.get()) { |
513 legacy_params.tls_version->max.reset( | 512 legacy_params.tls_version->max.reset( |
514 new std::string(*params_->options->tls_version->max.get())); | 513 new std::string(*params_->options->tls_version->max.get())); |
515 } | 514 } |
516 } | 515 } |
517 | 516 |
(...skipping 14 matching lines...) Expand all Loading... |
532 | 531 |
533 if (socket && result == net::OK) { | 532 if (socket && result == net::OK) { |
534 socket->set_persistent(persistent_); | 533 socket->set_persistent(persistent_); |
535 socket->set_paused(paused_); | 534 socket->set_paused(paused_); |
536 ReplaceSocket(params_->socket_id, socket.release()); | 535 ReplaceSocket(params_->socket_id, socket.release()); |
537 } else { | 536 } else { |
538 RemoveSocket(params_->socket_id); | 537 RemoveSocket(params_->socket_id); |
539 error_ = net::ErrorToString(result); | 538 error_ = net::ErrorToString(result); |
540 } | 539 } |
541 | 540 |
542 results_ = core_api::sockets_tcp::Secure::Results::Create(result); | 541 results_ = api::sockets_tcp::Secure::Results::Create(result); |
543 AsyncWorkCompleted(); | 542 AsyncWorkCompleted(); |
544 } | 543 } |
545 | 544 |
546 } // namespace api | 545 } // namespace api |
547 } // namespace extensions | 546 } // namespace extensions |
OLD | NEW |