Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Side by Side Diff: components/sync/device_info/device_info_service.h

Issue 2376123003: [Sync] Move //components/sync to the syncer namespace. (Closed)
Patch Set: Rebase. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef COMPONENTS_SYNC_DEVICE_INFO_DEVICE_INFO_SERVICE_H_ 5 #ifndef COMPONENTS_SYNC_DEVICE_INFO_DEVICE_INFO_SERVICE_H_
6 #define COMPONENTS_SYNC_DEVICE_INFO_DEVICE_INFO_SERVICE_H_ 6 #define COMPONENTS_SYNC_DEVICE_INFO_DEVICE_INFO_SERVICE_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <map> 10 #include <map>
11 #include <memory> 11 #include <memory>
12 #include <string> 12 #include <string>
13 #include <vector> 13 #include <vector>
14 14
15 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/memory/weak_ptr.h" 16 #include "base/memory/weak_ptr.h"
17 #include "base/observer_list.h" 17 #include "base/observer_list.h"
18 #include "base/time/time.h" 18 #include "base/time/time.h"
19 #include "base/timer/timer.h" 19 #include "base/timer/timer.h"
20 #include "components/sync/api/model_type_service.h" 20 #include "components/sync/api/model_type_service.h"
21 #include "components/sync/api/model_type_store.h" 21 #include "components/sync/api/model_type_store.h"
22 #include "components/sync/core/simple_metadata_change_list.h" 22 #include "components/sync/core/simple_metadata_change_list.h"
23 #include "components/sync/device_info/device_info_tracker.h" 23 #include "components/sync/device_info/device_info_tracker.h"
24 #include "components/sync/device_info/local_device_info_provider.h" 24 #include "components/sync/device_info/local_device_info_provider.h"
25 25
26 namespace syncer { 26 namespace syncer {
27 class SyncError; 27 class SyncError;
28 } // namespace syncer 28 } // namespace syncer
29 29
30 namespace syncer_v2 { 30 namespace syncer {
31 class ModelTypeChangeProcessor; 31 class ModelTypeChangeProcessor;
32 } // namespace syncer_v2 32 } // namespace syncer
33 33
34 namespace sync_pb { 34 namespace sync_pb {
35 class DeviceInfoSpecifics; 35 class DeviceInfoSpecifics;
36 } // namespace sync_pb 36 } // namespace sync_pb
37 37
38 namespace sync_driver_v2 { 38 namespace syncer {
39 39
40 // USS service implementation for DEVICE_INFO model type. Handles storage of 40 // USS service implementation for DEVICE_INFO model type. Handles storage of
41 // device info and associated sync metadata, applying/merging foreign changes, 41 // device info and associated sync metadata, applying/merging foreign changes,
42 // and allows public read access. 42 // and allows public read access.
43 class DeviceInfoService : public syncer_v2::ModelTypeService, 43 class DeviceInfoService : public ModelTypeService, public DeviceInfoTracker {
44 public sync_driver::DeviceInfoTracker {
45 public: 44 public:
46 typedef base::Callback<void( 45 typedef base::Callback<void(const ModelTypeStore::InitCallback& callback)>
47 const syncer_v2::ModelTypeStore::InitCallback& callback)>
48 StoreFactoryFunction; 46 StoreFactoryFunction;
49 47
50 DeviceInfoService( 48 DeviceInfoService(LocalDeviceInfoProvider* local_device_info_provider,
51 sync_driver::LocalDeviceInfoProvider* local_device_info_provider, 49 const StoreFactoryFunction& callback,
52 const StoreFactoryFunction& callback, 50 const ChangeProcessorFactory& change_processor_factory);
53 const ChangeProcessorFactory& change_processor_factory);
54 ~DeviceInfoService() override; 51 ~DeviceInfoService() override;
55 52
56 // ModelTypeService implementation. 53 // ModelTypeService implementation.
57 std::unique_ptr<syncer_v2::MetadataChangeList> CreateMetadataChangeList() 54 std::unique_ptr<MetadataChangeList> CreateMetadataChangeList() override;
58 override; 55 SyncError MergeSyncData(
59 syncer::SyncError MergeSyncData( 56 std::unique_ptr<MetadataChangeList> metadata_change_list,
60 std::unique_ptr<syncer_v2::MetadataChangeList> metadata_change_list, 57 EntityDataMap entity_data_map) override;
61 syncer_v2::EntityDataMap entity_data_map) override; 58 SyncError ApplySyncChanges(
62 syncer::SyncError ApplySyncChanges( 59 std::unique_ptr<MetadataChangeList> metadata_change_list,
63 std::unique_ptr<syncer_v2::MetadataChangeList> metadata_change_list, 60 EntityChangeList entity_changes) override;
64 syncer_v2::EntityChangeList entity_changes) override;
65 void GetData(StorageKeyList storage_keys, DataCallback callback) override; 61 void GetData(StorageKeyList storage_keys, DataCallback callback) override;
66 void GetAllData(DataCallback callback) override; 62 void GetAllData(DataCallback callback) override;
67 std::string GetClientTag(const syncer_v2::EntityData& entity_data) override; 63 std::string GetClientTag(const EntityData& entity_data) override;
68 std::string GetStorageKey(const syncer_v2::EntityData& entity_data) override; 64 std::string GetStorageKey(const EntityData& entity_data) override;
69 void OnChangeProcessorSet() override; 65 void OnChangeProcessorSet() override;
70 66
71 // DeviceInfoTracker implementation. 67 // DeviceInfoTracker implementation.
72 bool IsSyncing() const override; 68 bool IsSyncing() const override;
73 std::unique_ptr<sync_driver::DeviceInfo> GetDeviceInfo( 69 std::unique_ptr<DeviceInfo> GetDeviceInfo(
74 const std::string& client_id) const override; 70 const std::string& client_id) const override;
75 std::vector<std::unique_ptr<sync_driver::DeviceInfo>> GetAllDeviceInfo() 71 std::vector<std::unique_ptr<DeviceInfo>> GetAllDeviceInfo() const override;
76 const override;
77 void AddObserver(Observer* observer) override; 72 void AddObserver(Observer* observer) override;
78 void RemoveObserver(Observer* observer) override; 73 void RemoveObserver(Observer* observer) override;
79 int CountActiveDevices() const override; 74 int CountActiveDevices() const override;
80 75
81 private: 76 private:
82 friend class DeviceInfoServiceTest; 77 friend class DeviceInfoServiceTest;
83 78
84 // Cache of all syncable and local data, stored by device cache guid. 79 // Cache of all syncable and local data, stored by device cache guid.
85 using ClientIdToSpecifics = 80 using ClientIdToSpecifics =
86 std::map<std::string, std::unique_ptr<sync_pb::DeviceInfoSpecifics>>; 81 std::map<std::string, std::unique_ptr<sync_pb::DeviceInfoSpecifics>>;
87 82
88 static std::unique_ptr<sync_pb::DeviceInfoSpecifics> CopyToSpecifics( 83 static std::unique_ptr<sync_pb::DeviceInfoSpecifics> CopyToSpecifics(
89 const sync_driver::DeviceInfo& info); 84 const DeviceInfo& info);
90 85
91 // Allocate new DeviceInfo from SyncData. 86 // Allocate new DeviceInfo from SyncData.
92 static std::unique_ptr<sync_driver::DeviceInfo> CopyToModel( 87 static std::unique_ptr<DeviceInfo> CopyToModel(
93 const sync_pb::DeviceInfoSpecifics& specifics); 88 const sync_pb::DeviceInfoSpecifics& specifics);
94 // Conversion as we prepare to hand data to the processor. 89 // Conversion as we prepare to hand data to the processor.
95 static std::unique_ptr<syncer_v2::EntityData> CopyToEntityData( 90 static std::unique_ptr<EntityData> CopyToEntityData(
96 const sync_pb::DeviceInfoSpecifics& specifics); 91 const sync_pb::DeviceInfoSpecifics& specifics);
97 92
98 // Store SyncData in the cache and durable storage. 93 // Store SyncData in the cache and durable storage.
99 void StoreSpecifics(std::unique_ptr<sync_pb::DeviceInfoSpecifics> specifics, 94 void StoreSpecifics(std::unique_ptr<sync_pb::DeviceInfoSpecifics> specifics,
100 syncer_v2::ModelTypeStore::WriteBatch* batch); 95 ModelTypeStore::WriteBatch* batch);
101 // Delete SyncData from the cache and durable storage, returns true if there 96 // Delete SyncData from the cache and durable storage, returns true if there
102 // was actually anything at the given tag. 97 // was actually anything at the given tag.
103 bool DeleteSpecifics(const std::string& tag, 98 bool DeleteSpecifics(const std::string& tag,
104 syncer_v2::ModelTypeStore::WriteBatch* batch); 99 ModelTypeStore::WriteBatch* batch);
105 100
106 // Notify all registered observers. 101 // Notify all registered observers.
107 void NotifyObservers(); 102 void NotifyObservers();
108 103
109 // Used as callback given to LocalDeviceInfoProvider. 104 // Used as callback given to LocalDeviceInfoProvider.
110 void OnProviderInitialized(); 105 void OnProviderInitialized();
111 106
112 // Methods used as callbacks given to DataTypeStore. 107 // Methods used as callbacks given to DataTypeStore.
113 void OnStoreCreated(syncer_v2::ModelTypeStore::Result result, 108 void OnStoreCreated(ModelTypeStore::Result result,
114 std::unique_ptr<syncer_v2::ModelTypeStore> store); 109 std::unique_ptr<ModelTypeStore> store);
115 void OnReadAllData( 110 void OnReadAllData(ModelTypeStore::Result result,
116 syncer_v2::ModelTypeStore::Result result, 111 std::unique_ptr<ModelTypeStore::RecordList> record_list);
117 std::unique_ptr<syncer_v2::ModelTypeStore::RecordList> record_list);
118 void OnReadAllMetadata( 112 void OnReadAllMetadata(
119 syncer_v2::ModelTypeStore::Result result, 113 ModelTypeStore::Result result,
120 std::unique_ptr<syncer_v2::ModelTypeStore::RecordList> metadata_records, 114 std::unique_ptr<ModelTypeStore::RecordList> metadata_records,
121 const std::string& global_metadata); 115 const std::string& global_metadata);
122 void OnCommit(syncer_v2::ModelTypeStore::Result result); 116 void OnCommit(ModelTypeStore::Result result);
123 117
124 // Load metadata if the data is loaded and the provider is initialized. 118 // Load metadata if the data is loaded and the provider is initialized.
125 void LoadMetadataIfReady(); 119 void LoadMetadataIfReady();
126 120
127 // Performs reconciliation between the locally provided device info and the 121 // Performs reconciliation between the locally provided device info and the
128 // stored device info data. If the sets of data differ, then we consider this 122 // stored device info data. If the sets of data differ, then we consider this
129 // a local change and we send it to the processor. 123 // a local change and we send it to the processor.
130 void ReconcileLocalAndStored(); 124 void ReconcileLocalAndStored();
131 125
132 // Stores the updated version of the local copy of device info in durable 126 // Stores the updated version of the local copy of device info in durable
133 // storage, in memory, and informs sync of the change. Should not be called 127 // storage, in memory, and informs sync of the change. Should not be called
134 // before the provider and processor have initialized. 128 // before the provider and processor have initialized.
135 void SendLocalData(); 129 void SendLocalData();
136 130
137 // Persists the changes in the given aggregators and notifies observers if 131 // Persists the changes in the given aggregators and notifies observers if
138 // indicated to do as such. 132 // indicated to do as such.
139 void CommitAndNotify( 133 void CommitAndNotify(std::unique_ptr<ModelTypeStore::WriteBatch> batch,
140 std::unique_ptr<syncer_v2::ModelTypeStore::WriteBatch> batch, 134 std::unique_ptr<MetadataChangeList> metadata_change_list,
141 std::unique_ptr<syncer_v2::MetadataChangeList> metadata_change_list, 135 bool should_notify);
142 bool should_notify);
143 136
144 // Counts the number of active devices relative to |now|. The activeness of a 137 // Counts the number of active devices relative to |now|. The activeness of a
145 // device depends on the amount of time since it was updated, which means 138 // device depends on the amount of time since it was updated, which means
146 // comparing it against the current time. |now| is passed into this method to 139 // comparing it against the current time. |now| is passed into this method to
147 // allow unit tests to control expected results. 140 // allow unit tests to control expected results.
148 int CountActiveDevices(const base::Time now) const; 141 int CountActiveDevices(const base::Time now) const;
149 142
150 // Report an error starting up to sync if it tries to connect to this 143 // Report an error starting up to sync if it tries to connect to this
151 // datatype, since these errors prevent us from knowing if sync is enabled. 144 // datatype, since these errors prevent us from knowing if sync is enabled.
152 void ReportStartupErrorToSync(const std::string& msg); 145 void ReportStartupErrorToSync(const std::string& msg);
153 146
154 // Find the timestamp for the last time this |device_info| was edited. 147 // Find the timestamp for the last time this |device_info| was edited.
155 static base::Time GetLastUpdateTime( 148 static base::Time GetLastUpdateTime(
156 const sync_pb::DeviceInfoSpecifics& specifics); 149 const sync_pb::DeviceInfoSpecifics& specifics);
157 150
158 // |local_device_info_provider_| isn't owned. 151 // |local_device_info_provider_| isn't owned.
159 const sync_driver::LocalDeviceInfoProvider* const local_device_info_provider_; 152 const LocalDeviceInfoProvider* const local_device_info_provider_;
160 153
161 ClientIdToSpecifics all_data_; 154 ClientIdToSpecifics all_data_;
162 155
163 // Registered observers, not owned. 156 // Registered observers, not owned.
164 base::ObserverList<Observer, true> observers_; 157 base::ObserverList<Observer, true> observers_;
165 158
166 // Used to listen for provider initialization. If the provider is already 159 // Used to listen for provider initialization. If the provider is already
167 // initialized during our constructor then the subscription is never used. 160 // initialized during our constructor then the subscription is never used.
168 std::unique_ptr<sync_driver::LocalDeviceInfoProvider::Subscription> 161 std::unique_ptr<LocalDeviceInfoProvider::Subscription> subscription_;
169 subscription_;
170 162
171 // In charge of actually persiting changes to disk, or loading previous data. 163 // In charge of actually persiting changes to disk, or loading previous data.
172 std::unique_ptr<syncer_v2::ModelTypeStore> store_; 164 std::unique_ptr<ModelTypeStore> store_;
173 165
174 // If |local_device_info_provider_| has initialized. 166 // If |local_device_info_provider_| has initialized.
175 bool has_provider_initialized_ = false; 167 bool has_provider_initialized_ = false;
176 // If data has been loaded from the store. 168 // If data has been loaded from the store.
177 bool has_data_loaded_ = false; 169 bool has_data_loaded_ = false;
178 // if |change_processor()| has been given metadata. 170 // if |change_processor()| has been given metadata.
179 bool has_metadata_loaded_ = false; 171 bool has_metadata_loaded_ = false;
180 172
181 // Used to update our local device info once every pulse interval. 173 // Used to update our local device info once every pulse interval.
182 base::OneShotTimer pulse_timer_; 174 base::OneShotTimer pulse_timer_;
183 175
184 DISALLOW_COPY_AND_ASSIGN(DeviceInfoService); 176 DISALLOW_COPY_AND_ASSIGN(DeviceInfoService);
185 }; 177 };
186 178
187 } // namespace sync_driver_v2 179 } // namespace syncer
188 180
189 #endif // COMPONENTS_SYNC_DEVICE_INFO_DEVICE_INFO_SERVICE_H_ 181 #endif // COMPONENTS_SYNC_DEVICE_INFO_DEVICE_INFO_SERVICE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698