1 // Copyright 2015 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.
5 #ifndef COMPONENTS_PROXIMITY_AUTH_CRYPTAUTH_CRYPTAUTH_GCM_MANAGER_IMPL_H
6 #define COMPONENTS_PROXIMITY_AUTH_CRYPTAUTH_CRYPTAUTH_GCM_MANAGER_IMPL_H
8 #include "base/macros.h"
9 #include "base/memory/weak_ptr.h"
10 #include "base/observer_list.h"
11 #include "components/gcm_driver/common/gcm_messages.h"
12 #include "components/gcm_driver/gcm_app_handler.h"
13 #include "components/gcm_driver/gcm_client.h"
14 #include "components/proximity_auth/cryptauth/cryptauth_gcm_manager.h"
22 namespace proximity_auth
{
24 // Implementation of CryptAuthGCMManager.
25 class CryptAuthGCMManagerImpl
: public CryptAuthGCMManager
,
26 public gcm::GCMAppHandler
{
28 // Creates the manager:
29 // |gcm_driver|: Handles the actual GCM communications. The driver is not
30 // owned and must outlive this instance.
31 // |pref_service|: Contains preferences across browser restarts, and should
32 // have been registered through RegisterPrefs(). The service is not owned
33 // and must outlive this instance.
34 CryptAuthGCMManagerImpl(gcm::GCMDriver
* gcm_driver
,
35 PrefService
* pref_service
);
37 ~CryptAuthGCMManagerImpl() override
;
39 // CryptAuthGCMManager:
40 void StartListening() override
;
41 void RegisterWithGCM() override
;
42 std::string
GetRegistrationId() override
;
43 void AddObserver(Observer
* observer
) override
;
44 void RemoveObserver(Observer
* observer
) override
;
48 void ShutdownHandler() override
;
49 void OnMessage(const std::string
& app_id
,
50 const gcm::IncomingMessage
& message
) override
;
51 void OnMessagesDeleted(const std::string
& app_id
) override
;
52 void OnSendError(const std::string
& app_id
,
53 const gcm::GCMClient::SendErrorDetails
& details
) override
;
54 void OnSendAcknowledged(const std::string
& app_id
,
55 const std::string
& message_id
) override
;
57 // Called when GCM registration completes.
58 void OnRegistrationCompleted(const std::string
& registration_id
,
59 gcm::GCMClient::Result result
);
61 // Handles the communications with GCM. Not owned.
62 gcm::GCMDriver
* gcm_driver_
;
64 // Manages preferences across process restarts. Not owned.
65 PrefService
* pref_service_
;
67 // Whether a GCM registration is currently being processed.
68 bool registration_in_progress_
;
71 base::ObserverList
<Observer
> observers_
;
73 base::WeakPtrFactory
<CryptAuthGCMManagerImpl
> weak_ptr_factory_
;
75 DISALLOW_COPY_AND_ASSIGN(CryptAuthGCMManagerImpl
);
78 } // namespace proximity_auth
80 #endif // COMPONENTS_PROXIMITY_CRYPTAUTH_CRYPTAUTH_GCM_MANAGER_IMPL_H