// 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_waiter.h"

#include "base/logging.h"
#include "chrome/browser/sync/test/integration/migration_watcher.h"

MigrationWaiter::MigrationWaiter(syncer::ModelTypeSet expected_types,
                                 MigrationWatcher* watcher)
    : watcher_(watcher), expected_types_(expected_types) {
  DCHECK(!expected_types_.Empty());
  watcher_->set_migration_waiter(this);
}

MigrationWaiter::~MigrationWaiter() {
  watcher_->clear_migration_waiter();
}

// Returns true when sync reports that there is no pending migration, and
// migration is complete for all data types in |expected_types_|.
bool MigrationWaiter::IsExitConditionSatisfied() {
  return watcher_->GetMigratedTypes().HasAll(expected_types_) &&
         !watcher_->HasPendingBackendMigration();
}

std::string MigrationWaiter::GetDebugMessage() const {
  return "Waiting to migrate (" + ModelTypeSetToString(expected_types_) +
         "); " + "Currently migrated: (" +
         ModelTypeSetToString(watcher_->GetMigratedTypes()) + ")";
}

void MigrationWaiter::OnMigrationStateChange() {
  CheckExitCondition();
}
