Index: chrome/browser/sync/test/integration/status_change_checker.cc |
diff --git a/chrome/browser/sync/test/integration/status_change_checker.cc b/chrome/browser/sync/test/integration/status_change_checker.cc |
index b92b06a9abd3d7f237c9c24070384bcc3952f400..d8cbd1ad61bdf34effda864f4b3f63cb5866ca79 100644 |
--- a/chrome/browser/sync/test/integration/status_change_checker.cc |
+++ b/chrome/browser/sync/test/integration/status_change_checker.cc |
@@ -4,6 +4,55 @@ |
#include "chrome/browser/sync/test/integration/status_change_checker.h" |
-StatusChangeChecker::StatusChangeChecker() {} |
+#include "base/logging.h" |
+#include "base/message_loop/message_loop.h" |
+#include "base/timer/timer.h" |
+ |
+StatusChangeChecker::StatusChangeChecker() |
+ : timed_out_(false), |
+ wait_started_(false) {} |
StatusChangeChecker::~StatusChangeChecker() {} |
+ |
+bool StatusChangeChecker::TimedOut() const { |
+ return timed_out_; |
+} |
+ |
+base::TimeDelta StatusChangeChecker::GetTimeoutDuration() { |
+ return base::TimeDelta::FromSeconds(45); |
+} |
+ |
+void StatusChangeChecker::StartBlockingWait() { |
+ DCHECK(!wait_started_) << "This class is intended for one use only."; |
+ wait_started_ = true; |
+ |
+ base::OneShotTimer<StatusChangeChecker> timer; |
+ timer.Start(FROM_HERE, |
+ GetTimeoutDuration(), |
+ base::Bind(&StatusChangeChecker::OnTimeout, |
+ base::Unretained(this))); |
+ |
+ { |
+ base::MessageLoop* loop = base::MessageLoop::current(); |
+ base::MessageLoop::ScopedNestableTaskAllower allow(loop); |
+ loop->Run(); |
+ } |
+} |
+ |
+void StatusChangeChecker::StopWaiting() { |
+ base::MessageLoop::current()->QuitWhenIdle(); |
+} |
+ |
+void StatusChangeChecker::CheckExitCondition() { |
+ DVLOG(1) << "Await -> Checking Condition: " << GetDebugMessage(); |
+ if (IsExitConditionSatisfied()) { |
+ DVLOG(1) << "Await -> Condition met: " << GetDebugMessage(); |
+ StopWaiting(); |
+ } |
+} |
+ |
+void StatusChangeChecker::OnTimeout() { |
+ DVLOG(1) << "Await -> Timed out: " << GetDebugMessage(); |
+ timed_out_ = true; |
+ StopWaiting(); |
+} |