summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/backend_migrator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sync/backend_migrator.cc')
-rw-r--r--chrome/browser/sync/backend_migrator.cc79
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_;
}