| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_GCM_DRIVER_FAKE_GCM_CLIENT_H_ |
| #define COMPONENTS_GCM_DRIVER_FAKE_GCM_CLIENT_H_ |
| |
| #include <map> |
| |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| #include "base/memory/weak_ptr.h" |
| #include "components/gcm_driver/gcm_client.h" |
| #include "components/gcm_driver/gcm_stats_recorder_impl.h" |
| |
| namespace base { |
| class SequencedTaskRunner; |
| } |
| |
| namespace gcm { |
| |
| class FakeGCMClient : public GCMClient { |
| public: |
| // For testing purpose. |
| enum StartModeOverridding { |
| // No change to how delay start is handled. |
| RESPECT_START_MODE, |
| // Force to delay start GCM until PerformDelayedStart is called. |
| FORCE_TO_ALWAYS_DELAY_START_GCM, |
| }; |
| |
| // Generate and return the registration ID/token based on parameters for |
| // testing verification. |
| static std::string GenerateGCMRegistrationID( |
| const std::vector<std::string>& sender_ids); |
| static std::string GenerateInstanceIDToken( |
| const std::string& authorized_entity, const std::string& scope); |
| |
| FakeGCMClient(const scoped_refptr<base::SequencedTaskRunner>& ui_thread, |
| const scoped_refptr<base::SequencedTaskRunner>& io_thread); |
| ~FakeGCMClient() override; |
| |
| // Overridden from GCMClient: |
| // Called on IO thread. |
| void Initialize( |
| const ChromeBuildInfo& chrome_build_info, |
| const base::FilePath& store_path, |
| const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, |
| const scoped_refptr<net::URLRequestContextGetter>& |
| url_request_context_getter, |
| std::unique_ptr<Encryptor> encryptor, |
| Delegate* delegate) override; |
| void Start(StartMode start_mode) override; |
| void Stop() override; |
| void Register(const linked_ptr<RegistrationInfo>& registration_info) override; |
| void Unregister( |
| const linked_ptr<RegistrationInfo>& registration_info) override; |
| void Send(const std::string& app_id, |
| const std::string& receiver_id, |
| const OutgoingMessage& message) override; |
| void RecordDecryptionFailure(const std::string& app_id, |
| GCMEncryptionProvider::DecryptionResult result) |
| override; |
| void SetRecording(bool recording) override; |
| void ClearActivityLogs() override; |
| GCMStatistics GetStatistics() const override; |
| void SetAccountTokens( |
| const std::vector<AccountTokenInfo>& account_tokens) override; |
| void UpdateAccountMapping(const AccountMapping& account_mapping) override; |
| void RemoveAccountMapping(const std::string& account_id) override; |
| void SetLastTokenFetchTime(const base::Time& time) override; |
| void UpdateHeartbeatTimer(std::unique_ptr<base::Timer> timer) override; |
| void AddInstanceIDData(const std::string& app_id, |
| const std::string& instance_id, |
| const std::string& extra_data) override; |
| void RemoveInstanceIDData(const std::string& app_id) override; |
| void GetInstanceIDData(const std::string& app_id, |
| std::string* instance_id, |
| std::string* extra_data) override; |
| void AddHeartbeatInterval(const std::string& scope, int interval_ms) override; |
| void RemoveHeartbeatInterval(const std::string& scope) override; |
| |
| // Initiate the start that has been delayed. |
| // Called on UI thread. |
| void PerformDelayedStart(); |
| |
| // Simulate receiving something from the server. |
| // Called on UI thread. |
| void ReceiveMessage(const std::string& app_id, |
| const IncomingMessage& message); |
| void DeleteMessages(const std::string& app_id); |
| |
| void set_start_mode_overridding(StartModeOverridding overridding) { |
| start_mode_overridding_ = overridding; |
| } |
| |
| private: |
| // Called on IO thread. |
| void DoStart(); |
| void Started(); |
| void RegisterFinished( |
| const linked_ptr<RegistrationInfo>& registration_info, |
| const std::string& registrion_id); |
| void UnregisterFinished( |
| const linked_ptr<RegistrationInfo>& registration_info); |
| void SendFinished(const std::string& app_id, const OutgoingMessage& message); |
| void MessageReceived(const std::string& app_id, |
| const IncomingMessage& message); |
| void MessagesDeleted(const std::string& app_id); |
| void MessageSendError(const std::string& app_id, |
| const SendErrorDetails& send_error_details); |
| void SendAcknowledgement(const std::string& app_id, |
| const std::string& message_id); |
| |
| Delegate* delegate_; |
| std::string product_category_for_subtypes_; |
| bool started_; |
| StartMode start_mode_; |
| StartModeOverridding start_mode_overridding_; |
| scoped_refptr<base::SequencedTaskRunner> ui_thread_; |
| scoped_refptr<base::SequencedTaskRunner> io_thread_; |
| std::map<std::string, std::pair<std::string, std::string>> instance_id_data_; |
| GCMStatsRecorderImpl recorder_; |
| base::WeakPtrFactory<FakeGCMClient> weak_ptr_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(FakeGCMClient); |
| }; |
| |
| } // namespace gcm |
| |
| #endif // COMPONENTS_GCM_DRIVER_FAKE_GCM_CLIENT_H_ |