| Index: android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
|
| diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
|
| index ce3724696e9632de13e36ba7a489e717dcc18533..d12e4c0adee1e641df4df65e27da42161f5c3feb 100644
|
| --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
|
| +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
|
| @@ -4,6 +4,8 @@
|
|
|
| package org.chromium.android_webview.test;
|
|
|
| +import static org.chromium.android_webview.test.AwTestCommon.WAIT_TIMEOUT_MS;
|
| +
|
| import android.content.Context;
|
| import android.graphics.Bitmap;
|
| import android.graphics.BitmapFactory;
|
| @@ -11,14 +13,19 @@ import android.graphics.Canvas;
|
| import android.os.Handler;
|
| import android.os.Looper;
|
| import android.os.Message;
|
| +import android.support.test.InstrumentationRegistry;
|
| import android.support.test.filters.LargeTest;
|
| import android.support.test.filters.SmallTest;
|
| -import android.test.UiThreadTest;
|
| import android.util.Pair;
|
| import android.view.KeyEvent;
|
| import android.view.View;
|
| import android.webkit.JavascriptInterface;
|
|
|
| +import org.junit.Assert;
|
| +import org.junit.Rule;
|
| +import org.junit.Test;
|
| +import org.junit.runner.RunWith;
|
| +
|
| import org.chromium.android_webview.AwContents;
|
| import org.chromium.android_webview.AwSettings;
|
| import org.chromium.android_webview.AwSwitches;
|
| @@ -52,117 +59,141 @@ import java.util.concurrent.atomic.AtomicInteger;
|
| /**
|
| * AwContents tests.
|
| */
|
| -public class AwContentsTest extends AwTestBase {
|
| +@RunWith(AwJUnit4ClassRunner.class)
|
| +public class AwContentsTest {
|
| + @Rule
|
| + public AwActivityTestRule mActivityTestRule = new AwActivityTestRule();
|
|
|
| private TestAwContentsClient mContentsClient = new TestAwContentsClient();
|
|
|
| + @Test
|
| @SmallTest
|
| @Feature({"AndroidWebView"})
|
| - @UiThreadTest
|
| public void testCreateDestroy() throws Throwable {
|
| // NOTE this test runs on UI thread, so we cannot call any async methods.
|
| - createAwTestContainerView(mContentsClient).getAwContents().destroy();
|
| + mActivityTestRule.runOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + mActivityTestRule.createAwTestContainerView(mContentsClient)
|
| + .getAwContents()
|
| + .destroy();
|
| + }
|
| + });
|
| }
|
|
|
| + @Test
|
| @SmallTest
|
| @Feature({"AndroidWebView"})
|
| public void testCreateLoadPageDestroy() throws Throwable {
|
| AwTestContainerView awTestContainerView =
|
| - createAwTestContainerViewOnMainSync(mContentsClient);
|
| - loadDataSync(awTestContainerView.getAwContents(), mContentsClient.getOnPageFinishedHelper(),
|
| - CommonResources.ABOUT_HTML, "text/html", false);
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| + mActivityTestRule.loadDataSync(awTestContainerView.getAwContents(),
|
| + mContentsClient.getOnPageFinishedHelper(), CommonResources.ABOUT_HTML, "text/html",
|
| + false);
|
|
|
| - destroyAwContentsOnMainSync(awTestContainerView.getAwContents());
|
| + mActivityTestRule.destroyAwContentsOnMainSync(awTestContainerView.getAwContents());
|
| // It should be safe to call destroy multiple times.
|
| - destroyAwContentsOnMainSync(awTestContainerView.getAwContents());
|
| + mActivityTestRule.destroyAwContentsOnMainSync(awTestContainerView.getAwContents());
|
| }
|
|
|
| + @Test
|
| @LargeTest
|
| @Feature({"AndroidWebView"})
|
| public void testCreateLoadDestroyManyTimes() throws Throwable {
|
| for (int i = 0; i < 10; ++i) {
|
| - AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| AwContents awContents = testView.getAwContents();
|
|
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| + mActivityTestRule.loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL);
|
| - destroyAwContentsOnMainSync(awContents);
|
| + mActivityTestRule.destroyAwContentsOnMainSync(awContents);
|
| }
|
| }
|
|
|
| + @Test
|
| @LargeTest
|
| @Feature({"AndroidWebView"})
|
| public void testCreateLoadDestroyManyAtOnce() throws Throwable {
|
| AwTestContainerView views[] = new AwTestContainerView[10];
|
|
|
| for (int i = 0; i < views.length; ++i) {
|
| - views[i] = createAwTestContainerViewOnMainSync(mContentsClient);
|
| - loadUrlSync(views[i].getAwContents(), mContentsClient.getOnPageFinishedHelper(),
|
| + views[i] = mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| + mActivityTestRule.loadUrlSync(views[i].getAwContents(),
|
| + mContentsClient.getOnPageFinishedHelper(),
|
| ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL);
|
| }
|
|
|
| for (int i = 0; i < views.length; ++i) {
|
| - destroyAwContentsOnMainSync(views[i].getAwContents());
|
| + mActivityTestRule.destroyAwContentsOnMainSync(views[i].getAwContents());
|
| views[i] = null;
|
| }
|
| }
|
|
|
| + @Test
|
| @SmallTest
|
| @Feature({"AndroidWebView"})
|
| - @UiThreadTest
|
| public void testWebViewApisFailGracefullyAfterDestruction() throws Throwable {
|
| - AwContents awContents =
|
| - createAwTestContainerView(mContentsClient).getAwContents();
|
| - awContents.destroy();
|
| -
|
| - // The documentation for WebView#destroy() reads "This method should be called
|
| - // after this WebView has been removed from the view system. No other methods
|
| - // may be called on this WebView after destroy".
|
| - // However, some apps do not respect that restriction so we need to ensure that
|
| - // we fail gracefully and do not crash when APIs are invoked after destruction.
|
| - // Due to the large number of APIs we only test a representative selection here.
|
| - awContents.clearHistory();
|
| - awContents.loadUrl("http://www.google.com");
|
| - awContents.findAllAsync("search");
|
| - assertNull(awContents.getUrl());
|
| - assertFalse(awContents.canGoBack());
|
| - awContents.disableJavascriptInterfacesInspection();
|
| - awContents.invokeZoomPicker();
|
| - awContents.onResume();
|
| - awContents.stopLoading();
|
| - awContents.onWindowVisibilityChanged(View.VISIBLE);
|
| - awContents.requestFocus();
|
| - awContents.isMultiTouchZoomSupported();
|
| - awContents.setOverScrollMode(View.OVER_SCROLL_NEVER);
|
| - awContents.pauseTimers();
|
| - awContents.onContainerViewScrollChanged(200, 200, 100, 100);
|
| - awContents.computeScroll();
|
| - awContents.onMeasure(100, 100);
|
| - awContents.onDraw(new Canvas());
|
| - awContents.getMostRecentProgress();
|
| - assertEquals(0, awContents.computeHorizontalScrollOffset());
|
| - assertEquals(0, awContents.getContentWidthCss());
|
| - awContents.onKeyUp(KeyEvent.KEYCODE_BACK,
|
| - new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MENU));
|
| + mActivityTestRule.runOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + AwContents awContents = mActivityTestRule.createAwTestContainerView(mContentsClient)
|
| + .getAwContents();
|
| + awContents.destroy();
|
| +
|
| + // The documentation for WebView#destroy() reads "This method should be called
|
| + // after this WebView has been removed from the view system. No other methods
|
| + // may be called on this WebView after destroy".
|
| + // However, some apps do not respect that restriction so we need to ensure that
|
| + // we fail gracefully and do not crash when APIs are invoked after destruction.
|
| + // Due to the large number of APIs we only test a representative selection here.
|
| + awContents.clearHistory();
|
| + awContents.loadUrl("http://www.google.com");
|
| + awContents.findAllAsync("search");
|
| + Assert.assertNull(awContents.getUrl());
|
| + Assert.assertFalse(awContents.canGoBack());
|
| + awContents.disableJavascriptInterfacesInspection();
|
| + awContents.invokeZoomPicker();
|
| + awContents.onResume();
|
| + awContents.stopLoading();
|
| + awContents.onWindowVisibilityChanged(View.VISIBLE);
|
| + awContents.requestFocus();
|
| + awContents.isMultiTouchZoomSupported();
|
| + awContents.setOverScrollMode(View.OVER_SCROLL_NEVER);
|
| + awContents.pauseTimers();
|
| + awContents.onContainerViewScrollChanged(200, 200, 100, 100);
|
| + awContents.computeScroll();
|
| + awContents.onMeasure(100, 100);
|
| + awContents.onDraw(new Canvas());
|
| + awContents.getMostRecentProgress();
|
| + Assert.assertEquals(0, awContents.computeHorizontalScrollOffset());
|
| + Assert.assertEquals(0, awContents.getContentWidthCss());
|
| + awContents.onKeyUp(KeyEvent.KEYCODE_BACK,
|
| + new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MENU));
|
| + }
|
| + });
|
| }
|
|
|
| + @Test
|
| @SmallTest
|
| @Feature({"AndroidWebView"})
|
| public void testUseAwSettingsAfterDestroy() throws Throwable {
|
| AwTestContainerView awTestContainerView =
|
| - createAwTestContainerViewOnMainSync(mContentsClient);
|
| - AwSettings awSettings = getAwSettingsOnUiThread(awTestContainerView.getAwContents());
|
| - loadDataSync(awTestContainerView.getAwContents(), mContentsClient.getOnPageFinishedHelper(),
|
| - CommonResources.ABOUT_HTML, "text/html", false);
|
| - destroyAwContentsOnMainSync(awTestContainerView.getAwContents());
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| + AwSettings awSettings =
|
| + mActivityTestRule.getAwSettingsOnUiThread(awTestContainerView.getAwContents());
|
| + mActivityTestRule.loadDataSync(awTestContainerView.getAwContents(),
|
| + mContentsClient.getOnPageFinishedHelper(), CommonResources.ABOUT_HTML, "text/html",
|
| + false);
|
| + mActivityTestRule.destroyAwContentsOnMainSync(awTestContainerView.getAwContents());
|
|
|
| // AwSettings should still be usable even after native side is destroyed.
|
| String newFontFamily = "serif";
|
| awSettings.setStandardFontFamily(newFontFamily);
|
| - assertEquals(newFontFamily, awSettings.getStandardFontFamily());
|
| + Assert.assertEquals(newFontFamily, awSettings.getStandardFontFamily());
|
| boolean newBlockNetworkLoads = !awSettings.getBlockNetworkLoads();
|
| awSettings.setBlockNetworkLoads(newBlockNetworkLoads);
|
| - assertEquals(newBlockNetworkLoads, awSettings.getBlockNetworkLoads());
|
| + Assert.assertEquals(newBlockNetworkLoads, awSettings.getBlockNetworkLoads());
|
| }
|
|
|
| private int callDocumentHasImagesSync(final AwContents awContents)
|
| @@ -178,21 +209,23 @@ public class AwContentsTest extends AwTestBase {
|
| s.release();
|
| }
|
| });
|
| - runTestOnUiThread(new Runnable() {
|
| + InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.documentHasImages(msg);
|
| }
|
| });
|
| - assertTrue(s.tryAcquire(WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS));
|
| + Assert.assertTrue(s.tryAcquire(AwActivityTestRule.WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS));
|
| int result = val.get();
|
| return result;
|
| }
|
|
|
| + @Test
|
| @SmallTest
|
| @Feature({"AndroidWebView"})
|
| public void testDocumentHasImages() throws Throwable {
|
| - AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| AwContents awContents = testView.getAwContents();
|
|
|
| final CallbackHelper loadHelper = mContentsClient.getOnPageFinishedHelper();
|
| @@ -202,21 +235,22 @@ public class AwContentsTest extends AwTestBase {
|
| final String imageDoc = "<head/><body><img/><img/></body>";
|
|
|
| // Make sure a document that does not have images returns 0
|
| - loadDataSync(awContents, loadHelper, emptyDoc, mime, false);
|
| + mActivityTestRule.loadDataSync(awContents, loadHelper, emptyDoc, mime, false);
|
| int result = callDocumentHasImagesSync(awContents);
|
| - assertEquals(0, result);
|
| + Assert.assertEquals(0, result);
|
|
|
| // Make sure a document that does have images returns 1
|
| - loadDataSync(awContents, loadHelper, imageDoc, mime, false);
|
| + mActivityTestRule.loadDataSync(awContents, loadHelper, imageDoc, mime, false);
|
| result = callDocumentHasImagesSync(awContents);
|
| - assertEquals(1, result);
|
| + Assert.assertEquals(1, result);
|
| }
|
|
|
| + @Test
|
| @SmallTest
|
| @Feature({"AndroidWebView"})
|
| public void testClearCacheMemoryAndDisk() throws Throwable {
|
| final AwTestContainerView testContainer =
|
| - createAwTestContainerViewOnMainSync(mContentsClient);
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| final AwContents awContents = testContainer.getAwContents();
|
|
|
| TestWebServer webServer = TestWebServer.start();
|
| @@ -230,46 +264,44 @@ public class AwContentsTest extends AwTestBase {
|
| pagePath, "<html><body>foo</body></html>", headers);
|
|
|
| // First load to populate cache.
|
| - clearCacheOnUiThread(awContents, true);
|
| - loadUrlSync(awContents,
|
| - mContentsClient.getOnPageFinishedHelper(),
|
| - pageUrl);
|
| - assertEquals(1, webServer.getRequestCount(pagePath));
|
| + mActivityTestRule.clearCacheOnUiThread(awContents, true);
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| + Assert.assertEquals(1, webServer.getRequestCount(pagePath));
|
|
|
| // Load about:blank so next load is not treated as reload by webkit and force
|
| // revalidate with the server.
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| + mActivityTestRule.loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL);
|
|
|
| // No clearCache call, so should be loaded from cache.
|
| - loadUrlSync(awContents,
|
| - mContentsClient.getOnPageFinishedHelper(),
|
| - pageUrl);
|
| - assertEquals(1, webServer.getRequestCount(pagePath));
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| + Assert.assertEquals(1, webServer.getRequestCount(pagePath));
|
|
|
| // Same as above.
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| + mActivityTestRule.loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL);
|
|
|
| // Clear cache, so should hit server again.
|
| - clearCacheOnUiThread(awContents, true);
|
| - loadUrlSync(awContents,
|
| - mContentsClient.getOnPageFinishedHelper(),
|
| - pageUrl);
|
| - assertEquals(2, webServer.getRequestCount(pagePath));
|
| + mActivityTestRule.clearCacheOnUiThread(awContents, true);
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| + Assert.assertEquals(2, webServer.getRequestCount(pagePath));
|
| } finally {
|
| webServer.shutdown();
|
| }
|
| }
|
|
|
| + @Test
|
| @SmallTest
|
| @Feature({"AndroidWebView"})
|
| public void testClearCacheInQuickSuccession() throws Throwable {
|
| final AwTestContainerView testContainer =
|
| - createAwTestContainerViewOnMainSync(new TestAwContentsClient());
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(new TestAwContentsClient());
|
| final AwContents awContents = testContainer.getAwContents();
|
|
|
| - runTestOnUiThread(new Runnable() {
|
| + InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| for (int i = 0; i < 10; ++i) {
|
| @@ -279,11 +311,13 @@ public class AwContentsTest extends AwTestBase {
|
| });
|
| }
|
|
|
| + @Test
|
| @SmallTest
|
| @Feature({"AndroidWebView"})
|
| public void testGetFavicon() throws Throwable {
|
| AwContents.setShouldDownloadFavicons();
|
| - final AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + final AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| final AwContents awContents = testView.getAwContents();
|
|
|
| TestWebServer webServer = TestWebServer.start();
|
| @@ -298,10 +332,11 @@ public class AwContentsTest extends AwTestBase {
|
| // the page load completes which makes it slightly hard to test.
|
| final Bitmap defaultFavicon = awContents.getFavicon();
|
|
|
| - getAwSettingsOnUiThread(awContents).setImagesEnabled(true);
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| + mActivityTestRule.getAwSettingsOnUiThread(awContents).setImagesEnabled(true);
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
|
|
| - pollUiThread(new Callable<Boolean>() {
|
| + mActivityTestRule.pollUiThread(new Callable<Boolean>() {
|
| @Override
|
| public Boolean call() {
|
| return awContents.getFavicon() != null
|
| @@ -312,19 +347,21 @@ public class AwContentsTest extends AwTestBase {
|
| final Object originalFaviconSource = (new URL(faviconUrl)).getContent();
|
| final Bitmap originalFavicon =
|
| BitmapFactory.decodeStream((InputStream) originalFaviconSource);
|
| - assertNotNull(originalFavicon);
|
| + Assert.assertNotNull(originalFavicon);
|
|
|
| - assertTrue(awContents.getFavicon().sameAs(originalFavicon));
|
| + Assert.assertTrue(awContents.getFavicon().sameAs(originalFavicon));
|
|
|
| } finally {
|
| webServer.shutdown();
|
| }
|
| }
|
|
|
| + @Test
|
| @Feature({"AndroidWebView", "Downloads"})
|
| @SmallTest
|
| public void testDownload() throws Throwable {
|
| - AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| AwContents awContents = testView.getAwContents();
|
|
|
| final String data = "download data";
|
| @@ -343,42 +380,47 @@ public class AwContentsTest extends AwTestBase {
|
| final OnDownloadStartHelper downloadStartHelper =
|
| mContentsClient.getOnDownloadStartHelper();
|
| final int callCount = downloadStartHelper.getCallCount();
|
| - loadUrlAsync(awContents, pageUrl);
|
| + mActivityTestRule.loadUrlAsync(awContents, pageUrl);
|
| downloadStartHelper.waitForCallback(callCount);
|
|
|
| - assertEquals(pageUrl, downloadStartHelper.getUrl());
|
| - assertEquals(contentDisposition, downloadStartHelper.getContentDisposition());
|
| - assertEquals(mimeType, downloadStartHelper.getMimeType());
|
| - assertEquals(data.length(), downloadStartHelper.getContentLength());
|
| + Assert.assertEquals(pageUrl, downloadStartHelper.getUrl());
|
| + Assert.assertEquals(contentDisposition, downloadStartHelper.getContentDisposition());
|
| + Assert.assertEquals(mimeType, downloadStartHelper.getMimeType());
|
| + Assert.assertEquals(data.length(), downloadStartHelper.getContentLength());
|
| } finally {
|
| webServer.shutdown();
|
| }
|
| }
|
|
|
| + @Test
|
| @Feature({"AndroidWebView", "setNetworkAvailable"})
|
| @SmallTest
|
| public void testSetNetworkAvailable() throws Throwable {
|
| - AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| AwContents awContents = testView.getAwContents();
|
| String script = "navigator.onLine";
|
|
|
| - enableJavaScriptOnUiThread(awContents);
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| + mActivityTestRule.enableJavaScriptOnUiThread(awContents);
|
| + mActivityTestRule.loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL);
|
|
|
| // Default to "online".
|
| - assertEquals("true", executeJavaScriptAndWaitForResult(awContents, mContentsClient,
|
| - script));
|
| + Assert.assertEquals("true",
|
| + mActivityTestRule.executeJavaScriptAndWaitForResult(
|
| + awContents, mContentsClient, script));
|
|
|
| // Forcing "offline".
|
| - setNetworkAvailableOnUiThread(awContents, false);
|
| - assertEquals("false", executeJavaScriptAndWaitForResult(awContents, mContentsClient,
|
| - script));
|
| + mActivityTestRule.setNetworkAvailableOnUiThread(awContents, false);
|
| + Assert.assertEquals("false",
|
| + mActivityTestRule.executeJavaScriptAndWaitForResult(
|
| + awContents, mContentsClient, script));
|
|
|
| // Forcing "online".
|
| - setNetworkAvailableOnUiThread(awContents, true);
|
| - assertEquals("true", executeJavaScriptAndWaitForResult(awContents, mContentsClient,
|
| - script));
|
| + mActivityTestRule.setNetworkAvailableOnUiThread(awContents, true);
|
| + Assert.assertEquals("true",
|
| + mActivityTestRule.executeJavaScriptAndWaitForResult(
|
| + awContents, mContentsClient, script));
|
| }
|
|
|
|
|
| @@ -394,13 +436,15 @@ public class AwContentsTest extends AwTestBase {
|
| }
|
| }
|
|
|
| + @Test
|
| @Feature({"AndroidWebView", "Android-JavaBridge"})
|
| @SmallTest
|
| public void testJavaBridge() throws Throwable {
|
| - final AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + final AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| final CallbackHelper callback = new CallbackHelper();
|
|
|
| - runTestOnUiThread(new Runnable() {
|
| + InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| AwContents awContents = testView.getAwContents();
|
| @@ -413,56 +457,64 @@ public class AwContentsTest extends AwTestBase {
|
| callback.waitForCallback(0, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| }
|
|
|
| + @Test
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| public void testEscapingOfErrorPage() throws Throwable {
|
| - AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| AwContents awContents = testView.getAwContents();
|
| String script = "window.failed == true";
|
|
|
| - enableJavaScriptOnUiThread(awContents);
|
| + mActivityTestRule.enableJavaScriptOnUiThread(awContents);
|
| CallbackHelper onPageFinishedHelper = mContentsClient.getOnPageFinishedHelper();
|
| int currentCallCount = onPageFinishedHelper.getCallCount();
|
| - loadUrlAsync(awContents,
|
| + mActivityTestRule.loadUrlAsync(awContents,
|
| "file:///file-that-does-not-exist#<script>window.failed = true;</script>");
|
| - onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| + onPageFinishedHelper.waitForCallback(
|
| + currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
|
|
| - assertEquals("false", executeJavaScriptAndWaitForResult(awContents, mContentsClient,
|
| - script));
|
| + Assert.assertEquals("false",
|
| + mActivityTestRule.executeJavaScriptAndWaitForResult(
|
| + awContents, mContentsClient, script));
|
| }
|
|
|
| + @Test
|
| @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| public void testCanInjectHeaders() throws Throwable {
|
| final AwTestContainerView testContainer =
|
| - createAwTestContainerViewOnMainSync(mContentsClient);
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| final AwContents awContents = testContainer.getAwContents();
|
|
|
| - enableJavaScriptOnUiThread(awContents);
|
| + mActivityTestRule.enableJavaScriptOnUiThread(awContents);
|
|
|
| - EmbeddedTestServer testServer =
|
| - EmbeddedTestServer.createAndStartServer(getInstrumentation().getContext());
|
| + EmbeddedTestServer testServer = EmbeddedTestServer.createAndStartServer(
|
| + InstrumentationRegistry.getInstrumentation().getContext());
|
|
|
| try {
|
| String url = testServer.getURL("/echoheader?X-foo");
|
|
|
| final Map<String, String> extraHeaders = new HashMap<String, String>();
|
| extraHeaders.put("X-foo", "bar");
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), url, extraHeaders);
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), url, extraHeaders);
|
|
|
| - String xfoo = getJavaScriptResultBodyTextContent(awContents, mContentsClient);
|
| - assertEquals("bar", xfoo);
|
| + String xfoo = mActivityTestRule.getJavaScriptResultBodyTextContent(
|
| + awContents, mContentsClient);
|
| + Assert.assertEquals("bar", xfoo);
|
|
|
| url = testServer.getURL("/echoheader?Referer");
|
|
|
| extraHeaders.clear();
|
| extraHeaders.put("Referer", "http://www.example.com/");
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), url, extraHeaders);
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), url, extraHeaders);
|
|
|
| - String referer = getJavaScriptResultBodyTextContent(awContents, mContentsClient);
|
| - assertEquals("http://www.example.com/", referer);
|
| + String referer = mActivityTestRule.getJavaScriptResultBodyTextContent(
|
| + awContents, mContentsClient);
|
| + Assert.assertEquals("http://www.example.com/", referer);
|
| } finally {
|
| testServer.stopAndDestroyServer();
|
| }
|
| @@ -471,17 +523,19 @@ public class AwContentsTest extends AwTestBase {
|
| // This is a meta test that we don't accidentally turn off hardware
|
| // acceleration in instrumentation tests without notice. Do not add the
|
| // @DisableHardwareAccelerationForTest annotation for this test.
|
| + @Test
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| public void testHardwareModeWorks() throws Throwable {
|
| AwTestContainerView testContainer =
|
| - createAwTestContainerViewOnMainSync(mContentsClient);
|
| - assertTrue(testContainer.isHardwareAccelerated());
|
| - assertTrue(testContainer.isBackedByHardwareView());
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| + Assert.assertTrue(testContainer.isHardwareAccelerated());
|
| + Assert.assertTrue(testContainer.isBackedByHardwareView());
|
| }
|
|
|
| // TODO(hush): more ssl tests. And put the ssl tests into a separate test
|
| // class.
|
| + @Test
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| // If the user allows the ssl error, the same ssl error will not trigger
|
| @@ -489,7 +543,7 @@ public class AwContentsTest extends AwTestBase {
|
| // error will still trigger the onReceivedSslError callback.
|
| public void testSslPreferences() throws Throwable {
|
| final AwTestContainerView testContainer =
|
| - createAwTestContainerViewOnMainSync(mContentsClient);
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| final AwContents awContents = testContainer.getAwContents();
|
| TestWebServer webServer = TestWebServer.startSsl();
|
| final String pagePath = "/hello.html";
|
| @@ -499,54 +553,62 @@ public class AwContentsTest extends AwTestBase {
|
| mContentsClient.getOnReceivedSslErrorHelper();
|
| int onSslErrorCallCount = onReceivedSslErrorHelper.getCallCount();
|
|
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
|
|
| - assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
|
| - assertEquals(1, webServer.getRequestCount(pagePath));
|
| + Assert.assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
|
| + Assert.assertEquals(1, webServer.getRequestCount(pagePath));
|
|
|
| // Now load the page again. This time, we expect no ssl error, because
|
| // user's decision should be remembered.
|
| onSslErrorCallCount = onReceivedSslErrorHelper.getCallCount();
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| - assertEquals(onSslErrorCallCount, onReceivedSslErrorHelper.getCallCount());
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| + Assert.assertEquals(onSslErrorCallCount, onReceivedSslErrorHelper.getCallCount());
|
|
|
| // Now clear the ssl preferences then load the same url again. Expect to see
|
| // onReceivedSslError getting called again.
|
| awContents.clearSslPreferences();
|
| onSslErrorCallCount = onReceivedSslErrorHelper.getCallCount();
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| - assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| + Assert.assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
|
|
|
| // Now clear the stored decisions and tell the client to deny ssl errors.
|
| awContents.clearSslPreferences();
|
| mContentsClient.setAllowSslError(false);
|
| onSslErrorCallCount = onReceivedSslErrorHelper.getCallCount();
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| - assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| + Assert.assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
|
|
|
| // Now load the same page again. This time, we still expect onReceivedSslError,
|
| // because we only remember user's decision if it is "allow".
|
| onSslErrorCallCount = onReceivedSslErrorHelper.getCallCount();
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| - assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
|
| + mActivityTestRule.loadUrlSync(
|
| + awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
|
| + Assert.assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
|
| }
|
|
|
| /**
|
| * Verifies that Web Notifications and the Push API are not exposed in WebView.
|
| */
|
| + @Test
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| public void testPushAndNotificationsDisabled() throws Throwable {
|
| - AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| AwContents awContents = testView.getAwContents();
|
|
|
| String script = "window.Notification || window.PushManager";
|
|
|
| - enableJavaScriptOnUiThread(awContents);
|
| - loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| + mActivityTestRule.enableJavaScriptOnUiThread(awContents);
|
| + mActivityTestRule.loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL);
|
| - assertEquals("null", executeJavaScriptAndWaitForResult(awContents, mContentsClient,
|
| - script));
|
| + Assert.assertEquals("null",
|
| + mActivityTestRule.executeJavaScriptAndWaitForResult(
|
| + awContents, mContentsClient, script));
|
| }
|
|
|
| private static class MockBindingManager implements BindingManager {
|
| @@ -573,8 +635,8 @@ public class AwContentsTest extends AwTestBase {
|
| } catch (InterruptedException e) {
|
| }
|
| }
|
| - assertTrue(mForegroundState.size() != 0);
|
| - assertEquals(inForeground, mForegroundState.get(0).booleanValue());
|
| + Assert.assertTrue(mForegroundState.size() != 0);
|
| + Assert.assertEquals(inForeground, mForegroundState.get(0).booleanValue());
|
| mForegroundState.remove(0);
|
| return;
|
| }
|
| @@ -612,6 +674,7 @@ public class AwContentsTest extends AwTestBase {
|
| /**
|
| * Verifies that a child process is actually gets created with WEBVIEW_SANDBOXED_RENDERER flag.
|
| */
|
| + @Test
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| @CommandLineFlags.Add(AwSwitches.WEBVIEW_SANDBOXED_RENDERER)
|
| @@ -619,21 +682,24 @@ public class AwContentsTest extends AwTestBase {
|
| public void testSandboxedRendererWorks() throws Throwable {
|
| MockBindingManager bindingManager = new MockBindingManager();
|
| ChildProcessLauncherHelper.setBindingManagerForTesting(bindingManager);
|
| - assertFalse(bindingManager.isChildProcessCreated());
|
| + Assert.assertFalse(bindingManager.isChildProcessCreated());
|
|
|
| - AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| AwContents awContents = testView.getAwContents();
|
| final String pageTitle = "I am sandboxed";
|
| - loadDataSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| + mActivityTestRule.loadDataSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| "<html><head><title>" + pageTitle + "</title></head></html>", "text/html", false);
|
| - assertEquals(pageTitle, getTitleOnUiThread(awContents));
|
| + Assert.assertEquals(pageTitle, mActivityTestRule.getTitleOnUiThread(awContents));
|
|
|
| - assertTrue(bindingManager.isChildProcessCreated());
|
| + Assert.assertTrue(bindingManager.isChildProcessCreated());
|
|
|
| // Test end-to-end interaction with the renderer.
|
| - AwSettings awSettings = getAwSettingsOnUiThread(awContents);
|
| + AwSettings awSettings = mActivityTestRule.getAwSettingsOnUiThread(awContents);
|
| awSettings.setJavaScriptEnabled(true);
|
| - assertEquals("42", JSUtils.executeJavaScriptAndWaitForResult(this, awContents,
|
| + Assert.assertEquals("42",
|
| + JSUtils.executeJavaScriptAndWaitForResult(
|
| + InstrumentationRegistry.getInstrumentation(), awContents,
|
| mContentsClient.getOnEvaluateJavaScriptResultHelper(), "21 + 21"));
|
| }
|
|
|
| @@ -641,6 +707,7 @@ public class AwContentsTest extends AwTestBase {
|
| * By default the renderer should be considererd to be in the
|
| * foreground.
|
| */
|
| + @Test
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| @CommandLineFlags.Add(AwSwitches.WEBVIEW_SANDBOXED_RENDERER)
|
| @@ -648,14 +715,15 @@ public class AwContentsTest extends AwTestBase {
|
| public void testRendererPriorityStartsHigh() throws Throwable {
|
| MockBindingManager bindingManager = new MockBindingManager();
|
| ChildProcessLauncherHelper.setBindingManagerForTesting(bindingManager);
|
| - assertFalse(bindingManager.isChildProcessCreated());
|
| + Assert.assertFalse(bindingManager.isChildProcessCreated());
|
|
|
| - AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| AwContents awContents = testView.getAwContents();
|
| - loadDataSync(awContents, mContentsClient.getOnPageFinishedHelper(), "<html></html>",
|
| - "text/html", false);
|
| + mActivityTestRule.loadDataSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| + "<html></html>", "text/html", false);
|
|
|
| - assertTrue(bindingManager.isChildProcessCreated());
|
| + Assert.assertTrue(bindingManager.isChildProcessCreated());
|
| bindingManager.assertSetInForegroundCall(true);
|
| }
|
|
|
| @@ -663,6 +731,7 @@ public class AwContentsTest extends AwTestBase {
|
| * If we specify that the priority is WAIVED, then the renderer
|
| * should not be in the foreground.
|
| */
|
| + @Test
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| @CommandLineFlags.Add(AwSwitches.WEBVIEW_SANDBOXED_RENDERER)
|
| @@ -670,21 +739,22 @@ public class AwContentsTest extends AwTestBase {
|
| public void testRendererPriorityLow() throws Throwable {
|
| MockBindingManager bindingManager = new MockBindingManager();
|
| ChildProcessLauncherHelper.setBindingManagerForTesting(bindingManager);
|
| - assertFalse(bindingManager.isChildProcessCreated());
|
| + Assert.assertFalse(bindingManager.isChildProcessCreated());
|
|
|
| - final AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + final AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| final AwContents awContents = testView.getAwContents();
|
| - runTestOnUiThread(new Runnable() {
|
| + InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.setRendererPriorityPolicy(RendererPriority.WAIVED, false);
|
| }
|
| });
|
| - loadDataSync(awContents, mContentsClient.getOnPageFinishedHelper(), "<html></html>",
|
| - "text/html", false);
|
| + mActivityTestRule.loadDataSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| + "<html></html>", "text/html", false);
|
|
|
| - assertTrue(awContents.isPageVisible());
|
| - assertTrue(bindingManager.isChildProcessCreated());
|
| + Assert.assertTrue(awContents.isPageVisible());
|
| + Assert.assertTrue(bindingManager.isChildProcessCreated());
|
| bindingManager.assertSetInForegroundCall(false);
|
| }
|
|
|
| @@ -693,6 +763,7 @@ public class AwContentsTest extends AwTestBase {
|
| * background, then pausing the view should send the renderer to
|
| * the background.
|
| */
|
| + @Test
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| @CommandLineFlags.Add(AwSwitches.WEBVIEW_SANDBOXED_RENDERER)
|
| @@ -700,23 +771,24 @@ public class AwContentsTest extends AwTestBase {
|
| public void testRendererPriorityManaged() throws Throwable {
|
| MockBindingManager bindingManager = new MockBindingManager();
|
| ChildProcessLauncherHelper.setBindingManagerForTesting(bindingManager);
|
| - assertFalse(bindingManager.isChildProcessCreated());
|
| + Assert.assertFalse(bindingManager.isChildProcessCreated());
|
|
|
| - final AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + final AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| final AwContents awContents = testView.getAwContents();
|
| - runTestOnUiThread(new Runnable() {
|
| + InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.setRendererPriorityPolicy(RendererPriority.HIGH, true);
|
| }
|
| });
|
| - loadDataSync(awContents, mContentsClient.getOnPageFinishedHelper(), "<html></html>",
|
| - "text/html", false);
|
| + mActivityTestRule.loadDataSync(awContents, mContentsClient.getOnPageFinishedHelper(),
|
| + "<html></html>", "text/html", false);
|
|
|
| - assertTrue(awContents.isPageVisible());
|
| - assertTrue(bindingManager.isChildProcessCreated());
|
| + Assert.assertTrue(awContents.isPageVisible());
|
| + Assert.assertTrue(bindingManager.isChildProcessCreated());
|
| bindingManager.assertSetInForegroundCall(true);
|
| - runTestOnUiThread(new Runnable() {
|
| + InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.onPause();
|
| @@ -725,30 +797,39 @@ public class AwContentsTest extends AwTestBase {
|
| bindingManager.assertSetInForegroundCall(false);
|
| }
|
|
|
| + @Test
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| - @UiThreadTest
|
| @CommandLineFlags.Add(AwSwitches.WEBVIEW_SANDBOXED_RENDERER)
|
| @SkipCommandLineParameterization
|
| public void testPauseDestroyResume() throws Throwable {
|
| - AwContents awContents;
|
| - awContents = createAwTestContainerView(mContentsClient).getAwContents();
|
| - awContents.pauseTimers();
|
| - awContents.pauseTimers();
|
| - awContents.destroy();
|
| - awContents = createAwTestContainerView(mContentsClient).getAwContents();
|
| - awContents.resumeTimers();
|
| + mActivityTestRule.runOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + AwContents awContents;
|
| + awContents = mActivityTestRule.createAwTestContainerView(mContentsClient)
|
| + .getAwContents();
|
| + awContents.pauseTimers();
|
| + awContents.pauseTimers();
|
| + awContents.destroy();
|
| + awContents = mActivityTestRule.createAwTestContainerView(mContentsClient)
|
| + .getAwContents();
|
| + awContents.resumeTimers();
|
| + }
|
| + });
|
| }
|
|
|
| /** Regression test for https://crbug.com/732976. Load a data URL, then immediately
|
| * after that load a javascript URL. The data URL navigation shouldn't be blocked.
|
| */
|
| + @Test
|
| @LargeTest
|
| @Feature({"AndroidWebView"})
|
| public void testJavaScriptUrlAfterLoadData() throws Throwable {
|
| - AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + AwTestContainerView testView =
|
| + mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient);
|
| final AwContents awContents = testView.getAwContents();
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mActivityTestRule.runOnUiThread(new Runnable() {
|
| @Override
|
| public void run() {
|
| // Run javascript navigation immediately, without waiting for the completion of data
|
| @@ -760,10 +841,10 @@ public class AwContentsTest extends AwTestBase {
|
|
|
| mContentsClient.getOnPageFinishedHelper().waitForCallback(
|
| 0, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| - assertEquals("data:text/html,<html>test</html>", awContents.getLastCommittedUrl());
|
| + Assert.assertEquals("data:text/html,<html>test</html>", awContents.getLastCommittedUrl());
|
|
|
| TestAwContentsClient.AddMessageToConsoleHelper consoleHelper =
|
| mContentsClient.getAddMessageToConsoleHelper();
|
| - assertEquals(0, consoleHelper.getMessages().size());
|
| + Assert.assertEquals(0, consoleHelper.getMessages().size());
|
| }
|
| }
|
|
|