1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef COMPONENTS_GCM_DRIVER_FAKE_GCM_CLIENT_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define COMPONENTS_GCM_DRIVER_FAKE_GCM_CLIENT_H_ 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/compiler_specific.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/weak_ptr.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/gcm_driver/gcm_client.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace base { 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class SequencedTaskRunner; 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace gcm { 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class FakeGCMClient : public GCMClient { 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) enum Status { 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) UNINITIALIZED, 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) STARTED, 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) STOPPED, 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CHECKED_OUT 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }; 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) enum StartMode { 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NO_DELAY_START, 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DELAY_START, 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FakeGCMClient(StartMode start_mode, 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& ui_thread, 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& io_thread); 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~FakeGCMClient(); 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Overridden from GCMClient: 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Called on IO thread. 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Initialize( 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ChromeBuildInfo& chrome_build_info, 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& store_path, 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<net::URLRequestContextGetter>& 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url_request_context_getter, 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<Encryptor> encryptor, 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Delegate* delegate) OVERRIDE; 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void Start() OVERRIDE; 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void Stop() OVERRIDE; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void CheckOut() OVERRIDE; 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Register(const std::string& app_id, 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::vector<std::string>& sender_ids) OVERRIDE; 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Unregister(const std::string& app_id) OVERRIDE; 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Send(const std::string& app_id, 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& receiver_id, 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const OutgoingMessage& message) OVERRIDE; 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void SetRecording(bool recording) OVERRIDE; 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void ClearActivityLogs() OVERRIDE; 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual GCMStatistics GetStatistics() const OVERRIDE; 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetAccountsForCheckin( 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::map<std::string, std::string>& account_tokens) OVERRIDE; 6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void UpdateAccountMapping( 6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const AccountMapping& account_mapping) OVERRIDE; 6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void RemoveAccountMapping(const std::string& account_id) OVERRIDE; 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Initiate the loading that has been delayed. 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Called on UI thread. 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void PerformDelayedLoading(); 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Simulate receiving something from the server. 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Called on UI thread. 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ReceiveMessage(const std::string& app_id, 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const IncomingMessage& message); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void DeleteMessages(const std::string& app_id); 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 751675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch std::string GetRegistrationIdFromSenderIds( 761675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch const std::vector<std::string>& sender_ids) const; 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Status status() const { return status_; } 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Called on IO thread. 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void DoLoading(); 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void CheckinFinished(); 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void RegisterFinished(const std::string& app_id, 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& registrion_id); 8623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) void UnregisterFinished(const std::string& app_id); 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void SendFinished(const std::string& app_id, const OutgoingMessage& message); 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void MessageReceived(const std::string& app_id, 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const IncomingMessage& message); 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void MessagesDeleted(const std::string& app_id); 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void MessageSendError(const std::string& app_id, 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const SendErrorDetails& send_error_details); 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void SendAcknowledgement(const std::string& app_id, 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& message_id); 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Delegate* delegate_; 971675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // Increased at checkout in order to produce a different registration ID 981675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // after checkout and re-checkin. 991675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch int sequence_id_; 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Status status_; 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) StartMode start_mode_; 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> ui_thread_; 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> io_thread_; 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::WeakPtrFactory<FakeGCMClient> weak_ptr_factory_; 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeGCMClient); 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace gcm 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // COMPONENTS_GCM_DRIVER_FAKE_GCM_CLIENT_H_ 112