Index: chrome/browser/sync/backend_migrator.cc |
diff --git a/chrome/browser/sync/backend_migrator.cc b/chrome/browser/sync/backend_migrator.cc |
index 66c050c7f7e22cf27b2aa7a830cf96553532414f..a0dabde764d1d887f004b04bafdc182ff5a62396 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_; |
} |