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

Side by Side Diff: chrome/browser/sync/glue/sync_backend_host.cc

Issue 10804039: Make SyncBackendRegistrar aware of loaded data (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include "chrome/browser/sync/glue/sync_backend_host.h" 7 #include "chrome/browser/sync/glue/sync_backend_host.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <map> 10 #include <map>
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 const FilePath& sync_data_folder_path, 80 const FilePath& sync_data_folder_path,
81 const base::WeakPtr<SyncBackendHost>& backend); 81 const base::WeakPtr<SyncBackendHost>& backend);
82 82
83 // SyncManager::Observer implementation. The Core just acts like an air 83 // SyncManager::Observer implementation. The Core just acts like an air
84 // traffic controller here, forwarding incoming messages to appropriate 84 // traffic controller here, forwarding incoming messages to appropriate
85 // landing threads. 85 // landing threads.
86 virtual void OnSyncCycleCompleted( 86 virtual void OnSyncCycleCompleted(
87 const syncer::sessions::SyncSessionSnapshot& snapshot) OVERRIDE; 87 const syncer::sessions::SyncSessionSnapshot& snapshot) OVERRIDE;
88 virtual void OnInitializationComplete( 88 virtual void OnInitializationComplete(
89 const syncer::WeakHandle<syncer::JsBackend>& js_backend, 89 const syncer::WeakHandle<syncer::JsBackend>& js_backend,
90 bool success) OVERRIDE; 90 bool success,
91 syncer::ModelTypeSet restored_types) OVERRIDE;
91 virtual void OnConnectionStatusChange( 92 virtual void OnConnectionStatusChange(
92 syncer::ConnectionStatus status) OVERRIDE; 93 syncer::ConnectionStatus status) OVERRIDE;
93 virtual void OnPassphraseRequired( 94 virtual void OnPassphraseRequired(
94 syncer::PassphraseRequiredReason reason, 95 syncer::PassphraseRequiredReason reason,
95 const sync_pb::EncryptedData& pending_keys) OVERRIDE; 96 const sync_pb::EncryptedData& pending_keys) OVERRIDE;
96 virtual void OnPassphraseAccepted() OVERRIDE; 97 virtual void OnPassphraseAccepted() OVERRIDE;
97 virtual void OnBootstrapTokenUpdated( 98 virtual void OnBootstrapTokenUpdated(
98 const std::string& bootstrap_token) OVERRIDE; 99 const std::string& bootstrap_token) OVERRIDE;
99 virtual void OnStopSyncingPermanently() OVERRIDE; 100 virtual void OnStopSyncingPermanently() OVERRIDE;
100 virtual void OnUpdatedToken(const std::string& token) OVERRIDE; 101 virtual void OnUpdatedToken(const std::string& token) OVERRIDE;
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 return scoped_ptr<syncer::HttpPostProviderFactory>( 359 return scoped_ptr<syncer::HttpPostProviderFactory>(
359 new syncer::HttpBridgeFactory(getter, MakeUserAgentForSyncApi())); 360 new syncer::HttpBridgeFactory(getter, MakeUserAgentForSyncApi()));
360 } 361 }
361 362
362 } // namespace 363 } // namespace
363 364
364 void SyncBackendHost::Initialize( 365 void SyncBackendHost::Initialize(
365 SyncFrontend* frontend, 366 SyncFrontend* frontend,
366 const syncer::WeakHandle<syncer::JsEventHandler>& event_handler, 367 const syncer::WeakHandle<syncer::JsEventHandler>& event_handler,
367 const GURL& sync_service_url, 368 const GURL& sync_service_url,
368 syncer::ModelTypeSet initial_types,
369 const SyncCredentials& credentials, 369 const SyncCredentials& credentials,
370 bool delete_sync_data_folder, 370 bool delete_sync_data_folder,
371 syncer::SyncManagerFactory* sync_manager_factory, 371 syncer::SyncManagerFactory* sync_manager_factory,
372 syncer::UnrecoverableErrorHandler* unrecoverable_error_handler, 372 syncer::UnrecoverableErrorHandler* unrecoverable_error_handler,
373 syncer::ReportUnrecoverableErrorFunction 373 syncer::ReportUnrecoverableErrorFunction
374 report_unrecoverable_error_function) { 374 report_unrecoverable_error_function) {
375 if (!sync_thread_.Start()) 375 if (!sync_thread_.Start())
376 return; 376 return;
377 377
378 frontend_ = frontend; 378 frontend_ = frontend;
379 DCHECK(frontend); 379 DCHECK(frontend);
380 380
381 syncer::ModelTypeSet initial_types_with_nigori(initial_types); 381 registrar_.reset(new SyncBackendRegistrar(name_,
382 CHECK(sync_prefs_.get());
383 if (sync_prefs_->HasSyncSetupCompleted()) {
384 initial_types_with_nigori.Put(syncer::NIGORI);
385 }
386
387 registrar_.reset(new SyncBackendRegistrar(initial_types_with_nigori,
388 name_,
389 profile_, 382 profile_,
390 sync_thread_.message_loop())); 383 sync_thread_.message_loop()));
391 syncer::ModelSafeRoutingInfo routing_info; 384 syncer::ModelSafeRoutingInfo routing_info;
392 std::vector<syncer::ModelSafeWorker*> workers; 385 std::vector<syncer::ModelSafeWorker*> workers;
393 registrar_->GetModelSafeRoutingInfo(&routing_info); 386 registrar_->GetModelSafeRoutingInfo(&routing_info);
394 registrar_->GetWorkers(&workers); 387 registrar_->GetWorkers(&workers);
395 388
396 initialization_state_ = CREATING_SYNC_MANAGER; 389 initialization_state_ = CREATING_SYNC_MANAGER;
397 InitCore(DoInitializeOptions( 390 InitCore(DoInitializeOptions(
398 sync_thread_.message_loop(), 391 sync_thread_.message_loop(),
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 core_ = NULL; // Releases reference to core_. 578 core_ = NULL; // Releases reference to core_.
586 } 579 }
587 580
588 void SyncBackendHost::ConfigureDataTypes( 581 void SyncBackendHost::ConfigureDataTypes(
589 syncer::ConfigureReason reason, 582 syncer::ConfigureReason reason,
590 syncer::ModelTypeSet types_to_add, 583 syncer::ModelTypeSet types_to_add,
591 syncer::ModelTypeSet types_to_remove, 584 syncer::ModelTypeSet types_to_remove,
592 NigoriState nigori_state, 585 NigoriState nigori_state,
593 const base::Callback<void(syncer::ModelTypeSet)>& ready_task, 586 const base::Callback<void(syncer::ModelTypeSet)>& ready_task,
594 const base::Callback<void()>& retry_callback) { 587 const base::Callback<void()>& retry_callback) {
588 // Only one configure is allowed at a time. This is guaranteed by our
589 // callers. The SyncBackendHost requests one configure as the backend is
590 // initializing and waits for it to complete. After initialization, all
591 // configurations will pass through the DataTypeMnaager, which is careful to
592 // never send a new configure request until the current request succeeds.
Nicolas Zea 2012/07/20 21:35:39 I think it'd be useful to also mention that the ba
rlarocque 2012/07/20 23:20:05 Why add that comment here? Is the configuration f
593
594 DCHECK_GT(initialization_state_, NOT_INITIALIZED);
595
595 syncer::ModelTypeSet types_to_add_with_nigori = types_to_add; 596 syncer::ModelTypeSet types_to_add_with_nigori = types_to_add;
596 syncer::ModelTypeSet types_to_remove_with_nigori = types_to_remove; 597 syncer::ModelTypeSet types_to_remove_with_nigori = types_to_remove;
597 if (nigori_state == WITH_NIGORI) { 598 if (nigori_state == WITH_NIGORI) {
598 types_to_add_with_nigori.Put(syncer::NIGORI); 599 types_to_add_with_nigori.Put(syncer::NIGORI);
599 types_to_remove_with_nigori.Remove(syncer::NIGORI); 600 types_to_remove_with_nigori.Remove(syncer::NIGORI);
600 } else { 601 } else {
601 types_to_add_with_nigori.Remove(syncer::NIGORI); 602 types_to_add_with_nigori.Remove(syncer::NIGORI);
602 types_to_remove_with_nigori.Put(syncer::NIGORI); 603 types_to_remove_with_nigori.Put(syncer::NIGORI);
603 } 604 }
604 // Only one configure is allowed at a time (DataTypeManager handles user
605 // changes that happen while the syncer is reconfiguring, and will only
606 // trigger another call to ConfigureDataTypes once the current reconfiguration
607 // completes).
608 DCHECK_GT(initialization_state_, NOT_INITIALIZED);
609 605
610 // The new set of enabled types is types_to_add_with_nigori + the 606 // The SyncBackendRegistrar's routing info will be updated by removing the
611 // previously enabled types (on restart, the preferred types are already 607 // types_to_remove_with_nigori from the list then adding
Nicolas Zea 2012/07/20 21:35:39 it's actually the other way around (add, then remo
rlarocque 2012/07/23 20:50:30 Done.
612 // enabled) - types_to_remove_with_nigori. After reconfiguring the registrar, 608 // types_to_add_with_nigori. Any types which have are not in either of those
Nicolas Zea 2012/07/20 21:35:39 which are not
rlarocque 2012/07/23 20:50:30 Done.
613 // the new routing info will reflect the set of enabled types. 609 // sets will remain untouched.
610 //
611 // Types which were not in previously in the list are not cached locally, so
Nicolas Zea 2012/07/20 21:35:39 not in the list previously
rlarocque 2012/07/23 20:50:30 Done.
612 // we must ask the syncer to download them.
613 //
614 // Note that the SyncBackendRegistrar's state was initially derrived from the
615 // types marked initial_sync_ended when the sync database was loaded.
616
617 syncer::ModelTypeSet types_to_download = registrar_->ConfigureDataTypes(
618 types_to_add_with_nigori, types_to_remove_with_nigori);
619 if (!types_to_download.Empty())
620 types_to_download.Put(syncer::NIGORI);
621
614 syncer::ModelSafeRoutingInfo routing_info; 622 syncer::ModelSafeRoutingInfo routing_info;
615 registrar_->ConfigureDataTypes(types_to_add_with_nigori,
616 types_to_remove_with_nigori);
617 registrar_->GetModelSafeRoutingInfo(&routing_info); 623 registrar_->GetModelSafeRoutingInfo(&routing_info);
618 const syncer::ModelTypeSet enabled_types =
619 GetRoutingInfoTypes(routing_info);
620
621 // Figure out which types need to actually be downloaded. We pass those on
622 // to the syncer while it's in configuration mode so that they can be
623 // downloaded before we perform association. Once we switch to normal mode
624 // downloads will get applied normally and hit the datatype's change
625 // processor.
626 // A datatype is in need of downloading if any of the following are true:
627 // 1. it's enabled and initial_sync_ended is false (initial_sync_ended is
628 // set after applying updates, and hence is a more conservative measure
629 // than having a non-empty progress marker, which is set during
630 // StoreTimestamps).
631 // 2. the type is NIGORI, and any other datatype is being downloaded (nigori
632 // is always included if we download a datatype).
633 // TODO(sync): consider moving this logic onto the sync thread (perhaps
634 // as part of SyncManager::ConfigureSyncer).
635 syncer::ModelTypeSet initial_sync_ended_types =
636 core_->sync_manager()->InitialSyncEndedTypes();
637 initial_sync_ended_types.RetainAll(enabled_types);
638 syncer::ModelTypeSet types_to_config =
639 Difference(enabled_types, initial_sync_ended_types);
640 if (!types_to_config.Empty() && enabled_types.Has(syncer::NIGORI))
641 types_to_config.Put(syncer::NIGORI);
642 624
643 SDVLOG(1) << "Types " 625 SDVLOG(1) << "Types "
644 << syncer::ModelTypeSetToString(types_to_config) 626 << syncer::ModelTypeSetToString(types_to_download)
645 << " added; calling DoConfigureSyncer"; 627 << " added; calling DoConfigureSyncer";
646 // TODO(zea): figure out how to bypass this call if no types are being 628 // TODO(zea): figure out how to bypass this call if no types are being
647 // configured and GetKey is not needed. For now we rely on determining the 629 // configured and GetKey is not needed. For now we rely on determining the
648 // need for GetKey as part of the SyncManager::ConfigureSyncer logic. 630 // need for GetKey as part of the SyncManager::ConfigureSyncer logic.
649 RequestConfigureSyncer(reason, 631 RequestConfigureSyncer(reason,
650 types_to_config, 632 types_to_download,
651 routing_info, 633 routing_info,
652 ready_task, 634 ready_task,
653 retry_callback); 635 retry_callback);
654 } 636 }
655 637
656 void SyncBackendHost::EnableEncryptEverything() { 638 void SyncBackendHost::EnableEncryptEverything() {
657 sync_thread_.message_loop()->PostTask(FROM_HERE, 639 sync_thread_.message_loop()->PostTask(FROM_HERE,
658 base::Bind(&SyncBackendHost::Core::DoEnableEncryptEverything, 640 base::Bind(&SyncBackendHost::Core::DoEnableEncryptEverything,
659 core_.get())); 641 core_.get()));
660 } 642 }
661 643
662 void SyncBackendHost::ActivateDataType( 644 void SyncBackendHost::ActivateDataType(
663 syncer::ModelType type, syncer::ModelSafeGroup group, 645 syncer::ModelType type, syncer::ModelSafeGroup group,
664 ChangeProcessor* change_processor) { 646 ChangeProcessor* change_processor) {
665 registrar_->ActivateDataType(type, group, change_processor, GetUserShare()); 647 registrar_->ActivateDataType(type, group, change_processor, GetUserShare());
666 } 648 }
667 649
668 void SyncBackendHost::DeactivateDataType(syncer::ModelType type) { 650 void SyncBackendHost::DeactivateDataType(syncer::ModelType type) {
669 registrar_->DeactivateDataType(type); 651 registrar_->DeactivateDataType(type);
670 } 652 }
671 653
672 syncer::UserShare* SyncBackendHost::GetUserShare() const { 654 syncer::UserShare* SyncBackendHost::GetUserShare() const {
673 DCHECK(initialized()); 655 DCHECK(initialized());
674 return core_->sync_manager()->GetUserShare(); 656 return core_->sync_manager()->GetUserShare();
675 } 657 }
676 658
659 // Bypasses the initialized() check.
660 syncer::UserShare* SyncBackendHost::GetUserShareForTest() const {
Nicolas Zea 2012/07/20 21:35:39 I'd almost rather just get rif of DCHECK(initializ
rlarocque 2012/07/20 23:20:05 The intent of this CL is to ensure that the Profil
661 return core_->sync_manager()->GetUserShare();
662 }
663
677 SyncBackendHost::Status SyncBackendHost::GetDetailedStatus() { 664 SyncBackendHost::Status SyncBackendHost::GetDetailedStatus() {
678 DCHECK(initialized()); 665 DCHECK(initialized());
679 return core_->sync_manager()->GetDetailedStatus(); 666 return core_->sync_manager()->GetDetailedStatus();
680 } 667 }
681 668
682 SyncSessionSnapshot SyncBackendHost::GetLastSessionSnapshot() const { 669 SyncSessionSnapshot SyncBackendHost::GetLastSessionSnapshot() const {
683 return last_snapshot_; 670 return last_snapshot_;
684 } 671 }
685 672
686 bool SyncBackendHost::HasUnsyncedItems() const { 673 bool SyncBackendHost::HasUnsyncedItems() const {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
757 744
758 // Notify SyncManager (especially the notification listener) about new types. 745 // Notify SyncManager (especially the notification listener) about new types.
759 sync_thread_.message_loop()->PostTask(FROM_HERE, 746 sync_thread_.message_loop()->PostTask(FROM_HERE,
760 base::Bind(&SyncBackendHost::Core::DoUpdateEnabledTypes, core_.get(), 747 base::Bind(&SyncBackendHost::Core::DoUpdateEnabledTypes, core_.get(),
761 configured_types)); 748 configured_types));
762 749
763 if (!ready_task.is_null()) 750 if (!ready_task.is_null())
764 ready_task.Run(failed_configuration_types); 751 ready_task.Run(failed_configuration_types);
765 } 752 }
766 753
754 void SyncBackendHost::HandleSyncManagerInitializationOnFrontendLoop(
755 const syncer::WeakHandle<syncer::JsBackend>& js_backend, bool success,
756 syncer::ModelTypeSet restored_types) {
757 registrar_->SetInitialTypes(restored_types);
758 HandleInitializationCompletedOnFrontendLoop(js_backend, success);
759 }
760
767 SyncBackendHost::DoInitializeOptions::DoInitializeOptions( 761 SyncBackendHost::DoInitializeOptions::DoInitializeOptions(
768 MessageLoop* sync_loop, 762 MessageLoop* sync_loop,
769 SyncBackendRegistrar* registrar, 763 SyncBackendRegistrar* registrar,
770 const syncer::ModelSafeRoutingInfo& routing_info, 764 const syncer::ModelSafeRoutingInfo& routing_info,
771 const std::vector<syncer::ModelSafeWorker*>& workers, 765 const std::vector<syncer::ModelSafeWorker*>& workers,
772 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, 766 syncer::ExtensionsActivityMonitor* extensions_activity_monitor,
773 const syncer::WeakHandle<syncer::JsEventHandler>& event_handler, 767 const syncer::WeakHandle<syncer::JsEventHandler>& event_handler,
774 const GURL& service_url, 768 const GURL& service_url,
775 MakeHttpBridgeFactoryFn make_http_bridge_factory_fn, 769 MakeHttpBridgeFactoryFn make_http_bridge_factory_fn,
776 const syncer::SyncCredentials& credentials, 770 const syncer::SyncCredentials& credentials,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 DCHECK_EQ(MessageLoop::current(), sync_loop_); 822 DCHECK_EQ(MessageLoop::current(), sync_loop_);
829 host_.Call( 823 host_.Call(
830 FROM_HERE, 824 FROM_HERE,
831 &SyncBackendHost::HandleSyncCycleCompletedOnFrontendLoop, 825 &SyncBackendHost::HandleSyncCycleCompletedOnFrontendLoop,
832 snapshot); 826 snapshot);
833 } 827 }
834 828
835 829
836 void SyncBackendHost::Core::OnInitializationComplete( 830 void SyncBackendHost::Core::OnInitializationComplete(
837 const syncer::WeakHandle<syncer::JsBackend>& js_backend, 831 const syncer::WeakHandle<syncer::JsBackend>& js_backend,
838 bool success) { 832 bool success,
833 const syncer::ModelTypeSet restored_types) {
839 DCHECK_EQ(MessageLoop::current(), sync_loop_); 834 DCHECK_EQ(MessageLoop::current(), sync_loop_);
840 host_.Call( 835 host_.Call(
841 FROM_HERE, 836 FROM_HERE,
842 &SyncBackendHost::HandleInitializationCompletedOnFrontendLoop, 837 &SyncBackendHost::HandleSyncManagerInitializationOnFrontendLoop,
843 js_backend, success); 838 js_backend, success, restored_types);
844 839
845 if (success) { 840 if (success) {
846 // Initialization is complete, so we can schedule recurring SaveChanges. 841 // Initialization is complete, so we can schedule recurring SaveChanges.
847 sync_loop_->PostTask(FROM_HERE, 842 sync_loop_->PostTask(FROM_HERE,
848 base::Bind(&Core::StartSavingChanges, this)); 843 base::Bind(&Core::StartSavingChanges, this));
849 } 844 }
850 } 845 }
851 846
852 void SyncBackendHost::Core::OnConnectionStatusChange( 847 void SyncBackendHost::Core::OnConnectionStatusChange(
853 syncer::ConnectionStatus status) { 848 syncer::ConnectionStatus status) {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 sync_manager_ = options.sync_manager_factory->CreateSyncManager(name_); 959 sync_manager_ = options.sync_manager_factory->CreateSyncManager(name_);
965 sync_manager_->AddObserver(this); 960 sync_manager_->AddObserver(this);
966 success = sync_manager_->Init( 961 success = sync_manager_->Init(
967 sync_data_folder_path_, 962 sync_data_folder_path_,
968 options.event_handler, 963 options.event_handler,
969 options.service_url.host() + options.service_url.path(), 964 options.service_url.host() + options.service_url.path(),
970 options.service_url.EffectiveIntPort(), 965 options.service_url.EffectiveIntPort(),
971 options.service_url.SchemeIsSecure(), 966 options.service_url.SchemeIsSecure(),
972 BrowserThread::GetBlockingPool(), 967 BrowserThread::GetBlockingPool(),
973 options.make_http_bridge_factory_fn.Run().Pass(), 968 options.make_http_bridge_factory_fn.Run().Pass(),
974 options.routing_info,
975 options.workers, 969 options.workers,
976 options.extensions_activity_monitor, 970 options.extensions_activity_monitor,
977 options.registrar /* as SyncManager::ChangeDelegate */, 971 options.registrar /* as SyncManager::ChangeDelegate */,
978 options.credentials, 972 options.credentials,
979 scoped_ptr<syncer::SyncNotifier>(new BridgedSyncNotifier( 973 scoped_ptr<syncer::SyncNotifier>(new BridgedSyncNotifier(
980 options.chrome_sync_notification_bridge, 974 options.chrome_sync_notification_bridge,
981 options.sync_notifier_factory->CreateSyncNotifier())), 975 options.sync_notifier_factory->CreateSyncNotifier())),
982 options.restored_key_for_bootstrapping, 976 options.restored_key_for_bootstrapping,
983 options.testing_mode, 977 options.testing_mode,
984 &encryptor_, 978 &encryptor_,
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 initialization_state_ = NOT_INITIALIZED; 1155 initialization_state_ = NOT_INITIALIZED;
1162 1156
1163 DCHECK_EQ(MessageLoop::current(), frontend_loop_); 1157 DCHECK_EQ(MessageLoop::current(), frontend_loop_);
1164 if (!success) { 1158 if (!success) {
1165 initialization_state_ = NOT_INITIALIZED; 1159 initialization_state_ = NOT_INITIALIZED;
1166 frontend_->OnBackendInitialized( 1160 frontend_->OnBackendInitialized(
1167 syncer::WeakHandle<syncer::JsBackend>(), false); 1161 syncer::WeakHandle<syncer::JsBackend>(), false);
1168 return; 1162 return;
1169 } 1163 }
1170 1164
1171 // If setup has completed, start off in DOWNLOADING_NIGORI so that
1172 // we start off by refreshing nigori.
1173 CHECK(sync_prefs_.get());
1174 if (sync_prefs_->HasSyncSetupCompleted() &&
1175 initialization_state_ < DOWNLOADING_NIGORI) {
1176 initialization_state_ = DOWNLOADING_NIGORI;
1177 }
1178
1179 // Run initialization state machine. 1165 // Run initialization state machine.
1180 switch (initialization_state_) { 1166 switch (initialization_state_) {
1181 case NOT_INITIALIZED: 1167 case NOT_INITIALIZED:
1182 initialization_state_ = DOWNLOADING_NIGORI; 1168 initialization_state_ = DOWNLOADING_NIGORI;
1183 ConfigureDataTypes( 1169 ConfigureDataTypes(
1184 syncer::CONFIGURE_REASON_NEW_CLIENT, 1170 syncer::CONFIGURE_REASON_NEW_CLIENT,
1185 syncer::ModelTypeSet(), 1171 syncer::ModelTypeSet(),
1186 syncer::ModelTypeSet(), 1172 syncer::ModelTypeSet(),
1187 WITH_NIGORI, 1173 WITH_NIGORI,
1188 // Calls back into this function. 1174 // Calls back into this function.
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1367 FROM_HERE, 1353 FROM_HERE,
1368 base::Bind(&SyncBackendHost::Core::DoRefreshNigori, 1354 base::Bind(&SyncBackendHost::Core::DoRefreshNigori,
1369 core_.get(), sync_thread_done_callback)); 1355 core_.get(), sync_thread_done_callback));
1370 } 1356 }
1371 1357
1372 #undef SDVLOG 1358 #undef SDVLOG
1373 1359
1374 #undef SLOG 1360 #undef SLOG
1375 1361
1376 } // namespace browser_sync 1362 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698