15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef SYNC_TEST_FAKE_SERVER_FAKE_SERVER_HTTP_POST_PROVIDER_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define SYNC_TEST_FAKE_SERVER_FAKE_SERVER_HTTP_POST_PROVIDER_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/ref_counted.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/sequenced_task_runner.h"
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/synchronization/waitable_event.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/internal_api/public/http_post_provider_factory.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/internal_api/public/http_post_provider_interface.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace fake_server {
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class FakeServer;
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class FakeServerHttpPostProvider
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : public syncer::HttpPostProviderInterface,
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      public base::RefCountedThreadSafe<FakeServerHttpPostProvider> {
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FakeServerHttpPostProvider(
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      FakeServer* fake_server,
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      scoped_refptr<base::SequencedTaskRunner> task_runner);
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // HttpPostProviderInterface implementation.
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetExtraRequestHeaders(const char* headers) OVERRIDE;
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetURL(const char* url, int port) OVERRIDE;
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetPostPayload(const char* content_type, int content_length,
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              const char* content) OVERRIDE;
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool MakeSynchronousPost(int* error_code,
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   int* response_code) OVERRIDE;
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void Abort() OVERRIDE;
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int GetResponseContentLength() const OVERRIDE;
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual const char* GetResponseContent() const OVERRIDE;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual const std::string GetResponseHeaderValue(
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& name) const OVERRIDE;
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected:
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  friend class base::RefCountedThreadSafe<FakeServerHttpPostProvider>;
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~FakeServerHttpPostProvider();
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void OnPostComplete(int error_code,
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                      int response_code,
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                      const std::string& response);
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FakeServer* const fake_server_;
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<base::SequencedTaskRunner> task_runner_;
52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string response_;
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string request_url_;
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int request_port_;
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string request_content_;
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string request_content_type_;
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string extra_request_headers_;
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int post_error_code_;
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int post_response_code_;
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::WaitableEvent post_complete_;
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FakeServerHttpPostProvider);
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class FakeServerHttpPostProviderFactory
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : public syncer::HttpPostProviderFactory {
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FakeServerHttpPostProviderFactory(
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      FakeServer* fake_server,
71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      scoped_refptr<base::SequencedTaskRunner> task_runner);
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~FakeServerHttpPostProviderFactory();
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // HttpPostProviderFactory:
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void Init(const std::string& user_agent) OVERRIDE;
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual syncer::HttpPostProviderInterface* Create() OVERRIDE;
77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void Destroy(syncer::HttpPostProviderInterface* http) OVERRIDE;
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FakeServer* const fake_server_;
81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<base::SequencedTaskRunner> task_runner_;
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FakeServerHttpPostProviderFactory);
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  //  namespace fake_server
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // SYNC_TEST_FAKE_SERVER_FAKE_SERVER_HTTP_POST_PROVIDER_H_
89