1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file.
4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/sync/test/integration/multi_client_status_change_checker.h"
6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/logging.h"
8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/scoped_observer.h"
9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/sync/profile_sync_service.h"
10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochMultiClientStatusChangeChecker::MultiClientStatusChangeChecker(
12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    std::vector<ProfileSyncService*> services)
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  : services_(services) {}
14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochMultiClientStatusChangeChecker::~MultiClientStatusChangeChecker() {}
16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid MultiClientStatusChangeChecker::Wait() {
18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  DVLOG(1) << "Await: " << GetDebugMessage();
19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  if (IsExitConditionSatisfied()) {
21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    DVLOG(1) << "Await -> Exit before waiting: " << GetDebugMessage();
22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    return;
23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  }
24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ScopedObserver<ProfileSyncService, MultiClientStatusChangeChecker> obs(this);
26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  for (std::vector<ProfileSyncService*>::iterator it = services_.begin();
27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch       it != services_.end(); ++it) {
28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    obs.Add(*it);
29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  }
30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  StartBlockingWait();
32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid MultiClientStatusChangeChecker::OnStateChanged() {
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CheckExitCondition();
36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
37