• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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