diff options
author | Primiano Tucci <primiano@google.com> | 2014-09-30 14:45:55 +0100 |
---|---|---|
committer | Primiano Tucci <primiano@google.com> | 2014-09-30 14:45:55 +0100 |
commit | 1320f92c476a1ad9d19dba2a48c72b75566198e9 (patch) | |
tree | ea7f149ccad687b22c18a72b729646568b2d54fb /chrome/browser/sync/test/integration/migration_watcher.cc | |
parent | 39b78c562f50ad7d5551ee861121f899239525a2 (diff) | |
download | chromium_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.cc | 66 |
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; +} |