Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(740)

Unified Diff: android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java

Issue 11090003: [Android] Upstream WebView.allow{Content|File}Access implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Workaround to remove dependency on https://codereview.chromium.org/11030051 Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698