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

Unified Diff: sync/engine/net/server_connection_manager.h

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sync/engine/net/DEPS ('k') | sync/engine/net/server_connection_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
deleted file mode 100644
index 8d3028c20c754477c0c582a2161aed510acd0b81..0000000000000000000000000000000000000000
--- a/sync/engine/net/server_connection_manager.h
+++ /dev/null
@@ -1,312 +0,0 @@
-// Copyright 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SYNC_ENGINE_NET_SERVER_CONNECTION_MANAGER_H_
-#define SYNC_ENGINE_NET_SERVER_CONNECTION_MANAGER_H_
-
-#include <stdint.h>
-
-#include <iosfwd>
-#include <memory>
-#include <string>
-
-#include "base/atomicops.h"
-#include "base/macros.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/cancelation_observer.h"
-#include "sync/syncable/syncable_id.h"
-
-namespace sync_pb {
-class ClientToServerMessage;
-}
-
-namespace syncer {
-
-class CancelationSignal;
-
-namespace syncable {
-class Directory;
-}
-
-static const int32_t kUnsetResponseCode = -1;
-static const int32_t kUnsetContentLength = -1;
-static const int32_t kUnsetPayloadLength = -1;
-
-// HttpResponse gathers the relevant output properties of an HTTP request.
-// Depending on the value of the server_status code, response_code, and
-// content_length may not be valid.
-struct SYNC_EXPORT HttpResponse {
- enum ServerConnectionCode {
- // For uninitialized state.
- NONE,
-
- // CONNECTION_UNAVAILABLE is returned when InternetConnect() fails.
- CONNECTION_UNAVAILABLE,
-
- // IO_ERROR is returned when reading/writing to a buffer has failed.
- IO_ERROR,
-
- // SYNC_SERVER_ERROR is returned when the HTTP status code indicates that
- // a non-auth error has occured.
- SYNC_SERVER_ERROR,
-
- // SYNC_AUTH_ERROR is returned when the HTTP status code indicates that an
- // auth error has occured (i.e. a 401 or sync-specific AUTH_INVALID
- // response)
- // TODO(tim): Caring about AUTH_INVALID is a layering violation. But
- // this app-specific logic is being added as a stable branch hotfix so
- // minimal changes prevail for the moment. Fix this! Bug 35060.
- SYNC_AUTH_ERROR,
-
- // SERVER_CONNECTION_OK is returned when request was handled correctly.
- SERVER_CONNECTION_OK,
-
- // RETRY is returned when a Commit request fails with a RETRY response from
- // the server.
- //
- // TODO(idana): the server no longer returns RETRY so we should remove this
- // value.
- RETRY,
- };
-
- // The HTTP Status code.
- int64_t response_code;
-
- // The value of the Content-length header.
- int64_t content_length;
-
- // The size of a download request's payload.
- int64_t payload_length;
-
- // Identifies the type of failure, if any.
- ServerConnectionCode server_status;
-
- HttpResponse();
-
- static const char* GetServerConnectionCodeString(
- ServerConnectionCode code);
-};
-
-struct ServerConnectionEvent {
- HttpResponse::ServerConnectionCode connection_code;
- explicit ServerConnectionEvent(HttpResponse::ServerConnectionCode code) :
- connection_code(code) {}
-};
-
-class SYNC_EXPORT ServerConnectionEventListener {
- public:
- virtual void OnServerConnectionEvent(const ServerConnectionEvent& event) = 0;
- protected:
- virtual ~ServerConnectionEventListener() {}
-};
-
-// Use this class to interact with the sync server.
-// The ServerConnectionManager currently supports POSTing protocol buffers.
-//
-class SYNC_EXPORT ServerConnectionManager : public CancelationObserver {
- public:
- // buffer_in - will be POSTed
- // buffer_out - string will be overwritten with response
- struct PostBufferParams {
- std::string buffer_in;
- std::string buffer_out;
- HttpResponse response;
- };
-
- // Abstract class providing network-layer functionality to the
- // ServerConnectionManager. Subclasses implement this using an HTTP stack of
- // their choice.
- class Connection {
- public:
- explicit Connection(ServerConnectionManager* scm);
- virtual ~Connection();
-
- // Called to initialize and perform an HTTP POST.
- virtual bool Init(const char* path,
- const std::string& auth_token,
- const std::string& payload,
- HttpResponse* response) = 0;
-
- // Immediately abandons a pending HTTP POST request and unblocks caller
- // in Init.
- virtual void Abort() = 0;
-
- bool ReadBufferResponse(std::string* buffer_out, HttpResponse* response,
- bool require_response);
- bool ReadDownloadResponse(HttpResponse* response, std::string* buffer_out);
-
- protected:
- std::string MakeConnectionURL(const std::string& sync_server,
- const std::string& path,
- bool use_ssl) const;
-
- void GetServerParams(std::string* server,
- int* server_port,
- bool* use_ssl) const {
- server->assign(scm_->sync_server_);
- *server_port = scm_->sync_server_port_;
- *use_ssl = scm_->use_ssl_;
- }
-
- std::string buffer_;
- ServerConnectionManager* scm_;
-
- private:
- int ReadResponse(std::string* buffer, int length);
- };
-
- ServerConnectionManager(const std::string& server,
- int port,
- bool use_ssl,
- CancelationSignal* cancelation_signal);
-
- ~ServerConnectionManager() override;
-
- // POSTS buffer_in and reads a response into buffer_out. Uses our currently
- // set auth token in our headers.
- //
- // Returns true if executed successfully.
- virtual bool PostBufferWithCachedAuth(PostBufferParams* params);
-
- void AddListener(ServerConnectionEventListener* listener);
- void RemoveListener(ServerConnectionEventListener* listener);
-
- inline HttpResponse::ServerConnectionCode server_status() const {
- DCHECK(thread_checker_.CalledOnValidThread());
- return server_status_;
- }
-
- const std::string client_id() const { return client_id_; }
-
- // Factory method to create an Connection object we can use for
- // communication with the server.
- virtual Connection* MakeConnection();
-
- // Closes any active network connections to the sync server.
- // 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 OnSignalReceived() final;
-
- void set_client_id(const std::string& client_id) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(client_id_.empty());
- client_id_.assign(client_id);
- }
-
- // Sets a new auth token and time.
- bool SetAuthToken(const std::string& auth_token);
-
- bool HasInvalidAuthToken() {
- return auth_token_.empty();
- }
-
- const std::string auth_token() const {
- DCHECK(thread_checker_.CalledOnValidThread());
- return auth_token_;
- }
-
- protected:
- inline std::string proto_sync_path() const {
- return proto_sync_path_;
- }
-
- // Updates server_status_ and notifies listeners if server_status_ changed
- void SetServerStatus(HttpResponse::ServerConnectionCode server_status);
-
- // NOTE: Tests rely on this protected function being virtual.
- //
- // Internal PostBuffer base function.
- virtual bool PostBufferToPath(PostBufferParams*,
- const std::string& path,
- const std::string& auth_token);
-
- // An internal helper to clear our auth_token_ and cache the old version
- // in |previously_invalidated_token_| to shelter us from retrying with a
- // known bad token.
- void InvalidateAndClearAuthToken();
-
- // Helper to check terminated flags and build a Connection object, installing
- // it as the |active_connection_|. If this ServerConnectionManager has been
- // terminated, this will return NULL.
- Connection* MakeActiveConnection();
-
- // Called by Connection objects as they are destroyed to allow the
- // ServerConnectionManager to cleanup active connections.
- void OnConnectionDestroyed(Connection* connection);
-
- // The sync_server_ is the server that requests will be made to.
- std::string sync_server_;
-
- // The sync_server_port_ is the port that HTTP requests will be made on.
- int sync_server_port_;
-
- // The unique id of the user's client.
- std::string client_id_;
-
- // Indicates whether or not requests should be made using HTTPS.
- bool use_ssl_;
-
- // The paths we post to.
- std::string proto_sync_path_;
-
- // The auth token to use in authenticated requests.
- std::string auth_token_;
-
- // The previous auth token that is invalid now.
- std::string previously_invalidated_token;
-
- base::ObserverList<ServerConnectionEventListener> listeners_;
-
- HttpResponse::ServerConnectionCode server_status_;
-
- 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_;
-
- private:
- // 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 {
- public:
- // |manager| must outlive this. Takes ownership of |connection|.
- ScopedConnectionHelper(ServerConnectionManager* manager,
- Connection* connection);
- ~ScopedConnectionHelper();
- Connection* get();
- private:
- ServerConnectionManager* manager_;
- std::unique_ptr<Connection> connection_;
- DISALLOW_COPY_AND_ASSIGN(ScopedConnectionHelper);
- };
-
- void NotifyStatusChanged();
-
- CancelationSignal* const cancelation_signal_;
- bool signal_handler_registered_;
-
- DISALLOW_COPY_AND_ASSIGN(ServerConnectionManager);
-};
-
-std::ostream& operator<<(std::ostream& s, const struct HttpResponse& hr);
-
-} // namespace syncer
-
-#endif // SYNC_ENGINE_NET_SERVER_CONNECTION_MANAGER_H_
« no previous file with comments | « sync/engine/net/DEPS ('k') | sync/engine/net/server_connection_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698