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