Chromium Code Reviews| Index: sync/engine/net/server_connection_manager.h |
| diff --git a/sync/engine/net/server_connection_manager.h b/sync/engine/net/server_connection_manager.h |
| index 3bd533e78fdd07d555e54d296e9b70465fd5bbf6..f20542bd5ee334c80bcd40953fb4aea877546235 100644 |
| --- a/sync/engine/net/server_connection_manager.h |
| +++ b/sync/engine/net/server_connection_manager.h |
| @@ -8,14 +8,13 @@ |
| #include <iosfwd> |
| #include <string> |
| -#include "base/atomicops.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/observer_list.h" |
| #include "base/strings/string_util.h" |
| -#include "base/synchronization/lock.h" |
| #include "base/threading/non_thread_safe.h" |
| #include "base/threading/thread_checker.h" |
| #include "sync/base/sync_export.h" |
| +#include "sync/internal_api/public/base/cancellation_observer.h" |
| #include "sync/syncable/syncable_id.h" |
| namespace sync_pb { |
| @@ -24,6 +23,8 @@ class ClientToServerMessage; |
| namespace syncer { |
| +class CancellationSignal; |
| + |
| namespace syncable { |
| class Directory; |
| } |
| @@ -183,7 +184,8 @@ class SYNC_EXPORT_PRIVATE ServerConnectionManager { |
| ServerConnectionManager(const std::string& server, |
| int port, |
| bool use_ssl, |
| - bool use_oauth2_token); |
| + bool use_oauth2_token, |
| + CancellationSignal* cancellation_signal); |
| virtual ~ServerConnectionManager(); |
| @@ -215,12 +217,6 @@ class SYNC_EXPORT_PRIVATE ServerConnectionManager { |
| // communication with the server. |
| virtual Connection* MakeConnection(); |
| - // Aborts any active HTTP POST request. |
| - // We expect this to get called on a different thread than the valid |
| - // ThreadChecker thread, as we want to kill any pending http traffic without |
| - // having to wait for the request to complete. |
| - void TerminateAllIO(); |
| - |
| void set_client_id(const std::string& client_id) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| DCHECK(client_id_.empty()); |
| @@ -308,34 +304,31 @@ class SYNC_EXPORT_PRIVATE ServerConnectionManager { |
| base::ThreadChecker thread_checker_; |
| - // Protects all variables below to allow bailing out of active connections. |
| - base::Lock terminate_connection_lock_; |
| - |
| - // If true, we've been told to terminate IO and expect to be destroyed |
| - // shortly. No future network requests will be made. |
| - bool terminated_; |
| - |
| - // A non-owning pointer to any active http connection, so that we can abort |
| - // it if necessary. |
| - Connection* active_connection_; |
| - |
| + CancellationSignal* cancellation_signal_; |
|
akalin
2013/09/05 16:06:35
const?
rlarocque
2013/09/05 22:37:06
Done.
|
| private: |
| friend class Connection; |
| friend class ScopedServerStatusWatcher; |
| - // A class to help deal with cleaning up active Connection objects when (for |
| - // ex) multiple early-exits are present in some scope. ScopedConnectionHelper |
| - // informs the ServerConnectionManager before the Connection object it takes |
| - // ownership of is destroyed. |
| - class ScopedConnectionHelper { |
| + // A class to help manage the active connection. It handles the registration |
| + // and unregistration with the CancellationSignal. It also takes ownership of |
| + // the connection and will delete it if the abort signal was sent early or |
| + // when this class goes out of scope. |
| + class ScopedConnectionHelper : public CancellationObserver { |
| public: |
| - // |manager| must outlive this. Takes ownership of |connection|. |
| - ScopedConnectionHelper(ServerConnectionManager* manager, |
| + // Takes ownership of |connection|. |
|
akalin
2013/09/05 16:06:35
make this take scoped_ptr<Connection> instead of t
rlarocque
2013/09/05 22:37:06
Done.
|
| + ScopedConnectionHelper(CancellationSignal* cancellation_signal, |
| Connection* connection); |
| - ~ScopedConnectionHelper(); |
| + virtual ~ScopedConnectionHelper(); |
| Connection* get(); |
| + |
| + // Called from a different thread when the CancellationObserver's |
| + // RequestStop() is called and this class has been registered as a handler. |
| + // |
| + // Marked final because there's no way to safely override it. See comment |
| + // in this class' destructor. |
| + virtual void OnStopRequested() OVERRIDE FINAL; |
|
akalin
2013/09/05 16:06:35
newline before private:
rlarocque
2013/09/05 22:37:06
Done.
|
| private: |
| - ServerConnectionManager* manager_; |
| + CancellationSignal* cancellation_signal_; |
|
akalin
2013/09/05 16:06:35
const?
rlarocque
2013/09/05 22:37:06
Done.
|
| scoped_ptr<Connection> connection_; |
| DISALLOW_COPY_AND_ASSIGN(ScopedConnectionHelper); |
|
akalin
2013/09/05 16:06:35
i believe there should be a newline before DISALLO
rlarocque
2013/09/05 22:37:06
Done.
|
| }; |