migration_watcher.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_SYNC_TEST_INTEGRATION_MIGRATION_WATCHER_H_
6#define CHROME_BROWSER_SYNC_TEST_INTEGRATION_MIGRATION_WATCHER_H_
7
8#include "base/macros.h"
9#include "chrome/browser/sync/backend_migrator.h"
10#include "sync/internal_api/public/base/model_type.h"
11
12class ProfileSyncServiceHarness;
13class MigrationWaiter;
14
15// Helper class to observe and record migration state.
16class MigrationWatcher : public browser_sync::MigrationObserver {
17 public:
18  explicit MigrationWatcher(ProfileSyncServiceHarness* harness);
19  virtual ~MigrationWatcher();
20
21  // Returns true if the observed profile has a migration in progress.
22  bool HasPendingBackendMigration() const;
23
24  // Returns the set of types this class has observed being migrated.
25  syncer::ModelTypeSet GetMigratedTypes() const;
26
27  // Implementation of browser_sync::MigrationObserver.
28  virtual void OnMigrationStateChange() OVERRIDE;
29
30  // Registers the |waiter| to receive callbacks on migration state change.
31  void set_migration_waiter(MigrationWaiter* waiter);
32
33  // Unregisters the current MigrationWaiter, if any.
34  void clear_migration_waiter();
35
36 private:
37  // The ProfileSyncServiceHarness to watch.
38  ProfileSyncServiceHarness* const harness_;
39
40  // The set of data types currently undergoing migration.
41  syncer::ModelTypeSet pending_types_;
42
43  // The set of data types for which migration is complete. Accumulated by
44  // successive calls to OnMigrationStateChanged.
45  syncer::ModelTypeSet migrated_types_;
46
47  // The MigrationWatier that is waiting for this migration to complete.
48  MigrationWaiter* migration_waiter_;
49
50  DISALLOW_COPY_AND_ASSIGN(MigrationWatcher);
51};
52
53#endif  // CHROME_BROWSER_SYNC_TEST_INTEGRATION_MIGRATION_WATCHER_H_
54