| Index: chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
|
| index 84ea6adaccaacf4e0cfe06533188059668b63895..39363a6e060e6e5ea4f6445bf55a4efd6f55f554 100644
|
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
|
| @@ -71,14 +71,11 @@ public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity
|
|
|
| private static class TestTabObserver extends EmptyTabObserver {
|
| private final CallbackHelper mFinishCallback;
|
| - private final CallbackHelper mPageFailCallback;
|
| - private final CallbackHelper mLoadFailCallback;
|
| + private final CallbackHelper mFailCallback;
|
|
|
| - TestTabObserver(final CallbackHelper finishCallback, final CallbackHelper pageFailCallback,
|
| - final CallbackHelper loadFailCallback) {
|
| + TestTabObserver(final CallbackHelper finishCallback, final CallbackHelper failCallback) {
|
| mFinishCallback = finishCallback;
|
| - mPageFailCallback = pageFailCallback;
|
| - mLoadFailCallback = loadFailCallback;
|
| + mFailCallback = failCallback;
|
| }
|
|
|
| @Override
|
| @@ -86,9 +83,8 @@ public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity
|
| boolean isErrorPage, boolean hasCommitted, boolean isSameDocument,
|
| boolean isFragmentNavigation, Integer pageTransition, int errorCode,
|
| int httpStatusCode) {
|
| - if (errorCode != 0) {
|
| - mLoadFailCallback.notifyCalled();
|
| - }
|
| + if (errorCode == 0) return;
|
| + mFailCallback.notifyCalled();
|
| }
|
|
|
| @Override
|
| @@ -97,20 +93,9 @@ public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity
|
| }
|
|
|
| @Override
|
| - public void onPageLoadFailed(Tab tab, int errorCode) {
|
| - mPageFailCallback.notifyCalled();
|
| - }
|
| -
|
| - @Override
|
| - public void onDidFailLoad(Tab tab, boolean isMainFrame, int errorCode, String description,
|
| - String failingUrl) {
|
| - mLoadFailCallback.notifyCalled();
|
| - }
|
| -
|
| - @Override
|
| public void onDestroyed(Tab tab) {
|
| // A new tab is destroyed when loading is overridden while opening it.
|
| - mPageFailCallback.notifyCalled();
|
| + mFailCallback.notifyCalled();
|
| }
|
| }
|
|
|
| @@ -147,21 +132,19 @@ public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity
|
| int expectedNewTabCount, final boolean shouldLaunchExternalIntent,
|
| final String expectedFinalUrl, boolean isMainFrame) throws InterruptedException {
|
| final CallbackHelper finishCallback = new CallbackHelper();
|
| - final CallbackHelper pageFailCallback = new CallbackHelper();
|
| - final CallbackHelper loadFailCallback = new CallbackHelper();
|
| + final CallbackHelper failCallback = new CallbackHelper();
|
| final CallbackHelper newTabCallback = new CallbackHelper();
|
|
|
| final Tab tab = getActivity().getActivityTab();
|
| final Tab[] latestTabHolder = new Tab[1];
|
| latestTabHolder[0] = tab;
|
| - tab.addObserver(new TestTabObserver(finishCallback, pageFailCallback, loadFailCallback));
|
| + tab.addObserver(new TestTabObserver(finishCallback, failCallback));
|
| if (expectedNewTabCount > 0) {
|
| getActivity().getTabModelSelector().addObserver(new EmptyTabModelSelectorObserver() {
|
| @Override
|
| public void onNewTabCreated(Tab newTab) {
|
| newTabCallback.notifyCalled();
|
| - newTab.addObserver(new TestTabObserver(
|
| - finishCallback, pageFailCallback, loadFailCallback));
|
| + newTab.addObserver(new TestTabObserver(finishCallback, failCallback));
|
| latestTabHolder[0] = newTab;
|
| }
|
| });
|
| @@ -190,16 +173,29 @@ public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity
|
| singleClickView(tab.getView());
|
| }
|
|
|
| - CallbackHelper helper = isMainFrame ? pageFailCallback : loadFailCallback;
|
| - if (helper.getCallCount() == 0) {
|
| + if (failCallback.getCallCount() == 0) {
|
| try {
|
| - helper.waitForCallback(0, 1, 20, TimeUnit.SECONDS);
|
| + failCallback.waitForCallback(0, 1, 20, TimeUnit.SECONDS);
|
| } catch (TimeoutException ex) {
|
| - fail();
|
| + fail("Haven't received navigation failure of intents.");
|
| return;
|
| }
|
| }
|
|
|
| + boolean hasFallbackUrl =
|
| + expectedFinalUrl != null && !TextUtils.equals(url, expectedFinalUrl);
|
| +
|
| + if (hasFallbackUrl) {
|
| + if (finishCallback.getCallCount() == 1) {
|
| + try {
|
| + finishCallback.waitForCallback(1, 1, 20, TimeUnit.SECONDS);
|
| + } catch (TimeoutException ex) {
|
| + fail("Fallback URL is not loaded");
|
| + return;
|
| + }
|
| + }
|
| + }
|
| +
|
| assertEquals(expectedNewTabCount, newTabCallback.getCallCount());
|
| // For sub frames, the |loadFailCallback| run through different threads
|
| // from the ExternalNavigationHandler. As a result, there is no guarantee
|
| @@ -225,6 +221,16 @@ public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity
|
| || TextUtils.equals(expectedFinalUrl, tab.getUrl());
|
| }
|
| });
|
| +
|
| + CriteriaHelper.pollUiThread(
|
| + Criteria.equals(shouldLaunchExternalIntent ? 1 : 0, new Callable<Integer>() {
|
| + @Override
|
| + public Integer call() {
|
| + return mActivityMonitor.getHits();
|
| + }
|
| + }));
|
| + assertEquals(1 + (hasFallbackUrl ? 1 : 0), finishCallback.getCallCount());
|
| + assertEquals(1, failCallback.getCallCount());
|
| }
|
|
|
| @SmallTest
|
|
|