| Index: chrome/browser/sync/test/integration/quiesce_status_change_checker.h
|
| diff --git a/chrome/browser/sync/test/integration/quiesce_status_change_checker.h b/chrome/browser/sync/test/integration/quiesce_status_change_checker.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..37ec7e9b5431f2539b8859a1ba06aa3e7c7ad56a
|
| --- /dev/null
|
| +++ b/chrome/browser/sync/test/integration/quiesce_status_change_checker.h
|
| @@ -0,0 +1,52 @@
|
| +// 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.
|
| +
|
| +#ifndef CHROME_BROWSER_SYNC_TEST_INTEGRATION_QUIESCE_STATUS_CHANGE_CHECKER_H_
|
| +#define CHROME_BROWSER_SYNC_TEST_INTEGRATION_QUIESCE_STATUS_CHANGE_CHECKER_H_
|
| +
|
| +#include <vector>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/compiler_specific.h"
|
| +#include "base/memory/scoped_vector.h"
|
| +#include "chrome/browser/sync/test/integration/status_change_checker.h"
|
| +
|
| +class ProfileSyncService;
|
| +class ProgressMarkerWatcher;
|
| +class ProfileSyncServiceHarness;
|
| +
|
| +// Waits until all provided clients have finished committing any unsynced items
|
| +// and downloading each others' udpates.
|
| +//
|
| +// This requires that "self-notifications" be enabled. Otherwise the clients
|
| +// will not fetch the latest progress markers on their own, and the latest
|
| +// progress markers are needed to confirm that clients are in sync.
|
| +//
|
| +// There is a race condition here. If we manage to perform the check at
|
| +// precisely the wrong time, we could end up seeing stale snapshot state
|
| +// (crbug.com/95742), which would make us think that the client has finished
|
| +// syncing when it hasn't. In practice, this race is rare enough that it
|
| +// doesn't cause test failures.
|
| +class QuiesceStatusChangeChecker : public StatusChangeChecker {
|
| + public:
|
| + explicit QuiesceStatusChangeChecker(
|
| + std::vector<ProfileSyncService*> services);
|
| + virtual ~QuiesceStatusChangeChecker();
|
| +
|
| + virtual bool IsExitConditionSatisfied() OVERRIDE;
|
| + virtual std::string GetDebugMessage() const OVERRIDE;
|
| + virtual void InitObserver(ProfileSyncServiceHarness* harness) OVERRIDE;
|
| + virtual void UninitObserver(ProfileSyncServiceHarness* harness) OVERRIDE;
|
| +
|
| + void OnServiceStateChanged(ProfileSyncService* service);
|
| +
|
| + private:
|
| + std::vector<ProfileSyncService*> services_;
|
| + ScopedVector<ProgressMarkerWatcher> observers_;
|
| + ProfileSyncServiceHarness* harness_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(QuiesceStatusChangeChecker);
|
| +};
|
| +
|
| +#endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_QUIESCE_STATUS_CHANGE_CHECKER_H_
|
|
|