quiesce_status_change_checker.h revision effb81e5f8246d0db0270817048dc992db66e9fb
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 "base/time/time.h" 14#include "chrome/browser/sync/test/integration/status_change_checker.h" 15 16class ProfileSyncService; 17class ProgressMarkerWatcher; 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 // Timeout length for this operation. Default is 45s. 38 virtual base::TimeDelta GetTimeoutDuration(); 39 40 // Blocks until all clients have quiesced or we time out. 41 void Await(); 42 43 // A callback function for some helper objects. 44 void OnServiceStateChanged(ProfileSyncService* service); 45 46 // A callback for when the time limit is exceeded. 47 void OnTimeout(); 48 49 virtual bool IsExitConditionSatisfied() OVERRIDE; 50 virtual std::string GetDebugMessage() const OVERRIDE; 51 52 bool TimedOut() const; 53 54 private: 55 std::vector<ProfileSyncService*> services_; 56 ScopedVector<ProgressMarkerWatcher> observers_; 57 bool timed_out_; 58 59 DISALLOW_COPY_AND_ASSIGN(QuiesceStatusChangeChecker); 60}; 61 62#endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_QUIESCE_STATUS_CHANGE_CHECKER_H_ 63