quiesce_status_change_checker.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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_QUIESCE_STATUS_CHANGE_CHECKER_H_ 6#define CHROME_BROWSER_SYNC_TEST_INTEGRATION_QUIESCE_STATUS_CHANGE_CHECKER_H_ 7 8#include <vector> 9 10#include "base/basictypes.h" 11#include "base/compiler_specific.h" 12#include "base/memory/scoped_vector.h" 13#include "chrome/browser/sync/test/integration/status_change_checker.h" 14 15class ProfileSyncService; 16class ProgressMarkerWatcher; 17class ProfileSyncServiceHarness; 18 19// Waits until all provided clients have finished committing any unsynced items 20// and downloading each others' udpates. 21// 22// This requires that "self-notifications" be enabled. Otherwise the clients 23// will not fetch the latest progress markers on their own, and the latest 24// progress markers are needed to confirm that clients are in sync. 25// 26// There is a race condition here. If we manage to perform the check at 27// precisely the wrong time, we could end up seeing stale snapshot state 28// (crbug.com/95742), which would make us think that the client has finished 29// syncing when it hasn't. In practice, this race is rare enough that it 30// doesn't cause test failures. 31class QuiesceStatusChangeChecker : public StatusChangeChecker { 32 public: 33 explicit QuiesceStatusChangeChecker( 34 std::vector<ProfileSyncService*> services); 35 virtual ~QuiesceStatusChangeChecker(); 36 37 virtual bool IsExitConditionSatisfied() OVERRIDE; 38 virtual std::string GetDebugMessage() const OVERRIDE; 39 virtual void InitObserver(ProfileSyncServiceHarness* harness) OVERRIDE; 40 virtual void UninitObserver(ProfileSyncServiceHarness* harness) OVERRIDE; 41 42 void OnServiceStateChanged(ProfileSyncService* service); 43 44 private: 45 std::vector<ProfileSyncService*> services_; 46 ScopedVector<ProgressMarkerWatcher> observers_; 47 ProfileSyncServiceHarness* harness_; 48 49 DISALLOW_COPY_AND_ASSIGN(QuiesceStatusChangeChecker); 50}; 51 52#endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_QUIESCE_STATUS_CHANGE_CHECKER_H_ 53