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

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

Issue 1029313003: [Android WebView] Add tests for catching console messages on denied loads (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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/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);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698