multi_client_status_change_checker.cc 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#include "chrome/browser/sync/test/integration/multi_client_status_change_checker.h"
6
7#include "base/logging.h"
8#include "base/scoped_observer.h"
9#include "chrome/browser/sync/profile_sync_service.h"
10
11MultiClientStatusChangeChecker::MultiClientStatusChangeChecker(
12    std::vector<ProfileSyncService*> services)
13  : services_(services) {}
14
15MultiClientStatusChangeChecker::~MultiClientStatusChangeChecker() {}
16
17void MultiClientStatusChangeChecker::Wait() {
18  DVLOG(1) << "Await: " << GetDebugMessage();
19
20  if (IsExitConditionSatisfied()) {
21    DVLOG(1) << "Await -> Exit before waiting: " << GetDebugMessage();
22    return;
23  }
24
25  ScopedObserver<ProfileSyncService, MultiClientStatusChangeChecker> obs(this);
26  for (std::vector<ProfileSyncService*>::iterator it = services_.begin();
27       it != services_.end(); ++it) {
28    obs.Add(*it);
29  }
30
31  StartBlockingWait();
32}
33
34void MultiClientStatusChangeChecker::OnStateChanged() {
35  CheckExitCondition();
36}
37