multi_client_status_change_checker.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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_MULTI_CLIENT_STATUS_CHANGE_CHECKER_H_
6#define CHROME_BROWSER_SYNC_TEST_INTEGRATION_MULTI_CLIENT_STATUS_CHANGE_CHECKER_H_
7
8#include <vector>
9
10#include "base/compiler_specific.h"
11#include "base/time/time.h"
12#include "chrome/browser/sync/profile_sync_service_observer.h"
13#include "chrome/browser/sync/test/integration/status_change_checker.h"
14
15class ProfileSyncService;
16
17// This class provides some common functionality for StatusChangeCheckers that
18// observe many ProfileSyncServices.  This class is abstract.  Its descendants
19// are expected to provide additional functionality.
20class MultiClientStatusChangeChecker
21  : public StatusChangeChecker,
22    public ProfileSyncServiceObserver {
23 public:
24  explicit MultiClientStatusChangeChecker(
25      std::vector<ProfileSyncService*> services);
26  virtual ~MultiClientStatusChangeChecker();
27
28  // Called when waiting times out.
29  void OnTimeout();
30
31  // Blocks until the exit condition is satisfied or a timeout occurs.
32  void Wait();
33
34  // ProfileSyncServiceObserver implementation.
35  virtual void OnStateChanged() OVERRIDE;
36
37  // StatusChangeChecker implementations and stubs.
38  virtual bool IsExitConditionSatisfied() = 0;
39  virtual std::string GetDebugMessage() const = 0;
40
41 protected:
42  const std::vector<ProfileSyncService*>& services() { return services_; }
43
44 private:
45  std::vector<ProfileSyncService*> services_;
46};
47
48#endif  // CHROME_BROWSER_SYNC_TEST_INTEGRATION_MULTI_CLIENT_STATUS_CHANGE_CHECKER_H_
49