Home | History | Annotate | Download | only in internal_api
      1 // Copyright 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef SYNC_INTERNAL_API_SYNCAPI_SERVER_CONNECTION_MANAGER_H_
      6 #define SYNC_INTERNAL_API_SYNCAPI_SERVER_CONNECTION_MANAGER_H_
      7 
      8 #include <string>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "base/gtest_prod_util.h"
     12 #include "base/memory/scoped_ptr.h"
     13 #include "sync/base/sync_export.h"
     14 #include "sync/engine/net/server_connection_manager.h"
     15 
     16 namespace syncer {
     17 
     18 class HttpPostProviderFactory;
     19 class HttpPostProviderInterface;
     20 
     21 // This provides HTTP Post functionality through the interface provided
     22 // to the sync API by the application hosting the syncer backend.
     23 class SyncAPIBridgedConnection : public ServerConnectionManager::Connection {
     24  public:
     25   SyncAPIBridgedConnection(ServerConnectionManager* scm,
     26                            HttpPostProviderFactory* factory);
     27 
     28   virtual ~SyncAPIBridgedConnection();
     29 
     30   virtual bool Init(const char* path,
     31                     const std::string& auth_token,
     32                     const std::string& payload,
     33                     HttpResponse* response) OVERRIDE;
     34 
     35   virtual void Abort() OVERRIDE;
     36 
     37  private:
     38   // Pointer to the factory we use for creating HttpPostProviders. We do not
     39   // own |factory_|.
     40   HttpPostProviderFactory* factory_;
     41 
     42   HttpPostProviderInterface* post_provider_;
     43 
     44   DISALLOW_COPY_AND_ASSIGN(SyncAPIBridgedConnection);
     45 };
     46 
     47 // A ServerConnectionManager subclass used by the syncapi layer. We use a
     48 // subclass so that we can override MakePost() to generate a POST object using
     49 // an instance of the HttpPostProviderFactory class.
     50 class SYNC_EXPORT_PRIVATE SyncAPIServerConnectionManager
     51     : public ServerConnectionManager {
     52  public:
     53   // Takes ownership of factory.
     54   SyncAPIServerConnectionManager(const std::string& server,
     55                                  int port,
     56                                  bool use_ssl,
     57                                  HttpPostProviderFactory* factory,
     58                                  CancelationSignal* cancelation_signal);
     59   virtual ~SyncAPIServerConnectionManager();
     60 
     61   // ServerConnectionManager overrides.
     62   virtual Connection* MakeConnection() OVERRIDE;
     63 
     64  private:
     65   FRIEND_TEST_ALL_PREFIXES(SyncAPIServerConnectionManagerTest,
     66                            VeryEarlyAbortPost);
     67   FRIEND_TEST_ALL_PREFIXES(SyncAPIServerConnectionManagerTest, EarlyAbortPost);
     68   FRIEND_TEST_ALL_PREFIXES(SyncAPIServerConnectionManagerTest, AbortPost);
     69 
     70   // A factory creating concrete HttpPostProviders for use whenever we need to
     71   // issue a POST to sync servers.
     72   scoped_ptr<HttpPostProviderFactory> post_provider_factory_;
     73 
     74   DISALLOW_COPY_AND_ASSIGN(SyncAPIServerConnectionManager);
     75 };
     76 
     77 }  // namespace syncer
     78 
     79 #endif  // SYNC_INTERNAL_API_SYNCAPI_SERVER_CONNECTION_MANAGER_H_
     80