1// Copyright 2013 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 GOOGLE_APIS_GCM_ENGINE_FAKE_CONNECTION_FACTORY_H_
6#define GOOGLE_APIS_GCM_ENGINE_FAKE_CONNECTION_FACTORY_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "google_apis/gcm/engine/connection_factory.h"
10
11namespace gcm {
12
13class FakeConnectionHandler;
14
15// A connection factory that mocks out real connections, using a fake connection
16// handler instead.
17class FakeConnectionFactory : public ConnectionFactory {
18 public:
19  FakeConnectionFactory();
20  virtual ~FakeConnectionFactory();
21
22  // ConnectionFactory implementation.
23  virtual void Initialize(
24      const BuildLoginRequestCallback& request_builder,
25      const ConnectionHandler::ProtoReceivedCallback& read_callback,
26      const ConnectionHandler::ProtoSentCallback& write_callback) OVERRIDE;
27  virtual ConnectionHandler* GetConnectionHandler() const OVERRIDE;
28  virtual void Connect() OVERRIDE;
29  virtual bool IsEndpointReachable() const OVERRIDE;
30  virtual std::string GetConnectionStateString() const OVERRIDE;
31  virtual base::TimeTicks NextRetryAttempt() const OVERRIDE;
32  virtual void SignalConnectionReset(ConnectionResetReason reason) OVERRIDE;
33  virtual void SetConnectionListener(ConnectionListener* listener) OVERRIDE;
34
35  // Whether a connection reset has been triggered and is yet to run.
36  bool reconnect_pending() const { return reconnect_pending_; }
37
38  // Whether connection resets should be handled immediately or delayed until
39  // release.
40  void set_delay_reconnect(bool should_delay) {
41    delay_reconnect_ = should_delay;
42  }
43
44 private:
45  scoped_ptr<FakeConnectionHandler> connection_handler_;
46
47  BuildLoginRequestCallback request_builder_;
48
49  // Logic for handling connection resets.
50  bool reconnect_pending_;
51  bool delay_reconnect_;
52
53  DISALLOW_COPY_AND_ASSIGN(FakeConnectionFactory);
54};
55
56}  // namespace gcm
57
58#endif  // GOOGLE_APIS_GCM_ENGINE_FAKE_CONNECTION_FACTORY_H_
59