| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "chrome/browser/sync/glue/change_processor.h" | 22 #include "chrome/browser/sync/glue/change_processor.h" |
| 23 #include "chrome/browser/sync/glue/database_model_worker.h" | 23 #include "chrome/browser/sync/glue/database_model_worker.h" |
| 24 #include "chrome/browser/sync/glue/history_model_worker.h" | 24 #include "chrome/browser/sync/glue/history_model_worker.h" |
| 25 #include "chrome/browser/sync/glue/sync_backend_host.h" | 25 #include "chrome/browser/sync/glue/sync_backend_host.h" |
| 26 #include "chrome/browser/sync/glue/http_bridge.h" | 26 #include "chrome/browser/sync/glue/http_bridge.h" |
| 27 #include "chrome/browser/sync/glue/password_model_worker.h" | 27 #include "chrome/browser/sync/glue/password_model_worker.h" |
| 28 #include "chrome/browser/sync/sessions/session_state.h" | 28 #include "chrome/browser/sync/sessions/session_state.h" |
| 29 // TODO(tim): Remove this! We should have a syncapi pass-thru instead. | 29 // TODO(tim): Remove this! We should have a syncapi pass-thru instead. |
| 30 #include "chrome/browser/sync/syncable/directory_manager.h" // Cryptographer. | 30 #include "chrome/browser/sync/syncable/directory_manager.h" // Cryptographer. |
| 31 #include "chrome/browser/sync/syncable/model_type.h" | 31 #include "chrome/browser/sync/syncable/model_type.h" |
| 32 #include "chrome/browser/sync/syncable/nigori_util.h" |
| 32 #include "chrome/common/chrome_switches.h" | 33 #include "chrome/common/chrome_switches.h" |
| 33 #include "chrome/common/chrome_version_info.h" | 34 #include "chrome/common/chrome_version_info.h" |
| 34 #include "chrome/common/net/gaia/gaia_constants.h" | 35 #include "chrome/common/net/gaia/gaia_constants.h" |
| 35 #include "chrome/common/notification_service.h" | 36 #include "chrome/common/notification_service.h" |
| 36 #include "chrome/common/notification_type.h" | 37 #include "chrome/common/notification_type.h" |
| 37 #include "chrome/common/pref_names.h" | 38 #include "chrome/common/pref_names.h" |
| 38 #include "webkit/glue/webkit_glue.h" | 39 #include "webkit/glue/webkit_glue.h" |
| 39 | 40 |
| 40 static const int kSaveChangesIntervalSeconds = 10; | 41 static const int kSaveChangesIntervalSeconds = 10; |
| 41 static const FilePath::CharType kSyncDataFolderName[] = | 42 static const FilePath::CharType kSyncDataFolderName[] = |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 } | 121 } |
| 121 | 122 |
| 122 // Any datatypes that we want the syncer to pull down must | 123 // Any datatypes that we want the syncer to pull down must |
| 123 // be in the routing_info map. We set them to group passive, meaning that | 124 // be in the routing_info map. We set them to group passive, meaning that |
| 124 // updates will be applied, but not dispatched to the UI thread yet. | 125 // updates will be applied, but not dispatched to the UI thread yet. |
| 125 for (syncable::ModelTypeSet::const_iterator it = types.begin(); | 126 for (syncable::ModelTypeSet::const_iterator it = types.begin(); |
| 126 it != types.end(); ++it) { | 127 it != types.end(); ++it) { |
| 127 registrar_.routing_info[(*it)] = GROUP_PASSIVE; | 128 registrar_.routing_info[(*it)] = GROUP_PASSIVE; |
| 128 } | 129 } |
| 129 | 130 |
| 130 // TODO(tim): Remove this special case once NIGORI is populated by | 131 // Nigori is populated by default now. |
| 131 // default. We piggy back off of the passwords flag for now to not | 132 registrar_.routing_info[syncable::NIGORI] = GROUP_PASSIVE; |
| 132 // require both encryption and passwords flags. | |
| 133 bool enable_encryption = !CommandLine::ForCurrentProcess()->HasSwitch( | |
| 134 switches::kDisableSyncPasswords) || types.count(syncable::PASSWORDS); | |
| 135 if (enable_encryption) | |
| 136 registrar_.routing_info[syncable::NIGORI] = GROUP_PASSIVE; | |
| 137 | 133 |
| 138 InitCore(Core::DoInitializeOptions( | 134 InitCore(Core::DoInitializeOptions( |
| 139 sync_service_url, | 135 sync_service_url, |
| 140 MakeHttpBridgeFactory(baseline_context_getter), | 136 MakeHttpBridgeFactory(baseline_context_getter), |
| 141 credentials, | 137 credentials, |
| 142 delete_sync_data_folder, | 138 delete_sync_data_folder, |
| 143 notifier_options, | 139 notifier_options, |
| 144 RestoreEncryptionBootstrapToken(), | 140 RestoreEncryptionBootstrapToken(), |
| 145 false)); | 141 false)); |
| 146 } | 142 } |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 // notice that the routing info has changed and start the process of | 376 // notice that the routing info has changed and start the process of |
| 381 // downloading updates for newly added data types. Once this is | 377 // downloading updates for newly added data types. Once this is |
| 382 // complete, the configure_ready_task_ is run via an | 378 // complete, the configure_ready_task_ is run via an |
| 383 // OnInitializationComplete notification. | 379 // OnInitializationComplete notification. |
| 384 if (deleted_type || !core_->syncapi()->InitialSyncEndedForAllEnabledTypes()) | 380 if (deleted_type || !core_->syncapi()->InitialSyncEndedForAllEnabledTypes()) |
| 385 // We can only nudge when we've either deleted a dataype or added one, else | 381 // We can only nudge when we've either deleted a dataype or added one, else |
| 386 // we break all the profile sync unit tests. | 382 // we break all the profile sync unit tests. |
| 387 RequestNudge(); | 383 RequestNudge(); |
| 388 } | 384 } |
| 389 | 385 |
| 386 void SyncBackendHost::EncryptDataTypes( |
| 387 const syncable::ModelTypeSet& encrypted_types) { |
| 388 core_thread_.message_loop()->PostTask(FROM_HERE, |
| 389 NewRunnableMethod(core_.get(), |
| 390 &SyncBackendHost::Core::DoEncryptDataTypes, |
| 391 encrypted_types)); |
| 392 } |
| 393 |
| 390 void SyncBackendHost::RequestNudge() { | 394 void SyncBackendHost::RequestNudge() { |
| 391 core_thread_.message_loop()->PostTask(FROM_HERE, | 395 core_thread_.message_loop()->PostTask(FROM_HERE, |
| 392 NewRunnableMethod(core_.get(), &SyncBackendHost::Core::DoRequestNudge)); | 396 NewRunnableMethod(core_.get(), &SyncBackendHost::Core::DoRequestNudge)); |
| 393 } | 397 } |
| 394 | 398 |
| 395 void SyncBackendHost::ActivateDataType( | 399 void SyncBackendHost::ActivateDataType( |
| 396 DataTypeController* data_type_controller, | 400 DataTypeController* data_type_controller, |
| 397 ChangeProcessor* change_processor) { | 401 ChangeProcessor* change_processor) { |
| 398 base::AutoLock lock(registrar_lock_); | 402 base::AutoLock lock(registrar_lock_); |
| 399 | 403 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 if (!host_) | 488 if (!host_) |
| 485 return; | 489 return; |
| 486 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 490 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 487 TokenAvailableDetails details(GaiaConstants::kSyncService, token); | 491 TokenAvailableDetails details(GaiaConstants::kSyncService, token); |
| 488 NotificationService::current()->Notify( | 492 NotificationService::current()->Notify( |
| 489 NotificationType::TOKEN_UPDATED, | 493 NotificationType::TOKEN_UPDATED, |
| 490 NotificationService::AllSources(), | 494 NotificationService::AllSources(), |
| 491 Details<const TokenAvailableDetails>(&details)); | 495 Details<const TokenAvailableDetails>(&details)); |
| 492 } | 496 } |
| 493 | 497 |
| 498 void SyncBackendHost::Core::NotifyEncryptionComplete( |
| 499 const syncable::ModelTypeSet& encrypted_types) { |
| 500 if (!host_) |
| 501 return; |
| 502 DCHECK_EQ(MessageLoop::current(), host_->frontend_loop_); |
| 503 host_->frontend_->OnEncryptionComplete(encrypted_types); |
| 504 } |
| 505 |
| 494 SyncBackendHost::Core::DoInitializeOptions::DoInitializeOptions( | 506 SyncBackendHost::Core::DoInitializeOptions::DoInitializeOptions( |
| 495 const GURL& service_url, | 507 const GURL& service_url, |
| 496 sync_api::HttpPostProviderFactory* http_bridge_factory, | 508 sync_api::HttpPostProviderFactory* http_bridge_factory, |
| 497 const sync_api::SyncCredentials& credentials, | 509 const sync_api::SyncCredentials& credentials, |
| 498 bool delete_sync_data_folder, | 510 bool delete_sync_data_folder, |
| 499 const notifier::NotifierOptions& notifier_options, | 511 const notifier::NotifierOptions& notifier_options, |
| 500 std::string restored_key_for_bootstrapping, | 512 std::string restored_key_for_bootstrapping, |
| 501 bool setup_for_test_mode) | 513 bool setup_for_test_mode) |
| 502 : service_url(service_url), | 514 : service_url(service_url), |
| 503 http_bridge_factory(http_bridge_factory), | 515 http_bridge_factory(http_bridge_factory), |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 DCHECK(MessageLoop::current() == host_->core_thread_.message_loop()); | 646 DCHECK(MessageLoop::current() == host_->core_thread_.message_loop()); |
| 635 syncapi_->StartSyncing(); | 647 syncapi_->StartSyncing(); |
| 636 } | 648 } |
| 637 | 649 |
| 638 void SyncBackendHost::Core::DoSetPassphrase(const std::string& passphrase, | 650 void SyncBackendHost::Core::DoSetPassphrase(const std::string& passphrase, |
| 639 bool is_explicit) { | 651 bool is_explicit) { |
| 640 DCHECK(MessageLoop::current() == host_->core_thread_.message_loop()); | 652 DCHECK(MessageLoop::current() == host_->core_thread_.message_loop()); |
| 641 syncapi_->SetPassphrase(passphrase, is_explicit); | 653 syncapi_->SetPassphrase(passphrase, is_explicit); |
| 642 } | 654 } |
| 643 | 655 |
| 656 void SyncBackendHost::Core::DoEncryptDataTypes( |
| 657 const syncable::ModelTypeSet& encrypted_types) { |
| 658 DCHECK(MessageLoop::current() == host_->core_thread_.message_loop()); |
| 659 syncapi_->EncryptDataTypes(encrypted_types); |
| 660 } |
| 661 |
| 644 UIModelWorker* SyncBackendHost::ui_worker() { | 662 UIModelWorker* SyncBackendHost::ui_worker() { |
| 645 ModelSafeWorker* w = registrar_.workers[GROUP_UI]; | 663 ModelSafeWorker* w = registrar_.workers[GROUP_UI]; |
| 646 if (w == NULL) | 664 if (w == NULL) |
| 647 return NULL; | 665 return NULL; |
| 648 if (w->GetModelSafeGroup() != GROUP_UI) | 666 if (w->GetModelSafeGroup() != GROUP_UI) |
| 649 NOTREACHED(); | 667 NOTREACHED(); |
| 650 return static_cast<UIModelWorker*>(w); | 668 return static_cast<UIModelWorker*>(w); |
| 651 } | 669 } |
| 652 | 670 |
| 653 void SyncBackendHost::Core::DoShutdown(bool sync_disabled) { | 671 void SyncBackendHost::Core::DoShutdown(bool sync_disabled) { |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 void SyncBackendHost::Core::OnClearServerDataSucceeded() { | 871 void SyncBackendHost::Core::OnClearServerDataSucceeded() { |
| 854 host_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, | 872 host_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, |
| 855 &Core::HandleClearServerDataSucceededOnFrontendLoop)); | 873 &Core::HandleClearServerDataSucceededOnFrontendLoop)); |
| 856 } | 874 } |
| 857 | 875 |
| 858 void SyncBackendHost::Core::OnClearServerDataFailed() { | 876 void SyncBackendHost::Core::OnClearServerDataFailed() { |
| 859 host_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, | 877 host_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, |
| 860 &Core::HandleClearServerDataFailedOnFrontendLoop)); | 878 &Core::HandleClearServerDataFailedOnFrontendLoop)); |
| 861 } | 879 } |
| 862 | 880 |
| 881 void SyncBackendHost::Core::OnEncryptionComplete( |
| 882 const syncable::ModelTypeSet& encrypted_types) { |
| 883 host_->frontend_loop_->PostTask( |
| 884 FROM_HERE, |
| 885 NewRunnableMethod(this, &Core::NotifyEncryptionComplete, |
| 886 encrypted_types)); |
| 887 } |
| 888 |
| 863 void SyncBackendHost::Core::HandleStopSyncingPermanentlyOnFrontendLoop() { | 889 void SyncBackendHost::Core::HandleStopSyncingPermanentlyOnFrontendLoop() { |
| 864 if (!host_ || !host_->frontend_) | 890 if (!host_ || !host_->frontend_) |
| 865 return; | 891 return; |
| 866 host_->frontend_->OnStopSyncingPermanently(); | 892 host_->frontend_->OnStopSyncingPermanently(); |
| 867 } | 893 } |
| 868 | 894 |
| 869 void SyncBackendHost::Core::HandleClearServerDataSucceededOnFrontendLoop() { | 895 void SyncBackendHost::Core::HandleClearServerDataSucceededOnFrontendLoop() { |
| 870 if (!host_ || !host_->frontend_) | 896 if (!host_ || !host_->frontend_) |
| 871 return; | 897 return; |
| 872 host_->frontend_->OnClearServerDataSucceeded(); | 898 host_->frontend_->OnClearServerDataSucceeded(); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 916 } | 942 } |
| 917 | 943 |
| 918 void SyncBackendHost::Core::DeleteSyncDataFolder() { | 944 void SyncBackendHost::Core::DeleteSyncDataFolder() { |
| 919 if (file_util::DirectoryExists(host_->sync_data_folder_path())) { | 945 if (file_util::DirectoryExists(host_->sync_data_folder_path())) { |
| 920 if (!file_util::Delete(host_->sync_data_folder_path(), true)) | 946 if (!file_util::Delete(host_->sync_data_folder_path(), true)) |
| 921 LOG(DFATAL) << "Could not delete the Sync Data folder."; | 947 LOG(DFATAL) << "Could not delete the Sync Data folder."; |
| 922 } | 948 } |
| 923 } | 949 } |
| 924 | 950 |
| 925 } // namespace browser_sync | 951 } // namespace browser_sync |
| OLD | NEW |