summaryrefslogtreecommitdiff
path: root/chrome/browser/sync/test/integration/migration_watcher.cc
diff options
context:
space:
mode:
authorPrimiano Tucci <primiano@google.com>2014-09-30 14:45:55 +0100
committerPrimiano Tucci <primiano@google.com>2014-09-30 14:45:55 +0100
commit1320f92c476a1ad9d19dba2a48c72b75566198e9 (patch)
treeea7f149ccad687b22c18a72b729646568b2d54fb /chrome/browser/sync/test/integration/migration_watcher.cc
parent39b78c562f50ad7d5551ee861121f899239525a2 (diff)
downloadchromium_org-1320f92c476a1ad9d19dba2a48c72b75566198e9.tar.gz
Merge from Chromium at DEPS revision 267aeeb8d85c
This commit was generated by merge_to_master.py. Change-Id: Id3aac9713b301fae64408cdaee0888724eeb7c0e
Diffstat (limited to 'chrome/browser/sync/test/integration/migration_watcher.cc')
-rw-r--r--chrome/browser/sync/test/integration/migration_watcher.cc66
1 files changed, 66 insertions, 0 deletions
diff --git a/chrome/browser/sync/test/integration/migration_watcher.cc b/chrome/browser/sync/test/integration/migration_watcher.cc
new file mode 100644
index 0000000000..14e18d6466
--- /dev/null
+++ b/chrome/browser/sync/test/integration/migration_watcher.cc
@@ -0,0 +1,66 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/sync/test/integration/migration_watcher.h"
+
+#include "chrome/browser/sync/profile_sync_service.h"
+#include "chrome/browser/sync/test/integration/migration_waiter.h"
+#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
+
+MigrationWatcher::MigrationWatcher(ProfileSyncServiceHarness* harness)
+ : harness_(harness), migration_waiter_(NULL) {
+ browser_sync::BackendMigrator* migrator =
+ harness_->service()->GetBackendMigratorForTest();
+ // PSS must have a migrator after sync is setup and initial data type
+ // configuration is complete.
+ migrator->AddMigrationObserver(this);
+}
+
+MigrationWatcher::~MigrationWatcher() {
+ DCHECK(!migration_waiter_);
+}
+
+bool MigrationWatcher::HasPendingBackendMigration() const {
+ browser_sync::BackendMigrator* migrator =
+ harness_->service()->GetBackendMigratorForTest();
+ return migrator && migrator->state() != browser_sync::BackendMigrator::IDLE;
+}
+
+syncer::ModelTypeSet MigrationWatcher::GetMigratedTypes() const {
+ return migrated_types_;
+}
+
+void MigrationWatcher::OnMigrationStateChange() {
+ if (HasPendingBackendMigration()) {
+ // A new bunch of data types are in the process of being migrated. Merge
+ // them into |pending_types_|.
+ pending_types_.PutAll(harness_->service()
+ ->GetBackendMigratorForTest()
+ ->GetPendingMigrationTypesForTest());
+ DVLOG(1) << harness_->profile_debug_name()
+ << ": new pending migration types "
+ << syncer::ModelTypeSetToString(pending_types_);
+ } else {
+ // Migration just finished for a bunch of data types. Merge them into
+ // |migrated_types_|.
+ migrated_types_.PutAll(pending_types_);
+ pending_types_.Clear();
+ DVLOG(1) << harness_->profile_debug_name() << ": new migrated types "
+ << syncer::ModelTypeSetToString(migrated_types_);
+ }
+
+ // Manually trigger a check of the exit condition.
+ if (migration_waiter_)
+ migration_waiter_->OnMigrationStateChange();
+}
+
+void MigrationWatcher::set_migration_waiter(MigrationWaiter* waiter) {
+ DCHECK(!migration_waiter_);
+ migration_waiter_ = waiter;
+}
+
+void MigrationWatcher::clear_migration_waiter() {
+ DCHECK(migration_waiter_);
+ migration_waiter_ = NULL;
+}