Index: android_webview/javatests/src/org/chromium/android_webview/test/AwWebContentsObserverTest.java |
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwWebContentsObserverTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwWebContentsObserverTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fc4cc68b62a1eb81b55c3bd48416f15348174d31 |
--- /dev/null |
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwWebContentsObserverTest.java |
@@ -0,0 +1,151 @@ |
+// Copyright 2014 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.android_webview.test; |
+ |
+import android.test.suitebuilder.annotation.SmallTest; |
+ |
+import org.chromium.android_webview.AwContentsStatics; |
+import org.chromium.android_webview.AwWebContentsObserver; |
+import org.chromium.base.test.util.Feature; |
+import org.chromium.net.NetError; |
+ |
+/** |
+ * Tests for the AwWebContentsObserver class. |
+ */ |
+public class AwWebContentsObserverTest extends AwTestBase { |
+ private TestAwContentsClient mContentsClient; |
+ private AwTestContainerView mTestContainerView; |
+ private AwWebContentsObserver mWebContentsObserver; |
+ |
+ private static final String EXAMPLE_URL = "http://www.example.com/"; |
+ private static final String ERROR_DESCRIPTION = "description"; |
+ private String mUnreachableWebDataUrl; |
+ |
+ @Override |
+ public void setUp() throws Exception { |
+ super.setUp(); |
+ mContentsClient = new TestAwContentsClient(); |
+ mTestContainerView = createAwTestContainerViewOnMainSync(mContentsClient); |
+ mUnreachableWebDataUrl = AwContentsStatics.getUnreachableWebDataUrl(); |
+ // AwWebContentsObserver constructor must be run on the UI thread. |
+ getInstrumentation().runOnMainSync(new Runnable() { |
+ @Override |
+ public void run() { |
+ mWebContentsObserver = new AwWebContentsObserver( |
+ mTestContainerView.getContentViewCore().getWebContents(), mContentsClient); |
+ } |
+ }); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"AndroidWebView"}) |
+ public void testOnPageFinished() { |
+ int frameId = 0; |
+ boolean mainFrame = true; |
+ boolean subFrame = false; |
+ |
+ int callCount = mContentsClient.getOnPageFinishedHelper().getCallCount(); |
+ mWebContentsObserver.didFinishLoad(frameId, EXAMPLE_URL, subFrame); |
+ assertEquals("onPageFinished should only be called for the main frame.", callCount, |
+ mContentsClient.getOnPageFinishedHelper().getCallCount()); |
+ |
+ callCount = mContentsClient.getOnPageFinishedHelper().getCallCount(); |
+ mWebContentsObserver.didFinishLoad(frameId, mUnreachableWebDataUrl, mainFrame); |
+ assertEquals("onPageFinished should not be called for the error url.", callCount, |
+ mContentsClient.getOnPageFinishedHelper().getCallCount()); |
+ |
+ callCount = mContentsClient.getOnPageFinishedHelper().getCallCount(); |
+ mWebContentsObserver.didFinishLoad(frameId, EXAMPLE_URL, mainFrame); |
+ assertEquals("onPageFinished should be called for main frame navigations.", callCount + 1, |
+ mContentsClient.getOnPageFinishedHelper().getCallCount()); |
+ |
+ boolean provisionalLoad = true; |
+ |
+ callCount = mContentsClient.getOnPageFinishedHelper().getCallCount(); |
+ mWebContentsObserver.didFailLoad(!provisionalLoad, mainFrame, |
+ NetError.ERR_ABORTED, ERROR_DESCRIPTION, EXAMPLE_URL); |
+ assertEquals("onPageFinished should be called for main frame errors.", callCount + 1, |
+ mContentsClient.getOnPageFinishedHelper().getCallCount()); |
+ |
+ callCount = mContentsClient.getOnPageFinishedHelper().getCallCount(); |
+ mWebContentsObserver.didFailLoad(!provisionalLoad, subFrame, |
+ NetError.ERR_ABORTED, ERROR_DESCRIPTION, EXAMPLE_URL); |
+ assertEquals("onPageFinished should only be called for main frame errors.", callCount, |
+ mContentsClient.getOnPageFinishedHelper().getCallCount()); |
+ |
+ callCount = mContentsClient.getOnPageFinishedHelper().getCallCount(); |
+ mWebContentsObserver.didFailLoad(!provisionalLoad, mainFrame, |
+ NetError.ERR_ABORTED, ERROR_DESCRIPTION, mUnreachableWebDataUrl); |
+ assertEquals("onPageFinished should not be called on unrechable url errors.", callCount, |
+ mContentsClient.getOnPageFinishedHelper().getCallCount()); |
+ |
+ String baseUrl = null; |
+ boolean navigationToDifferentPage = true; |
+ boolean fragmentNavigation = true; |
+ callCount = mContentsClient.getOnPageFinishedHelper().getCallCount(); |
+ mWebContentsObserver.didNavigateMainFrame(EXAMPLE_URL, baseUrl, |
+ !navigationToDifferentPage, fragmentNavigation); |
+ assertEquals("onPageFinished should be called for main frame fragment navigations.", |
+ callCount + 1, mContentsClient.getOnPageFinishedHelper().getCallCount()); |
+ |
+ callCount = mContentsClient.getOnPageFinishedHelper().getCallCount(); |
+ mWebContentsObserver.didNavigateMainFrame(EXAMPLE_URL, baseUrl, |
+ !navigationToDifferentPage, !fragmentNavigation); |
+ assertEquals("onPageFinished should be called only for main frame fragment navigations.", |
+ callCount, mContentsClient.getOnPageFinishedHelper().getCallCount()); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"AndroidWebView"}) |
+ public void testOnReceivedError() { |
+ boolean provisionalLoad = true; |
+ boolean mainFrame = true; |
+ boolean subFrame = false; |
+ |
+ int callCount = mContentsClient.getOnReceivedErrorHelper().getCallCount(); |
+ mWebContentsObserver.didFailLoad(!provisionalLoad, subFrame, |
+ NetError.ERR_TIMED_OUT, ERROR_DESCRIPTION, EXAMPLE_URL); |
+ assertEquals("onReceivedError should only be called for the main frame", callCount, |
+ mContentsClient.getOnReceivedErrorHelper().getCallCount()); |
+ |
+ callCount = mContentsClient.getOnReceivedErrorHelper().getCallCount(); |
+ mWebContentsObserver.didFailLoad(!provisionalLoad, mainFrame, |
+ NetError.ERR_TIMED_OUT, ERROR_DESCRIPTION, EXAMPLE_URL); |
+ assertEquals("onReceivedError should be called for the main frame", callCount + 1, |
+ mContentsClient.getOnReceivedErrorHelper().getCallCount()); |
+ |
+ callCount = mContentsClient.getOnReceivedErrorHelper().getCallCount(); |
+ mWebContentsObserver.didFailLoad(!provisionalLoad, mainFrame, |
+ NetError.ERR_ABORTED, ERROR_DESCRIPTION, EXAMPLE_URL); |
+ assertEquals("onReceivedError should not be called for aborted navigations", callCount, |
+ mContentsClient.getOnReceivedErrorHelper().getCallCount()); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"AndroidWebView"}) |
+ public void testDidNavigateMainFrame() { |
+ String nullUrl = null; |
+ String baseUrl = null; |
+ boolean reload = true; |
+ |
+ int callCount = mContentsClient.getDoUpdateVisitedHistoryHelper().getCallCount(); |
+ mWebContentsObserver.didNavigateAnyFrame(nullUrl, baseUrl, !reload); |
+ assertEquals("doUpdateVisitedHistory should only be called for any url.", callCount + 1, |
+ mContentsClient.getDoUpdateVisitedHistoryHelper().getCallCount()); |
+ assertEquals(!reload, mContentsClient.getDoUpdateVisitedHistoryHelper().getIsReload()); |
+ |
+ callCount = mContentsClient.getDoUpdateVisitedHistoryHelper().getCallCount(); |
+ mWebContentsObserver.didNavigateAnyFrame(EXAMPLE_URL, baseUrl, !reload); |
+ assertEquals("doUpdateVisitedHistory should only be called for any url.", callCount + 1, |
+ mContentsClient.getDoUpdateVisitedHistoryHelper().getCallCount()); |
+ assertEquals(!reload, mContentsClient.getDoUpdateVisitedHistoryHelper().getIsReload()); |
+ |
+ callCount = mContentsClient.getDoUpdateVisitedHistoryHelper().getCallCount(); |
+ mWebContentsObserver.didNavigateAnyFrame(EXAMPLE_URL, baseUrl, reload); |
+ assertEquals("doUpdateVisitedHistory should be called for reloads.", callCount + 1, |
+ mContentsClient.getDoUpdateVisitedHistoryHelper().getCallCount()); |
+ assertEquals(reload, mContentsClient.getDoUpdateVisitedHistoryHelper().getIsReload()); |
+ } |
+} |