| Index: chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java
|
| diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java
|
| index ca1b0429fc2e8566128f93a97e8e1a1fd5dc0006..3b0be216af4c3269b1d4f5c85594b3a0e71ea231 100644
|
| --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java
|
| +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java
|
| @@ -6,16 +6,22 @@ package org.chromium.chrome.test.util.browser;
|
|
|
| import android.text.TextUtils;
|
|
|
| +import junit.framework.Assert;
|
| +
|
| import org.chromium.base.ThreadUtils;
|
| import org.chromium.chrome.browser.tab.EmptyTabObserver;
|
| import org.chromium.chrome.browser.tab.Tab;
|
| import org.chromium.content.browser.test.util.Criteria;
|
| +import org.chromium.content.browser.test.util.CriteriaHelper;
|
| import org.chromium.content_public.browser.LoadUrlParams;
|
|
|
| +import java.util.Locale;
|
| +import java.util.concurrent.atomic.AtomicReference;
|
| +
|
| /**
|
| * Monitors that a Tab starts loading and stops loading a URL.
|
| */
|
| -public class TabLoadObserver extends EmptyTabObserver implements Criteria {
|
| +public class TabLoadObserver extends EmptyTabObserver {
|
| private static final float FLOAT_EPSILON = 0.001f;
|
|
|
| private final Tab mTab;
|
| @@ -53,21 +59,68 @@ public class TabLoadObserver extends EmptyTabObserver implements Criteria {
|
| mTabLoadStopped = true;
|
| }
|
|
|
| - @Override
|
| - public boolean isSatisfied() {
|
| - if (!mTabLoadStarted) return false;
|
| - if (!mTabLoadStopped) return false;
|
| - if (!mTab.isLoadingAndRenderingDone()) return false;
|
| + /**
|
| + * Asserts the page has loaded.
|
| + * @param maxAllowedTime The maximum time this will wait for the page to load.
|
| + */
|
| + public void assertLoaded(long maxAllowedTime) throws InterruptedException {
|
| + final AtomicReference<String> failureReason = new AtomicReference<>();
|
|
|
| - if (mExpectedTitle != null && !TextUtils.equals(mExpectedTitle, mTab.getTitle())) {
|
| - return false;
|
| - }
|
| - if (mExpectedScale != null) {
|
| - if (mTab.getContentViewCore() == null) return false;
|
| - if (Math.abs(mExpectedScale - mTab.getContentViewCore().getScale()) >= FLOAT_EPSILON) {
|
| - return false;
|
| + Criteria loadedCriteria = new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + if (!mTabLoadStarted) {
|
| + failureReason.set("load started never called");
|
| + return false;
|
| + }
|
| + if (!mTabLoadStopped) {
|
| + failureReason.set("load stopped never called");
|
| + return false;
|
| + }
|
| + if (!mTab.isLoadingAndRenderingDone()) {
|
| + failureReason.set("load and rendering never completed");
|
| + return false;
|
| + }
|
| +
|
| + String title = mTab.getTitle();
|
| + if (mExpectedTitle != null && !TextUtils.equals(mExpectedTitle, title)) {
|
| + failureReason.set(String.format(
|
| + Locale.ENGLISH,
|
| + "title did not match -- expected: \"%s\", actual \"%s\"",
|
| + mExpectedTitle, title));
|
| + return false;
|
| + }
|
| + if (mExpectedScale != null) {
|
| + if (mTab.getContentViewCore() == null) {
|
| + failureReason.set("tab has no content view core");
|
| + return false;
|
| + }
|
| +
|
| + float scale = mTab.getContentViewCore().getScale();
|
| + if (Math.abs(mExpectedScale - scale) >= FLOAT_EPSILON) {
|
| + failureReason.set(String.format(
|
| + Locale.ENGLISH,
|
| + "scale did not match with allowed epsilon -- "
|
| + + "expected: \"%f\", actual \"%f\"", mExpectedScale, scale));
|
| + return false;
|
| + }
|
| + }
|
| + failureReason.set(null);
|
| + return true;
|
| }
|
| + };
|
| +
|
| + boolean result = CriteriaHelper.pollForUIThreadCriteria(
|
| + loadedCriteria, maxAllowedTime, CriteriaHelper.DEFAULT_POLLING_INTERVAL);
|
| + if (!result) {
|
| + Assert.fail("Tab not fully loaded because: " + failureReason.get());
|
| }
|
| - return true;
|
| + }
|
| +
|
| + /**
|
| + * Asserts that the page has loaded.
|
| + */
|
| + public void assertLoaded() throws InterruptedException {
|
| + assertLoaded(CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL);
|
| }
|
| }
|
|
|