Chromium Code Reviews| 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 <hash_set> | |
|
Ken Rockot(use gerrit already)
2015/12/15 17:17:49
Thanks for adding this :) But it should be "base/
| |
| 6 #include <string> | |
| 7 #include <vector> | |
| 8 | |
| 5 #include "extensions/browser/api/sockets_tcp/sockets_tcp_api.h" | 9 #include "extensions/browser/api/sockets_tcp/sockets_tcp_api.h" |
| 6 | 10 |
| 7 #include "content/public/browser/browser_context.h" | 11 #include "content/public/browser/browser_context.h" |
| 8 #include "content/public/common/socket_permission_request.h" | 12 #include "content/public/common/socket_permission_request.h" |
| 9 #include "extensions/browser/api/socket/tcp_socket.h" | 13 #include "extensions/browser/api/socket/tcp_socket.h" |
| 10 #include "extensions/browser/api/socket/tls_socket.h" | 14 #include "extensions/browser/api/socket/tls_socket.h" |
| 11 #include "extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.h" | 15 #include "extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.h" |
| 12 #include "extensions/common/api/sockets/sockets_manifest_data.h" | 16 #include "extensions/common/api/sockets/sockets_manifest_data.h" |
| 13 #include "net/base/net_errors.h" | 17 #include "net/base/net_errors.h" |
| 14 #include "net/url_request/url_request_context.h" | 18 #include "net/url_request/url_request_context.h" |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 150 if (!socket) { | 154 if (!socket) { |
| 151 error_ = kSocketNotFoundError; | 155 error_ = kSocketNotFoundError; |
| 152 return; | 156 return; |
| 153 } | 157 } |
| 154 | 158 |
| 155 SetSocketProperties(socket, ¶ms_.get()->properties); | 159 SetSocketProperties(socket, ¶ms_.get()->properties); |
| 156 results_ = sockets_tcp::Update::Results::Create(); | 160 results_ = sockets_tcp::Update::Results::Create(); |
| 157 } | 161 } |
| 158 | 162 |
| 159 SocketsTcpSetPausedFunction::SocketsTcpSetPausedFunction() | 163 SocketsTcpSetPausedFunction::SocketsTcpSetPausedFunction() |
| 160 : socket_event_dispatcher_(NULL) {} | 164 : socket_event_dispatcher_(NULL), defer_completion_(false) {} |
| 161 | 165 |
| 162 SocketsTcpSetPausedFunction::~SocketsTcpSetPausedFunction() {} | 166 SocketsTcpSetPausedFunction::~SocketsTcpSetPausedFunction() {} |
| 163 | 167 |
| 164 bool SocketsTcpSetPausedFunction::Prepare() { | 168 bool SocketsTcpSetPausedFunction::Prepare() { |
| 165 params_ = api::sockets_tcp::SetPaused::Params::Create(*args_); | 169 params_ = api::sockets_tcp::SetPaused::Params::Create(*args_); |
| 166 EXTENSION_FUNCTION_VALIDATE(params_.get()); | 170 EXTENSION_FUNCTION_VALIDATE(params_.get()); |
| 167 | 171 |
| 168 socket_event_dispatcher_ = TCPSocketEventDispatcher::Get(browser_context()); | 172 socket_event_dispatcher_ = TCPSocketEventDispatcher::Get(browser_context()); |
| 169 DCHECK(socket_event_dispatcher_) | 173 DCHECK(socket_event_dispatcher_) |
| 170 << "There is no socket event dispatcher. " | 174 << "There is no socket event dispatcher. " |
| 171 "If this assertion is failing during a test, then it is likely that " | 175 "If this assertion is failing during a test, then it is likely that " |
| 172 "TestExtensionSystem is failing to provide an instance of " | 176 "TestExtensionSystem is failing to provide an instance of " |
| 173 "TCPSocketEventDispatcher."; | 177 "TCPSocketEventDispatcher."; |
| 174 return socket_event_dispatcher_ != NULL; | 178 return socket_event_dispatcher_ != NULL; |
| 175 } | 179 } |
| 176 | 180 |
| 177 void SocketsTcpSetPausedFunction::Work() { | 181 void SocketsTcpSetPausedFunction::Work() { |
| 178 ResumableTCPSocket* socket = GetTcpSocket(params_->socket_id); | 182 ResumableTCPSocket* socket = GetTcpSocket(params_->socket_id); |
| 179 if (!socket) { | 183 if (!socket) { |
| 180 error_ = kSocketNotFoundError; | 184 error_ = kSocketNotFoundError; |
| 181 return; | 185 return; |
| 182 } | 186 } |
| 183 | 187 |
| 184 if (socket->paused() != params_->paused) { | 188 if (socket->paused() != params_->paused) { |
| 185 socket->set_paused(params_->paused); | 189 socket->set_paused(params_->paused); |
| 190 // If this is a client socket, we can delay the callback's invocation | |
| 191 // until the socket is really paused. | |
| 192 BufferingTCPClientSocket* client_sock = socket->ClientStream(); | |
| 193 if (client_sock && params_->paused) { | |
| 194 // Don't automatically call AsyncWorkCompleted() when Work() returns. | |
| 195 defer_completion_ = true; | |
| 196 socket->set_api_pause_complete_callback( | |
| 197 base::Bind(&SocketsTcpSetPausedFunction::AsyncWorkCompleted, this)); | |
| 198 client_sock->Pause(); | |
|
Ken Rockot(use gerrit already)
2015/12/15 17:17:49
How about just making Pause take a callback? Or if
| |
| 199 } | |
| 186 if (socket->IsConnected() && !params_->paused) { | 200 if (socket->IsConnected() && !params_->paused) { |
| 187 socket_event_dispatcher_->OnSocketResume(extension_->id(), | 201 socket_event_dispatcher_->OnSocketResume(extension_->id(), |
| 188 params_->socket_id); | 202 params_->socket_id); |
| 189 } | 203 } |
| 190 } | 204 } |
| 191 | 205 |
| 192 results_ = sockets_tcp::SetPaused::Results::Create(); | 206 results_ = sockets_tcp::SetPaused::Results::Create(); |
| 193 } | 207 } |
| 194 | 208 |
| 209 void SocketsTcpSetPausedFunction::AsyncWorkStart() { | |
| 210 Work(); | |
| 211 if (!defer_completion_) { | |
| 212 AsyncWorkCompleted(); | |
| 213 } | |
| 214 } | |
| 215 | |
| 195 SocketsTcpSetKeepAliveFunction::SocketsTcpSetKeepAliveFunction() {} | 216 SocketsTcpSetKeepAliveFunction::SocketsTcpSetKeepAliveFunction() {} |
| 196 | 217 |
| 197 SocketsTcpSetKeepAliveFunction::~SocketsTcpSetKeepAliveFunction() {} | 218 SocketsTcpSetKeepAliveFunction::~SocketsTcpSetKeepAliveFunction() {} |
| 198 | 219 |
| 199 bool SocketsTcpSetKeepAliveFunction::Prepare() { | 220 bool SocketsTcpSetKeepAliveFunction::Prepare() { |
| 200 params_ = api::sockets_tcp::SetKeepAlive::Params::Create(*args_); | 221 params_ = api::sockets_tcp::SetKeepAlive::Params::Create(*args_); |
| 201 EXTENSION_FUNCTION_VALIDATE(params_.get()); | 222 EXTENSION_FUNCTION_VALIDATE(params_.get()); |
| 202 return true; | 223 return true; |
| 203 } | 224 } |
| 204 | 225 |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 537 RemoveSocket(params_->socket_id); | 558 RemoveSocket(params_->socket_id); |
| 538 error_ = net::ErrorToString(result); | 559 error_ = net::ErrorToString(result); |
| 539 } | 560 } |
| 540 | 561 |
| 541 results_ = api::sockets_tcp::Secure::Results::Create(result); | 562 results_ = api::sockets_tcp::Secure::Results::Create(result); |
| 542 AsyncWorkCompleted(); | 563 AsyncWorkCompleted(); |
| 543 } | 564 } |
| 544 | 565 |
| 545 } // namespace api | 566 } // namespace api |
| 546 } // namespace extensions | 567 } // namespace extensions |
| OLD | NEW |