1// Copyright 2014 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_TEST_FAKE_SERVER_FAKE_SERVER_HTTP_POST_PROVIDER_H_
6#define SYNC_TEST_FAKE_SERVER_FAKE_SERVER_HTTP_POST_PROVIDER_H_
7
8#include <string>
9
10#include "base/memory/ref_counted.h"
11#include "base/sequenced_task_runner.h"
12#include "base/synchronization/waitable_event.h"
13#include "sync/internal_api/public/http_post_provider_factory.h"
14#include "sync/internal_api/public/http_post_provider_interface.h"
15
16namespace fake_server {
17
18class FakeServer;
19
20class FakeServerHttpPostProvider
21    : public syncer::HttpPostProviderInterface,
22      public base::RefCountedThreadSafe<FakeServerHttpPostProvider> {
23 public:
24  FakeServerHttpPostProvider(
25      FakeServer* fake_server,
26      scoped_refptr<base::SequencedTaskRunner> task_runner);
27
28  // HttpPostProviderInterface implementation.
29  virtual void SetExtraRequestHeaders(const char* headers) OVERRIDE;
30  virtual void SetURL(const char* url, int port) OVERRIDE;
31  virtual void SetPostPayload(const char* content_type, int content_length,
32                              const char* content) OVERRIDE;
33  virtual bool MakeSynchronousPost(int* error_code,
34                                   int* response_code) OVERRIDE;
35  virtual void Abort() OVERRIDE;
36  virtual int GetResponseContentLength() const OVERRIDE;
37  virtual const char* GetResponseContent() const OVERRIDE;
38  virtual const std::string GetResponseHeaderValue(
39      const std::string& name) const OVERRIDE;
40
41 protected:
42  friend class base::RefCountedThreadSafe<FakeServerHttpPostProvider>;
43  virtual ~FakeServerHttpPostProvider();
44
45 private:
46  void OnPostComplete(int error_code,
47                      int response_code,
48                      const std::string& response);
49
50  FakeServer* const fake_server_;
51  scoped_refptr<base::SequencedTaskRunner> task_runner_;
52
53  std::string response_;
54  std::string request_url_;
55  int request_port_;
56  std::string request_content_;
57  std::string request_content_type_;
58  std::string extra_request_headers_;
59  int post_error_code_;
60  int post_response_code_;
61  base::WaitableEvent post_complete_;
62
63  DISALLOW_COPY_AND_ASSIGN(FakeServerHttpPostProvider);
64};
65
66class FakeServerHttpPostProviderFactory
67    : public syncer::HttpPostProviderFactory {
68 public:
69  FakeServerHttpPostProviderFactory(
70      FakeServer* fake_server,
71      scoped_refptr<base::SequencedTaskRunner> task_runner);
72  virtual ~FakeServerHttpPostProviderFactory();
73
74  // HttpPostProviderFactory:
75  virtual void Init(const std::string& user_agent) OVERRIDE;
76  virtual syncer::HttpPostProviderInterface* Create() OVERRIDE;
77  virtual void Destroy(syncer::HttpPostProviderInterface* http) OVERRIDE;
78
79 private:
80  FakeServer* const fake_server_;
81  scoped_refptr<base::SequencedTaskRunner> task_runner_;
82
83  DISALLOW_COPY_AND_ASSIGN(FakeServerHttpPostProviderFactory);
84};
85
86}  //  namespace fake_server
87
88#endif  // SYNC_TEST_FAKE_SERVER_FAKE_SERVER_HTTP_POST_PROVIDER_H_
89