fcm_invalidation_service.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright 2018 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. #ifndef COMPONENTS_INVALIDATION_IMPL_FCM_INVALIDATION_SERVICE_H_
  5. #define COMPONENTS_INVALIDATION_IMPL_FCM_INVALIDATION_SERVICE_H_
  6. #include "base/memory/raw_ptr.h"
  7. #include "base/sequence_checker.h"
  8. #include "base/time/time.h"
  9. #include "components/invalidation/impl/fcm_invalidation_service_base.h"
  10. #include "components/invalidation/public/identity_provider.h"
  11. namespace invalidation {
  12. // This concrete implementation of FCMInvalidationServiceBase starts the
  13. // invalidation service machinery once an account is signed in and conversely
  14. // stops it when the account is signed out.
  15. class FCMInvalidationService : public FCMInvalidationServiceBase,
  16. public IdentityProvider::Observer {
  17. public:
  18. FCMInvalidationService(IdentityProvider* identity_provider,
  19. FCMNetworkHandlerCallback fcm_network_handler_callback,
  20. PerUserTopicSubscriptionManagerCallback
  21. per_user_topic_subscription_manager_callback,
  22. instance_id::InstanceIDDriver* instance_id_driver,
  23. PrefService* pref_service,
  24. const std::string& sender_id = {});
  25. FCMInvalidationService(const FCMInvalidationService& other) = delete;
  26. FCMInvalidationService& operator=(const FCMInvalidationService& other) =
  27. delete;
  28. ~FCMInvalidationService() override;
  29. void Init() override;
  30. void RequestDetailedStatus(
  31. base::RepeatingCallback<void(base::Value::Dict)> caller) const override;
  32. // IdentityProvider::Observer implementation.
  33. void OnActiveAccountRefreshTokenUpdated() override;
  34. void OnActiveAccountLogin() override;
  35. void OnActiveAccountLogout() override;
  36. protected:
  37. friend class FCMInvalidationServiceTestDelegate;
  38. base::Value::Dict CollectDebugData() const override;
  39. private:
  40. struct Diagnostics {
  41. base::Time active_account_login;
  42. base::Time active_account_token_updated;
  43. base::Time active_account_logged_out;
  44. bool was_already_started_on_login = false;
  45. bool was_ready_to_start_on_login = false;
  46. CoreAccountId active_account_id;
  47. };
  48. bool IsReadyToStart();
  49. const raw_ptr<IdentityProvider> identity_provider_;
  50. Diagnostics diagnostic_info_;
  51. SEQUENCE_CHECKER(sequence_checker_);
  52. };
  53. } // namespace invalidation
  54. #endif // COMPONENTS_INVALIDATION_IMPL_FCM_INVALIDATION_SERVICE_H_