diff options
Diffstat (limited to 'chrome/browser/sync/backend_migrator.cc')
-rw-r--r-- | chrome/browser/sync/backend_migrator.cc | 79 |
1 files changed, 31 insertions, 48 deletions
diff --git a/chrome/browser/sync/backend_migrator.cc b/chrome/browser/sync/backend_migrator.cc index 66c050c..a0dabde 100644 --- a/chrome/browser/sync/backend_migrator.cc +++ b/chrome/browser/sync/backend_migrator.cc @@ -4,8 +4,6 @@ #include "chrome/browser/sync/backend_migrator.h" -#include <algorithm> - #include "base/message_loop.h" #include "base/string_number_conversions.h" #include "base/tracked_objects.h" @@ -19,7 +17,7 @@ #include "content/public/browser/notification_details.h" #include "content/public/browser/notification_source.h" -using syncable::ModelTypeSet; +using syncable::ModelEnumSet; namespace browser_sync { @@ -49,19 +47,13 @@ BackendMigrator::~BackendMigrator() { #define SDVLOG(verbose_level) DVLOG(verbose_level) << name_ << ": " -void BackendMigrator::MigrateTypes(const syncable::ModelTypeSet& types) { - const ModelTypeSet old_to_migrate = to_migrate_; - { - ModelTypeSet temp; - std::set_union(to_migrate_.begin(), to_migrate_.end(), - types.begin(), types.end(), - std::inserter(temp, temp.end())); - std::swap(temp, to_migrate_); - } - SDVLOG(1) << "MigrateTypes called with " << ModelTypeSetToString(types) - << ", old_to_migrate = " << ModelTypeSetToString(old_to_migrate) - << ", to_migrate_ = " << ModelTypeSetToString(to_migrate_); - if (old_to_migrate == to_migrate_) { +void BackendMigrator::MigrateTypes(syncable::ModelEnumSet types) { + const ModelEnumSet old_to_migrate = to_migrate_; + to_migrate_.PutAll(types); + SDVLOG(1) << "MigrateTypes called with " << ModelEnumSetToString(types) + << ", old_to_migrate = " << ModelEnumSetToString(old_to_migrate) + << ", to_migrate_ = " << ModelEnumSetToString(to_migrate_); + if (old_to_migrate.Equals(to_migrate_)) { SDVLOG(1) << "MigrateTypes called with no new types; ignoring"; return; } @@ -111,16 +103,12 @@ bool BackendMigrator::TryStart() { void BackendMigrator::RestartMigration() { // We'll now disable any running types that need to be migrated. ChangeState(DISABLING_TYPES); - ModelTypeSet full_set; - service_->GetPreferredDataTypes(&full_set); - ModelTypeSet difference; - std::set_difference(full_set.begin(), full_set.end(), - to_migrate_.begin(), to_migrate_.end(), - std::inserter(difference, difference.end())); - bool configure_with_nigori = to_migrate_.count(syncable::NIGORI) == 0; + const ModelEnumSet full_set = service_->GetPreferredDataTypes(); + const ModelEnumSet difference = Difference(full_set, to_migrate_); + bool configure_with_nigori = !to_migrate_.Has(syncable::NIGORI); SDVLOG(1) << "BackendMigrator disabling types " - << ModelTypeSetToString(to_migrate_) << "; configuring " - << ModelTypeSetToString(difference) + << ModelEnumSetToString(to_migrate_) << "; configuring " + << ModelEnumSetToString(difference) << (configure_with_nigori ? " with nigori" : " without nigori"); // Add nigori for config or not based upon if the server told us to migrate @@ -153,16 +141,16 @@ void BackendMigrator::Observe(int type, namespace { -syncable::ModelTypeSet GetUnsyncedDataTypes(sync_api::UserShare* user_share) { +syncable::ModelEnumSet GetUnsyncedDataTypes(sync_api::UserShare* user_share) { sync_api::ReadTransaction trans(FROM_HERE, user_share); - syncable::ModelTypeSet unsynced_data_types; + syncable::ModelEnumSet unsynced_data_types; for (int i = syncable::FIRST_REAL_MODEL_TYPE; i < syncable::MODEL_TYPE_COUNT; ++i) { syncable::ModelType type = syncable::ModelTypeFromInt(i); sync_pb::DataTypeProgressMarker progress_marker; trans.GetLookup()->GetDownloadProgress(type, &progress_marker); if (progress_marker.token().empty()) { - unsynced_data_types.insert(type); + unsynced_data_types.Put(type); } } return unsynced_data_types; @@ -173,9 +161,9 @@ syncable::ModelTypeSet GetUnsyncedDataTypes(sync_api::UserShare* user_share) { void BackendMigrator::OnConfigureDone( const DataTypeManager::ConfigureResult& result) { SDVLOG(1) << "OnConfigureDone with requested types " - << ModelTypeSetToString(result.requested_types) + << ModelEnumSetToString(result.requested_types) << ", status " << result.status - << ", and to_migrate_ = " << ModelTypeSetToString(to_migrate_); + << ", and to_migrate_ = " << ModelEnumSetToString(to_migrate_); if (state_ == WAITING_TO_START) { if (!TryStart()) SDVLOG(1) << "Manager still not configured; still waiting"; @@ -184,14 +172,11 @@ void BackendMigrator::OnConfigureDone( DCHECK_GT(state_, WAITING_TO_START); - ModelTypeSet intersection; - std::set_intersection( - result.requested_types.begin(), result.requested_types.end(), - to_migrate_.begin(), to_migrate_.end(), - std::inserter(intersection, intersection.end())); + const ModelEnumSet intersection = + Intersection(result.requested_types, to_migrate_); // This intersection check is to determine if our disable request // was interrupted by a user changing preferred types. - if (state_ == DISABLING_TYPES && !intersection.empty()) { + if (state_ == DISABLING_TYPES && !intersection.Empty()) { SDVLOG(1) << "Disable request interrupted by user changing types"; RestartMigration(); return; @@ -207,19 +192,18 @@ void BackendMigrator::OnConfigureDone( // migration as the type will still be enabled on restart. SLOG(WARNING) << "Unable to migrate, configuration failed!"; ChangeState(IDLE); - to_migrate_.clear(); + to_migrate_.Clear(); return; } if (state_ == DISABLING_TYPES) { - const syncable::ModelTypeSet& unsynced_types = + const syncable::ModelEnumSet unsynced_types = GetUnsyncedDataTypes(user_share_); - if (!std::includes(unsynced_types.begin(), unsynced_types.end(), - to_migrate_.begin(), to_migrate_.end())) { + if (!unsynced_types.HasAll(to_migrate_)) { SLOG(WARNING) << "Set of unsynced types: " - << syncable::ModelTypeSetToString(unsynced_types) + << syncable::ModelEnumSetToString(unsynced_types) << " does not contain types to migrate: " - << syncable::ModelTypeSetToString(to_migrate_) + << syncable::ModelEnumSetToString(to_migrate_) << "; not re-enabling yet"; return; } @@ -227,18 +211,17 @@ void BackendMigrator::OnConfigureDone( ChangeState(REENABLING_TYPES); // Don't use |to_migrate_| for the re-enabling because the user // may have chosen to disable types during the migration. - ModelTypeSet full_set; - service_->GetPreferredDataTypes(&full_set); + const ModelEnumSet full_set = service_->GetPreferredDataTypes(); SDVLOG(1) << "BackendMigrator re-enabling types: " - << syncable::ModelTypeSetToString(full_set); + << syncable::ModelEnumSetToString(full_set); manager_->Configure(full_set, sync_api::CONFIGURE_REASON_MIGRATION); } else if (state_ == REENABLING_TYPES) { // We're done! ChangeState(IDLE); SDVLOG(1) << "BackendMigrator: Migration complete for: " - << syncable::ModelTypeSetToString(to_migrate_); - to_migrate_.clear(); + << syncable::ModelEnumSetToString(to_migrate_); + to_migrate_.Clear(); } } @@ -246,7 +229,7 @@ BackendMigrator::State BackendMigrator::state() const { return state_; } -syncable::ModelTypeSet +syncable::ModelEnumSet BackendMigrator::GetPendingMigrationTypesForTest() const { return to_migrate_; } |