| OLD | NEW |
| 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 "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 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 | 243 |
| 244 registrar_.reset(); | 244 registrar_.reset(); |
| 245 frontend_ = NULL; | 245 frontend_ = NULL; |
| 246 core_ = NULL; // Releases reference to core_. | 246 core_ = NULL; // Releases reference to core_. |
| 247 } | 247 } |
| 248 | 248 |
| 249 void SyncBackendHost::ConfigureDataTypes( | 249 void SyncBackendHost::ConfigureDataTypes( |
| 250 const syncable::ModelTypeSet& types_to_add, | 250 const syncable::ModelTypeSet& types_to_add, |
| 251 const syncable::ModelTypeSet& types_to_remove, | 251 const syncable::ModelTypeSet& types_to_remove, |
| 252 sync_api::ConfigureReason reason, | 252 sync_api::ConfigureReason reason, |
| 253 base::Callback<void(const syncable::ModelTypeSet&)> ready_task, | 253 base::Callback<void(syncable::ModelEnumSet)> ready_task, |
| 254 bool enable_nigori) { | 254 bool enable_nigori) { |
| 255 syncable::ModelTypeSet types_to_add_with_nigori = types_to_add; | 255 syncable::ModelTypeSet types_to_add_with_nigori = types_to_add; |
| 256 syncable::ModelTypeSet types_to_remove_with_nigori = types_to_remove; | 256 syncable::ModelTypeSet types_to_remove_with_nigori = types_to_remove; |
| 257 if (enable_nigori) { | 257 if (enable_nigori) { |
| 258 types_to_add_with_nigori.insert(syncable::NIGORI); | 258 types_to_add_with_nigori.insert(syncable::NIGORI); |
| 259 types_to_remove_with_nigori.erase(syncable::NIGORI); | 259 types_to_remove_with_nigori.erase(syncable::NIGORI); |
| 260 } else { | 260 } else { |
| 261 types_to_add_with_nigori.erase(syncable::NIGORI); | 261 types_to_add_with_nigori.erase(syncable::NIGORI); |
| 262 types_to_remove_with_nigori.insert(syncable::NIGORI); | 262 types_to_remove_with_nigori.insert(syncable::NIGORI); |
| 263 } | 263 } |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 void SyncBackendHost::Core::HandleInitializationCompletedOnFrontendLoop( | 713 void SyncBackendHost::Core::HandleInitializationCompletedOnFrontendLoop( |
| 714 const WeakHandle<JsBackend>& js_backend, | 714 const WeakHandle<JsBackend>& js_backend, |
| 715 bool success) { | 715 bool success) { |
| 716 if (!host_) | 716 if (!host_) |
| 717 return; | 717 return; |
| 718 host_->HandleInitializationCompletedOnFrontendLoop(js_backend, success); | 718 host_->HandleInitializationCompletedOnFrontendLoop(js_backend, success); |
| 719 } | 719 } |
| 720 | 720 |
| 721 void SyncBackendHost::Core::HandleNigoriConfigurationCompletedOnFrontendLoop( | 721 void SyncBackendHost::Core::HandleNigoriConfigurationCompletedOnFrontendLoop( |
| 722 const WeakHandle<JsBackend>& js_backend, | 722 const WeakHandle<JsBackend>& js_backend, |
| 723 const syncable::ModelTypeSet& failed_configuration_types) { | 723 const syncable::ModelEnumSet failed_configuration_types) { |
| 724 if (!host_) | 724 if (!host_) |
| 725 return; | 725 return; |
| 726 host_->HandleInitializationCompletedOnFrontendLoop( | 726 host_->HandleInitializationCompletedOnFrontendLoop( |
| 727 js_backend, failed_configuration_types.empty()); | 727 js_backend, failed_configuration_types.Empty()); |
| 728 } | 728 } |
| 729 | 729 |
| 730 void SyncBackendHost::Core::StartSavingChanges() { | 730 void SyncBackendHost::Core::StartSavingChanges() { |
| 731 // We may already be shut down. | 731 // We may already be shut down. |
| 732 if (!sync_loop_) | 732 if (!sync_loop_) |
| 733 return; | 733 return; |
| 734 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 734 DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| 735 save_changes_timer_.Start(FROM_HERE, | 735 save_changes_timer_.Start(FROM_HERE, |
| 736 base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), | 736 base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), |
| 737 this, &Core::SaveChanges); | 737 this, &Core::SaveChanges); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 813 void SyncBackendHost::Core::HandleSyncCycleCompletedOnFrontendLoop( | 813 void SyncBackendHost::Core::HandleSyncCycleCompletedOnFrontendLoop( |
| 814 SyncSessionSnapshot* snapshot) { | 814 SyncSessionSnapshot* snapshot) { |
| 815 if (!host_ || !host_->frontend_) | 815 if (!host_ || !host_->frontend_) |
| 816 return; | 816 return; |
| 817 DCHECK_EQ(MessageLoop::current(), host_->frontend_loop_); | 817 DCHECK_EQ(MessageLoop::current(), host_->frontend_loop_); |
| 818 | 818 |
| 819 host_->last_snapshot_.reset(snapshot); | 819 host_->last_snapshot_.reset(snapshot); |
| 820 | 820 |
| 821 SVLOG(1) << "Got snapshot " << snapshot->ToString(); | 821 SVLOG(1) << "Got snapshot " << snapshot->ToString(); |
| 822 | 822 |
| 823 const syncable::ModelTypeSet& to_migrate = | 823 const syncable::ModelEnumSet to_migrate = |
| 824 snapshot->syncer_status.types_needing_local_migration; | 824 snapshot->syncer_status.types_needing_local_migration; |
| 825 if (!to_migrate.empty()) | 825 if (!to_migrate.Empty()) |
| 826 host_->frontend_->OnMigrationNeededForTypes(to_migrate); | 826 host_->frontend_->OnMigrationNeededForTypes( |
| 827 syncable::ModelEnumSetToSet(to_migrate)); |
| 827 | 828 |
| 828 // Process any changes to the datatypes we're syncing. | 829 // Process any changes to the datatypes we're syncing. |
| 829 // TODO(sync): add support for removing types. | 830 // TODO(sync): add support for removing types. |
| 830 if (host_->initialized()) | 831 if (host_->initialized()) |
| 831 host_->AddExperimentalTypes(); | 832 host_->AddExperimentalTypes(); |
| 832 | 833 |
| 833 // If we are waiting for a configuration change, check here to see | 834 // If we are waiting for a configuration change, check here to see |
| 834 // if this sync cycle has initialized all of the types we've been | 835 // if this sync cycle has initialized all of the types we've been |
| 835 // waiting for. | 836 // waiting for. |
| 836 if (host_->pending_download_state_.get()) { | 837 if (host_->pending_download_state_.get()) { |
| 837 scoped_ptr<PendingConfigureDataTypesState> state( | 838 scoped_ptr<PendingConfigureDataTypesState> state( |
| 838 host_->pending_download_state_.release()); | 839 host_->pending_download_state_.release()); |
| 839 DCHECK( | 840 const syncable::ModelEnumSet types_to_add = |
| 840 std::includes(state->types_to_add.begin(), state->types_to_add.end(), | 841 syncable::ModelTypeSetToEnumSet(state->types_to_add); |
| 841 state->added_types.begin(), state->added_types.end())); | 842 const syncable::ModelEnumSet added_types = |
| 842 syncable::ModelTypeSet initial_sync_ended = | 843 syncable::ModelTypeSetToEnumSet(state->added_types); |
| 843 syncable::ModelTypeBitSetToSet(snapshot->initial_sync_ended); | 844 DCHECK(types_to_add.HasAll(added_types)); |
| 844 syncable::ModelTypeSet failed_configuration_types; | 845 const syncable::ModelEnumSet initial_sync_ended = |
| 845 std::set_difference( | 846 snapshot->initial_sync_ended; |
| 846 state->added_types.begin(), state->added_types.end(), | 847 const syncable::ModelEnumSet failed_configuration_types = |
| 847 initial_sync_ended.begin(), initial_sync_ended.end(), | 848 Difference(added_types, initial_sync_ended); |
| 848 std::inserter(failed_configuration_types, | |
| 849 failed_configuration_types.end())); | |
| 850 SVLOG(1) | 849 SVLOG(1) |
| 851 << "Added types: " | 850 << "Added types: " |
| 852 << syncable::ModelTypeSetToString(state->added_types) | 851 << syncable::ModelEnumSetToString(added_types) |
| 853 << ", configured types: " | 852 << ", configured types: " |
| 854 << syncable::ModelTypeSetToString(initial_sync_ended) | 853 << syncable::ModelEnumSetToString(initial_sync_ended) |
| 855 << ", failed configuration types: " | 854 << ", failed configuration types: " |
| 856 << syncable::ModelTypeSetToString(failed_configuration_types); | 855 << syncable::ModelEnumSetToString(failed_configuration_types); |
| 857 state->ready_task.Run(failed_configuration_types); | 856 state->ready_task.Run(failed_configuration_types); |
| 858 if (!failed_configuration_types.empty()) | 857 if (!failed_configuration_types.Empty()) |
| 859 return; | 858 return; |
| 860 } | 859 } |
| 861 | 860 |
| 862 if (host_->initialized()) | 861 if (host_->initialized()) |
| 863 host_->frontend_->OnSyncCycleCompleted(); | 862 host_->frontend_->OnSyncCycleCompleted(); |
| 864 } | 863 } |
| 865 | 864 |
| 866 void SyncBackendHost::Core::HandleStopSyncingPermanentlyOnFrontendLoop() { | 865 void SyncBackendHost::Core::HandleStopSyncingPermanentlyOnFrontendLoop() { |
| 867 if (!host_ || !host_->frontend_) | 866 if (!host_ || !host_->frontend_) |
| 868 return; | 867 return; |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 999 pending_config_mode_state_->added_types = | 998 pending_config_mode_state_->added_types = |
| 1000 sync_api::GetTypesWithEmptyProgressMarkerToken(enabled_types, | 999 sync_api::GetTypesWithEmptyProgressMarkerToken(enabled_types, |
| 1001 GetUserShare()); | 1000 GetUserShare()); |
| 1002 } | 1001 } |
| 1003 | 1002 |
| 1004 // If we've added types, we always want to request a nudge/config (even if | 1003 // If we've added types, we always want to request a nudge/config (even if |
| 1005 // the initial sync is ended), in case we could not decrypt the data. | 1004 // the initial sync is ended), in case we could not decrypt the data. |
| 1006 if (pending_config_mode_state_->added_types.empty()) { | 1005 if (pending_config_mode_state_->added_types.empty()) { |
| 1007 SVLOG(1) << "No new types added; calling ready_task directly"; | 1006 SVLOG(1) << "No new types added; calling ready_task directly"; |
| 1008 // No new types - just notify the caller that the types are available. | 1007 // No new types - just notify the caller that the types are available. |
| 1009 const syncable::ModelTypeSet failed_configuration_types; | 1008 const syncable::ModelEnumSet failed_configuration_types; |
| 1010 pending_config_mode_state_->ready_task.Run(failed_configuration_types); | 1009 pending_config_mode_state_->ready_task.Run(failed_configuration_types); |
| 1011 } else { | 1010 } else { |
| 1012 pending_download_state_.reset(pending_config_mode_state_.release()); | 1011 pending_download_state_.reset(pending_config_mode_state_.release()); |
| 1013 | 1012 |
| 1014 // Always configure nigori if it's enabled. | 1013 // Always configure nigori if it's enabled. |
| 1015 syncable::ModelTypeSet types_to_config = | 1014 syncable::ModelTypeSet types_to_config = |
| 1016 pending_download_state_->added_types; | 1015 pending_download_state_->added_types; |
| 1017 if (IsNigoriEnabled()) { | 1016 if (IsNigoriEnabled()) { |
| 1018 // Note: Nigori is the only type that gets added with a nonempty | 1017 // Note: Nigori is the only type that gets added with a nonempty |
| 1019 // progress marker during config. If the server returns a migration | 1018 // progress marker during config. If the server returns a migration |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1076 FROM_HERE, | 1075 FROM_HERE, |
| 1077 base::Bind(&SyncBackendHost::Core::DoRefreshEncryption, | 1076 base::Bind(&SyncBackendHost::Core::DoRefreshEncryption, |
| 1078 core_.get(), sync_thread_done_callback)); | 1077 core_.get(), sync_thread_done_callback)); |
| 1079 } | 1078 } |
| 1080 | 1079 |
| 1081 #undef SVLOG | 1080 #undef SVLOG |
| 1082 | 1081 |
| 1083 #undef SLOG | 1082 #undef SLOG |
| 1084 | 1083 |
| 1085 } // namespace browser_sync | 1084 } // namespace browser_sync |
| OLD | NEW |