12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SYNC_INTERNAL_API_PUBLIC_HTTP_POST_PROVIDER_FACTORY_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_INTERNAL_API_PUBLIC_HTTP_POST_PROVIDER_FACTORY_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <string> 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/base/sync_export.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpPostProviderInterface; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A factory to create HttpPostProviders to hide details about the 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// implementations and dependencies. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A factory instance itself should be owned by whomever uses it to create 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HttpPostProviders. 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SYNC_EXPORT HttpPostProviderFactory { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~HttpPostProviderFactory() {} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void Init(const std::string& user_agent) = 0; 25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Obtain a new HttpPostProviderInterface instance, owned by caller. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual HttpPostProviderInterface* Create() = 0; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When the interface is no longer needed (ready to be cleaned up), clients 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // must call Destroy(). 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This allows actual HttpPostProvider subclass implementations to be 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reference counted, which is useful if a particular implementation uses 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // multiple threads to serve network requests. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Destroy(HttpPostProviderInterface* http) = 0; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncer 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // SYNC_INTERNAL_API_PUBLIC_HTTP_POST_PROVIDER_FACTORY_H_ 40