Chromium Code Reviews| Index: extensions/browser/api/sockets_tcp/sockets_tcp_api.cc |
| diff --git a/extensions/browser/api/sockets_tcp/sockets_tcp_api.cc b/extensions/browser/api/sockets_tcp/sockets_tcp_api.cc |
| index 0d20cd60f6f3bcc7b5c56ea7ea133d61b700c9fd..7380fd379101df0f19eaa81fba90b1a942938a6c 100644 |
| --- a/extensions/browser/api/sockets_tcp/sockets_tcp_api.cc |
| +++ b/extensions/browser/api/sockets_tcp/sockets_tcp_api.cc |
| @@ -2,6 +2,10 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| +#include <hash_set> |
|
Ken Rockot(use gerrit already)
2015/12/15 17:17:49
Thanks for adding this :) But it should be "base/
|
| +#include <string> |
| +#include <vector> |
| + |
| #include "extensions/browser/api/sockets_tcp/sockets_tcp_api.h" |
| #include "content/public/browser/browser_context.h" |
| @@ -157,7 +161,7 @@ void SocketsTcpUpdateFunction::Work() { |
| } |
| SocketsTcpSetPausedFunction::SocketsTcpSetPausedFunction() |
| - : socket_event_dispatcher_(NULL) {} |
| + : socket_event_dispatcher_(NULL), defer_completion_(false) {} |
| SocketsTcpSetPausedFunction::~SocketsTcpSetPausedFunction() {} |
| @@ -183,6 +187,16 @@ void SocketsTcpSetPausedFunction::Work() { |
| if (socket->paused() != params_->paused) { |
| socket->set_paused(params_->paused); |
| + // If this is a client socket, we can delay the callback's invocation |
| + // until the socket is really paused. |
| + BufferingTCPClientSocket* client_sock = socket->ClientStream(); |
| + if (client_sock && params_->paused) { |
| + // Don't automatically call AsyncWorkCompleted() when Work() returns. |
| + defer_completion_ = true; |
| + socket->set_api_pause_complete_callback( |
| + base::Bind(&SocketsTcpSetPausedFunction::AsyncWorkCompleted, this)); |
| + client_sock->Pause(); |
|
Ken Rockot(use gerrit already)
2015/12/15 17:17:49
How about just making Pause take a callback? Or if
|
| + } |
| if (socket->IsConnected() && !params_->paused) { |
| socket_event_dispatcher_->OnSocketResume(extension_->id(), |
| params_->socket_id); |
| @@ -192,6 +206,13 @@ void SocketsTcpSetPausedFunction::Work() { |
| results_ = sockets_tcp::SetPaused::Results::Create(); |
| } |
| +void SocketsTcpSetPausedFunction::AsyncWorkStart() { |
| + Work(); |
| + if (!defer_completion_) { |
| + AsyncWorkCompleted(); |
| + } |
| +} |
| + |
| SocketsTcpSetKeepAliveFunction::SocketsTcpSetKeepAliveFunction() {} |
| SocketsTcpSetKeepAliveFunction::~SocketsTcpSetKeepAliveFunction() {} |