1// Copyright 2013 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/status_change_checker.h" 6 7#include "base/logging.h" 8#include "base/message_loop/message_loop.h" 9#include "base/timer/timer.h" 10 11StatusChangeChecker::StatusChangeChecker() : timed_out_(false) { 12} 13 14StatusChangeChecker::~StatusChangeChecker() {} 15 16bool StatusChangeChecker::TimedOut() const { 17 return timed_out_; 18} 19 20base::TimeDelta StatusChangeChecker::GetTimeoutDuration() { 21 return base::TimeDelta::FromSeconds(45); 22} 23 24void StatusChangeChecker::StartBlockingWait() { 25 base::OneShotTimer<StatusChangeChecker> timer; 26 timer.Start(FROM_HERE, 27 GetTimeoutDuration(), 28 base::Bind(&StatusChangeChecker::OnTimeout, 29 base::Unretained(this))); 30 31 { 32 base::MessageLoop* loop = base::MessageLoop::current(); 33 base::MessageLoop::ScopedNestableTaskAllower allow(loop); 34 loop->Run(); 35 } 36} 37 38void StatusChangeChecker::StopWaiting() { 39 base::MessageLoop::current()->QuitWhenIdle(); 40} 41 42void StatusChangeChecker::CheckExitCondition() { 43 DVLOG(1) << "Await -> Checking Condition: " << GetDebugMessage(); 44 if (IsExitConditionSatisfied()) { 45 DVLOG(1) << "Await -> Condition met: " << GetDebugMessage(); 46 StopWaiting(); 47 } 48} 49 50void StatusChangeChecker::OnTimeout() { 51 DVLOG(1) << "Await -> Timed out: " << GetDebugMessage(); 52 timed_out_ = true; 53 StopWaiting(); 54} 55