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 11 namespace gcm { 12 13 class FakeConnectionHandler; 14 15 // A connection factory that mocks out real connections, using a fake connection 16 // handler instead. 17 class 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. reconnect_pending()36 bool reconnect_pending() const { return reconnect_pending_; } 37 38 // Whether connection resets should be handled immediately or delayed until 39 // release. set_delay_reconnect(bool should_delay)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