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

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

Issue 6874018: make new syncer thread the default. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Send for CR. Created 9 years, 8 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 SyncBackendHost::SyncBackendHost(Profile* profile) 60 SyncBackendHost::SyncBackendHost(Profile* profile)
61 : core_(new Core(ALLOW_THIS_IN_INITIALIZER_LIST(this))), 61 : core_(new Core(ALLOW_THIS_IN_INITIALIZER_LIST(this))),
62 core_thread_("Chrome_SyncCoreThread"), 62 core_thread_("Chrome_SyncCoreThread"),
63 frontend_loop_(MessageLoop::current()), 63 frontend_loop_(MessageLoop::current()),
64 profile_(profile), 64 profile_(profile),
65 frontend_(NULL), 65 frontend_(NULL),
66 sync_data_folder_path_( 66 sync_data_folder_path_(
67 profile_->GetPath().Append(kSyncDataFolderName)), 67 profile_->GetPath().Append(kSyncDataFolderName)),
68 last_auth_error_(AuthError::None()), 68 last_auth_error_(AuthError::None()),
69 using_new_syncer_thread_(
70 CommandLine::ForCurrentProcess()->HasSwitch(
71 switches::kNewSyncerThread)),
72 syncapi_initialized_(false) { 69 syncapi_initialized_(false) {
73 } 70 }
74 71
75 SyncBackendHost::SyncBackendHost() 72 SyncBackendHost::SyncBackendHost()
76 : core_thread_("Chrome_SyncCoreThread"), 73 : core_thread_("Chrome_SyncCoreThread"),
77 frontend_loop_(MessageLoop::current()), 74 frontend_loop_(MessageLoop::current()),
78 profile_(NULL), 75 profile_(NULL),
79 frontend_(NULL), 76 frontend_(NULL),
80 last_auth_error_(AuthError::None()), 77 last_auth_error_(AuthError::None()),
81 using_new_syncer_thread_(
82 CommandLine::ForCurrentProcess()->HasSwitch(
83 switches::kNewSyncerThread)),
84 syncapi_initialized_(false) { 78 syncapi_initialized_(false) {
85 } 79 }
86 80
87 SyncBackendHost::~SyncBackendHost() { 81 SyncBackendHost::~SyncBackendHost() {
88 DCHECK(!core_ && !frontend_) << "Must call Shutdown before destructor."; 82 DCHECK(!core_ && !frontend_) << "Must call Shutdown before destructor.";
89 DCHECK(registrar_.workers.empty()); 83 DCHECK(registrar_.workers.empty());
90 } 84 }
91 85
92 void SyncBackendHost::Initialize( 86 void SyncBackendHost::Initialize(
93 SyncFrontend* frontend, 87 SyncFrontend* frontend,
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 ConfigureAutofillMigration(); 396 ConfigureAutofillMigration();
403 } 397 }
404 398
405 { 399 {
406 base::AutoLock lock(registrar_lock_); 400 base::AutoLock lock(registrar_lock_);
407 pending_config_mode_state_.reset( 401 pending_config_mode_state_.reset(
408 MakePendingConfigModeState(data_type_controllers, types, ready_task, 402 MakePendingConfigModeState(data_type_controllers, types, ready_task,
409 &registrar_.routing_info)); 403 &registrar_.routing_info));
410 } 404 }
411 405
412 // If we're doing the first configure (at startup) this is redundant as the 406 FinishConfigureDataTypesOnFrontendLoop();
413 // syncer thread always must start in config mode.
414 if (using_new_syncer_thread_) {
415 core_thread_.message_loop()->PostTask(
416 FROM_HERE,
417 NewRunnableMethod(core_.get(),
418 &SyncBackendHost::Core::DoStartConfigurationMode));
419 } else {
420 FinishConfigureDataTypesOnFrontendLoop();
421 }
422 } 407 }
423 408
424 void SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop() { 409 void SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop() {
425 DCHECK_EQ(MessageLoop::current(), frontend_loop_); 410 DCHECK_EQ(MessageLoop::current(), frontend_loop_);
426 // Nudge the syncer. This is necessary for both datatype addition/deletion. 411 // Nudge the syncer. This is necessary for both datatype addition/deletion.
427 // 412 //
428 // Deletions need a nudge in order to ensure the deletion occurs in a timely 413 // Deletions need a nudge in order to ensure the deletion occurs in a timely
429 // manner (see issue 56416). 414 // manner (see issue 56416).
430 // 415 //
431 // In the case of additions, on the next sync cycle, the syncer should 416 // In the case of additions, on the next sync cycle, the syncer should
432 // notice that the routing info has changed and start the process of 417 // notice that the routing info has changed and start the process of
433 // downloading updates for newly added data types. Once this is 418 // downloading updates for newly added data types. Once this is
434 // complete, the configure_state_.ready_task_ is run via an 419 // complete, the configure_state_.ready_task_ is run via an
435 // OnInitializationComplete notification. 420 // OnInitializationComplete notification.
436 bool request_nudge = false; 421
437 if (pending_config_mode_state_->deleted_type) { 422 if (pending_config_mode_state_->deleted_type) {
438 if (using_new_syncer_thread_) { 423 core_thread_.message_loop()->PostTask(FROM_HERE,
439 core_thread_.message_loop()->PostTask(FROM_HERE, 424 NewRunnableMethod(core_.get(),
440 NewRunnableMethod(core_.get(), 425 &SyncBackendHost::Core::DeferNudgeForCleanup));
441 &SyncBackendHost::Core::DeferNudgeForCleanup));
442 } else {
443 request_nudge = true;
444 }
445 } 426 }
446 427
447 if (pending_config_mode_state_->added_types.none() && 428 if (pending_config_mode_state_->added_types.none() &&
448 !core_->syncapi()->InitialSyncEndedForAllEnabledTypes()) { 429 !core_->syncapi()->InitialSyncEndedForAllEnabledTypes()) {
449 LOG(WARNING) << "No new types, but initial sync not finished." 430 LOG(WARNING) << "No new types, but initial sync not finished."
450 << "Possible sync db corruption / removal."; 431 << "Possible sync db corruption / removal.";
451 // TODO(tim): Log / UMA / count this somehow? 432 // TODO(tim): Log / UMA / count this somehow?
452 // TODO(tim): If no added types, we could (should?) config only for 433 // TODO(tim): If no added types, we could (should?) config only for
453 // types that are needed... but this is a rare corruption edge case or 434 // types that are needed... but this is a rare corruption edge case or
454 // implies the user mucked around with their syncdb, so for now do all. 435 // implies the user mucked around with their syncdb, so for now do all.
455 pending_config_mode_state_->added_types = 436 pending_config_mode_state_->added_types =
456 syncable::ModelTypeBitSetFromSet( 437 syncable::ModelTypeBitSetFromSet(
457 pending_config_mode_state_->initial_types); 438 pending_config_mode_state_->initial_types);
458 } 439 }
459 440
460 // If we've added types, we always want to request a nudge/config (even if 441 // If we've added types, we always want to request a nudge/config (even if
461 // the initial sync is ended), in case we could not decrypt the data. 442 // the initial sync is ended), in case we could not decrypt the data.
462 if (pending_config_mode_state_->added_types.none()) { 443 if (pending_config_mode_state_->added_types.none()) {
463 // No new types - just notify the caller that the types are available. 444 // No new types - just notify the caller that the types are available.
464 pending_config_mode_state_->ready_task->Run(); 445 pending_config_mode_state_->ready_task->Run();
465 } else { 446 } else {
466 pending_download_state_.reset(pending_config_mode_state_.release()); 447 pending_download_state_.reset(pending_config_mode_state_.release());
467 if (using_new_syncer_thread_) {
468 RequestConfig(pending_download_state_->added_types);
469 } else {
470 request_nudge = true;
471 }
472 }
473 448
474 // TODO(tim): Remove this when we get rid of the old syncer thread. 449 syncable::ModelTypeBitSet types_copy(pending_download_state_->added_types);
475 if (request_nudge) { 450 if (IsNigoriEnabled())
476 CHECK(!using_new_syncer_thread_); 451 types_copy.set(syncable::NIGORI);
477 RequestNudge(FROM_HERE); 452 core_thread_.message_loop()->PostTask(FROM_HERE,
453 NewRunnableMethod(core_.get(),
454 &SyncBackendHost::Core::DoRequestConfig,
455 types_copy));
478 } 456 }
479 457
480 pending_config_mode_state_.reset(); 458 pending_config_mode_state_.reset();
481 459
482 // Notify the SyncManager about the new types. 460 // Notify the SyncManager about the new types.
483 core_thread_.message_loop()->PostTask(FROM_HERE, 461 core_thread_.message_loop()->PostTask(FROM_HERE,
484 NewRunnableMethod(core_.get(), 462 NewRunnableMethod(core_.get(),
485 &SyncBackendHost::Core::DoUpdateEnabledTypes)); 463 &SyncBackendHost::Core::DoUpdateEnabledTypes));
486 } 464 }
487 465
488 void SyncBackendHost::EncryptDataTypes( 466 void SyncBackendHost::EncryptDataTypes(
489 const syncable::ModelTypeSet& encrypted_types) { 467 const syncable::ModelTypeSet& encrypted_types) {
490 core_thread_.message_loop()->PostTask(FROM_HERE, 468 core_thread_.message_loop()->PostTask(FROM_HERE,
491 NewRunnableMethod(core_.get(), 469 NewRunnableMethod(core_.get(),
492 &SyncBackendHost::Core::DoEncryptDataTypes, 470 &SyncBackendHost::Core::DoEncryptDataTypes,
493 encrypted_types)); 471 encrypted_types));
494 } 472 }
495 473
496 void SyncBackendHost::RequestNudge(const tracked_objects::Location& location) { 474 void SyncBackendHost::RequestNudge(const tracked_objects::Location& location) {
497 core_thread_.message_loop()->PostTask(FROM_HERE, 475 core_thread_.message_loop()->PostTask(FROM_HERE,
498 NewRunnableMethod(core_.get(), &SyncBackendHost::Core::DoRequestNudge, 476 NewRunnableMethod(core_.get(), &SyncBackendHost::Core::DoRequestNudge,
499 location)); 477 location));
500 } 478 }
501 479
502 void SyncBackendHost::RequestConfig(
503 const syncable::ModelTypeBitSet& added_types) {
504 DCHECK(core_->syncapi());
505
506 syncable::ModelTypeBitSet types_copy(added_types);
507 if (IsNigoriEnabled())
508 types_copy.set(syncable::NIGORI);
509
510 core_->syncapi()->RequestConfig(types_copy);
511 }
512
513 void SyncBackendHost::ActivateDataType( 480 void SyncBackendHost::ActivateDataType(
514 DataTypeController* data_type_controller, 481 DataTypeController* data_type_controller,
515 ChangeProcessor* change_processor) { 482 ChangeProcessor* change_processor) {
516 base::AutoLock lock(registrar_lock_); 483 base::AutoLock lock(registrar_lock_);
517 484
518 // Ensure that the given data type is in the PASSIVE group. 485 // Ensure that the given data type is in the PASSIVE group.
519 browser_sync::ModelSafeRoutingInfo::iterator i = 486 browser_sync::ModelSafeRoutingInfo::iterator i =
520 registrar_.routing_info.find(data_type_controller->type()); 487 registrar_.routing_info.find(data_type_controller->type());
521 DCHECK(i != registrar_.routing_info.end()); 488 DCHECK(i != registrar_.routing_info.end());
522 DCHECK((*i).second == GROUP_PASSIVE); 489 DCHECK((*i).second == GROUP_PASSIVE);
(...skipping 11 matching lines...) Expand all
534 DataTypeController* data_type_controller, 501 DataTypeController* data_type_controller,
535 ChangeProcessor* change_processor) { 502 ChangeProcessor* change_processor) {
536 base::AutoLock lock(registrar_lock_); 503 base::AutoLock lock(registrar_lock_);
537 registrar_.routing_info.erase(data_type_controller->type()); 504 registrar_.routing_info.erase(data_type_controller->type());
538 505
539 std::map<syncable::ModelType, ChangeProcessor*>::size_type erased = 506 std::map<syncable::ModelType, ChangeProcessor*>::size_type erased =
540 processors_.erase(data_type_controller->type()); 507 processors_.erase(data_type_controller->type());
541 DCHECK_EQ(erased, 1U); 508 DCHECK_EQ(erased, 1U);
542 } 509 }
543 510
544 bool SyncBackendHost::RequestPause() {
545 DCHECK(!using_new_syncer_thread_);
546 core_thread_.message_loop()->PostTask(FROM_HERE,
547 NewRunnableMethod(core_.get(), &SyncBackendHost::Core::DoRequestPause));
548 return true;
549 }
550
551 bool SyncBackendHost::RequestResume() {
552 DCHECK(!using_new_syncer_thread_);
553 core_thread_.message_loop()->PostTask(FROM_HERE,
554 NewRunnableMethod(core_.get(), &SyncBackendHost::Core::DoRequestResume));
555 return true;
556 }
557
558 bool SyncBackendHost::RequestClearServerData() { 511 bool SyncBackendHost::RequestClearServerData() {
559 core_thread_.message_loop()->PostTask(FROM_HERE, 512 core_thread_.message_loop()->PostTask(FROM_HERE,
560 NewRunnableMethod(core_.get(), 513 NewRunnableMethod(core_.get(),
561 &SyncBackendHost::Core::DoRequestClearServerData)); 514 &SyncBackendHost::Core::DoRequestClearServerData));
562 return true; 515 return true;
563 } 516 }
564 517
565 SyncBackendHost::Core::~Core() { 518 SyncBackendHost::Core::~Core() {
566 } 519 }
567 520
568 void SyncBackendHost::Core::NotifyPaused() {
569 DCHECK(!host_ || !host_->using_new_syncer_thread_);
570 NotificationService::current()->Notify(NotificationType::SYNC_PAUSED,
571 NotificationService::AllSources(),
572 NotificationService::NoDetails());
573 }
574
575 void SyncBackendHost::Core::NotifyResumed() {
576 DCHECK(!host_ || !host_->using_new_syncer_thread_);
577 NotificationService::current()->Notify(NotificationType::SYNC_RESUMED,
578 NotificationService::AllSources(),
579 NotificationService::NoDetails());
580 }
581
582 void SyncBackendHost::Core::NotifyPassphraseRequired(bool for_decryption) { 521 void SyncBackendHost::Core::NotifyPassphraseRequired(bool for_decryption) {
583 if (!host_ || !host_->frontend_) 522 if (!host_ || !host_->frontend_)
584 return; 523 return;
585 524
586 DCHECK_EQ(MessageLoop::current(), host_->frontend_loop_); 525 DCHECK_EQ(MessageLoop::current(), host_->frontend_loop_);
587 526
588 if (processing_passphrase_) { 527 if (processing_passphrase_) {
589 VLOG(1) << "Core received OnPassphraseRequired while processing a " 528 VLOG(1) << "Core received OnPassphraseRequired while processing a "
590 << "passphrase. Silently dropping."; 529 << "passphrase. Silently dropping.";
591 return; 530 return;
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 DCHECK(MessageLoop::current() == host_->frontend_loop_); 764 DCHECK(MessageLoop::current() == host_->frontend_loop_);
826 processing_passphrase_ = true; 765 processing_passphrase_ = true;
827 } 766 }
828 767
829 void SyncBackendHost::Core::DoEncryptDataTypes( 768 void SyncBackendHost::Core::DoEncryptDataTypes(
830 const syncable::ModelTypeSet& encrypted_types) { 769 const syncable::ModelTypeSet& encrypted_types) {
831 DCHECK(MessageLoop::current() == host_->core_thread_.message_loop()); 770 DCHECK(MessageLoop::current() == host_->core_thread_.message_loop());
832 syncapi_->EncryptDataTypes(encrypted_types); 771 syncapi_->EncryptDataTypes(encrypted_types);
833 } 772 }
834 773
774 void SyncBackendHost::Core::DoRequestConfig(
775 const syncable::ModelTypeBitSet& added_types) {
776 syncapi_->RequestConfig(added_types);
777 }
778
835 UIModelWorker* SyncBackendHost::ui_worker() { 779 UIModelWorker* SyncBackendHost::ui_worker() {
836 ModelSafeWorker* w = registrar_.workers[GROUP_UI]; 780 ModelSafeWorker* w = registrar_.workers[GROUP_UI];
837 if (w == NULL) 781 if (w == NULL)
838 return NULL; 782 return NULL;
839 if (w->GetModelSafeGroup() != GROUP_UI) 783 if (w->GetModelSafeGroup() != GROUP_UI)
840 NOTREACHED(); 784 NOTREACHED();
841 return static_cast<UIModelWorker*>(w); 785 return static_cast<UIModelWorker*>(w);
842 } 786 }
843 787
844 void SyncBackendHost::Core::DoShutdown(bool sync_disabled) { 788 void SyncBackendHost::Core::DoShutdown(bool sync_disabled) {
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 bool found_all_added = true; 886 bool found_all_added = true;
943 for (syncable::ModelTypeSet::const_iterator it = 887 for (syncable::ModelTypeSet::const_iterator it =
944 host_->pending_download_state_->initial_types.begin(); 888 host_->pending_download_state_->initial_types.begin();
945 it != host_->pending_download_state_->initial_types.end(); 889 it != host_->pending_download_state_->initial_types.end();
946 ++it) { 890 ++it) {
947 if (host_->pending_download_state_->added_types.test(*it)) 891 if (host_->pending_download_state_->added_types.test(*it))
948 found_all_added &= snapshot->initial_sync_ended.test(*it); 892 found_all_added &= snapshot->initial_sync_ended.test(*it);
949 } 893 }
950 if (!found_all_added) { 894 if (!found_all_added) {
951 CHECK(false); 895 CHECK(false);
952 DCHECK(!host_->using_new_syncer_thread_);
953 } else { 896 } else {
954 host_->pending_download_state_->ready_task->Run(); 897 host_->pending_download_state_->ready_task->Run();
955 host_->pending_download_state_.reset(); 898 host_->pending_download_state_.reset();
956 } 899 }
957 } 900 }
958 host_->frontend_->OnSyncCycleCompleted(); 901 host_->frontend_->OnSyncCycleCompleted();
959 } 902 }
960 903
961 void SyncBackendHost::Core::OnInitializationComplete() { 904 void SyncBackendHost::Core::OnInitializationComplete() {
962 if (!host_ || !host_->frontend_) 905 if (!host_ || !host_->frontend_)
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 NewRunnableMethod(this, &Core::NotifyPassphraseFailed)); 963 NewRunnableMethod(this, &Core::NotifyPassphraseFailed));
1021 } 964 }
1022 965
1023 void SyncBackendHost::Core::OnPassphraseAccepted( 966 void SyncBackendHost::Core::OnPassphraseAccepted(
1024 const std::string& bootstrap_token) { 967 const std::string& bootstrap_token) {
1025 host_->frontend_loop_->PostTask(FROM_HERE, 968 host_->frontend_loop_->PostTask(FROM_HERE,
1026 NewRunnableMethod(this, &Core::NotifyPassphraseAccepted, 969 NewRunnableMethod(this, &Core::NotifyPassphraseAccepted,
1027 bootstrap_token)); 970 bootstrap_token));
1028 } 971 }
1029 972
1030 void SyncBackendHost::Core::OnPaused() {
1031 host_->frontend_loop_->PostTask(
1032 FROM_HERE,
1033 NewRunnableMethod(this, &Core::NotifyPaused));
1034 }
1035
1036 void SyncBackendHost::Core::OnResumed() {
1037 host_->frontend_loop_->PostTask(
1038 FROM_HERE,
1039 NewRunnableMethod(this, &Core::NotifyResumed));
1040 }
1041
1042 void SyncBackendHost::Core::OnStopSyncingPermanently() { 973 void SyncBackendHost::Core::OnStopSyncingPermanently() {
1043 host_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, 974 host_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this,
1044 &Core::HandleStopSyncingPermanentlyOnFrontendLoop)); 975 &Core::HandleStopSyncingPermanentlyOnFrontendLoop));
1045 } 976 }
1046 977
1047 void SyncBackendHost::Core::OnUpdatedToken(const std::string& token) { 978 void SyncBackendHost::Core::OnUpdatedToken(const std::string& token) {
1048 host_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, 979 host_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this,
1049 &Core::NotifyUpdatedToken, token)); 980 &Core::NotifyUpdatedToken, token));
1050 } 981 }
1051 982
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1123 1054
1124 void SyncBackendHost::Core::DoRequestNudge( 1055 void SyncBackendHost::Core::DoRequestNudge(
1125 const tracked_objects::Location& nudge_location) { 1056 const tracked_objects::Location& nudge_location) {
1126 syncapi_->RequestNudge(nudge_location); 1057 syncapi_->RequestNudge(nudge_location);
1127 } 1058 }
1128 1059
1129 void SyncBackendHost::Core::DoRequestClearServerData() { 1060 void SyncBackendHost::Core::DoRequestClearServerData() {
1130 syncapi_->RequestClearServerData(); 1061 syncapi_->RequestClearServerData();
1131 } 1062 }
1132 1063
1133 void SyncBackendHost::Core::DoRequestResume() {
1134 syncapi_->RequestResume();
1135 }
1136
1137 void SyncBackendHost::Core::DoRequestPause() {
1138 syncapi()->RequestPause();
1139 }
1140
1141 void SyncBackendHost::Core::SaveChanges() { 1064 void SyncBackendHost::Core::SaveChanges() {
1142 syncapi_->SaveChanges(); 1065 syncapi_->SaveChanges();
1143 } 1066 }
1144 1067
1145 void SyncBackendHost::Core::DeleteSyncDataFolder() { 1068 void SyncBackendHost::Core::DeleteSyncDataFolder() {
1146 if (file_util::DirectoryExists(host_->sync_data_folder_path())) { 1069 if (file_util::DirectoryExists(host_->sync_data_folder_path())) {
1147 if (!file_util::Delete(host_->sync_data_folder_path(), true)) 1070 if (!file_util::Delete(host_->sync_data_folder_path(), true))
1148 LOG(DFATAL) << "Could not delete the Sync Data folder."; 1071 LOG(DFATAL) << "Could not delete the Sync Data folder.";
1149 } 1072 }
1150 } 1073 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1206 syncapi_->RemoveObserver(&sync_manager_observer_); 1129 syncapi_->RemoveObserver(&sync_manager_observer_);
1207 } 1130 }
1208 1131
1209 void SyncBackendHost::Core::DoProcessMessage( 1132 void SyncBackendHost::Core::DoProcessMessage(
1210 const std::string& name, const JsArgList& args, 1133 const std::string& name, const JsArgList& args,
1211 const JsEventHandler* sender) { 1134 const JsEventHandler* sender) {
1212 DCHECK_EQ(MessageLoop::current(), host_->core_thread_.message_loop()); 1135 DCHECK_EQ(MessageLoop::current(), host_->core_thread_.message_loop());
1213 syncapi_->GetJsBackend()->ProcessMessage(name, args, sender); 1136 syncapi_->GetJsBackend()->ProcessMessage(name, args, sender);
1214 } 1137 }
1215 1138
1216 void SyncBackendHost::Core::DoStartConfigurationMode() {
1217 syncapi_->StartConfigurationMode(NewCallback(this,
1218 &SyncBackendHost::Core::FinishConfigureDataTypes));
1219 }
1220
1221 void SyncBackendHost::Core::DeferNudgeForCleanup() { 1139 void SyncBackendHost::Core::DeferNudgeForCleanup() {
1222 DCHECK_EQ(MessageLoop::current(), host_->core_thread_.message_loop()); 1140 DCHECK_EQ(MessageLoop::current(), host_->core_thread_.message_loop());
1223 deferred_nudge_for_cleanup_requested_ = true; 1141 deferred_nudge_for_cleanup_requested_ = true;
1224 } 1142 }
1225 1143
1226 } // namespace browser_sync 1144 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698