sync_manager_impl.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. // Copyright 2012 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_SYNC_ENGINE_SYNC_MANAGER_IMPL_H_
  5. #define COMPONENTS_SYNC_ENGINE_SYNC_MANAGER_IMPL_H_
  6. #include <stdint.h>
  7. #include <map>
  8. #include <memory>
  9. #include <string>
  10. #include <vector>
  11. #include "base/callback_forward.h"
  12. #include "base/gtest_prod_util.h"
  13. #include "base/memory/raw_ptr.h"
  14. #include "base/observer_list.h"
  15. #include "base/sequence_checker.h"
  16. #include "components/sync/base/time.h"
  17. #include "components/sync/engine/debug_info_event_listener.h"
  18. #include "components/sync/engine/events/protocol_event_buffer.h"
  19. #include "components/sync/engine/net/server_connection_manager.h"
  20. #include "components/sync/engine/nudge_handler.h"
  21. #include "components/sync/engine/sync_engine_event_listener.h"
  22. #include "components/sync/engine/sync_manager.h"
  23. #include "components/sync/engine/sync_status_tracker.h"
  24. #include "services/network/public/cpp/network_connection_tracker.h"
  25. namespace syncer {
  26. class Cryptographer;
  27. class ModelTypeRegistry;
  28. class SyncCycleContext;
  29. // Unless stated otherwise, all methods of SyncManager should be called on the
  30. // same thread.
  31. class SyncManagerImpl
  32. : public SyncManager,
  33. public network::NetworkConnectionTracker::NetworkConnectionObserver,
  34. public SyncEngineEventListener,
  35. public ServerConnectionEventListener,
  36. public SyncEncryptionHandler::Observer,
  37. public NudgeHandler {
  38. public:
  39. // Create an uninitialized SyncManager. Callers must Init() before using.
  40. // |network_connection_tracker| must not be null and must outlive this object.
  41. SyncManagerImpl(
  42. const std::string& name,
  43. network::NetworkConnectionTracker* network_connection_tracker);
  44. SyncManagerImpl(const SyncManagerImpl&) = delete;
  45. SyncManagerImpl& operator=(const SyncManagerImpl&) = delete;
  46. ~SyncManagerImpl() override;
  47. // SyncManager implementation.
  48. void Init(InitArgs* args) override;
  49. ModelTypeSet InitialSyncEndedTypes() override;
  50. ModelTypeSet GetConnectedTypes() override;
  51. void UpdateCredentials(const SyncCredentials& credentials) override;
  52. void InvalidateCredentials() override;
  53. void StartSyncingNormally(base::Time last_poll_time) override;
  54. void StartConfiguration() override;
  55. void ConfigureSyncer(ConfigureReason reason,
  56. ModelTypeSet to_download,
  57. SyncFeatureState sync_feature_state,
  58. base::OnceClosure ready_task) override;
  59. void SetInvalidatorEnabled(bool invalidator_enabled) override;
  60. void OnIncomingInvalidation(
  61. ModelType type,
  62. std::unique_ptr<SyncInvalidation> invalidation) override;
  63. void AddObserver(SyncManager::Observer* observer) override;
  64. void RemoveObserver(SyncManager::Observer* observer) override;
  65. void ShutdownOnSyncThread() override;
  66. ModelTypeConnector* GetModelTypeConnector() override;
  67. std::unique_ptr<ModelTypeConnector> GetModelTypeConnectorProxy() override;
  68. std::string cache_guid() override;
  69. std::string birthday() override;
  70. std::string bag_of_chips() override;
  71. bool HasUnsyncedItemsForTest() override;
  72. SyncEncryptionHandler* GetEncryptionHandler() override;
  73. std::vector<std::unique_ptr<ProtocolEvent>> GetBufferedProtocolEvents()
  74. override;
  75. void OnCookieJarChanged(bool account_mismatch) override;
  76. void UpdateInvalidationClientId(const std::string& client_id) override;
  77. void UpdateActiveDevicesInvalidationInfo(
  78. ActiveDevicesInvalidationInfo active_devices_invalidation_info) override;
  79. // SyncEncryptionHandler::Observer implementation.
  80. void OnPassphraseRequired(
  81. const KeyDerivationParams& key_derivation_params,
  82. const sync_pb::EncryptedData& pending_keys) override;
  83. void OnPassphraseAccepted() override;
  84. void OnTrustedVaultKeyRequired() override;
  85. void OnTrustedVaultKeyAccepted() override;
  86. void OnEncryptedTypesChanged(ModelTypeSet encrypted_types,
  87. bool encrypt_everything) override;
  88. void OnCryptographerStateChanged(Cryptographer* cryptographer,
  89. bool has_pending_keys) override;
  90. void OnPassphraseTypeChanged(PassphraseType type,
  91. base::Time explicit_passphrase_time) override;
  92. // SyncEngineEventListener implementation.
  93. void OnSyncCycleEvent(const SyncCycleEvent& event) override;
  94. void OnActionableError(const SyncProtocolError& error) override;
  95. void OnRetryTimeChanged(base::Time retry_time) override;
  96. void OnThrottledTypesChanged(ModelTypeSet throttled_types) override;
  97. void OnBackedOffTypesChanged(ModelTypeSet backed_off_types) override;
  98. void OnMigrationRequested(ModelTypeSet types) override;
  99. void OnProtocolEvent(const ProtocolEvent& event) override;
  100. // ServerConnectionEventListener implementation.
  101. void OnServerConnectionEvent(const ServerConnectionEvent& event) override;
  102. // Handle explicit requests to fetch updates for the given types.
  103. void RefreshTypes(ModelTypeSet types) override;
  104. // NetworkConnectionTracker::NetworkConnectionObserver implementation.
  105. void OnConnectionChanged(network::mojom::ConnectionType type) override;
  106. // NudgeHandler implementation.
  107. void NudgeForInitialDownload(ModelType type) override;
  108. void NudgeForCommit(ModelType type) override;
  109. private:
  110. void NotifySyncStatusChanged(const SyncStatus& status);
  111. const std::string name_;
  112. raw_ptr<network::NetworkConnectionTracker> network_connection_tracker_;
  113. SEQUENCE_CHECKER(sequence_checker_);
  114. base::ObserverList<SyncManager::Observer>::Unchecked observers_;
  115. // The ServerConnectionManager used to abstract communication between the
  116. // client (the Syncer) and the sync server.
  117. std::unique_ptr<ServerConnectionManager> connection_manager_;
  118. // Maintains state that affects the way we interact with different sync types.
  119. // This state changes when entering or exiting a configuration cycle.
  120. std::unique_ptr<ModelTypeRegistry> model_type_registry_;
  121. // A container of various bits of information used by the SyncScheduler to
  122. // create SyncCycles. Must outlive the SyncScheduler.
  123. std::unique_ptr<SyncCycleContext> cycle_context_;
  124. // The scheduler that runs the Syncer. Needs to be explicitly
  125. // Start()ed.
  126. std::unique_ptr<SyncScheduler> scheduler_;
  127. // A multi-purpose status watch object that aggregates stats from various
  128. // sync components. Initialized in Init().
  129. std::unique_ptr<SyncStatusTracker> sync_status_tracker_;
  130. // Set to true once Init has been called.
  131. bool initialized_;
  132. bool observing_network_connectivity_changes_;
  133. // This is for keeping track of client events to send to the server.
  134. DebugInfoEventListener debug_info_event_listener_;
  135. ProtocolEventBuffer protocol_event_buffer_;
  136. raw_ptr<SyncEncryptionHandler> sync_encryption_handler_;
  137. std::unique_ptr<SyncEncryptionHandler::Observer> encryption_observer_proxy_;
  138. base::WeakPtrFactory<SyncManagerImpl> weak_ptr_factory_{this};
  139. };
  140. } // namespace syncer
  141. #endif // COMPONENTS_SYNC_ENGINE_SYNC_MANAGER_IMPL_H_