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 COMPONENTS_GCM_DRIVER_FAKE_GCM_CLIENT_H_ 6 #define COMPONENTS_GCM_DRIVER_FAKE_GCM_CLIENT_H_ 7 8 #include "base/compiler_specific.h" 9 #include "base/memory/weak_ptr.h" 10 #include "components/gcm_driver/gcm_client.h" 11 12 namespace base { 13 class SequencedTaskRunner; 14 } 15 16 namespace gcm { 17 18 class FakeGCMClient : public GCMClient { 19 public: 20 enum Status { 21 UNINITIALIZED, 22 STARTED, 23 STOPPED, 24 CHECKED_OUT 25 }; 26 27 enum StartMode { 28 NO_DELAY_START, 29 DELAY_START, 30 }; 31 32 FakeGCMClient(StartMode start_mode, 33 const scoped_refptr<base::SequencedTaskRunner>& ui_thread, 34 const scoped_refptr<base::SequencedTaskRunner>& io_thread); 35 virtual ~FakeGCMClient(); 36 37 // Overridden from GCMClient: 38 // Called on IO thread. 39 virtual void Initialize( 40 const ChromeBuildInfo& chrome_build_info, 41 const base::FilePath& store_path, 42 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, 43 const scoped_refptr<net::URLRequestContextGetter>& 44 url_request_context_getter, 45 scoped_ptr<Encryptor> encryptor, 46 Delegate* delegate) OVERRIDE; 47 virtual void Start() OVERRIDE; 48 virtual void Stop() OVERRIDE; 49 virtual void CheckOut() OVERRIDE; 50 virtual void Register(const std::string& app_id, 51 const std::vector<std::string>& sender_ids) OVERRIDE; 52 virtual void Unregister(const std::string& app_id) OVERRIDE; 53 virtual void Send(const std::string& app_id, 54 const std::string& receiver_id, 55 const OutgoingMessage& message) OVERRIDE; 56 virtual void SetRecording(bool recording) OVERRIDE; 57 virtual void ClearActivityLogs() OVERRIDE; 58 virtual GCMStatistics GetStatistics() const OVERRIDE; 59 virtual void SetAccountsForCheckin( 60 const std::map<std::string, std::string>& account_tokens) OVERRIDE; 61 virtual void UpdateAccountMapping( 62 const AccountMapping& account_mapping) OVERRIDE; 63 virtual void RemoveAccountMapping(const std::string& account_id) OVERRIDE; 64 65 // Initiate the loading that has been delayed. 66 // Called on UI thread. 67 void PerformDelayedLoading(); 68 69 // Simulate receiving something from the server. 70 // Called on UI thread. 71 void ReceiveMessage(const std::string& app_id, 72 const IncomingMessage& message); 73 void DeleteMessages(const std::string& app_id); 74 75 std::string GetRegistrationIdFromSenderIds( 76 const std::vector<std::string>& sender_ids) const; 77 status()78 Status status() const { return status_; } 79 80 private: 81 // Called on IO thread. 82 void DoLoading(); 83 void CheckinFinished(); 84 void RegisterFinished(const std::string& app_id, 85 const std::string& registrion_id); 86 void UnregisterFinished(const std::string& app_id); 87 void SendFinished(const std::string& app_id, const OutgoingMessage& message); 88 void MessageReceived(const std::string& app_id, 89 const IncomingMessage& message); 90 void MessagesDeleted(const std::string& app_id); 91 void MessageSendError(const std::string& app_id, 92 const SendErrorDetails& send_error_details); 93 void SendAcknowledgement(const std::string& app_id, 94 const std::string& message_id); 95 96 Delegate* delegate_; 97 // Increased at checkout in order to produce a different registration ID 98 // after checkout and re-checkin. 99 int sequence_id_; 100 Status status_; 101 StartMode start_mode_; 102 scoped_refptr<base::SequencedTaskRunner> ui_thread_; 103 scoped_refptr<base::SequencedTaskRunner> io_thread_; 104 base::WeakPtrFactory<FakeGCMClient> weak_ptr_factory_; 105 106 DISALLOW_COPY_AND_ASSIGN(FakeGCMClient); 107 }; 108 109 } // namespace gcm 110 111 #endif // COMPONENTS_GCM_DRIVER_FAKE_GCM_CLIENT_H_ 112