Index: chrome/test/android/javatests_staging/src/org/chromium/chrome/test/util/OverviewModeBehaviorWatcher.java |
diff --git a/chrome/test/android/javatests_staging/src/org/chromium/chrome/test/util/OverviewModeBehaviorWatcher.java b/chrome/test/android/javatests_staging/src/org/chromium/chrome/test/util/OverviewModeBehaviorWatcher.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9a8a2816d8f2ad0a2924984e7ebd2cf164ccb7e4 |
--- /dev/null |
+++ b/chrome/test/android/javatests_staging/src/org/chromium/chrome/test/util/OverviewModeBehaviorWatcher.java |
@@ -0,0 +1,82 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.test.util; |
+ |
+import junit.framework.Assert; |
+ |
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior; |
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior.OverviewModeObserver; |
+import org.chromium.content.browser.test.util.Criteria; |
+import org.chromium.content.browser.test.util.CriteriaHelper; |
+ |
+/** |
+ * Checks and waits for certain overview mode events to happen. Can be used to block test threads |
+ * until certain overview mode state criteria are met. |
+ */ |
+public class OverviewModeBehaviorWatcher implements OverviewModeObserver { |
+ private final OverviewModeBehavior mOverviewModeBehavior; |
+ private boolean mWaitingForShow; |
+ private boolean mWaitingForHide; |
+ |
+ private final Criteria mCriteria = new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return !mWaitingForShow && !mWaitingForHide; |
+ } |
+ }; |
+ |
+ /** |
+ * Creates an instance of an {@link OverviewModeBehaviorWatcher}. Note that at this point |
+ * it will be registered for overview mode events. |
+ * |
+ * @param behavior The {@link OverviewModeBehavior} to watch. |
+ * @param waitForShow Whether or not to wait for overview mode to finish showing. |
+ * @param waitForHide Whether or not to wait for overview mode to finish hiding. |
+ */ |
+ public OverviewModeBehaviorWatcher(OverviewModeBehavior behavior, boolean waitForShow, |
+ boolean waitForHide) { |
+ mOverviewModeBehavior = behavior; |
+ mOverviewModeBehavior.addOverviewModeObserver(this); |
+ |
+ mWaitingForShow = waitForShow; |
+ mWaitingForHide = waitForHide; |
+ } |
+ |
+ @Override |
+ public void onOverviewModeStartedShowing(boolean showToolbar) { } |
+ |
+ @Override |
+ public void onOverviewModeFinishedShowing() { |
+ mWaitingForShow = false; |
+ } |
+ |
+ @Override |
+ public void onOverviewModeStartedHiding(boolean showToolbar, boolean delayAnimation) { } |
+ |
+ @Override |
+ public void onOverviewModeFinishedHiding() { |
+ mWaitingForHide = false; |
+ } |
+ |
+ /** |
+ * Blocks until all of the expected events have occurred. Once the events of this class |
+ * are met it will always return immediately from {@link #waitForBehavior()}. |
+ * @throws InterruptedException |
+ */ |
+ public void waitForBehavior() throws InterruptedException { |
+ try { |
+ if (!CriteriaHelper.pollForUIThreadCriteria(mCriteria)) { |
+ Assert.assertFalse( |
+ "OverviewModeObserver#onOverviewModeFinishedShowing() not called.", |
+ mWaitingForShow); |
+ Assert.assertFalse( |
+ "OverviewModeObserver#onOverviewModeFinishedHiding() not called.", |
+ mWaitingForHide); |
+ } |
+ } finally { |
+ mOverviewModeBehavior.removeOverviewModeObserver(this); |
+ } |
+ } |
+} |