Index: android_webview/javatests/src/org/chromium/android_webview/test/ConsoleMessagesForBlockedLoadsTest.java |
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/ConsoleMessagesForBlockedLoadsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/ConsoleMessagesForBlockedLoadsTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6064b566f2f62a3dbc7b993e8d3daa96de331d1e |
--- /dev/null |
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/ConsoleMessagesForBlockedLoadsTest.java |
@@ -0,0 +1,137 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.android_webview.test; |
+ |
+import android.os.Build; |
+import android.test.suitebuilder.annotation.SmallTest; |
+import android.util.Pair; |
+import android.webkit.ConsoleMessage; |
+ |
+import org.chromium.android_webview.AwContents; |
+import org.chromium.android_webview.AwSettings; |
+import org.chromium.android_webview.test.util.CommonResources; |
+import org.chromium.base.test.util.Feature; |
+import org.chromium.base.test.util.MinAndroidSdkLevel; |
+import org.chromium.net.test.util.TestWebServer; |
+ |
+import java.util.ArrayList; |
+import java.util.List; |
+ |
+/** |
+ * Verify that content loading blocks initiated by renderer can be detected |
+ * by the embedder via WebChromeClient.onConsoleMessage. |
+ */ |
+@MinAndroidSdkLevel(Build.VERSION_CODES.KITKAT) |
+public class ConsoleMessagesForBlockedLoadsTest extends AwTestBase { |
+ |
+ private TestAwContentsClient mContentsClient; |
+ private AwTestContainerView mTestContainerView; |
+ private TestAwContentsClient.AddMessageToConsoleHelper mOnConsoleMessageHelper; |
+ private AwContents mAwContents; |
+ private TestWebServer mWebServer; |
+ |
+ @Override |
+ public void setUp() throws Exception { |
+ super.setUp(); |
+ mContentsClient = new TestAwContentsClient(); |
+ mTestContainerView = createAwTestContainerViewOnMainSync(mContentsClient); |
+ mAwContents = mTestContainerView.getAwContents(); |
+ mOnConsoleMessageHelper = mContentsClient.getAddMessageToConsoleHelper(); |
+ } |
+ |
+ @Override |
+ protected void tearDown() throws Exception { |
+ if (mWebServer != null) mWebServer.shutdown(); |
+ super.tearDown(); |
+ } |
+ |
+ private void startWebServer() throws Exception { |
+ mWebServer = TestWebServer.start(); |
+ } |
+ |
+ private ConsoleMessage getSingleErrorMessage() { |
+ ConsoleMessage result = null; |
+ for (ConsoleMessage m : mOnConsoleMessageHelper.getMessages()) { |
+ if (m.messageLevel() == ConsoleMessage.MessageLevel.ERROR) { |
+ assertNull(result); |
+ result = m; |
+ } |
+ } |
+ assertNotNull(result); |
+ return result; |
+ } |
+ |
+ @SmallTest |
+ @Feature({"AndroidWebView"}) |
+ public void testXFrameOptionsDenial() throws Throwable { |
+ startWebServer(); |
+ final String iframeHtml = CommonResources.makeHtmlPageFrom("", "FAIL"); |
+ List<Pair<String, String>> iframeHeaders = new ArrayList<Pair<String, String>>(); |
+ iframeHeaders.add(Pair.create("x-frame-options", "DENY")); |
+ final String iframeUrl = mWebServer.setResponse("/iframe.html", iframeHtml, iframeHeaders); |
+ final String pageHtml = CommonResources.makeHtmlPageFrom( |
+ "", "<iframe src='" + iframeUrl + "' />"); |
+ final String pageUrl = mWebServer.setResponse("/page.html", pageHtml, null); |
+ mOnConsoleMessageHelper.clearMessages(); |
+ loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), pageUrl); |
+ ConsoleMessage errorMessage = getSingleErrorMessage(); |
+ assertTrue(errorMessage.message().indexOf(iframeUrl) != -1); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"AndroidWebView"}) |
+ public void testMixedContentDenial() throws Throwable { |
+ startWebServer(); |
+ TestWebServer httpsServer = null; |
+ AwSettings settings = getAwSettingsOnUiThread(mAwContents); |
+ settings.setMixedContentMode(AwSettings.MIXED_CONTENT_NEVER_ALLOW); |
+ try { |
+ httpsServer = TestWebServer.startSsl(); |
+ final String imageUrl = mWebServer.setResponseBase64( |
+ "/insecure.png", CommonResources.FAVICON_DATA_BASE64, null); |
+ final String secureHtml = CommonResources.makeHtmlPageFrom( |
+ "", "<img src='" + imageUrl + "' />"); |
+ String secureUrl = httpsServer.setResponse("/secure.html", secureHtml, null); |
+ mOnConsoleMessageHelper.clearMessages(); |
+ loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), secureUrl); |
+ ConsoleMessage errorMessage = getSingleErrorMessage(); |
+ assertTrue(errorMessage.message().indexOf(imageUrl) != -1); |
+ assertTrue(errorMessage.message().indexOf(secureUrl) != -1); |
+ } finally { |
+ if (httpsServer != null) { |
+ httpsServer.shutdown(); |
+ } |
+ } |
+ } |
+ |
+ @SmallTest |
+ @Feature({"AndroidWebView"}) |
+ public void testCrossOriginDenial() throws Throwable { |
+ startWebServer(); |
+ final String iframeXsl = |
+ "<?xml version='1.0' encoding='UTF-8'?>" |
+ + "<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>" |
+ + "<xsl:template match='*'>" |
+ + "<html><body>FAIL</body></html>" |
+ + "</xsl:template>" |
+ + "</xsl:stylesheet>"; |
+ final String iframeXslUrl = mWebServer.setResponse( |
+ "/iframe.xsl", iframeXsl, null).replace("localhost", "127.0.0.1"); |
+ final String iframeXml = |
+ "<?xml version='1.0' encoding='UTF-8'?>" |
+ + "<?xml-stylesheet type='text/xsl' href='" + iframeXslUrl + "'?>" |
+ + "<html xmlns='http://www.w3.org/1999/xhtml'>" |
+ + "<body>PASS</body></html>"; |
+ final String iframeXmlUrl = mWebServer.setResponse("/iframe.xml", iframeXml, null); |
+ final String pageHtml = CommonResources.makeHtmlPageFrom( |
+ "", "<iframe src='" + iframeXmlUrl + "' />"); |
+ final String pageUrl = mWebServer.setResponse("/page.html", pageHtml, null); |
+ mOnConsoleMessageHelper.clearMessages(); |
+ loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), pageUrl); |
+ ConsoleMessage errorMessage = getSingleErrorMessage(); |
+ assertTrue(errorMessage.message().indexOf(iframeXslUrl) != -1); |
+ assertTrue(errorMessage.message().indexOf(iframeXmlUrl) != -1); |
+ } |
+} |