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..12092f30bafe0b4e0b9e7416ee2d59ec72fe2a59 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,12 +669,12 @@ 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 |
@@ -662,23 +682,24 @@ public class AwSettingsTest extends AndroidWebViewTestBase { |
// Use query parameters to avoid hitting a cached page. |
String fileUrl = UrlUtils.getTestFileUrl("webview/hello_world.html?id=" + mIndex); |
mIndex += 2; |
- loadUrlSync(fileUrl); |
- assertEquals( |
- value == ENABLED ? ACCESS_GRANTED_TITLE : ACCESS_DENIED_TITLE, |
- getTitleOnUiThread()); |
+ 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 +715,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 +1384,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 +1459,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 +1606,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 +1630,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,34 +1647,42 @@ 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; |
} |
/** |
@@ -1683,11 +1737,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); |
} |