Bug 909920 - Mixed content warning should not show on a HTTP site - tests (r=tanvi,smaug)

This commit is contained in:
Christoph Kerschbaumer 2013-09-23 08:52:53 -07:00
parent b0b9d93f29
commit 563202bb42
8 changed files with 301 additions and 0 deletions

View File

@ -78,6 +78,12 @@ support-files =
title_test.svg
video.ogg
zoom_test.html
test_no_mcb_on_http_site_img.html
test_no_mcb_on_http_site_img.css
test_no_mcb_on_http_site_font.html
test_no_mcb_on_http_site_font.css
test_no_mcb_on_http_site_font2.html
test_no_mcb_on_http_site_font2.css
[browser_CTP_data_urls.js]
[browser_CTP_drag_drop.js]
@ -288,3 +294,4 @@ support-files =
[browser_zbug569342.js]
[browser_registerProtocolHandler_notification.js]
[browser_registerProtocolHandler_notification.html]
[browser_no_mcb_on_http_site.js]

View File

@ -0,0 +1,138 @@
/*
* Description of the Tests for
* - Bug 909920 - Mixed content warning should not show on a HTTP site
*
* Description of the tests:
* Test 1:
* 1) Load an http page
* 2) The page includes a css file using https
* 3) The css file loads an |IMAGE| << over http
*
* Test 2:
* 1) Load an http page
* 2) The page includes a css file using https
* 3) The css file loads a |FONT| over http
*
* Test 3:
* 1) Load an http page
* 2) The page includes a css file using https
* 3) The css file imports (@import) another css file using http
* 3) The imported css file loads a |FONT| over http
*
* Since the top-domain is >> NOT << served using https, the MCB
* should >> NOT << trigger a warning.
*/
const PREF_ACTIVE = "security.mixed_content.block_active_content";
const PREF_DISPLAY = "security.mixed_content.block_display_content";
const gHttpTestRoot = "http://example.com/browser/browser/base/content/test/general/";
var origBlockActive, origBlockDisplay;
var gTestBrowser = null;
registerCleanupFunction(function() {
// Set preferences back to their original values
Services.prefs.setBoolPref(PREF_ACTIVE, origBlockActive);
Services.prefs.setBoolPref(PREF_DISPLAY, origBlockDisplay);
});
function cleanUpAfterTests() {
gBrowser.removeCurrentTab();
window.focus();
finish();
}
function waitForCondition(condition, nextTest, errorMsg, okMsg) {
var tries = 0;
var interval = setInterval(function() {
if (tries >= 30) {
ok(false, errorMsg);
moveOn();
}
if (condition()) {
ok(true, okMsg)
moveOn();
}
tries++;
}, 100);
var moveOn = function() {
clearInterval(interval); nextTest();
};
}
//------------- TEST 1 -----------------------------------------
function test1A() {
gTestBrowser.removeEventListener("load", test1A, true);
var expected = "Verifying MCB does not trigger warning/error for an http page ";
expected += "with https css that includes http image";
waitForCondition(
function() content.document.getElementById('testDiv').innerHTML == expected,
test1B, "Error: Waited too long for status in Test 1!",
"OK: Expected result in innerHTML!");
}
function test1B() {
// set up test 2
gTestBrowser.addEventListener("load", test2A, true);
var url = gHttpTestRoot + "test_no_mcb_on_http_site_font.html";
gTestBrowser.contentWindow.location = url;
}
//------------- TEST 2 -----------------------------------------
function test2A() {
gTestBrowser.removeEventListener("load", test2A, true);
var expected = "Verifying MCB does not trigger warning/error for an http page ";
expected += "with https css that includes http font";
waitForCondition(
function() content.document.getElementById('testDiv').innerHTML == expected,
test2B, "Error: Waited too long for status in Test 2!",
"OK: Expected result in innerHTML!");
}
function test2B() {
// set up test 3
gTestBrowser.addEventListener("load", test3, true);
var url = gHttpTestRoot + "test_no_mcb_on_http_site_font2.html";
gTestBrowser.contentWindow.location = url;
}
//------------- TEST 3 -----------------------------------------
function test3() {
gTestBrowser.removeEventListener("load", test3, true);
var expected = "Verifying MCB does not trigger warning/error for an http page "
expected += "with https css that imports another http css which includes http font";
waitForCondition(
function() content.document.getElementById('testDiv').innerHTML == expected,
cleanUpAfterTests, "Error: Waited too long for status in Test 3!",
"OK: Expected result in innerHTML!");
}
//------------------------------------------------------
function test() {
// Performing async calls, e.g. 'onload', we have to wait till all of them finished
waitForExplicitFinish();
// Store original preferences so we can restore settings after testing
origBlockActive = Services.prefs.getBoolPref(PREF_ACTIVE);
origBlockDisplay = Services.prefs.getBoolPref(PREF_DISPLAY);
Services.prefs.setBoolPref(PREF_ACTIVE, true);
Services.prefs.setBoolPref(PREF_DISPLAY, true);
var newTab = gBrowser.addTab();
gBrowser.selectedTab = newTab;
gTestBrowser = gBrowser.selectedBrowser;
newTab.linkedBrowser.stop();
gTestBrowser.addEventListener("load", test1A, true);
var url = gHttpTestRoot + "test_no_mcb_on_http_site_img.html";
gTestBrowser.contentWindow.location = url;
}

View File

@ -0,0 +1,10 @@
@font-face {
font-family: testFont;
src: url(http://example.com/browser/browser/devtools/fontinspector/test/browser_font.woff);
}
body {
font-family: Arial;
}
div {
font-family: testFont;
}

View File

@ -0,0 +1,47 @@
<!DOCTYPE HTML>
<html>
<!--
Test 2 for Bug 909920 - See file browser_no_mcb_on_http_site.js for description.
https://bugzilla.mozilla.org/show_bug.cgi?id=909920
-->
<head>
<meta charset="utf-8">
<title>Test 2 for Bug 909920</title>
<link rel="stylesheet" type="text/css" href="https://example.com/browser/browser/base/content/test/general/test_no_mcb_on_http_site_font.css" />
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript">
function checkLoadStates() {
var ui = SpecialPowers.wrap(window)
.QueryInterface(SpecialPowers.Ci.nsIInterfaceRequestor)
.getInterface(SpecialPowers.Ci.nsIWebNavigation)
.QueryInterface(SpecialPowers.Ci.nsIDocShell)
.securityUI;
var loadedMixedActive = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_LOADED_MIXED_ACTIVE_CONTENT);
is(loadedMixedActive, false, "OK: Should not load mixed active content!");
var blockedMixedActive = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_BLOCKED_MIXED_ACTIVE_CONTENT);
is(blockedMixedActive, false, "OK: Should not block mixed active content!");
var loadedMixedDisplay = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_LOADED_MIXED_DISPLAY_CONTENT);
is(loadedMixedDisplay, false, "OK: Should not load mixed display content!");
var blockedMixedDisplay = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_BLOCKED_MIXED_DISPLAY_CONTENT);
is(blockedMixedDisplay, false, "OK: Should not block mixed display content!");
var newValue = "Verifying MCB does not trigger warning/error for an http page with https css that includes http font";
document.getElementById("testDiv").innerHTML = newValue;
}
</script>
</head>
<body onload="checkLoadStates()">
<div class="testDiv" id="testDiv">
Testing MCB does not trigger warning/error for an http page with https css that includes http font
</div>
</body>
</html>

View File

@ -0,0 +1 @@
@import url(http://example.com/browser/browser/base/content/test/general/test_no_mcb_on_http_site_font.css);

View File

@ -0,0 +1,48 @@
<!DOCTYPE HTML>
<html>
<!--
Test 3 for Bug 909920 - See file browser_no_mcb_on_http_site.js for description.
https://bugzilla.mozilla.org/show_bug.cgi?id=909920
-->
<head>
<meta charset="utf-8">
<title>Test 3 for Bug 909920</title>
<link rel="stylesheet" type="text/css" href="https://example.com/browser/browser/base/content/test/general/test_no_mcb_on_http_site_font2.css" />
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript">
function checkLoadStates() {
var ui = SpecialPowers.wrap(window)
.QueryInterface(SpecialPowers.Ci.nsIInterfaceRequestor)
.getInterface(SpecialPowers.Ci.nsIWebNavigation)
.QueryInterface(SpecialPowers.Ci.nsIDocShell)
.securityUI;
var loadedMixedActive = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_LOADED_MIXED_ACTIVE_CONTENT);
is(loadedMixedActive, false, "OK: Should not load mixed active content!");
var blockedMixedActive = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_BLOCKED_MIXED_ACTIVE_CONTENT);
is(blockedMixedActive, false, "OK: Should not block mixed active content!");
var loadedMixedDisplay = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_LOADED_MIXED_DISPLAY_CONTENT);
is(loadedMixedDisplay, false, "OK: Should not load mixed display content!");
var blockedMixedDisplay = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_BLOCKED_MIXED_DISPLAY_CONTENT);
is(blockedMixedDisplay, false, "OK: Should not block mixed display content!");
var newValue = "Verifying MCB does not trigger warning/error for an http page ";
newValue += "with https css that imports another http css which includes http font";
document.getElementById("testDiv").innerHTML = newValue;
}
</script>
</head>
<body onload="checkLoadStates()">
<div class="testDiv" id="testDiv">
Testing MCB does not trigger warning/error for an http page with https css that imports another http css which includes http font
</div>
</body>
</html>

View File

@ -0,0 +1,3 @@
#testDiv {
background: url(http://example.com/tests/image/test/mochitest/blue.png)
}

View File

@ -0,0 +1,47 @@
<!DOCTYPE HTML>
<html>
<!--
Test 1 for Bug 909920 - See file browser_no_mcb_on_http_site.js for description.
https://bugzilla.mozilla.org/show_bug.cgi?id=909920
-->
<head>
<meta charset="utf-8">
<title>Test 1 for Bug 909920</title>
<link rel="stylesheet" type="text/css" href="https://example.com/browser/browser/base/content/test/general/test_no_mcb_on_http_site_img.css" />
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript">
function checkLoadStates() {
var ui = SpecialPowers.wrap(window)
.QueryInterface(SpecialPowers.Ci.nsIInterfaceRequestor)
.getInterface(SpecialPowers.Ci.nsIWebNavigation)
.QueryInterface(SpecialPowers.Ci.nsIDocShell)
.securityUI;
var loadedMixedActive = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_LOADED_MIXED_ACTIVE_CONTENT);
is(loadedMixedActive, false, "OK: Should not load mixed active content!");
var blockedMixedActive = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_BLOCKED_MIXED_ACTIVE_CONTENT);
is(blockedMixedActive, false, "OK: Should not block mixed active content!");
var loadedMixedDisplay = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_LOADED_MIXED_DISPLAY_CONTENT);
is(loadedMixedDisplay, false, "OK: Should not load mixed display content!");
var blockedMixedDisplay = ui &&
(ui.state & SpecialPowers.Ci.nsIWebProgressListener.STATE_BLOCKED_MIXED_DISPLAY_CONTENT);
is(blockedMixedDisplay, false, "OK: Should not block mixed display content!");
var newValue = "Verifying MCB does not trigger warning/error for an http page with https css that includes http image";
document.getElementById("testDiv").innerHTML = newValue;
}
</script>
</head>
<body onload="checkLoadStates()">
<div class="testDiv" id="testDiv">
Testing MCB does not trigger warning/error for an http page with https css that includes http image
</div>
</body>
</html>