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