| Index: android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
|
| diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
|
| index 436f34a3f28602520cdf742efcf40cbdfb8fd60e..bb73435b9e330e34292ef39ef8bdb230ee64117d 100644
|
| --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
|
| +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
|
| @@ -7,7 +7,6 @@ package org.chromium.android_webview.test;
|
| import android.content.Context;
|
| import android.os.Build;
|
| import android.test.suitebuilder.annotation.SmallTest;
|
| -import android.test.FlakyTest;
|
| import android.util.Pair;
|
|
|
| import org.chromium.android_webview.AndroidProtocolHandler;
|
| @@ -112,6 +111,14 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
| url);
|
| }
|
|
|
| + protected void loadUrlSyncAndExpectError(String url) throws Throwable {
|
| + AwSettingsTest.this.loadUrlSyncAndExpectError(
|
| + mContentViewCore,
|
| + mContentViewClient.getOnPageFinishedHelper(),
|
| + mContentViewClient.getOnReceivedErrorHelper(),
|
| + url);
|
| + }
|
| +
|
| private void ensureSettingHasValue(T value) throws Throwable {
|
| assertEquals(value, getCurrentValue());
|
| doEnsureSettingHasValue(value);
|
| @@ -625,15 +632,28 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
| private final String mXhrContainerUrl;
|
| }
|
|
|
| - class AwSettingsFileUrlAccessTestHelper extends AwSettingsTestHelper<Boolean> {
|
| + // A helper super class for test cases that need to access AwSettings.
|
| + abstract class AwSettingsWithSettingsTestHelper<T> extends AwSettingsTestHelper<T> {
|
| + protected AwSettings mAwSettings;
|
| +
|
| + AwSettingsWithSettingsTestHelper(
|
| + AwTestContainerView containerView,
|
| + TestAwContentsClient contentViewClient,
|
| + boolean requiresJsEnabled) throws Throwable {
|
| + super(containerView.getContentViewCore(), contentViewClient, requiresJsEnabled);
|
| + mAwSettings =
|
| + AwSettingsTest.this.getAwSettingsOnUiThread(containerView.getAwContents());
|
| + }
|
| + }
|
| +
|
| + class AwSettingsFileUrlAccessTestHelper extends AwSettingsWithSettingsTestHelper<Boolean> {
|
| private static final String ACCESS_GRANTED_TITLE = "Hello, World!";
|
| - private static final String ACCESS_DENIED_TITLE = "about:blank";
|
|
|
| AwSettingsFileUrlAccessTestHelper(
|
| - ContentViewCore contentViewCore,
|
| + AwTestContainerView containerView,
|
| TestAwContentsClient contentViewClient,
|
| int startIndex) throws Throwable {
|
| - super(contentViewCore, contentViewClient, true);
|
| + super(containerView, contentViewClient, true);
|
| mIndex = startIndex;
|
| }
|
|
|
| @@ -649,36 +669,47 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
|
|
| @Override
|
| protected Boolean getCurrentValue() {
|
| - return mContentSettings.getAllowFileAccess();
|
| + return mAwSettings.getAllowFileAccess();
|
| }
|
|
|
| @Override
|
| protected void setCurrentValue(Boolean value) {
|
| - mContentSettings.setAllowFileAccess(value);
|
| + mAwSettings.setAllowFileAccess(value);
|
| }
|
|
|
| @Override
|
| protected void doEnsureSettingHasValue(Boolean value) throws Throwable {
|
| + // TODO(mnaganov): Remove after https://codereview.chromium.org/11030051 lands.
|
| + final String pseudo_error_page = "about:blank";
|
| + loadUrlSync(pseudo_error_page);
|
| // Use query parameters to avoid hitting a cached page.
|
| String fileUrl = UrlUtils.getTestFileUrl("webview/hello_world.html?id=" + mIndex);
|
| mIndex += 2;
|
| + // TODO(mnaganov): Remove after https://codereview.chromium.org/11030051 lands.
|
| loadUrlSync(fileUrl);
|
| - assertEquals(
|
| - value == ENABLED ? ACCESS_GRANTED_TITLE : ACCESS_DENIED_TITLE,
|
| - getTitleOnUiThread());
|
| + assertEquals(value == ENABLED ? ACCESS_GRANTED_TITLE : pseudo_error_page,
|
| + getTitleOnUiThread());
|
| + // TODO(mnaganov): Uncomment after https://codereview.chromium.org/11030051 lands.
|
| + /*
|
| + if (value == ENABLED) {
|
| + loadUrlSync(fileUrl);
|
| + assertEquals(ACCESS_GRANTED_TITLE, getTitleOnUiThread());
|
| + } else {
|
| + loadUrlSyncAndExpectError(fileUrl);
|
| + }
|
| + */
|
| }
|
|
|
| private int mIndex;
|
| }
|
|
|
| - class AwSettingsContentUrlAccessTestHelper extends AwSettingsTestHelper<Boolean> {
|
| - private final String mTarget;
|
| + class AwSettingsContentUrlAccessTestHelper extends AwSettingsWithSettingsTestHelper<Boolean> {
|
|
|
| AwSettingsContentUrlAccessTestHelper(
|
| - ContentViewCore contentViewCore,
|
| + AwTestContainerView containerView,
|
| TestAwContentsClient contentViewClient,
|
| int index) throws Throwable {
|
| - super(contentViewCore, contentViewClient, true);
|
| + super(containerView, contentViewClient, true);
|
| mTarget = "content_access_" + index;
|
| }
|
|
|
| @@ -694,27 +725,87 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
|
|
| @Override
|
| protected Boolean getCurrentValue() {
|
| - return mContentSettings.getAllowContentAccess();
|
| + return mAwSettings.getAllowContentAccess();
|
| }
|
|
|
| @Override
|
| protected void setCurrentValue(Boolean value) {
|
| - mContentSettings.setAllowContentAccess(value);
|
| + mAwSettings.setAllowContentAccess(value);
|
| }
|
|
|
| @Override
|
| protected void doEnsureSettingHasValue(Boolean value) throws Throwable {
|
| AwSettingsTest.this.resetResourceRequestCountInContentProvider(mTarget);
|
| - AwSettingsTest.this.loadUrlSync(
|
| - mContentViewCore,
|
| - mContentViewClient.getOnPageFinishedHelper(),
|
| - AwSettingsTest.this.createContentUrl(mTarget));
|
| + loadUrlSync(AwSettingsTest.this.createContentUrl(mTarget));
|
| if (value == ENABLED) {
|
| AwSettingsTest.this.ensureResourceRequestCountInContentProvider(mTarget, 1);
|
| } else {
|
| AwSettingsTest.this.ensureResourceRequestCountInContentProvider(mTarget, 0);
|
| }
|
| }
|
| +
|
| + private final String mTarget;
|
| + }
|
| +
|
| + class AwSettingsContentUrlAccessFromFileTestHelper
|
| + extends AwSettingsWithSettingsTestHelper<Boolean> {
|
| + private static final String TARGET = "content_from_file";
|
| +
|
| + AwSettingsContentUrlAccessFromFileTestHelper(
|
| + AwTestContainerView containerView,
|
| + TestAwContentsClient contentViewClient,
|
| + int index) throws Throwable {
|
| + super(containerView, contentViewClient, true);
|
| + mIndex = index;
|
| + mTempDir = getInstrumentation().getTargetContext().getCacheDir().getPath();
|
| + }
|
| +
|
| + @Override
|
| + protected Boolean getAlteredValue() {
|
| + return DISABLED;
|
| + }
|
| +
|
| + @Override
|
| + protected Boolean getInitialValue() {
|
| + return ENABLED;
|
| + }
|
| +
|
| + @Override
|
| + protected Boolean getCurrentValue() {
|
| + return mAwSettings.getAllowContentAccess();
|
| + }
|
| +
|
| + @Override
|
| + protected void setCurrentValue(Boolean value) {
|
| + mAwSettings.setAllowContentAccess(value);
|
| + }
|
| +
|
| + @Override
|
| + protected void doEnsureSettingHasValue(Boolean value) throws Throwable {
|
| + AwSettingsTest.this.resetResourceRequestCountInContentProvider(TARGET);
|
| + final String fileName = mTempDir + "/" + TARGET + ".html";
|
| + try {
|
| + TestFileUtil.createNewHtmlFile(fileName,
|
| + TARGET,
|
| + "<img src=\"" +
|
| + // Adding a query avoids hitting a cached image, and also verifies
|
| + // that content URL query parameters are ignored when accessing
|
| + // a content provider.
|
| + AwSettingsTest.this.createContentUrl(TARGET + "?id=" + mIndex) + "\">");
|
| + mIndex += 2;
|
| + loadUrlSync("file://" + fileName);
|
| + if (value == ENABLED) {
|
| + AwSettingsTest.this.ensureResourceRequestCountInContentProvider(TARGET, 1);
|
| + } else {
|
| + AwSettingsTest.this.ensureResourceRequestCountInContentProvider(TARGET, 0);
|
| + }
|
| + } finally {
|
| + TestFileUtil.deleteFile(fileName);
|
| + }
|
| + }
|
| +
|
| + private int mIndex;
|
| + private String mTempDir;
|
| }
|
|
|
| // The test verifies that JavaScript is disabled upon WebView
|
| @@ -1303,82 +1394,58 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
| new AwSettingsFileAccessFromFilesXhrTestHelper(views.getView1(), views.getClient1()));
|
| }
|
|
|
| - /**
|
| - * @SmallTest
|
| - * @Feature({"Android-WebView", "Preferences"})
|
| - * BUG=153516
|
| - */
|
| - @FlakyTest
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences"})
|
| public void testFileUrlAccessNormal() throws Throwable {
|
| ViewPair views = createViews(NORMAL_VIEW, NORMAL_VIEW);
|
| runPerViewSettingsTest(
|
| - new AwSettingsFileUrlAccessTestHelper(views.getView0(), views.getClient0(), 0),
|
| - new AwSettingsFileUrlAccessTestHelper(views.getView1(), views.getClient1(), 1));
|
| + new AwSettingsFileUrlAccessTestHelper(views.getContainer0(), views.getClient0(), 0),
|
| + new AwSettingsFileUrlAccessTestHelper(views.getContainer1(), views.getClient1(), 1));
|
| }
|
|
|
| - /**
|
| - * @SmallTest
|
| - * @Feature({"Android-WebView", "Preferences"})
|
| - * BUG=153516
|
| - */
|
| - @FlakyTest
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences"})
|
| public void testFileUrlAccessIncognito() throws Throwable {
|
| ViewPair views = createViews(INCOGNITO_VIEW, INCOGNITO_VIEW);
|
| runPerViewSettingsTest(
|
| - new AwSettingsFileUrlAccessTestHelper(views.getView0(), views.getClient0(), 0),
|
| - new AwSettingsFileUrlAccessTestHelper(views.getView1(), views.getClient1(), 1));
|
| + new AwSettingsFileUrlAccessTestHelper(views.getContainer0(), views.getClient0(), 0),
|
| + new AwSettingsFileUrlAccessTestHelper(views.getContainer1(), views.getClient1(), 1));
|
| }
|
|
|
| - /**
|
| - * @SmallTest
|
| - * @Feature({"Android-WebView", "Preferences"})
|
| - * BUG=153516
|
| - */
|
| - @FlakyTest
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences"})
|
| public void testFileUrlAccessBoth() throws Throwable {
|
| ViewPair views = createViews(NORMAL_VIEW, INCOGNITO_VIEW);
|
| runPerViewSettingsTest(
|
| - new AwSettingsFileUrlAccessTestHelper(views.getView0(), views.getClient0(), 0),
|
| - new AwSettingsFileUrlAccessTestHelper(views.getView1(), views.getClient1(), 1));
|
| + new AwSettingsFileUrlAccessTestHelper(views.getContainer0(), views.getClient0(), 0),
|
| + new AwSettingsFileUrlAccessTestHelper(views.getContainer1(), views.getClient1(), 1));
|
| }
|
|
|
| - /**
|
| - * @SmallTest
|
| - * @Feature({"Android-WebView", "Preferences"})
|
| - * BUG=153516
|
| - */
|
| - @FlakyTest
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences"})
|
| public void testContentUrlAccessNormal() throws Throwable {
|
| ViewPair views = createViews(NORMAL_VIEW, NORMAL_VIEW);
|
| runPerViewSettingsTest(
|
| - new AwSettingsContentUrlAccessTestHelper(views.getView0(), views.getClient0(), 0),
|
| - new AwSettingsContentUrlAccessTestHelper(views.getView1(), views.getClient1(), 1));
|
| + new AwSettingsContentUrlAccessTestHelper(views.getContainer0(), views.getClient0(), 0),
|
| + new AwSettingsContentUrlAccessTestHelper(views.getContainer1(), views.getClient1(), 1));
|
| }
|
|
|
| - /**
|
| - * @SmallTest
|
| - * @Feature({"Android-WebView", "Preferences"})
|
| - * BUG=153516
|
| - */
|
| - @FlakyTest
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences"})
|
| public void testContentUrlAccessIncognito() throws Throwable {
|
| ViewPair views = createViews(INCOGNITO_VIEW, INCOGNITO_VIEW);
|
| runPerViewSettingsTest(
|
| - new AwSettingsContentUrlAccessTestHelper(views.getView0(), views.getClient0(), 0),
|
| - new AwSettingsContentUrlAccessTestHelper(views.getView1(), views.getClient1(), 1));
|
| + new AwSettingsContentUrlAccessTestHelper(views.getContainer0(), views.getClient0(), 0),
|
| + new AwSettingsContentUrlAccessTestHelper(views.getContainer1(), views.getClient1(), 1));
|
| }
|
|
|
| - /**
|
| - * @SmallTest
|
| - * @Feature({"Android-WebView", "Preferences"})
|
| - * BUG=153516
|
| - */
|
| - @FlakyTest
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences"})
|
| public void testContentUrlAccessBoth() throws Throwable {
|
| ViewPair views = createViews(NORMAL_VIEW, INCOGNITO_VIEW);
|
| runPerViewSettingsTest(
|
| - new AwSettingsContentUrlAccessTestHelper(views.getView0(), views.getClient0(), 0),
|
| - new AwSettingsContentUrlAccessTestHelper(views.getView1(), views.getClient1(), 1));
|
| + new AwSettingsContentUrlAccessTestHelper(views.getContainer0(), views.getClient0(), 0),
|
| + new AwSettingsContentUrlAccessTestHelper(views.getContainer1(), views.getClient1(), 1));
|
| }
|
|
|
| @SmallTest
|
| @@ -1402,50 +1469,37 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
| ensureResourceRequestCountInContentProvider(target, 0);
|
| }
|
|
|
| - private void doTestContentUrlFromFile(boolean addQueryParameters) throws Throwable {
|
| - final TestAwContentsClient contentClient = new TestAwContentsClient();
|
| - final ContentViewCore contentView =
|
| - createAwTestContainerViewOnMainSync(false, contentClient).getContentViewCore();
|
| - final String target = "content_from_file_" + addQueryParameters;
|
| - Context context = getInstrumentation().getTargetContext();
|
| - final String fileName = context.getCacheDir() + "/" + target + ".html";
|
| - try {
|
| - resetResourceRequestCountInContentProvider(target);
|
| - TestFileUtil.createNewHtmlFile(
|
| - fileName,
|
| - target,
|
| - "<img src=\"" + createContentUrl(target) +
|
| - (addQueryParameters ? "?weather=sunny&life=good" : "") +
|
| - "\">");
|
| - loadUrlSync(
|
| - contentView,
|
| - contentClient.getOnPageFinishedHelper(),
|
| - "file:///" + fileName);
|
| - ensureResourceRequestCountInContentProvider(target, 1);
|
| - } finally {
|
| - TestFileUtil.deleteFile(fileName);
|
| - }
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences", "Navigation"})
|
| + public void testContentUrlFromFileNormal() throws Throwable {
|
| + ViewPair views = createViews(NORMAL_VIEW, NORMAL_VIEW);
|
| + runPerViewSettingsTest(
|
| + new AwSettingsContentUrlAccessFromFileTestHelper(
|
| + views.getContainer0(), views.getClient0(), 0),
|
| + new AwSettingsContentUrlAccessFromFileTestHelper(
|
| + views.getContainer1(), views.getClient1(), 1));
|
| }
|
|
|
| - /**
|
| - * @SmallTest
|
| - * @Feature({"Android-WebView", "Preferences", "Navigation"})
|
| - * BUG=153516
|
| - */
|
| - @FlakyTest
|
| - public void testContentUrlFromFile() throws Throwable {
|
| - doTestContentUrlFromFile(false);
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences", "Navigation"})
|
| + public void testContentUrlFromFileIncognito() throws Throwable {
|
| + ViewPair views = createViews(INCOGNITO_VIEW, INCOGNITO_VIEW);
|
| + runPerViewSettingsTest(
|
| + new AwSettingsContentUrlAccessFromFileTestHelper(
|
| + views.getContainer0(), views.getClient0(), 0),
|
| + new AwSettingsContentUrlAccessFromFileTestHelper(
|
| + views.getContainer1(), views.getClient1(), 1));
|
| }
|
|
|
| - // Verify that the query parameters are ignored with content URLs.
|
| - /**
|
| - * @SmallTest
|
| - * @Feature({"Android-WebView", "Preferences", "Navigation"})
|
| - * BUG=153516
|
| - */
|
| - @FlakyTest
|
| - public void testContentUrlWithQueryParametersFromFile() throws Throwable {
|
| - doTestContentUrlFromFile(true);
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences", "Navigation"})
|
| + public void testContentUrlFromFileBoth() throws Throwable {
|
| + ViewPair views = createViews(NORMAL_VIEW, INCOGNITO_VIEW);
|
| + runPerViewSettingsTest(
|
| + new AwSettingsContentUrlAccessFromFileTestHelper(
|
| + views.getContainer0(), views.getClient0(), 0),
|
| + new AwSettingsContentUrlAccessFromFileTestHelper(
|
| + views.getContainer1(), views.getClient1(), 1));
|
| }
|
|
|
| @SmallTest
|
| @@ -1562,9 +1616,10 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
| // below.
|
| final String expectedTitle = "Asset File";
|
| final TestAwContentsClient contentClient = new TestAwContentsClient();
|
| - final ContentViewCore contentView =
|
| - createAwTestContainerViewOnMainSync(false, contentClient).getContentViewCore();
|
| - final ContentSettings settings = getContentSettingsOnUiThread(contentView);
|
| + final AwTestContainerView containerView =
|
| + createAwTestContainerViewOnMainSync(false, contentClient);
|
| + final ContentViewCore contentView = containerView.getContentViewCore();
|
| + final AwSettings settings = getAwSettingsOnUiThread(containerView.getAwContents());
|
| try {
|
| useTestResourceContext();
|
| settings.setAllowFileAccess(false);
|
| @@ -1585,9 +1640,10 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
| // below.
|
| final String expectedTitle = "Resource File";
|
| final TestAwContentsClient contentClient = new TestAwContentsClient();
|
| - final ContentViewCore contentView =
|
| - createAwTestContainerViewOnMainSync(false, contentClient).getContentViewCore();
|
| - final ContentSettings settings = getContentSettingsOnUiThread(contentView);
|
| + final AwTestContainerView containerView =
|
| + createAwTestContainerViewOnMainSync(false, contentClient);
|
| + final ContentViewCore contentView = containerView.getContentViewCore();
|
| + final AwSettings settings = getAwSettingsOnUiThread(containerView.getAwContents());
|
| try {
|
| useTestResourceContext();
|
| settings.setAllowFileAccess(false);
|
| @@ -1601,39 +1657,50 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
| }
|
|
|
| class ViewPair {
|
| - private final ContentViewCore view0;
|
| - private final TestAwContentsClient client0;
|
| - private final ContentViewCore view1;
|
| - private final TestAwContentsClient client1;
|
| -
|
| - ViewPair(ContentViewCore view0, TestAwContentsClient client0,
|
| - ContentViewCore view1, TestAwContentsClient client1) {
|
| - this.view0 = view0;
|
| + ViewPair(AwTestContainerView container0, TestAwContentsClient client0,
|
| + AwTestContainerView container1, TestAwContentsClient client1) {
|
| + this.container0 = container0;
|
| this.client0 = client0;
|
| - this.view1 = view1;
|
| + this.container1 = container1;
|
| this.client1 = client1;
|
| }
|
|
|
| + AwTestContainerView getContainer0() {
|
| + return container0;
|
| + }
|
| +
|
| ContentViewCore getView0() {
|
| - return view0;
|
| + return container0.getContentViewCore();
|
| }
|
|
|
| TestAwContentsClient getClient0() {
|
| return client0;
|
| }
|
|
|
| + AwTestContainerView getContainer1() {
|
| + return container1;
|
| + }
|
| +
|
| ContentViewCore getView1() {
|
| - return view1;
|
| + return container1.getContentViewCore();
|
| }
|
|
|
| TestAwContentsClient getClient1() {
|
| return client1;
|
| }
|
| +
|
| + private final AwTestContainerView container0;
|
| + private final TestAwContentsClient client0;
|
| + private final AwTestContainerView container1;
|
| + private final TestAwContentsClient client1;
|
| }
|
|
|
| /**
|
| - * Runs the tests to check if a setting works properly in the case of
|
| - * multiple WebViews.
|
| + * Verifies the following statements about a setting:
|
| + * - initially, the setting has a default value;
|
| + * - the setting can be switched to an alternate value and back;
|
| + * - switching a setting in the first WebView doesn't affect the setting
|
| + * state in the second WebView and vice versa.
|
| *
|
| * @param helper0 Test helper for the first ContentView
|
| * @param helper1 Test helper for the second ContentView
|
| @@ -1683,11 +1750,9 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
| TestAwContentsClient client0 = new TestAwContentsClient();
|
| TestAwContentsClient client1 = new TestAwContentsClient();
|
| return new ViewPair(
|
| - createAwTestContainerViewOnMainSync(
|
| - firstIsIncognito, client0).getContentViewCore(),
|
| + createAwTestContainerViewOnMainSync(firstIsIncognito, client0),
|
| client0,
|
| - createAwTestContainerViewOnMainSync(
|
| - secondIsIncognito, client1).getContentViewCore(),
|
| + createAwTestContainerViewOnMainSync(secondIsIncognito, client1),
|
| client1);
|
| }
|
|
|
|
|