| 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 f57cffd0279236d9b847fa0f04cd6904a3f7ed9a..70b14bdd34eabbd4a40e1ee3b47b0bab535279f7 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,6 +7,7 @@ package org.chromium.android_webview.test;
|
| import android.content.Context;
|
| import android.os.Build;
|
| import android.test.suitebuilder.annotation.SmallTest;
|
| +import android.util.Pair;
|
|
|
| import org.chromium.base.test.util.Feature;
|
| import org.chromium.base.test.util.TestFileUtil;
|
| @@ -14,10 +15,15 @@ import org.chromium.base.test.util.UrlUtils;
|
| import org.chromium.content.browser.ContentSettings;
|
| import org.chromium.content.browser.ContentViewCore;
|
| import org.chromium.content.browser.test.util.CallbackHelper;
|
| +import org.chromium.content.browser.test.util.Criteria;
|
| +import org.chromium.content.browser.test.util.CriteriaHelper;
|
| import org.chromium.content.browser.test.util.HistoryUtils;
|
|
|
| import java.util.regex.Matcher;
|
| import java.util.regex.Pattern;
|
| +import java.util.ArrayList;
|
| +import java.util.List;
|
| +
|
|
|
| /**
|
| * A test suite for ContentSettings class. The key objective is to verify that each
|
| @@ -25,6 +31,8 @@ import java.util.regex.Pattern;
|
| * application.
|
| */
|
| public class AwSettingsTest extends AndroidWebViewTestBase {
|
| + private static final int CHECK_INTERVAL = 100;
|
| +
|
| private static final boolean ENABLED = true;
|
| private static final boolean DISABLED = false;
|
|
|
| @@ -1334,4 +1342,84 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
|
| private String createContentUrl(final String target) {
|
| return TestContentProvider.createContentUrl(target);
|
| }
|
| +
|
| + private final String IMAGE_DATA = "iVBORw0KGgoAAA" +
|
| + "ANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAAAXNSR0IArs4c6QAAAA1JREFUCB0BAgD9/wAAAAIAAc3j" +
|
| + "0SsAAAAASUVORK5CYII=";
|
| +
|
| + private final String DATA_URL_IMAGE_HTML = "<html>" +
|
| + "<head><script>function updateTitle(){" +
|
| + "document.title=document.getElementById('img').naturalHeight;}</script></head>" +
|
| + "<body onload='updateTitle()'>" +
|
| + "<img id='img' onload='updateTitle()' src='data:image/png;base64," + IMAGE_DATA +
|
| + "'></body></html>";
|
| +
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences"})
|
| + public void testBlockNetworkImagesDoesNotBlockDataUrlImage() throws Throwable {
|
| + final TestAwContentsClient contentClient = new TestAwContentsClient();
|
| + final ContentViewCore contentView =
|
| + createAwTestContainerViewOnMainSync(false, contentClient).getContentViewCore();
|
| + final ContentSettings settings = getContentSettingsOnUiThread(contentView);
|
| +
|
| + settings.setJavaScriptEnabled(true);
|
| +
|
| + settings.setImagesEnabled(false);
|
| + loadDataSync(contentView,
|
| + contentClient.getOnPageFinishedHelper(),
|
| + DATA_URL_IMAGE_HTML,
|
| + "text/html",
|
| + false);
|
| + assertEquals("1", getTitleOnUiThread(contentView));
|
| + }
|
| +
|
| + @SmallTest
|
| + @Feature({"Android-WebView", "Preferences"})
|
| + public void testBlockNetworkImagesBlocksNetworkImageAndReloadInPlace() throws Throwable {
|
| + final TestAwContentsClient contentClient = new TestAwContentsClient();
|
| + final ContentViewCore contentView =
|
| + createAwTestContainerViewOnMainSync(false, contentClient).getContentViewCore();
|
| + final ContentSettings settings = getContentSettingsOnUiThread(contentView);
|
| + settings.setJavaScriptEnabled(true);
|
| +
|
| + TestWebServer webServer = null;
|
| + try {
|
| + webServer = new TestWebServer(false);
|
| + List<Pair<String, String>> imageHeaders = new ArrayList<Pair<String, String>>();
|
| + imageHeaders.add(Pair.create("Content-Type", "image/png"));
|
| + final String imagePath = "/image.png";
|
| + webServer.setResponseBase64(imagePath, IMAGE_DATA, imageHeaders);
|
| +
|
| + final String pagePath = "/html_image.html";
|
| + final String httpUrlImageHtml = "<html>" +
|
| + "<head><script>" +
|
| + "function updateTitle(){" +
|
| + "document.title=document.getElementById('img').naturalHeight;}" +
|
| + "</script></head>" +
|
| + "<body onload='updateTitle()'>" +
|
| + "<img id='img' onload='updateTitle()' src='" + imagePath +
|
| + "'></body></html>";
|
| + final String httpImageUrl = webServer.setResponse(pagePath, httpUrlImageHtml, null);
|
| +
|
| + settings.setImagesEnabled(false);
|
| + loadUrlSync(contentView, contentClient.getOnPageFinishedHelper(), httpImageUrl);
|
| + assertEquals("0", getTitleOnUiThread(contentView));
|
| +
|
| + settings.setImagesEnabled(true);
|
| + assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + try {
|
| + return "0".equals(getTitleOnUiThread(contentView));
|
| + } catch (Throwable t) {
|
| + t.printStackTrace();
|
| + fail("Failed to getTitleOnUIThread: " + t.toString());
|
| + return false;
|
| + }
|
| + }
|
| + }, WAIT_TIMEOUT_SECONDS * 1000, CHECK_INTERVAL));
|
| + } finally {
|
| + if (webServer != null) webServer.shutdown();
|
| + }
|
| + }
|
| }
|
|
|