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

Side by Side Diff: components/sync/driver/glue/sync_backend_host_core.cc

Issue 2203673002: [Sync] Move //components/sync_driver to //components/sync/driver. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@sd-a
Patch Set: Full change rebased on static lib. Created 4 years, 4 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 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"
11 #include "base/location.h" 11 #include "base/location.h"
12 #include "base/single_thread_task_runner.h" 12 #include "base/single_thread_task_runner.h"
13 #include "components/data_use_measurement/core/data_use_user_data.h" 13 #include "components/data_use_measurement/core/data_use_user_data.h"
14 #include "components/invalidation/public/invalidation_util.h" 14 #include "components/invalidation/public/invalidation_util.h"
15 #include "components/invalidation/public/object_id_invalidation_map.h" 15 #include "components/invalidation/public/object_id_invalidation_map.h"
16 #include "components/sync/core/http_post_provider_factory.h" 16 #include "components/sync/core/http_post_provider_factory.h"
17 #include "components/sync/core/internal_components_factory.h" 17 #include "components/sync/core/internal_components_factory.h"
18 #include "components/sync/core/sync_manager.h" 18 #include "components/sync/core/sync_manager.h"
19 #include "components/sync/core/sync_manager_factory.h" 19 #include "components/sync/core/sync_manager_factory.h"
20 #include "components/sync/driver/glue/sync_backend_registrar.h"
21 #include "components/sync/driver/invalidation_adapter.h"
22 #include "components/sync/driver/local_device_info_provider_impl.h"
20 #include "components/sync/engine/events/protocol_event.h" 23 #include "components/sync/engine/events/protocol_event.h"
21 #include "components/sync/sessions/commit_counters.h" 24 #include "components/sync/sessions/commit_counters.h"
22 #include "components/sync/sessions/status_counters.h" 25 #include "components/sync/sessions/status_counters.h"
23 #include "components/sync/sessions/sync_session_snapshot.h" 26 #include "components/sync/sessions/sync_session_snapshot.h"
24 #include "components/sync/sessions/update_counters.h" 27 #include "components/sync/sessions/update_counters.h"
25 #include "components/sync_driver/glue/sync_backend_registrar.h"
26 #include "components/sync_driver/invalidation_adapter.h"
27 #include "components/sync_driver/local_device_info_provider_impl.h"
28 #include "url/gurl.h" 28 #include "url/gurl.h"
29 29
30 // Helper macros to log with the syncer thread name; useful when there 30 // Helper macros to log with the syncer thread name; useful when there
31 // are multiple syncers involved. 31 // are multiple syncers involved.
32 32
33 #define SLOG(severity) LOG(severity) << name_ << ": " 33 #define SLOG(severity) LOG(severity) << name_ << ": "
34 34
35 #define SDVLOG(verbose_level) DVLOG(verbose_level) << name_ << ": " 35 #define SDVLOG(verbose_level) DVLOG(verbose_level) << name_ << ": "
36 36
37 static const int kSaveChangesIntervalSeconds = 10; 37 static const int kSaveChangesIntervalSeconds = 10;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 SyncBackendHostCore::~SyncBackendHostCore() { 128 SyncBackendHostCore::~SyncBackendHostCore() {
129 DCHECK(!sync_manager_.get()); 129 DCHECK(!sync_manager_.get());
130 } 130 }
131 131
132 void SyncBackendHostCore::OnSyncCycleCompleted( 132 void SyncBackendHostCore::OnSyncCycleCompleted(
133 const syncer::sessions::SyncSessionSnapshot& snapshot) { 133 const syncer::sessions::SyncSessionSnapshot& snapshot) {
134 if (!sync_loop_) 134 if (!sync_loop_)
135 return; 135 return;
136 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 136 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
137 137
138 host_.Call( 138 host_.Call(FROM_HERE,
139 FROM_HERE, 139 &SyncBackendHostImpl::HandleSyncCycleCompletedOnFrontendLoop,
140 &SyncBackendHostImpl::HandleSyncCycleCompletedOnFrontendLoop, 140 snapshot);
141 snapshot);
142 } 141 }
143 142
144 void SyncBackendHostCore::DoRefreshTypes(syncer::ModelTypeSet types) { 143 void SyncBackendHostCore::DoRefreshTypes(syncer::ModelTypeSet types) {
145 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 144 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
146 sync_manager_->RefreshTypes(types); 145 sync_manager_->RefreshTypes(types);
147 } 146 }
148 147
149 void SyncBackendHostCore::OnInitializationComplete( 148 void SyncBackendHostCore::OnInitializationComplete(
150 const syncer::WeakHandle<syncer::JsBackend>& js_backend, 149 const syncer::WeakHandle<syncer::JsBackend>& js_backend,
151 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& 150 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>&
(...skipping 28 matching lines...) Expand all
180 179
181 // Before proceeding any further, we need to download the control types and 180 // Before proceeding any further, we need to download the control types and
182 // purge any partial data (ie. data downloaded for a type that was on its way 181 // purge any partial data (ie. data downloaded for a type that was on its way
183 // to being initially synced, but didn't quite make it.). The following 182 // to being initially synced, but didn't quite make it.). The following
184 // configure cycle will take care of this. It depends on the registrar state 183 // configure cycle will take care of this. It depends on the registrar state
185 // which we initialize below to ensure that we don't perform any downloads if 184 // which we initialize below to ensure that we don't perform any downloads if
186 // all control types have already completed their initial sync. 185 // all control types have already completed their initial sync.
187 registrar_->SetInitialTypes(restored_types); 186 registrar_->SetInitialTypes(restored_types);
188 187
189 syncer::ConfigureReason reason = 188 syncer::ConfigureReason reason =
190 restored_types.Empty() ? 189 restored_types.Empty() ? syncer::CONFIGURE_REASON_NEW_CLIENT
191 syncer::CONFIGURE_REASON_NEW_CLIENT : 190 : syncer::CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE;
192 syncer::CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE;
193 191
194 syncer::ModelTypeSet new_control_types = registrar_->ConfigureDataTypes( 192 syncer::ModelTypeSet new_control_types = registrar_->ConfigureDataTypes(
195 syncer::ControlTypes(), syncer::ModelTypeSet()); 193 syncer::ControlTypes(), syncer::ModelTypeSet());
196 syncer::ModelSafeRoutingInfo routing_info; 194 syncer::ModelSafeRoutingInfo routing_info;
197 registrar_->GetModelSafeRoutingInfo(&routing_info); 195 registrar_->GetModelSafeRoutingInfo(&routing_info);
198 SDVLOG(1) << "Control Types " 196 SDVLOG(1) << "Control Types "
199 << syncer::ModelTypeSetToString(new_control_types) 197 << syncer::ModelTypeSetToString(new_control_types)
200 << " added; calling ConfigureSyncer"; 198 << " added; calling ConfigureSyncer";
201 199
202 syncer::ModelTypeSet types_to_purge = 200 syncer::ModelTypeSet types_to_purge = syncer::Difference(
203 syncer::Difference(syncer::ModelTypeSet::All(), 201 syncer::ModelTypeSet::All(), GetRoutingInfoTypes(routing_info));
204 GetRoutingInfoTypes(routing_info));
205 202
206 sync_manager_->ConfigureSyncer( 203 sync_manager_->ConfigureSyncer(
207 reason, 204 reason, new_control_types, types_to_purge, syncer::ModelTypeSet(),
208 new_control_types, 205 syncer::ModelTypeSet(), routing_info,
209 types_to_purge,
210 syncer::ModelTypeSet(),
211 syncer::ModelTypeSet(),
212 routing_info,
213 base::Bind(&SyncBackendHostCore::DoInitialProcessControlTypes, 206 base::Bind(&SyncBackendHostCore::DoInitialProcessControlTypes,
214 weak_ptr_factory_.GetWeakPtr()), 207 weak_ptr_factory_.GetWeakPtr()),
215 base::Closure()); 208 base::Closure());
216 } 209 }
217 210
218 void SyncBackendHostCore::OnConnectionStatusChange( 211 void SyncBackendHostCore::OnConnectionStatusChange(
219 syncer::ConnectionStatus status) { 212 syncer::ConnectionStatus status) {
220 if (!sync_loop_) 213 if (!sync_loop_)
221 return; 214 return;
222 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 215 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
223 host_.Call( 216 host_.Call(FROM_HERE,
224 FROM_HERE, 217 &SyncBackendHostImpl::HandleConnectionStatusChangeOnFrontendLoop,
225 &SyncBackendHostImpl::HandleConnectionStatusChangeOnFrontendLoop, status); 218 status);
226 } 219 }
227 220
228 void SyncBackendHostCore::OnPassphraseRequired( 221 void SyncBackendHostCore::OnPassphraseRequired(
229 syncer::PassphraseRequiredReason reason, 222 syncer::PassphraseRequiredReason reason,
230 const sync_pb::EncryptedData& pending_keys) { 223 const sync_pb::EncryptedData& pending_keys) {
231 if (!sync_loop_) 224 if (!sync_loop_)
232 return; 225 return;
233 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 226 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
234 host_.Call( 227 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyPassphraseRequired, reason,
235 FROM_HERE, 228 pending_keys);
236 &SyncBackendHostImpl::NotifyPassphraseRequired, reason, pending_keys);
237 } 229 }
238 230
239 void SyncBackendHostCore::OnPassphraseAccepted() { 231 void SyncBackendHostCore::OnPassphraseAccepted() {
240 if (!sync_loop_) 232 if (!sync_loop_)
241 return; 233 return;
242 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 234 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
243 host_.Call( 235 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyPassphraseAccepted);
244 FROM_HERE,
245 &SyncBackendHostImpl::NotifyPassphraseAccepted);
246 } 236 }
247 237
248 void SyncBackendHostCore::OnBootstrapTokenUpdated( 238 void SyncBackendHostCore::OnBootstrapTokenUpdated(
249 const std::string& bootstrap_token, 239 const std::string& bootstrap_token,
250 syncer::BootstrapTokenType type) { 240 syncer::BootstrapTokenType type) {
251 if (!sync_loop_) 241 if (!sync_loop_)
252 return; 242 return;
253 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 243 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
254 host_.Call(FROM_HERE, 244 host_.Call(FROM_HERE, &SyncBackendHostImpl::PersistEncryptionBootstrapToken,
255 &SyncBackendHostImpl::PersistEncryptionBootstrapToken, 245 bootstrap_token, type);
256 bootstrap_token,
257 type);
258 } 246 }
259 247
260 void SyncBackendHostCore::OnEncryptedTypesChanged( 248 void SyncBackendHostCore::OnEncryptedTypesChanged(
261 syncer::ModelTypeSet encrypted_types, 249 syncer::ModelTypeSet encrypted_types,
262 bool encrypt_everything) { 250 bool encrypt_everything) {
263 if (!sync_loop_) 251 if (!sync_loop_)
264 return; 252 return;
265 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 253 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
266 // NOTE: We're in a transaction. 254 // NOTE: We're in a transaction.
267 host_.Call( 255 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyEncryptedTypesChanged,
268 FROM_HERE, 256 encrypted_types, encrypt_everything);
269 &SyncBackendHostImpl::NotifyEncryptedTypesChanged,
270 encrypted_types, encrypt_everything);
271 } 257 }
272 258
273 void SyncBackendHostCore::OnEncryptionComplete() { 259 void SyncBackendHostCore::OnEncryptionComplete() {
274 if (!sync_loop_) 260 if (!sync_loop_)
275 return; 261 return;
276 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 262 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
277 // NOTE: We're in a transaction. 263 // NOTE: We're in a transaction.
278 host_.Call( 264 host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyEncryptionComplete);
279 FROM_HERE,
280 &SyncBackendHostImpl::NotifyEncryptionComplete);
281 } 265 }
282 266
283 void SyncBackendHostCore::OnCryptographerStateChanged( 267 void SyncBackendHostCore::OnCryptographerStateChanged(
284 syncer::Cryptographer* cryptographer) { 268 syncer::Cryptographer* cryptographer) {
285 // Do nothing. 269 // Do nothing.
286 } 270 }
287 271
288 void SyncBackendHostCore::OnPassphraseTypeChanged( 272 void SyncBackendHostCore::OnPassphraseTypeChanged(syncer::PassphraseType type,
289 syncer::PassphraseType type, base::Time passphrase_time) { 273 base::Time passphrase_time) {
290 host_.Call( 274 host_.Call(FROM_HERE,
291 FROM_HERE, 275 &SyncBackendHostImpl::HandlePassphraseTypeChangedOnFrontendLoop,
292 &SyncBackendHostImpl::HandlePassphraseTypeChangedOnFrontendLoop, 276 type, passphrase_time);
293 type, passphrase_time);
294 } 277 }
295 278
296 void SyncBackendHostCore::OnLocalSetPassphraseEncryption( 279 void SyncBackendHostCore::OnLocalSetPassphraseEncryption(
297 const syncer::SyncEncryptionHandler::NigoriState& nigori_state) { 280 const syncer::SyncEncryptionHandler::NigoriState& nigori_state) {
298 host_.Call( 281 host_.Call(
299 FROM_HERE, 282 FROM_HERE,
300 &SyncBackendHostImpl::HandleLocalSetPassphraseEncryptionOnFrontendLoop, 283 &SyncBackendHostImpl::HandleLocalSetPassphraseEncryptionOnFrontendLoop,
301 nigori_state); 284 nigori_state);
302 } 285 }
303 286
(...skipping 22 matching lines...) Expand all
326 FROM_HERE, 309 FROM_HERE,
327 &SyncBackendHostImpl::HandleDirectoryStatusCountersUpdatedOnFrontendLoop, 310 &SyncBackendHostImpl::HandleDirectoryStatusCountersUpdatedOnFrontendLoop,
328 type, counters); 311 type, counters);
329 } 312 }
330 313
331 void SyncBackendHostCore::OnActionableError( 314 void SyncBackendHostCore::OnActionableError(
332 const syncer::SyncProtocolError& sync_error) { 315 const syncer::SyncProtocolError& sync_error) {
333 if (!sync_loop_) 316 if (!sync_loop_)
334 return; 317 return;
335 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 318 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
336 host_.Call( 319 host_.Call(FROM_HERE,
337 FROM_HERE, 320 &SyncBackendHostImpl::HandleActionableErrorEventOnFrontendLoop,
338 &SyncBackendHostImpl::HandleActionableErrorEventOnFrontendLoop, 321 sync_error);
339 sync_error);
340 } 322 }
341 323
342 void SyncBackendHostCore::OnMigrationRequested(syncer::ModelTypeSet types) { 324 void SyncBackendHostCore::OnMigrationRequested(syncer::ModelTypeSet types) {
343 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 325 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
344 host_.Call( 326 host_.Call(FROM_HERE,
345 FROM_HERE, 327 &SyncBackendHostImpl::HandleMigrationRequestedOnFrontendLoop,
346 &SyncBackendHostImpl::HandleMigrationRequestedOnFrontendLoop, 328 types);
347 types);
348 } 329 }
349 330
350 void SyncBackendHostCore::OnProtocolEvent( 331 void SyncBackendHostCore::OnProtocolEvent(const syncer::ProtocolEvent& event) {
351 const syncer::ProtocolEvent& event) {
352 // TODO(rlarocque): Find a way to pass event_clone as a scoped_ptr. 332 // TODO(rlarocque): Find a way to pass event_clone as a scoped_ptr.
353 if (forward_protocol_events_) { 333 if (forward_protocol_events_) {
354 std::unique_ptr<syncer::ProtocolEvent> event_clone(event.Clone()); 334 std::unique_ptr<syncer::ProtocolEvent> event_clone(event.Clone());
355 host_.Call( 335 host_.Call(FROM_HERE,
356 FROM_HERE, 336 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop,
357 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, 337 event_clone.release());
358 event_clone.release());
359 } 338 }
360 } 339 }
361 340
362 void SyncBackendHostCore::DoOnInvalidatorStateChange( 341 void SyncBackendHostCore::DoOnInvalidatorStateChange(
363 syncer::InvalidatorState state) { 342 syncer::InvalidatorState state) {
364 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 343 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
365 sync_manager_->SetInvalidatorEnabled(state == syncer::INVALIDATIONS_ENABLED); 344 sync_manager_->SetInvalidatorEnabled(state == syncer::INVALIDATIONS_ENABLED);
366 } 345 }
367 346
368 void SyncBackendHostCore::DoOnIncomingInvalidation( 347 void SyncBackendHostCore::DoOnIncomingInvalidation(
(...skipping 22 matching lines...) Expand all
391 } 370 }
392 std::unique_ptr<syncer::InvalidationInterface> inv_adapter( 371 std::unique_ptr<syncer::InvalidationInterface> inv_adapter(
393 new InvalidationAdapter(invalidation)); 372 new InvalidationAdapter(invalidation));
394 sync_manager_->OnIncomingInvalidation(type, std::move(inv_adapter)); 373 sync_manager_->OnIncomingInvalidation(type, std::move(inv_adapter));
395 if (!invalidation.is_unknown_version()) 374 if (!invalidation.is_unknown_version())
396 last_invalidation_versions_[type] = invalidation.version(); 375 last_invalidation_versions_[type] = invalidation.version();
397 } 376 }
398 } 377 }
399 } 378 }
400 379
401 host_.Call( 380 host_.Call(FROM_HERE, &SyncBackendHostImpl::UpdateInvalidationVersions,
402 FROM_HERE, 381 last_invalidation_versions_);
403 &SyncBackendHostImpl::UpdateInvalidationVersions,
404 last_invalidation_versions_);
405 } 382 }
406 383
407 void SyncBackendHostCore::DoInitialize( 384 void SyncBackendHostCore::DoInitialize(
408 std::unique_ptr<DoInitializeOptions> options) { 385 std::unique_ptr<DoInitializeOptions> options) {
409 DCHECK(!sync_loop_); 386 DCHECK(!sync_loop_);
410 sync_loop_ = options->sync_loop; 387 sync_loop_ = options->sync_loop;
411 DCHECK(sync_loop_); 388 DCHECK(sync_loop_);
412 389
413 // Finish initializing the HttpBridgeFactory. We do this here because 390 // Finish initializing the HttpBridgeFactory. We do this here because
414 // building the user agent may block on some platforms. 391 // building the user agent may block on some platforms.
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 const syncer::ModelSafeRoutingInfo& routing_info, 454 const syncer::ModelSafeRoutingInfo& routing_info,
478 base::Time last_poll_time) { 455 base::Time last_poll_time) {
479 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 456 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
480 sync_manager_->StartSyncingNormally(routing_info, last_poll_time); 457 sync_manager_->StartSyncingNormally(routing_info, last_poll_time);
481 } 458 }
482 459
483 void SyncBackendHostCore::DoSetEncryptionPassphrase( 460 void SyncBackendHostCore::DoSetEncryptionPassphrase(
484 const std::string& passphrase, 461 const std::string& passphrase,
485 bool is_explicit) { 462 bool is_explicit) {
486 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 463 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
487 sync_manager_->GetEncryptionHandler()->SetEncryptionPassphrase( 464 sync_manager_->GetEncryptionHandler()->SetEncryptionPassphrase(passphrase,
488 passphrase, is_explicit); 465 is_explicit);
489 } 466 }
490 467
491 void SyncBackendHostCore::DoInitialProcessControlTypes() { 468 void SyncBackendHostCore::DoInitialProcessControlTypes() {
492 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 469 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
493 470
494 DVLOG(1) << "Initilalizing Control Types"; 471 DVLOG(1) << "Initilalizing Control Types";
495 472
496 // Initialize encryption. 473 // Initialize encryption.
497 sync_manager_->GetEncryptionHandler()->Init(); 474 sync_manager_->GetEncryptionHandler()->Init();
498 475
499 // Note: experiments are currently handled via SBH::AddExperimentalTypes, 476 // Note: experiments are currently handled via SBH::AddExperimentalTypes,
500 // which is called at the end of every sync cycle. 477 // which is called at the end of every sync cycle.
501 // TODO(zea): eventually add an experiment handler and initialize it here. 478 // TODO(zea): eventually add an experiment handler and initialize it here.
502 479
503 if (!sync_manager_->GetUserShare()) { // NULL in some tests. 480 if (!sync_manager_->GetUserShare()) { // NULL in some tests.
504 DVLOG(1) << "Skipping initialization of DeviceInfo"; 481 DVLOG(1) << "Skipping initialization of DeviceInfo";
505 host_.Call( 482 host_.Call(FROM_HERE,
506 FROM_HERE, 483 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop);
507 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop);
508 return; 484 return;
509 } 485 }
510 486
511 if (!sync_manager_->InitialSyncEndedTypes().HasAll(syncer::ControlTypes())) { 487 if (!sync_manager_->InitialSyncEndedTypes().HasAll(syncer::ControlTypes())) {
512 LOG(ERROR) << "Failed to download control types"; 488 LOG(ERROR) << "Failed to download control types";
513 host_.Call( 489 host_.Call(FROM_HERE,
514 FROM_HERE, 490 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop);
515 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop);
516 return; 491 return;
517 } 492 }
518 493
519 host_.Call(FROM_HERE, 494 host_.Call(FROM_HERE,
520 &SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop, 495 &SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop,
521 js_backend_, debug_info_listener_, 496 js_backend_, debug_info_listener_,
522 base::Passed(sync_manager_->GetModelTypeConnectorProxy()), 497 base::Passed(sync_manager_->GetModelTypeConnectorProxy()),
523 sync_manager_->cache_guid()); 498 sync_manager_->cache_guid());
524 499
525 js_backend_.Reset(); 500 js_backend_.Reset();
526 debug_info_listener_.Reset(); 501 debug_info_listener_.Reset();
527 } 502 }
528 503
529 void SyncBackendHostCore::DoSetDecryptionPassphrase( 504 void SyncBackendHostCore::DoSetDecryptionPassphrase(
530 const std::string& passphrase) { 505 const std::string& passphrase) {
531 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 506 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
532 sync_manager_->GetEncryptionHandler()->SetDecryptionPassphrase( 507 sync_manager_->GetEncryptionHandler()->SetDecryptionPassphrase(passphrase);
533 passphrase);
534 } 508 }
535 509
536 void SyncBackendHostCore::DoEnableEncryptEverything() { 510 void SyncBackendHostCore::DoEnableEncryptEverything() {
537 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 511 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
538 sync_manager_->GetEncryptionHandler()->EnableEncryptEverything(); 512 sync_manager_->GetEncryptionHandler()->EnableEncryptEverything();
539 } 513 }
540 514
541 void SyncBackendHostCore::ShutdownOnUIThread() { 515 void SyncBackendHostCore::ShutdownOnUIThread() {
542 // This will cut short any blocking network tasks, cut short any in-progress 516 // This will cut short any blocking network tasks, cut short any in-progress
543 // sync cycles, and prevent the creation of new blocking network tasks and new 517 // sync cycles, and prevent the creation of new blocking network tasks and new
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 sync_manager_->RemoveObserver(this); 555 sync_manager_->RemoveObserver(this);
582 sync_manager_->ShutdownOnSyncThread(reason); 556 sync_manager_->ShutdownOnSyncThread(reason);
583 sync_manager_.reset(); 557 sync_manager_.reset();
584 } 558 }
585 } 559 }
586 560
587 void SyncBackendHostCore::DoConfigureSyncer( 561 void SyncBackendHostCore::DoConfigureSyncer(
588 syncer::ConfigureReason reason, 562 syncer::ConfigureReason reason,
589 const DoConfigureSyncerTypes& config_types, 563 const DoConfigureSyncerTypes& config_types,
590 const syncer::ModelSafeRoutingInfo routing_info, 564 const syncer::ModelSafeRoutingInfo routing_info,
591 const base::Callback<void(syncer::ModelTypeSet, 565 const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>&
592 syncer::ModelTypeSet)>& ready_task, 566 ready_task,
593 const base::Closure& retry_callback) { 567 const base::Closure& retry_callback) {
594 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 568 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
595 DCHECK(!ready_task.is_null()); 569 DCHECK(!ready_task.is_null());
596 DCHECK(!retry_callback.is_null()); 570 DCHECK(!retry_callback.is_null());
597 base::Closure chained_ready_task( 571 base::Closure chained_ready_task(base::Bind(
598 base::Bind(&SyncBackendHostCore::DoFinishConfigureDataTypes, 572 &SyncBackendHostCore::DoFinishConfigureDataTypes,
599 weak_ptr_factory_.GetWeakPtr(), 573 weak_ptr_factory_.GetWeakPtr(), config_types.to_download, ready_task));
600 config_types.to_download,
601 ready_task));
602 base::Closure chained_retry_task( 574 base::Closure chained_retry_task(
603 base::Bind(&SyncBackendHostCore::DoRetryConfiguration, 575 base::Bind(&SyncBackendHostCore::DoRetryConfiguration,
604 weak_ptr_factory_.GetWeakPtr(), 576 weak_ptr_factory_.GetWeakPtr(), retry_callback));
605 retry_callback)); 577 sync_manager_->ConfigureSyncer(reason, config_types.to_download,
606 sync_manager_->ConfigureSyncer(reason, 578 config_types.to_purge, config_types.to_journal,
607 config_types.to_download, 579 config_types.to_unapply, routing_info,
608 config_types.to_purge, 580 chained_ready_task, chained_retry_task);
609 config_types.to_journal,
610 config_types.to_unapply,
611 routing_info,
612 chained_ready_task,
613 chained_retry_task);
614 } 581 }
615 582
616 void SyncBackendHostCore::DoFinishConfigureDataTypes( 583 void SyncBackendHostCore::DoFinishConfigureDataTypes(
617 syncer::ModelTypeSet types_to_config, 584 syncer::ModelTypeSet types_to_config,
618 const base::Callback<void(syncer::ModelTypeSet, 585 const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>&
619 syncer::ModelTypeSet)>& ready_task) { 586 ready_task) {
620 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 587 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
621 588
622 // Update the enabled types for the bridge and sync manager. 589 // Update the enabled types for the bridge and sync manager.
623 syncer::ModelSafeRoutingInfo routing_info; 590 syncer::ModelSafeRoutingInfo routing_info;
624 registrar_->GetModelSafeRoutingInfo(&routing_info); 591 registrar_->GetModelSafeRoutingInfo(&routing_info);
625 syncer::ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info); 592 syncer::ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info);
626 enabled_types.RemoveAll(syncer::ProxyTypes()); 593 enabled_types.RemoveAll(syncer::ProxyTypes());
627 594
628 const syncer::ModelTypeSet failed_configuration_types = 595 const syncer::ModelTypeSet failed_configuration_types =
629 Difference(types_to_config, sync_manager_->InitialSyncEndedTypes()); 596 Difference(types_to_config, sync_manager_->InitialSyncEndedTypes());
630 const syncer::ModelTypeSet succeeded_configuration_types = 597 const syncer::ModelTypeSet succeeded_configuration_types =
631 Difference(types_to_config, failed_configuration_types); 598 Difference(types_to_config, failed_configuration_types);
632 host_.Call(FROM_HERE, 599 host_.Call(FROM_HERE,
633 &SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop, 600 &SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop,
634 enabled_types, 601 enabled_types, succeeded_configuration_types,
635 succeeded_configuration_types, 602 failed_configuration_types, ready_task);
636 failed_configuration_types,
637 ready_task);
638 } 603 }
639 604
640 void SyncBackendHostCore::DoRetryConfiguration( 605 void SyncBackendHostCore::DoRetryConfiguration(
641 const base::Closure& retry_callback) { 606 const base::Closure& retry_callback) {
642 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 607 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
643 host_.Call(FROM_HERE, 608 host_.Call(FROM_HERE, &SyncBackendHostImpl::RetryConfigurationOnFrontendLoop,
644 &SyncBackendHostImpl::RetryConfigurationOnFrontendLoop,
645 retry_callback); 609 retry_callback);
646 } 610 }
647 611
648 void SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding() { 612 void SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding() {
649 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 613 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
650 forward_protocol_events_ = true; 614 forward_protocol_events_ = true;
651 615
652 if (sync_manager_) { 616 if (sync_manager_) {
653 // Grab our own copy of the buffered events. 617 // Grab our own copy of the buffered events.
654 // The buffer is not modified by this operation. 618 // The buffer is not modified by this operation.
655 std::vector<syncer::ProtocolEvent*> buffered_events; 619 std::vector<syncer::ProtocolEvent*> buffered_events;
656 sync_manager_->GetBufferedProtocolEvents().release(&buffered_events); 620 sync_manager_->GetBufferedProtocolEvents().release(&buffered_events);
657 621
658 // Send them all over the fence to the host. 622 // Send them all over the fence to the host.
659 for (std::vector<syncer::ProtocolEvent*>::iterator it = 623 for (std::vector<syncer::ProtocolEvent*>::iterator it =
660 buffered_events.begin(); it != buffered_events.end(); ++it) { 624 buffered_events.begin();
625 it != buffered_events.end(); ++it) {
661 // TODO(rlarocque): Make it explicit that host_ takes ownership. 626 // TODO(rlarocque): Make it explicit that host_ takes ownership.
662 host_.Call( 627 host_.Call(FROM_HERE,
663 FROM_HERE, 628 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, *it);
664 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop,
665 *it);
666 } 629 }
667 } 630 }
668 } 631 }
669 632
670 void SyncBackendHostCore::DisableProtocolEventForwarding() { 633 void SyncBackendHostCore::DisableProtocolEventForwarding() {
671 forward_protocol_events_ = false; 634 forward_protocol_events_ = false;
672 } 635 }
673 636
674 void SyncBackendHostCore::EnableDirectoryTypeDebugInfoForwarding() { 637 void SyncBackendHostCore::EnableDirectoryTypeDebugInfoForwarding() {
675 DCHECK(sync_manager_); 638 DCHECK(sync_manager_);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 types_vector.push_back(it.Get()); 680 types_vector.push_back(it.Get());
718 if (!enabled_types.Has(it.Get())) { 681 if (!enabled_types.Has(it.Get())) {
719 node_lists.push_back(new base::ListValue()); 682 node_lists.push_back(new base::ListValue());
720 } else { 683 } else {
721 node_lists.push_back( 684 node_lists.push_back(
722 sync_manager_->GetAllNodesForType(it.Get()).release()); 685 sync_manager_->GetAllNodesForType(it.Get()).release());
723 } 686 }
724 } 687 }
725 688
726 task_runner->PostTask( 689 task_runner->PostTask(
727 FROM_HERE, 690 FROM_HERE, base::Bind(callback, types_vector, base::Passed(&node_lists)));
728 base::Bind(callback, types_vector, base::Passed(&node_lists)));
729 } 691 }
730 692
731 void SyncBackendHostCore::StartSavingChanges() { 693 void SyncBackendHostCore::StartSavingChanges() {
732 // We may already be shut down. 694 // We may already be shut down.
733 if (!sync_loop_) 695 if (!sync_loop_)
734 return; 696 return;
735 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 697 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
736 DCHECK(!save_changes_timer_.get()); 698 DCHECK(!save_changes_timer_.get());
737 save_changes_timer_.reset(new base::RepeatingTimer()); 699 save_changes_timer_.reset(new base::RepeatingTimer());
738 save_changes_timer_->Start(FROM_HERE, 700 save_changes_timer_->Start(
739 base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), 701 FROM_HERE, base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds),
740 this, &SyncBackendHostCore::SaveChanges); 702 this, &SyncBackendHostCore::SaveChanges);
741 } 703 }
742 704
743 void SyncBackendHostCore::SaveChanges() { 705 void SyncBackendHostCore::SaveChanges() {
744 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 706 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
745 sync_manager_->SaveChanges(); 707 sync_manager_->SaveChanges();
746 } 708 }
747 709
748 void SyncBackendHostCore::DoClearServerData( 710 void SyncBackendHostCore::DoClearServerData(
749 const syncer::SyncManager::ClearServerDataCallback& frontend_callback) { 711 const syncer::SyncManager::ClearServerDataCallback& frontend_callback) {
(...skipping 10 matching lines...) Expand all
760 sync_manager_->OnCookieJarChanged(account_mismatch, empty_jar); 722 sync_manager_->OnCookieJarChanged(account_mismatch, empty_jar);
761 } 723 }
762 724
763 void SyncBackendHostCore::ClearServerDataDone( 725 void SyncBackendHostCore::ClearServerDataDone(
764 const base::Closure& frontend_callback) { 726 const base::Closure& frontend_callback) {
765 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); 727 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread());
766 host_.Call(FROM_HERE, &SyncBackendHostImpl::ClearServerDataDoneOnFrontendLoop, 728 host_.Call(FROM_HERE, &SyncBackendHostImpl::ClearServerDataDoneOnFrontendLoop,
767 frontend_callback); 729 frontend_callback);
768 } 730 }
769 731
770
771 } // namespace browser_sync 732 } // namespace browser_sync
OLDNEW
« no previous file with comments | « components/sync/driver/glue/sync_backend_host_core.h ('k') | components/sync/driver/glue/sync_backend_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698