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

Side by Side Diff: components/sync/driver/glue/sync_backend_host_impl.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_impl.h" 5 #include "components/sync/driver/glue/sync_backend_host_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/feature_list.h" 12 #include "base/feature_list.h"
13 #include "base/location.h" 13 #include "base/location.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/threading/thread_task_runner_handle.h" 15 #include "base/threading/thread_task_runner_handle.h"
16 #include "components/invalidation/public/invalidation_service.h" 16 #include "components/invalidation/public/invalidation_service.h"
17 #include "components/invalidation/public/object_id_invalidation_map.h" 17 #include "components/invalidation/public/object_id_invalidation_map.h"
18 #include "components/signin/core/browser/signin_client.h" 18 #include "components/signin/core/browser/signin_client.h"
19 #include "components/sync/base/experiments.h" 19 #include "components/sync/base/experiments.h"
20 #include "components/sync/base/sync_string_conversions.h" 20 #include "components/sync/base/sync_string_conversions.h"
21 #include "components/sync/core/activation_context.h" 21 #include "components/sync/core/activation_context.h"
22 #include "components/sync/core/base_transaction.h" 22 #include "components/sync/core/base_transaction.h"
23 #include "components/sync/core/http_bridge.h" 23 #include "components/sync/core/http_bridge.h"
24 #include "components/sync/core/internal_components_factory.h" 24 #include "components/sync/core/internal_components_factory.h"
25 #include "components/sync/core/internal_components_factory_impl.h" 25 #include "components/sync/core/internal_components_factory_impl.h"
26 #include "components/sync/core/sync_manager.h" 26 #include "components/sync/core/sync_manager.h"
27 #include "components/sync/core/sync_manager_factory.h" 27 #include "components/sync/core/sync_manager_factory.h"
28 #include "components/sync/driver/glue/sync_backend_host_core.h"
29 #include "components/sync/driver/glue/sync_backend_registrar.h"
30 #include "components/sync/driver/invalidation_helper.h"
31 #include "components/sync/driver/sync_client.h"
32 #include "components/sync/driver/sync_driver_switches.h"
33 #include "components/sync/driver/sync_frontend.h"
34 #include "components/sync/driver/sync_prefs.h"
28 #include "components/sync/engine/events/protocol_event.h" 35 #include "components/sync/engine/events/protocol_event.h"
29 #include "components/sync_driver/glue/sync_backend_host_core.h"
30 #include "components/sync_driver/glue/sync_backend_registrar.h"
31 #include "components/sync_driver/invalidation_helper.h"
32 #include "components/sync_driver/sync_client.h"
33 #include "components/sync_driver/sync_driver_switches.h"
34 #include "components/sync_driver/sync_frontend.h"
35 #include "components/sync_driver/sync_prefs.h"
36 36
37 // Helper macros to log with the syncer thread name; useful when there 37 // Helper macros to log with the syncer thread name; useful when there
38 // are multiple syncers involved. 38 // are multiple syncers involved.
39 39
40 #define SLOG(severity) LOG(severity) << name_ << ": " 40 #define SLOG(severity) LOG(severity) << name_ << ": "
41 41
42 #define SDVLOG(verbose_level) DVLOG(verbose_level) << name_ << ": " 42 #define SDVLOG(verbose_level) DVLOG(verbose_level) << name_ << ": "
43 43
44 using syncer::InternalComponentsFactory; 44 using syncer::InternalComponentsFactory;
45 45
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 std::unique_ptr<syncer::SyncEncryptionHandler::NigoriState> 91 std::unique_ptr<syncer::SyncEncryptionHandler::NigoriState>
92 saved_nigori_state) { 92 saved_nigori_state) {
93 registrar_.reset(new browser_sync::SyncBackendRegistrar( 93 registrar_.reset(new browser_sync::SyncBackendRegistrar(
94 name_, sync_client_, std::move(sync_thread), ui_thread_, db_thread, 94 name_, sync_client_, std::move(sync_thread), ui_thread_, db_thread,
95 file_thread)); 95 file_thread));
96 CHECK(registrar_->sync_thread()); 96 CHECK(registrar_->sync_thread());
97 97
98 frontend_ = frontend; 98 frontend_ = frontend;
99 DCHECK(frontend); 99 DCHECK(frontend);
100 100
101 std::vector<scoped_refptr<syncer::ModelSafeWorker> > workers; 101 std::vector<scoped_refptr<syncer::ModelSafeWorker>> workers;
102 registrar_->GetWorkers(&workers); 102 registrar_->GetWorkers(&workers);
103 103
104 InternalComponentsFactory::Switches factory_switches = { 104 InternalComponentsFactory::Switches factory_switches = {
105 InternalComponentsFactory::ENCRYPTION_KEYSTORE, 105 InternalComponentsFactory::ENCRYPTION_KEYSTORE,
106 InternalComponentsFactory::BACKOFF_NORMAL 106 InternalComponentsFactory::BACKOFF_NORMAL};
107 };
108 107
109 base::CommandLine* cl = base::CommandLine::ForCurrentProcess(); 108 base::CommandLine* cl = base::CommandLine::ForCurrentProcess();
110 if (cl->HasSwitch(switches::kSyncShortInitialRetryOverride)) { 109 if (cl->HasSwitch(switches::kSyncShortInitialRetryOverride)) {
111 factory_switches.backoff_override = 110 factory_switches.backoff_override =
112 InternalComponentsFactory::BACKOFF_SHORT_INITIAL_RETRY_OVERRIDE; 111 InternalComponentsFactory::BACKOFF_SHORT_INITIAL_RETRY_OVERRIDE;
113 } 112 }
114 if (cl->HasSwitch(switches::kSyncEnableGetUpdateAvoidance)) { 113 if (cl->HasSwitch(switches::kSyncEnableGetUpdateAvoidance)) {
115 factory_switches.pre_commit_updates_policy = 114 factory_switches.pre_commit_updates_policy =
116 InternalComponentsFactory::FORCE_ENABLE_PRE_COMMIT_UPDATE_AVOIDANCE; 115 InternalComponentsFactory::FORCE_ENABLE_PRE_COMMIT_UPDATE_AVOIDANCE;
117 } 116 }
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 323
325 disabled_types.PutAll(fatal_types); 324 disabled_types.PutAll(fatal_types);
326 disabled_types.PutAll(crypto_types); 325 disabled_types.PutAll(crypto_types);
327 disabled_types.PutAll(unready_types); 326 disabled_types.PutAll(unready_types);
328 327
329 syncer::ModelTypeSet active_types = 328 syncer::ModelTypeSet active_types =
330 GetDataTypesInState(CONFIGURE_ACTIVE, config_state_map); 329 GetDataTypesInState(CONFIGURE_ACTIVE, config_state_map);
331 syncer::ModelTypeSet clean_first_types = 330 syncer::ModelTypeSet clean_first_types =
332 GetDataTypesInState(CONFIGURE_CLEAN, config_state_map); 331 GetDataTypesInState(CONFIGURE_CLEAN, config_state_map);
333 syncer::ModelTypeSet types_to_download = registrar_->ConfigureDataTypes( 332 syncer::ModelTypeSet types_to_download = registrar_->ConfigureDataTypes(
334 syncer::Union(active_types, clean_first_types), 333 syncer::Union(active_types, clean_first_types), disabled_types);
335 disabled_types);
336 types_to_download.PutAll(clean_first_types); 334 types_to_download.PutAll(clean_first_types);
337 types_to_download.RemoveAll(syncer::ProxyTypes()); 335 types_to_download.RemoveAll(syncer::ProxyTypes());
338 if (!types_to_download.Empty()) 336 if (!types_to_download.Empty())
339 types_to_download.Put(syncer::NIGORI); 337 types_to_download.Put(syncer::NIGORI);
340 338
341 // TODO(sync): crbug.com/137550. 339 // TODO(sync): crbug.com/137550.
342 // It's dangerous to configure types that have progress markers. Types with 340 // It's dangerous to configure types that have progress markers. Types with
343 // progress markers can trigger a MIGRATION_DONE response. We are not 341 // progress markers can trigger a MIGRATION_DONE response. We are not
344 // prepared to handle a migration during a configure, so we must ensure that 342 // prepared to handle a migration during a configure, so we must ensure that
345 // all our types_to_download actually contain no data before we sync them. 343 // all our types_to_download actually contain no data before we sync them.
(...skipping 30 matching lines...) Expand all
376 // to be acted on again. 374 // to be acted on again.
377 fatal_types.RetainAll(types_to_purge); 375 fatal_types.RetainAll(types_to_purge);
378 syncer::ModelTypeSet unapply_types = 376 syncer::ModelTypeSet unapply_types =
379 syncer::Union(crypto_types, clean_first_types); 377 syncer::Union(crypto_types, clean_first_types);
380 unapply_types.RetainAll(types_to_purge); 378 unapply_types.RetainAll(types_to_purge);
381 379
382 DCHECK(syncer::Intersection(current_types, fatal_types).Empty()); 380 DCHECK(syncer::Intersection(current_types, fatal_types).Empty());
383 DCHECK(syncer::Intersection(current_types, crypto_types).Empty()); 381 DCHECK(syncer::Intersection(current_types, crypto_types).Empty());
384 DCHECK(current_types.HasAll(types_to_download)); 382 DCHECK(current_types.HasAll(types_to_download));
385 383
386 SDVLOG(1) << "Types " 384 SDVLOG(1) << "Types " << syncer::ModelTypeSetToString(types_to_download)
387 << syncer::ModelTypeSetToString(types_to_download)
388 << " added; calling DoConfigureSyncer"; 385 << " added; calling DoConfigureSyncer";
389 // Divide up the types into their corresponding actions (each is mutually 386 // Divide up the types into their corresponding actions (each is mutually
390 // exclusive): 387 // exclusive):
391 // - Types which have just been added to the routing info (types_to_download): 388 // - Types which have just been added to the routing info (types_to_download):
392 // are downloaded. 389 // are downloaded.
393 // - Types which have encountered a fatal error (fatal_types) are deleted 390 // - Types which have encountered a fatal error (fatal_types) are deleted
394 // from the directory and journaled in the delete journal. 391 // from the directory and journaled in the delete journal.
395 // - Types which have encountered a cryptographer error (crypto_types) are 392 // - Types which have encountered a cryptographer error (crypto_types) are
396 // unapplied (local state is purged but sync state is not). 393 // unapplied (local state is purged but sync state is not).
397 // - All other types not in the routing info (types just disabled) are deleted 394 // - All other types not in the routing info (types just disabled) are deleted
398 // from the directory. 395 // from the directory.
399 // - Everything else (enabled types and already disabled types) is not 396 // - Everything else (enabled types and already disabled types) is not
400 // touched. 397 // touched.
401 RequestConfigureSyncer(reason, 398 RequestConfigureSyncer(reason, types_to_download, types_to_purge, fatal_types,
402 types_to_download, 399 unapply_types, inactive_types, routing_info,
403 types_to_purge, 400 ready_task, retry_callback);
404 fatal_types,
405 unapply_types,
406 inactive_types,
407 routing_info,
408 ready_task,
409 retry_callback);
410 401
411 DCHECK(syncer::Intersection(active_types, types_to_purge).Empty()); 402 DCHECK(syncer::Intersection(active_types, types_to_purge).Empty());
412 DCHECK(syncer::Intersection(active_types, fatal_types).Empty()); 403 DCHECK(syncer::Intersection(active_types, fatal_types).Empty());
413 DCHECK(syncer::Intersection(active_types, unapply_types).Empty()); 404 DCHECK(syncer::Intersection(active_types, unapply_types).Empty());
414 DCHECK(syncer::Intersection(active_types, inactive_types).Empty()); 405 DCHECK(syncer::Intersection(active_types, inactive_types).Empty());
415 return syncer::Difference(active_types, types_to_download); 406 return syncer::Difference(active_types, types_to_download);
416 } 407 }
417 408
418 void SyncBackendHostImpl::EnableEncryptEverything() { 409 void SyncBackendHostImpl::EnableEncryptEverything() {
419 registrar_->sync_thread()->task_runner()->PostTask( 410 registrar_->sync_thread()->task_runner()->PostTask(
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 return cached_passphrase_type_; 464 return cached_passphrase_type_;
474 } 465 }
475 466
476 base::Time SyncBackendHostImpl::GetExplicitPassphraseTime() const { 467 base::Time SyncBackendHostImpl::GetExplicitPassphraseTime() const {
477 return cached_explicit_passphrase_time_; 468 return cached_explicit_passphrase_time_;
478 } 469 }
479 470
480 bool SyncBackendHostImpl::IsCryptographerReady( 471 bool SyncBackendHostImpl::IsCryptographerReady(
481 const syncer::BaseTransaction* trans) const { 472 const syncer::BaseTransaction* trans) const {
482 return initialized() && trans->GetCryptographer() && 473 return initialized() && trans->GetCryptographer() &&
483 trans->GetCryptographer()->is_ready(); 474 trans->GetCryptographer()->is_ready();
484 } 475 }
485 476
486 void SyncBackendHostImpl::GetModelSafeRoutingInfo( 477 void SyncBackendHostImpl::GetModelSafeRoutingInfo(
487 syncer::ModelSafeRoutingInfo* out) const { 478 syncer::ModelSafeRoutingInfo* out) const {
488 if (initialized()) { 479 if (initialized()) {
489 CHECK(registrar_.get()); 480 CHECK(registrar_.get());
490 registrar_->GetModelSafeRoutingInfo(out); 481 registrar_->GetModelSafeRoutingInfo(out);
491 } else { 482 } else {
492 NOTREACHED(); 483 NOTREACHED();
493 } 484 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 } 538 }
548 539
549 void SyncBackendHostImpl::RequestConfigureSyncer( 540 void SyncBackendHostImpl::RequestConfigureSyncer(
550 syncer::ConfigureReason reason, 541 syncer::ConfigureReason reason,
551 syncer::ModelTypeSet to_download, 542 syncer::ModelTypeSet to_download,
552 syncer::ModelTypeSet to_purge, 543 syncer::ModelTypeSet to_purge,
553 syncer::ModelTypeSet to_journal, 544 syncer::ModelTypeSet to_journal,
554 syncer::ModelTypeSet to_unapply, 545 syncer::ModelTypeSet to_unapply,
555 syncer::ModelTypeSet to_ignore, 546 syncer::ModelTypeSet to_ignore,
556 const syncer::ModelSafeRoutingInfo& routing_info, 547 const syncer::ModelSafeRoutingInfo& routing_info,
557 const base::Callback<void(syncer::ModelTypeSet, 548 const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>&
558 syncer::ModelTypeSet)>& ready_task, 549 ready_task,
559 const base::Closure& retry_callback) { 550 const base::Closure& retry_callback) {
560 DoConfigureSyncerTypes config_types; 551 DoConfigureSyncerTypes config_types;
561 config_types.to_download = to_download; 552 config_types.to_download = to_download;
562 config_types.to_purge = to_purge; 553 config_types.to_purge = to_purge;
563 config_types.to_journal = to_journal; 554 config_types.to_journal = to_journal;
564 config_types.to_unapply = to_unapply; 555 config_types.to_unapply = to_unapply;
565 registrar_->sync_thread()->task_runner()->PostTask( 556 registrar_->sync_thread()->task_runner()->PostTask(
566 FROM_HERE, 557 FROM_HERE,
567 base::Bind(&SyncBackendHostCore::DoConfigureSyncer, core_.get(), reason, 558 base::Bind(&SyncBackendHostCore::DoConfigureSyncer, core_.get(), reason,
568 config_types, routing_info, ready_task, retry_callback)); 559 config_types, routing_info, ready_task, retry_callback));
569 } 560 }
570 561
571 void SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop( 562 void SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop(
572 const syncer::ModelTypeSet enabled_types, 563 const syncer::ModelTypeSet enabled_types,
573 const syncer::ModelTypeSet succeeded_configuration_types, 564 const syncer::ModelTypeSet succeeded_configuration_types,
574 const syncer::ModelTypeSet failed_configuration_types, 565 const syncer::ModelTypeSet failed_configuration_types,
575 const base::Callback<void(syncer::ModelTypeSet, 566 const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>&
576 syncer::ModelTypeSet)>& ready_task) { 567 ready_task) {
577 if (!frontend_) 568 if (!frontend_)
578 return; 569 return;
579 570
580 if (invalidator_) { 571 if (invalidator_) {
581 CHECK(invalidator_->UpdateRegisteredInvalidationIds( 572 CHECK(invalidator_->UpdateRegisteredInvalidationIds(
582 this, ModelTypeSetToObjectIdSet(enabled_types))); 573 this, ModelTypeSetToObjectIdSet(enabled_types)));
583 } 574 }
584 575
585 if (!ready_task.is_null()) 576 if (!ready_task.is_null())
586 ready_task.Run(succeeded_configuration_types, failed_configuration_types); 577 ready_task.Run(succeeded_configuration_types, failed_configuration_types);
(...skipping 27 matching lines...) Expand all
614 605
615 // Fake a state change to initialize the SyncManager's cached invalidator 606 // Fake a state change to initialize the SyncManager's cached invalidator
616 // state. 607 // state.
617 OnInvalidatorStateChange(invalidator_->GetInvalidatorState()); 608 OnInvalidatorStateChange(invalidator_->GetInvalidatorState());
618 } 609 }
619 610
620 // Now that we've downloaded the control types, we can see if there are any 611 // Now that we've downloaded the control types, we can see if there are any
621 // experimental types to enable. This should be done before we inform 612 // experimental types to enable. This should be done before we inform
622 // the frontend to ensure they're visible in the customize screen. 613 // the frontend to ensure they're visible in the customize screen.
623 AddExperimentalTypes(); 614 AddExperimentalTypes();
624 frontend_->OnBackendInitialized(js_backend, 615 frontend_->OnBackendInitialized(js_backend, debug_info_listener, cache_guid,
625 debug_info_listener,
626 cache_guid,
627 true); 616 true);
628 } 617 }
629 618
630 void SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop() { 619 void SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop() {
631 DCHECK(frontend_task_runner_->BelongsToCurrentThread()); 620 DCHECK(frontend_task_runner_->BelongsToCurrentThread());
632 if (!frontend_) 621 if (!frontend_)
633 return; 622 return;
634 623
635 frontend_->OnBackendInitialized( 624 frontend_->OnBackendInitialized(
636 syncer::WeakHandle<syncer::JsBackend>(), 625 syncer::WeakHandle<syncer::JsBackend>(),
637 syncer::WeakHandle<syncer::DataTypeDebugInfoListener>(), 626 syncer::WeakHandle<syncer::DataTypeDebugInfoListener>(), "", false);
638 "",
639 false);
640 } 627 }
641 628
642 void SyncBackendHostImpl::HandleSyncCycleCompletedOnFrontendLoop( 629 void SyncBackendHostImpl::HandleSyncCycleCompletedOnFrontendLoop(
643 const syncer::sessions::SyncSessionSnapshot& snapshot) { 630 const syncer::sessions::SyncSessionSnapshot& snapshot) {
644 if (!frontend_) 631 if (!frontend_)
645 return; 632 return;
646 DCHECK(frontend_task_runner_->BelongsToCurrentThread()); 633 DCHECK(frontend_task_runner_->BelongsToCurrentThread());
647 634
648 last_snapshot_ = snapshot; 635 last_snapshot_ = snapshot;
649 636
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 frontend_->OnPassphraseAccepted(); 735 frontend_->OnPassphraseAccepted();
749 } 736 }
750 737
751 void SyncBackendHostImpl::NotifyEncryptedTypesChanged( 738 void SyncBackendHostImpl::NotifyEncryptedTypesChanged(
752 syncer::ModelTypeSet encrypted_types, 739 syncer::ModelTypeSet encrypted_types,
753 bool encrypt_everything) { 740 bool encrypt_everything) {
754 if (!frontend_) 741 if (!frontend_)
755 return; 742 return;
756 743
757 DCHECK(frontend_task_runner_->BelongsToCurrentThread()); 744 DCHECK(frontend_task_runner_->BelongsToCurrentThread());
758 frontend_->OnEncryptedTypesChanged( 745 frontend_->OnEncryptedTypesChanged(encrypted_types, encrypt_everything);
759 encrypted_types, encrypt_everything);
760 } 746 }
761 747
762 void SyncBackendHostImpl::NotifyEncryptionComplete() { 748 void SyncBackendHostImpl::NotifyEncryptionComplete() {
763 if (!frontend_) 749 if (!frontend_)
764 return; 750 return;
765 751
766 DCHECK(frontend_task_runner_->BelongsToCurrentThread()); 752 DCHECK(frontend_task_runner_->BelongsToCurrentThread());
767 frontend_->OnEncryptionComplete(); 753 frontend_->OnEncryptionComplete();
768 } 754 }
769 755
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 const syncer::SyncManager::ClearServerDataCallback& frontend_callback) { 850 const syncer::SyncManager::ClearServerDataCallback& frontend_callback) {
865 DCHECK(ui_thread_->BelongsToCurrentThread()); 851 DCHECK(ui_thread_->BelongsToCurrentThread());
866 frontend_callback.Run(); 852 frontend_callback.Run();
867 } 853 }
868 854
869 } // namespace browser_sync 855 } // namespace browser_sync
870 856
871 #undef SDVLOG 857 #undef SDVLOG
872 858
873 #undef SLOG 859 #undef SLOG
OLDNEW
« no previous file with comments | « components/sync/driver/glue/sync_backend_host_impl.h ('k') | components/sync/driver/glue/sync_backend_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698