OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include "components/sync/driver/glue/sync_backend_host_core.h" | 5 #include "components/sync/driver/glue/sync_backend_host_core.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 | 46 |
47 namespace { | 47 namespace { |
48 | 48 |
49 void BindFetcherToDataTracker(net::URLFetcher* fetcher) { | 49 void BindFetcherToDataTracker(net::URLFetcher* fetcher) { |
50 data_use_measurement::DataUseUserData::AttachToFetcher( | 50 data_use_measurement::DataUseUserData::AttachToFetcher( |
51 fetcher, data_use_measurement::DataUseUserData::SYNC); | 51 fetcher, data_use_measurement::DataUseUserData::SYNC); |
52 } | 52 } |
53 | 53 |
54 } // namespace | 54 } // namespace |
55 | 55 |
56 namespace browser_sync { | 56 namespace syncer { |
57 | 57 |
58 DoInitializeOptions::DoInitializeOptions( | 58 DoInitializeOptions::DoInitializeOptions( |
59 base::MessageLoop* sync_loop, | 59 base::MessageLoop* sync_loop, |
60 SyncBackendRegistrar* registrar, | 60 SyncBackendRegistrar* registrar, |
61 const std::vector<scoped_refptr<syncer::ModelSafeWorker>>& workers, | 61 const std::vector<scoped_refptr<ModelSafeWorker>>& workers, |
62 const scoped_refptr<syncer::ExtensionsActivity>& extensions_activity, | 62 const scoped_refptr<ExtensionsActivity>& extensions_activity, |
63 const syncer::WeakHandle<syncer::JsEventHandler>& event_handler, | 63 const WeakHandle<JsEventHandler>& event_handler, |
64 const GURL& service_url, | 64 const GURL& service_url, |
65 const std::string& sync_user_agent, | 65 const std::string& sync_user_agent, |
66 std::unique_ptr<syncer::HttpPostProviderFactory> http_bridge_factory, | 66 std::unique_ptr<HttpPostProviderFactory> http_bridge_factory, |
67 const syncer::SyncCredentials& credentials, | 67 const SyncCredentials& credentials, |
68 const std::string& invalidator_client_id, | 68 const std::string& invalidator_client_id, |
69 std::unique_ptr<syncer::SyncManagerFactory> sync_manager_factory, | 69 std::unique_ptr<SyncManagerFactory> sync_manager_factory, |
70 bool delete_sync_data_folder, | 70 bool delete_sync_data_folder, |
71 const std::string& restored_key_for_bootstrapping, | 71 const std::string& restored_key_for_bootstrapping, |
72 const std::string& restored_keystore_key_for_bootstrapping, | 72 const std::string& restored_keystore_key_for_bootstrapping, |
73 std::unique_ptr<syncer::InternalComponentsFactory> | 73 std::unique_ptr<InternalComponentsFactory> internal_components_factory, |
74 internal_components_factory, | 74 const WeakHandle<UnrecoverableErrorHandler>& unrecoverable_error_handler, |
75 const syncer::WeakHandle<syncer::UnrecoverableErrorHandler>& | |
76 unrecoverable_error_handler, | |
77 const base::Closure& report_unrecoverable_error_function, | 75 const base::Closure& report_unrecoverable_error_function, |
78 std::unique_ptr<syncer::SyncEncryptionHandler::NigoriState> | 76 std::unique_ptr<SyncEncryptionHandler::NigoriState> saved_nigori_state, |
79 saved_nigori_state, | 77 const std::map<ModelType, int64_t>& invalidation_versions) |
80 const std::map<syncer::ModelType, int64_t>& invalidation_versions) | |
81 : sync_loop(sync_loop), | 78 : sync_loop(sync_loop), |
82 registrar(registrar), | 79 registrar(registrar), |
83 workers(workers), | 80 workers(workers), |
84 extensions_activity(extensions_activity), | 81 extensions_activity(extensions_activity), |
85 event_handler(event_handler), | 82 event_handler(event_handler), |
86 service_url(service_url), | 83 service_url(service_url), |
87 sync_user_agent(sync_user_agent), | 84 sync_user_agent(sync_user_agent), |
88 http_bridge_factory(std::move(http_bridge_factory)), | 85 http_bridge_factory(std::move(http_bridge_factory)), |
89 credentials(credentials), | 86 credentials(credentials), |
90 invalidator_client_id(invalidator_client_id), | 87 invalidator_client_id(invalidator_client_id), |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 forward_type_info_(false), | 120 forward_type_info_(false), |
124 weak_ptr_factory_(this) { | 121 weak_ptr_factory_(this) { |
125 DCHECK(backend.get()); | 122 DCHECK(backend.get()); |
126 } | 123 } |
127 | 124 |
128 SyncBackendHostCore::~SyncBackendHostCore() { | 125 SyncBackendHostCore::~SyncBackendHostCore() { |
129 DCHECK(!sync_manager_.get()); | 126 DCHECK(!sync_manager_.get()); |
130 } | 127 } |
131 | 128 |
132 void SyncBackendHostCore::OnSyncCycleCompleted( | 129 void SyncBackendHostCore::OnSyncCycleCompleted( |
133 const syncer::SyncCycleSnapshot& snapshot) { | 130 const SyncCycleSnapshot& snapshot) { |
134 if (!sync_loop_) | 131 if (!sync_loop_) |
135 return; | 132 return; |
136 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 133 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
137 | 134 |
138 host_.Call(FROM_HERE, | 135 host_.Call(FROM_HERE, |
139 &SyncBackendHostImpl::HandleSyncCycleCompletedOnFrontendLoop, | 136 &SyncBackendHostImpl::HandleSyncCycleCompletedOnFrontendLoop, |
140 snapshot); | 137 snapshot); |
141 } | 138 } |
142 | 139 |
143 void SyncBackendHostCore::DoRefreshTypes(syncer::ModelTypeSet types) { | 140 void SyncBackendHostCore::DoRefreshTypes(ModelTypeSet types) { |
144 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 141 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
145 sync_manager_->RefreshTypes(types); | 142 sync_manager_->RefreshTypes(types); |
146 } | 143 } |
147 | 144 |
148 void SyncBackendHostCore::OnInitializationComplete( | 145 void SyncBackendHostCore::OnInitializationComplete( |
149 const syncer::WeakHandle<syncer::JsBackend>& js_backend, | 146 const WeakHandle<JsBackend>& js_backend, |
150 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& | 147 const WeakHandle<DataTypeDebugInfoListener>& debug_info_listener, |
151 debug_info_listener, | |
152 bool success, | 148 bool success, |
153 const syncer::ModelTypeSet restored_types) { | 149 const ModelTypeSet restored_types) { |
154 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 150 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
155 | 151 |
156 if (!success) { | 152 if (!success) { |
157 DoDestroySyncManager(syncer::STOP_SYNC); | 153 DoDestroySyncManager(STOP_SYNC); |
158 host_.Call(FROM_HERE, | 154 host_.Call(FROM_HERE, |
159 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); | 155 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); |
160 return; | 156 return; |
161 } | 157 } |
162 | 158 |
163 // Register for encryption related changes now. We have to do this before | 159 // Register for encryption related changes now. We have to do this before |
164 // the initializing downloading control types or initializing the encryption | 160 // the initializing downloading control types or initializing the encryption |
165 // handler in order to receive notifications triggered during encryption | 161 // handler in order to receive notifications triggered during encryption |
166 // startup. | 162 // startup. |
167 sync_manager_->GetEncryptionHandler()->AddObserver(this); | 163 sync_manager_->GetEncryptionHandler()->AddObserver(this); |
(...skipping 10 matching lines...) Expand all Loading... |
178 debug_info_listener_ = debug_info_listener; | 174 debug_info_listener_ = debug_info_listener; |
179 | 175 |
180 // Before proceeding any further, we need to download the control types and | 176 // Before proceeding any further, we need to download the control types and |
181 // purge any partial data (ie. data downloaded for a type that was on its way | 177 // purge any partial data (ie. data downloaded for a type that was on its way |
182 // to being initially synced, but didn't quite make it.). The following | 178 // to being initially synced, but didn't quite make it.). The following |
183 // configure cycle will take care of this. It depends on the registrar state | 179 // configure cycle will take care of this. It depends on the registrar state |
184 // which we initialize below to ensure that we don't perform any downloads if | 180 // which we initialize below to ensure that we don't perform any downloads if |
185 // all control types have already completed their initial sync. | 181 // all control types have already completed their initial sync. |
186 registrar_->SetInitialTypes(restored_types); | 182 registrar_->SetInitialTypes(restored_types); |
187 | 183 |
188 syncer::ConfigureReason reason = | 184 ConfigureReason reason = restored_types.Empty() |
189 restored_types.Empty() ? syncer::CONFIGURE_REASON_NEW_CLIENT | 185 ? CONFIGURE_REASON_NEW_CLIENT |
190 : syncer::CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE; | 186 : CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE; |
191 | 187 |
192 syncer::ModelTypeSet new_control_types = registrar_->ConfigureDataTypes( | 188 ModelTypeSet new_control_types = |
193 syncer::ControlTypes(), syncer::ModelTypeSet()); | 189 registrar_->ConfigureDataTypes(ControlTypes(), ModelTypeSet()); |
194 syncer::ModelSafeRoutingInfo routing_info; | 190 ModelSafeRoutingInfo routing_info; |
195 registrar_->GetModelSafeRoutingInfo(&routing_info); | 191 registrar_->GetModelSafeRoutingInfo(&routing_info); |
196 SDVLOG(1) << "Control Types " | 192 SDVLOG(1) << "Control Types " << ModelTypeSetToString(new_control_types) |
197 << syncer::ModelTypeSetToString(new_control_types) | |
198 << " added; calling ConfigureSyncer"; | 193 << " added; calling ConfigureSyncer"; |
199 | 194 |
200 syncer::ModelTypeSet types_to_purge = syncer::Difference( | 195 ModelTypeSet types_to_purge = |
201 syncer::ModelTypeSet::All(), GetRoutingInfoTypes(routing_info)); | 196 Difference(ModelTypeSet::All(), GetRoutingInfoTypes(routing_info)); |
202 | 197 |
203 sync_manager_->ConfigureSyncer( | 198 sync_manager_->ConfigureSyncer( |
204 reason, new_control_types, types_to_purge, syncer::ModelTypeSet(), | 199 reason, new_control_types, types_to_purge, ModelTypeSet(), ModelTypeSet(), |
205 syncer::ModelTypeSet(), routing_info, | 200 routing_info, |
206 base::Bind(&SyncBackendHostCore::DoInitialProcessControlTypes, | 201 base::Bind(&SyncBackendHostCore::DoInitialProcessControlTypes, |
207 weak_ptr_factory_.GetWeakPtr()), | 202 weak_ptr_factory_.GetWeakPtr()), |
208 base::Closure()); | 203 base::Closure()); |
209 } | 204 } |
210 | 205 |
211 void SyncBackendHostCore::OnConnectionStatusChange( | 206 void SyncBackendHostCore::OnConnectionStatusChange(ConnectionStatus status) { |
212 syncer::ConnectionStatus status) { | |
213 if (!sync_loop_) | 207 if (!sync_loop_) |
214 return; | 208 return; |
215 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 209 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
216 host_.Call(FROM_HERE, | 210 host_.Call(FROM_HERE, |
217 &SyncBackendHostImpl::HandleConnectionStatusChangeOnFrontendLoop, | 211 &SyncBackendHostImpl::HandleConnectionStatusChangeOnFrontendLoop, |
218 status); | 212 status); |
219 } | 213 } |
220 | 214 |
221 void SyncBackendHostCore::OnPassphraseRequired( | 215 void SyncBackendHostCore::OnPassphraseRequired( |
222 syncer::PassphraseRequiredReason reason, | 216 PassphraseRequiredReason reason, |
223 const sync_pb::EncryptedData& pending_keys) { | 217 const sync_pb::EncryptedData& pending_keys) { |
224 if (!sync_loop_) | 218 if (!sync_loop_) |
225 return; | 219 return; |
226 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 220 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
227 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyPassphraseRequired, reason, | 221 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyPassphraseRequired, reason, |
228 pending_keys); | 222 pending_keys); |
229 } | 223 } |
230 | 224 |
231 void SyncBackendHostCore::OnPassphraseAccepted() { | 225 void SyncBackendHostCore::OnPassphraseAccepted() { |
232 if (!sync_loop_) | 226 if (!sync_loop_) |
233 return; | 227 return; |
234 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 228 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
235 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyPassphraseAccepted); | 229 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyPassphraseAccepted); |
236 } | 230 } |
237 | 231 |
238 void SyncBackendHostCore::OnBootstrapTokenUpdated( | 232 void SyncBackendHostCore::OnBootstrapTokenUpdated( |
239 const std::string& bootstrap_token, | 233 const std::string& bootstrap_token, |
240 syncer::BootstrapTokenType type) { | 234 BootstrapTokenType type) { |
241 if (!sync_loop_) | 235 if (!sync_loop_) |
242 return; | 236 return; |
243 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 237 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
244 host_.Call(FROM_HERE, &SyncBackendHostImpl::PersistEncryptionBootstrapToken, | 238 host_.Call(FROM_HERE, &SyncBackendHostImpl::PersistEncryptionBootstrapToken, |
245 bootstrap_token, type); | 239 bootstrap_token, type); |
246 } | 240 } |
247 | 241 |
248 void SyncBackendHostCore::OnEncryptedTypesChanged( | 242 void SyncBackendHostCore::OnEncryptedTypesChanged(ModelTypeSet encrypted_types, |
249 syncer::ModelTypeSet encrypted_types, | 243 bool encrypt_everything) { |
250 bool encrypt_everything) { | |
251 if (!sync_loop_) | 244 if (!sync_loop_) |
252 return; | 245 return; |
253 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 246 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
254 // NOTE: We're in a transaction. | 247 // NOTE: We're in a transaction. |
255 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyEncryptedTypesChanged, | 248 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyEncryptedTypesChanged, |
256 encrypted_types, encrypt_everything); | 249 encrypted_types, encrypt_everything); |
257 } | 250 } |
258 | 251 |
259 void SyncBackendHostCore::OnEncryptionComplete() { | 252 void SyncBackendHostCore::OnEncryptionComplete() { |
260 if (!sync_loop_) | 253 if (!sync_loop_) |
261 return; | 254 return; |
262 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 255 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
263 // NOTE: We're in a transaction. | 256 // NOTE: We're in a transaction. |
264 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyEncryptionComplete); | 257 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyEncryptionComplete); |
265 } | 258 } |
266 | 259 |
267 void SyncBackendHostCore::OnCryptographerStateChanged( | 260 void SyncBackendHostCore::OnCryptographerStateChanged( |
268 syncer::Cryptographer* cryptographer) { | 261 Cryptographer* cryptographer) { |
269 // Do nothing. | 262 // Do nothing. |
270 } | 263 } |
271 | 264 |
272 void SyncBackendHostCore::OnPassphraseTypeChanged(syncer::PassphraseType type, | 265 void SyncBackendHostCore::OnPassphraseTypeChanged(PassphraseType type, |
273 base::Time passphrase_time) { | 266 base::Time passphrase_time) { |
274 host_.Call(FROM_HERE, | 267 host_.Call(FROM_HERE, |
275 &SyncBackendHostImpl::HandlePassphraseTypeChangedOnFrontendLoop, | 268 &SyncBackendHostImpl::HandlePassphraseTypeChangedOnFrontendLoop, |
276 type, passphrase_time); | 269 type, passphrase_time); |
277 } | 270 } |
278 | 271 |
279 void SyncBackendHostCore::OnLocalSetPassphraseEncryption( | 272 void SyncBackendHostCore::OnLocalSetPassphraseEncryption( |
280 const syncer::SyncEncryptionHandler::NigoriState& nigori_state) { | 273 const SyncEncryptionHandler::NigoriState& nigori_state) { |
281 host_.Call( | 274 host_.Call( |
282 FROM_HERE, | 275 FROM_HERE, |
283 &SyncBackendHostImpl::HandleLocalSetPassphraseEncryptionOnFrontendLoop, | 276 &SyncBackendHostImpl::HandleLocalSetPassphraseEncryptionOnFrontendLoop, |
284 nigori_state); | 277 nigori_state); |
285 } | 278 } |
286 | 279 |
287 void SyncBackendHostCore::OnCommitCountersUpdated( | 280 void SyncBackendHostCore::OnCommitCountersUpdated( |
288 syncer::ModelType type, | 281 ModelType type, |
289 const syncer::CommitCounters& counters) { | 282 const CommitCounters& counters) { |
290 host_.Call( | 283 host_.Call( |
291 FROM_HERE, | 284 FROM_HERE, |
292 &SyncBackendHostImpl::HandleDirectoryCommitCountersUpdatedOnFrontendLoop, | 285 &SyncBackendHostImpl::HandleDirectoryCommitCountersUpdatedOnFrontendLoop, |
293 type, counters); | 286 type, counters); |
294 } | 287 } |
295 | 288 |
296 void SyncBackendHostCore::OnUpdateCountersUpdated( | 289 void SyncBackendHostCore::OnUpdateCountersUpdated( |
297 syncer::ModelType type, | 290 ModelType type, |
298 const syncer::UpdateCounters& counters) { | 291 const UpdateCounters& counters) { |
299 host_.Call( | 292 host_.Call( |
300 FROM_HERE, | 293 FROM_HERE, |
301 &SyncBackendHostImpl::HandleDirectoryUpdateCountersUpdatedOnFrontendLoop, | 294 &SyncBackendHostImpl::HandleDirectoryUpdateCountersUpdatedOnFrontendLoop, |
302 type, counters); | 295 type, counters); |
303 } | 296 } |
304 | 297 |
305 void SyncBackendHostCore::OnStatusCountersUpdated( | 298 void SyncBackendHostCore::OnStatusCountersUpdated( |
306 syncer::ModelType type, | 299 ModelType type, |
307 const syncer::StatusCounters& counters) { | 300 const StatusCounters& counters) { |
308 host_.Call( | 301 host_.Call( |
309 FROM_HERE, | 302 FROM_HERE, |
310 &SyncBackendHostImpl::HandleDirectoryStatusCountersUpdatedOnFrontendLoop, | 303 &SyncBackendHostImpl::HandleDirectoryStatusCountersUpdatedOnFrontendLoop, |
311 type, counters); | 304 type, counters); |
312 } | 305 } |
313 | 306 |
314 void SyncBackendHostCore::OnActionableError( | 307 void SyncBackendHostCore::OnActionableError( |
315 const syncer::SyncProtocolError& sync_error) { | 308 const SyncProtocolError& sync_error) { |
316 if (!sync_loop_) | 309 if (!sync_loop_) |
317 return; | 310 return; |
318 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 311 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
319 host_.Call(FROM_HERE, | 312 host_.Call(FROM_HERE, |
320 &SyncBackendHostImpl::HandleActionableErrorEventOnFrontendLoop, | 313 &SyncBackendHostImpl::HandleActionableErrorEventOnFrontendLoop, |
321 sync_error); | 314 sync_error); |
322 } | 315 } |
323 | 316 |
324 void SyncBackendHostCore::OnMigrationRequested(syncer::ModelTypeSet types) { | 317 void SyncBackendHostCore::OnMigrationRequested(ModelTypeSet types) { |
325 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 318 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
326 host_.Call(FROM_HERE, | 319 host_.Call(FROM_HERE, |
327 &SyncBackendHostImpl::HandleMigrationRequestedOnFrontendLoop, | 320 &SyncBackendHostImpl::HandleMigrationRequestedOnFrontendLoop, |
328 types); | 321 types); |
329 } | 322 } |
330 | 323 |
331 void SyncBackendHostCore::OnProtocolEvent(const syncer::ProtocolEvent& event) { | 324 void SyncBackendHostCore::OnProtocolEvent(const ProtocolEvent& event) { |
332 if (forward_protocol_events_) { | 325 if (forward_protocol_events_) { |
333 std::unique_ptr<syncer::ProtocolEvent> event_clone(event.Clone()); | 326 std::unique_ptr<ProtocolEvent> event_clone(event.Clone()); |
334 host_.Call(FROM_HERE, | 327 host_.Call(FROM_HERE, |
335 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, | 328 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, |
336 base::Passed(std::move(event_clone))); | 329 base::Passed(std::move(event_clone))); |
337 } | 330 } |
338 } | 331 } |
339 | 332 |
340 void SyncBackendHostCore::DoOnInvalidatorStateChange( | 333 void SyncBackendHostCore::DoOnInvalidatorStateChange(InvalidatorState state) { |
341 syncer::InvalidatorState state) { | |
342 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 334 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
343 sync_manager_->SetInvalidatorEnabled(state == syncer::INVALIDATIONS_ENABLED); | 335 sync_manager_->SetInvalidatorEnabled(state == INVALIDATIONS_ENABLED); |
344 } | 336 } |
345 | 337 |
346 void SyncBackendHostCore::DoOnIncomingInvalidation( | 338 void SyncBackendHostCore::DoOnIncomingInvalidation( |
347 const syncer::ObjectIdInvalidationMap& invalidation_map) { | 339 const ObjectIdInvalidationMap& invalidation_map) { |
348 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 340 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
349 | 341 |
350 syncer::ObjectIdSet ids = invalidation_map.GetObjectIds(); | 342 ObjectIdSet ids = invalidation_map.GetObjectIds(); |
351 for (const invalidation::ObjectId& object_id : ids) { | 343 for (const invalidation::ObjectId& object_id : ids) { |
352 syncer::ModelType type; | 344 ModelType type; |
353 if (!NotificationTypeToRealModelType(object_id.name(), &type)) { | 345 if (!NotificationTypeToRealModelType(object_id.name(), &type)) { |
354 DLOG(WARNING) << "Notification has invalid id: " | 346 DLOG(WARNING) << "Notification has invalid id: " |
355 << syncer::ObjectIdToString(object_id); | 347 << ObjectIdToString(object_id); |
356 } else { | 348 } else { |
357 syncer::SingleObjectInvalidationSet invalidation_set = | 349 SingleObjectInvalidationSet invalidation_set = |
358 invalidation_map.ForObject(object_id); | 350 invalidation_map.ForObject(object_id); |
359 for (syncer::Invalidation invalidation : invalidation_set) { | 351 for (Invalidation invalidation : invalidation_set) { |
360 auto last_invalidation = last_invalidation_versions_.find(type); | 352 auto last_invalidation = last_invalidation_versions_.find(type); |
361 if (!invalidation.is_unknown_version() && | 353 if (!invalidation.is_unknown_version() && |
362 last_invalidation != last_invalidation_versions_.end() && | 354 last_invalidation != last_invalidation_versions_.end() && |
363 invalidation.version() <= last_invalidation->second) { | 355 invalidation.version() <= last_invalidation->second) { |
364 DVLOG(1) << "Ignoring redundant invalidation for " | 356 DVLOG(1) << "Ignoring redundant invalidation for " |
365 << syncer::ModelTypeToString(type) << " with version " | 357 << ModelTypeToString(type) << " with version " |
366 << invalidation.version() << ", last seen version was " | 358 << invalidation.version() << ", last seen version was " |
367 << last_invalidation->second; | 359 << last_invalidation->second; |
368 continue; | 360 continue; |
369 } | 361 } |
370 std::unique_ptr<syncer::InvalidationInterface> inv_adapter( | 362 std::unique_ptr<InvalidationInterface> inv_adapter( |
371 new InvalidationAdapter(invalidation)); | 363 new InvalidationAdapter(invalidation)); |
372 sync_manager_->OnIncomingInvalidation(type, std::move(inv_adapter)); | 364 sync_manager_->OnIncomingInvalidation(type, std::move(inv_adapter)); |
373 if (!invalidation.is_unknown_version()) | 365 if (!invalidation.is_unknown_version()) |
374 last_invalidation_versions_[type] = invalidation.version(); | 366 last_invalidation_versions_[type] = invalidation.version(); |
375 } | 367 } |
376 } | 368 } |
377 } | 369 } |
378 | 370 |
379 host_.Call(FROM_HERE, &SyncBackendHostImpl::UpdateInvalidationVersions, | 371 host_.Call(FROM_HERE, &SyncBackendHostImpl::UpdateInvalidationVersions, |
380 last_invalidation_versions_); | 372 last_invalidation_versions_); |
(...skipping 25 matching lines...) Expand all Loading... |
406 // Load the previously persisted set of invalidation versions into memory. | 398 // Load the previously persisted set of invalidation versions into memory. |
407 last_invalidation_versions_ = options->invalidation_versions; | 399 last_invalidation_versions_ = options->invalidation_versions; |
408 | 400 |
409 DCHECK(!registrar_); | 401 DCHECK(!registrar_); |
410 registrar_ = options->registrar; | 402 registrar_ = options->registrar; |
411 DCHECK(registrar_); | 403 DCHECK(registrar_); |
412 | 404 |
413 sync_manager_ = options->sync_manager_factory->CreateSyncManager(name_); | 405 sync_manager_ = options->sync_manager_factory->CreateSyncManager(name_); |
414 sync_manager_->AddObserver(this); | 406 sync_manager_->AddObserver(this); |
415 | 407 |
416 syncer::SyncManager::InitArgs args; | 408 SyncManager::InitArgs args; |
417 args.database_location = sync_data_folder_path_; | 409 args.database_location = sync_data_folder_path_; |
418 args.event_handler = options->event_handler; | 410 args.event_handler = options->event_handler; |
419 args.service_url = options->service_url; | 411 args.service_url = options->service_url; |
420 args.post_factory = std::move(options->http_bridge_factory); | 412 args.post_factory = std::move(options->http_bridge_factory); |
421 args.workers = options->workers; | 413 args.workers = options->workers; |
422 args.extensions_activity = options->extensions_activity.get(); | 414 args.extensions_activity = options->extensions_activity.get(); |
423 args.change_delegate = options->registrar; // as SyncManager::ChangeDelegate | 415 args.change_delegate = options->registrar; // as SyncManager::ChangeDelegate |
424 args.credentials = options->credentials; | 416 args.credentials = options->credentials; |
425 args.invalidator_client_id = options->invalidator_client_id; | 417 args.invalidator_client_id = options->invalidator_client_id; |
426 args.restored_key_for_bootstrapping = options->restored_key_for_bootstrapping; | 418 args.restored_key_for_bootstrapping = options->restored_key_for_bootstrapping; |
427 args.restored_keystore_key_for_bootstrapping = | 419 args.restored_keystore_key_for_bootstrapping = |
428 options->restored_keystore_key_for_bootstrapping; | 420 options->restored_keystore_key_for_bootstrapping; |
429 args.internal_components_factory = | 421 args.internal_components_factory = |
430 std::move(options->internal_components_factory); | 422 std::move(options->internal_components_factory); |
431 args.encryptor = &encryptor_; | 423 args.encryptor = &encryptor_; |
432 args.unrecoverable_error_handler = options->unrecoverable_error_handler; | 424 args.unrecoverable_error_handler = options->unrecoverable_error_handler; |
433 args.report_unrecoverable_error_function = | 425 args.report_unrecoverable_error_function = |
434 options->report_unrecoverable_error_function; | 426 options->report_unrecoverable_error_function; |
435 args.cancelation_signal = &stop_syncing_signal_; | 427 args.cancelation_signal = &stop_syncing_signal_; |
436 args.saved_nigori_state = std::move(options->saved_nigori_state); | 428 args.saved_nigori_state = std::move(options->saved_nigori_state); |
437 sync_manager_->Init(&args); | 429 sync_manager_->Init(&args); |
438 } | 430 } |
439 | 431 |
440 void SyncBackendHostCore::DoUpdateCredentials( | 432 void SyncBackendHostCore::DoUpdateCredentials( |
441 const syncer::SyncCredentials& credentials) { | 433 const SyncCredentials& credentials) { |
442 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 434 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
443 // UpdateCredentials can be called during backend initialization, possibly | 435 // UpdateCredentials can be called during backend initialization, possibly |
444 // when backend initialization has failed but hasn't notified the UI thread | 436 // when backend initialization has failed but hasn't notified the UI thread |
445 // yet. In that case, the sync manager may have been destroyed on the sync | 437 // yet. In that case, the sync manager may have been destroyed on the sync |
446 // thread before this task was executed, so we do nothing. | 438 // thread before this task was executed, so we do nothing. |
447 if (sync_manager_) { | 439 if (sync_manager_) { |
448 sync_manager_->UpdateCredentials(credentials); | 440 sync_manager_->UpdateCredentials(credentials); |
449 } | 441 } |
450 } | 442 } |
451 | 443 |
452 void SyncBackendHostCore::DoStartSyncing( | 444 void SyncBackendHostCore::DoStartSyncing( |
453 const syncer::ModelSafeRoutingInfo& routing_info, | 445 const ModelSafeRoutingInfo& routing_info, |
454 base::Time last_poll_time) { | 446 base::Time last_poll_time) { |
455 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 447 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
456 sync_manager_->StartSyncingNormally(routing_info, last_poll_time); | 448 sync_manager_->StartSyncingNormally(routing_info, last_poll_time); |
457 } | 449 } |
458 | 450 |
459 void SyncBackendHostCore::DoSetEncryptionPassphrase( | 451 void SyncBackendHostCore::DoSetEncryptionPassphrase( |
460 const std::string& passphrase, | 452 const std::string& passphrase, |
461 bool is_explicit) { | 453 bool is_explicit) { |
462 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 454 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
463 sync_manager_->GetEncryptionHandler()->SetEncryptionPassphrase(passphrase, | 455 sync_manager_->GetEncryptionHandler()->SetEncryptionPassphrase(passphrase, |
(...skipping 12 matching lines...) Expand all Loading... |
476 // which is called at the end of every sync cycle. | 468 // which is called at the end of every sync cycle. |
477 // TODO(zea): eventually add an experiment handler and initialize it here. | 469 // TODO(zea): eventually add an experiment handler and initialize it here. |
478 | 470 |
479 if (!sync_manager_->GetUserShare()) { // NULL in some tests. | 471 if (!sync_manager_->GetUserShare()) { // NULL in some tests. |
480 DVLOG(1) << "Skipping initialization of DeviceInfo"; | 472 DVLOG(1) << "Skipping initialization of DeviceInfo"; |
481 host_.Call(FROM_HERE, | 473 host_.Call(FROM_HERE, |
482 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); | 474 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); |
483 return; | 475 return; |
484 } | 476 } |
485 | 477 |
486 if (!sync_manager_->InitialSyncEndedTypes().HasAll(syncer::ControlTypes())) { | 478 if (!sync_manager_->InitialSyncEndedTypes().HasAll(ControlTypes())) { |
487 LOG(ERROR) << "Failed to download control types"; | 479 LOG(ERROR) << "Failed to download control types"; |
488 host_.Call(FROM_HERE, | 480 host_.Call(FROM_HERE, |
489 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); | 481 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); |
490 return; | 482 return; |
491 } | 483 } |
492 | 484 |
493 host_.Call(FROM_HERE, | 485 host_.Call(FROM_HERE, |
494 &SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop, | 486 &SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop, |
495 js_backend_, debug_info_listener_, | 487 js_backend_, debug_info_listener_, |
496 base::Passed(sync_manager_->GetModelTypeConnectorProxy()), | 488 base::Passed(sync_manager_->GetModelTypeConnectorProxy()), |
(...skipping 28 matching lines...) Expand all Loading... |
525 | 517 |
526 // This will drop the HttpBridgeFactory's reference to the | 518 // This will drop the HttpBridgeFactory's reference to the |
527 // RequestContextGetter. Once this has been called, the HttpBridgeFactory can | 519 // RequestContextGetter. Once this has been called, the HttpBridgeFactory can |
528 // no longer be used to create new HttpBridge instances. We can get away with | 520 // no longer be used to create new HttpBridge instances. We can get away with |
529 // this because the stop_syncing_signal_ has already been signalled, which | 521 // this because the stop_syncing_signal_ has already been signalled, which |
530 // guarantees that the ServerConnectionManager will no longer attempt to | 522 // guarantees that the ServerConnectionManager will no longer attempt to |
531 // create new connections. | 523 // create new connections. |
532 release_request_context_signal_.Signal(); | 524 release_request_context_signal_.Signal(); |
533 } | 525 } |
534 | 526 |
535 void SyncBackendHostCore::DoShutdown(syncer::ShutdownReason reason) { | 527 void SyncBackendHostCore::DoShutdown(ShutdownReason reason) { |
536 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 528 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
537 | 529 |
538 DoDestroySyncManager(reason); | 530 DoDestroySyncManager(reason); |
539 | 531 |
540 registrar_ = NULL; | 532 registrar_ = NULL; |
541 | 533 |
542 if (reason == syncer::DISABLE_SYNC) | 534 if (reason == DISABLE_SYNC) |
543 DeleteSyncDataFolder(); | 535 DeleteSyncDataFolder(); |
544 | 536 |
545 host_.Reset(); | 537 host_.Reset(); |
546 weak_ptr_factory_.InvalidateWeakPtrs(); | 538 weak_ptr_factory_.InvalidateWeakPtrs(); |
547 } | 539 } |
548 | 540 |
549 void SyncBackendHostCore::DoDestroySyncManager(syncer::ShutdownReason reason) { | 541 void SyncBackendHostCore::DoDestroySyncManager(ShutdownReason reason) { |
550 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 542 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
551 if (sync_manager_) { | 543 if (sync_manager_) { |
552 DisableDirectoryTypeDebugInfoForwarding(); | 544 DisableDirectoryTypeDebugInfoForwarding(); |
553 save_changes_timer_.reset(); | 545 save_changes_timer_.reset(); |
554 sync_manager_->RemoveObserver(this); | 546 sync_manager_->RemoveObserver(this); |
555 sync_manager_->ShutdownOnSyncThread(reason); | 547 sync_manager_->ShutdownOnSyncThread(reason); |
556 sync_manager_.reset(); | 548 sync_manager_.reset(); |
557 } | 549 } |
558 } | 550 } |
559 | 551 |
560 void SyncBackendHostCore::DoConfigureSyncer( | 552 void SyncBackendHostCore::DoConfigureSyncer( |
561 syncer::ConfigureReason reason, | 553 ConfigureReason reason, |
562 const DoConfigureSyncerTypes& config_types, | 554 const DoConfigureSyncerTypes& config_types, |
563 const syncer::ModelSafeRoutingInfo routing_info, | 555 const ModelSafeRoutingInfo routing_info, |
564 const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>& | 556 const base::Callback<void(ModelTypeSet, ModelTypeSet)>& ready_task, |
565 ready_task, | |
566 const base::Closure& retry_callback) { | 557 const base::Closure& retry_callback) { |
567 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 558 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
568 DCHECK(!ready_task.is_null()); | 559 DCHECK(!ready_task.is_null()); |
569 DCHECK(!retry_callback.is_null()); | 560 DCHECK(!retry_callback.is_null()); |
570 base::Closure chained_ready_task(base::Bind( | 561 base::Closure chained_ready_task(base::Bind( |
571 &SyncBackendHostCore::DoFinishConfigureDataTypes, | 562 &SyncBackendHostCore::DoFinishConfigureDataTypes, |
572 weak_ptr_factory_.GetWeakPtr(), config_types.to_download, ready_task)); | 563 weak_ptr_factory_.GetWeakPtr(), config_types.to_download, ready_task)); |
573 base::Closure chained_retry_task( | 564 base::Closure chained_retry_task( |
574 base::Bind(&SyncBackendHostCore::DoRetryConfiguration, | 565 base::Bind(&SyncBackendHostCore::DoRetryConfiguration, |
575 weak_ptr_factory_.GetWeakPtr(), retry_callback)); | 566 weak_ptr_factory_.GetWeakPtr(), retry_callback)); |
576 sync_manager_->ConfigureSyncer(reason, config_types.to_download, | 567 sync_manager_->ConfigureSyncer(reason, config_types.to_download, |
577 config_types.to_purge, config_types.to_journal, | 568 config_types.to_purge, config_types.to_journal, |
578 config_types.to_unapply, routing_info, | 569 config_types.to_unapply, routing_info, |
579 chained_ready_task, chained_retry_task); | 570 chained_ready_task, chained_retry_task); |
580 } | 571 } |
581 | 572 |
582 void SyncBackendHostCore::DoFinishConfigureDataTypes( | 573 void SyncBackendHostCore::DoFinishConfigureDataTypes( |
583 syncer::ModelTypeSet types_to_config, | 574 ModelTypeSet types_to_config, |
584 const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>& | 575 const base::Callback<void(ModelTypeSet, ModelTypeSet)>& ready_task) { |
585 ready_task) { | |
586 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 576 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
587 | 577 |
588 // Update the enabled types for the bridge and sync manager. | 578 // Update the enabled types for the bridge and sync manager. |
589 syncer::ModelSafeRoutingInfo routing_info; | 579 ModelSafeRoutingInfo routing_info; |
590 registrar_->GetModelSafeRoutingInfo(&routing_info); | 580 registrar_->GetModelSafeRoutingInfo(&routing_info); |
591 syncer::ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info); | 581 ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info); |
592 enabled_types.RemoveAll(syncer::ProxyTypes()); | 582 enabled_types.RemoveAll(ProxyTypes()); |
593 | 583 |
594 const syncer::ModelTypeSet failed_configuration_types = | 584 const ModelTypeSet failed_configuration_types = |
595 Difference(types_to_config, sync_manager_->InitialSyncEndedTypes()); | 585 Difference(types_to_config, sync_manager_->InitialSyncEndedTypes()); |
596 const syncer::ModelTypeSet succeeded_configuration_types = | 586 const ModelTypeSet succeeded_configuration_types = |
597 Difference(types_to_config, failed_configuration_types); | 587 Difference(types_to_config, failed_configuration_types); |
598 host_.Call(FROM_HERE, | 588 host_.Call(FROM_HERE, |
599 &SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop, | 589 &SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop, |
600 enabled_types, succeeded_configuration_types, | 590 enabled_types, succeeded_configuration_types, |
601 failed_configuration_types, ready_task); | 591 failed_configuration_types, ready_task); |
602 } | 592 } |
603 | 593 |
604 void SyncBackendHostCore::DoRetryConfiguration( | 594 void SyncBackendHostCore::DoRetryConfiguration( |
605 const base::Closure& retry_callback) { | 595 const base::Closure& retry_callback) { |
606 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 596 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
607 host_.Call(FROM_HERE, &SyncBackendHostImpl::RetryConfigurationOnFrontendLoop, | 597 host_.Call(FROM_HERE, &SyncBackendHostImpl::RetryConfigurationOnFrontendLoop, |
608 retry_callback); | 598 retry_callback); |
609 } | 599 } |
610 | 600 |
611 void SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding() { | 601 void SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding() { |
612 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 602 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
613 forward_protocol_events_ = true; | 603 forward_protocol_events_ = true; |
614 | 604 |
615 if (sync_manager_) { | 605 if (sync_manager_) { |
616 // Grab our own copy of the buffered events. | 606 // Grab our own copy of the buffered events. |
617 // The buffer is not modified by this operation. | 607 // The buffer is not modified by this operation. |
618 std::vector<std::unique_ptr<syncer::ProtocolEvent>> buffered_events = | 608 std::vector<std::unique_ptr<ProtocolEvent>> buffered_events = |
619 sync_manager_->GetBufferedProtocolEvents(); | 609 sync_manager_->GetBufferedProtocolEvents(); |
620 | 610 |
621 // Send them all over the fence to the host. | 611 // Send them all over the fence to the host. |
622 for (auto& event : buffered_events) { | 612 for (auto& event : buffered_events) { |
623 host_.Call(FROM_HERE, | 613 host_.Call(FROM_HERE, |
624 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, | 614 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, |
625 base::Passed(std::move(event))); | 615 base::Passed(std::move(event))); |
626 } | 616 } |
627 } | 617 } |
628 } | 618 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 FROM_HERE, base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), | 662 FROM_HERE, base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), |
673 this, &SyncBackendHostCore::SaveChanges); | 663 this, &SyncBackendHostCore::SaveChanges); |
674 } | 664 } |
675 | 665 |
676 void SyncBackendHostCore::SaveChanges() { | 666 void SyncBackendHostCore::SaveChanges() { |
677 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 667 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
678 sync_manager_->SaveChanges(); | 668 sync_manager_->SaveChanges(); |
679 } | 669 } |
680 | 670 |
681 void SyncBackendHostCore::DoClearServerData( | 671 void SyncBackendHostCore::DoClearServerData( |
682 const syncer::SyncManager::ClearServerDataCallback& frontend_callback) { | 672 const SyncManager::ClearServerDataCallback& frontend_callback) { |
683 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 673 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
684 const syncer::SyncManager::ClearServerDataCallback callback = | 674 const SyncManager::ClearServerDataCallback callback = |
685 base::Bind(&SyncBackendHostCore::ClearServerDataDone, | 675 base::Bind(&SyncBackendHostCore::ClearServerDataDone, |
686 weak_ptr_factory_.GetWeakPtr(), frontend_callback); | 676 weak_ptr_factory_.GetWeakPtr(), frontend_callback); |
687 sync_manager_->ClearServerData(callback); | 677 sync_manager_->ClearServerData(callback); |
688 } | 678 } |
689 | 679 |
690 void SyncBackendHostCore::DoOnCookieJarChanged(bool account_mismatch, | 680 void SyncBackendHostCore::DoOnCookieJarChanged(bool account_mismatch, |
691 bool empty_jar) { | 681 bool empty_jar) { |
692 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 682 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
693 sync_manager_->OnCookieJarChanged(account_mismatch, empty_jar); | 683 sync_manager_->OnCookieJarChanged(account_mismatch, empty_jar); |
694 } | 684 } |
695 | 685 |
696 void SyncBackendHostCore::ClearServerDataDone( | 686 void SyncBackendHostCore::ClearServerDataDone( |
697 const base::Closure& frontend_callback) { | 687 const base::Closure& frontend_callback) { |
698 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 688 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
699 host_.Call(FROM_HERE, &SyncBackendHostImpl::ClearServerDataDoneOnFrontendLoop, | 689 host_.Call(FROM_HERE, &SyncBackendHostImpl::ClearServerDataDoneOnFrontendLoop, |
700 frontend_callback); | 690 frontend_callback); |
701 } | 691 } |
702 | 692 |
703 } // namespace browser_sync | 693 } // namespace syncer |
OLD | NEW |