Index: chrome/browser/sync/test/integration/status_change_checker.h |
diff --git a/chrome/browser/sync/test/integration/status_change_checker.h b/chrome/browser/sync/test/integration/status_change_checker.h |
index 9f8c10867d689052c880a6dce17cd208a19f8e59..ac136e5f8ef3f623a7d003f7442f1f46438f46eb 100644 |
--- a/chrome/browser/sync/test/integration/status_change_checker.h |
+++ b/chrome/browser/sync/test/integration/status_change_checker.h |
@@ -7,30 +7,58 @@ |
#include <string> |
+#include "base/time/time.h" |
+ |
class ProfileSyncServiceHarness; |
-// Interface for a helper class that can be used to check if a desired change in |
-// the state of the sync engine has taken place. Used by the desktop sync |
-// integration tests. |
+// Interface for a helper class that can pump the message loop while waiting |
+// for a certain state transition to take place. |
+// |
+// This is a template that should be filled in by child classes so they can |
+// observe specific kinds of changes and await specific conditions. |
// |
-// Usage: Tests that want to use this class to wait for an arbitrary sync state |
-// must implement a concrete StatusChangeChecker object and pass it to |
-// ProfileSyncServiceHarness::AwaitStatusChange(). |
+// The instances of this class are intended to be single-use. It doesn't make |
+// sense to call StartBlockingWait() more than once. |
class StatusChangeChecker { |
public: |
explicit StatusChangeChecker(); |
- // Called every time ProfileSyncServiceHarness is notified of a change in the |
- // state of the sync engine. Returns true if the desired change has occurred. |
- virtual bool IsExitConditionSatisfied() = 0; |
- |
// Returns a string representing this current StatusChangeChecker, and |
// possibly some small part of its state. For example: "AwaitPassphraseError" |
// or "AwaitMigrationDone(BOOKMARKS)". |
virtual std::string GetDebugMessage() const = 0; |
+ // Returns true if the blocking wait was exited because of a timeout. |
+ bool TimedOut() const; |
+ |
+ virtual bool IsExitConditionSatisfied() = 0; |
+ |
protected: |
virtual ~StatusChangeChecker(); |
+ |
+ // Timeout length when blocking. |
+ virtual base::TimeDelta GetTimeoutDuration(); |
+ |
+ // Helper function to start running the nested message loop. |
+ // |
+ // Will exit if IsExitConditionSatisfied() returns true when called from |
+ // CheckExitCondition(), if a timeout occurs, or if StopWaiting() is called. |
+ // |
+ // The timeout length is specified with GetTimeoutDuration(). |
+ void StartBlockingWait(); |
+ |
+ // Stop the nested running of the message loop started in StartBlockingWait(). |
+ void StopWaiting(); |
+ |
+ // Checks IsExitConditionSatisfied() and calls StopWaiting() if it returns |
+ // true. |
+ void CheckExitCondition(); |
+ |
+ // Called when the blocking wait timeout is exceeded. |
+ void OnTimeout(); |
+ |
+ bool timed_out_; |
+ bool wait_started_; |
}; |
#endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_STATUS_CHANGE_CHECKER_H_ |