fune/browser/base/content/test/siteIdentity/browser_check_identity_state.js
Jonathan Kingston 04acd987f8 Bug 1335970 - Add prefs to add "Not Secure" text to insecure pages. r=johannh
MozReview-Commit-ID: JtCAjIYI3Qz

--HG--
extra : rebase_source : 50673aa85686d9e0ea979b77c477c5612ee98a54
2018-01-20 22:41:59 +00:00

421 lines
13 KiB
JavaScript

/*
* Test the identity mode UI for a variety of page types
*/
"use strict";
const DUMMY = "browser/browser/base/content/test/siteIdentity/dummy_page.html";
const INSECURE_ICON_PREF = "security.insecure_connection_icon.enabled";
const INSECURE_TEXT_PREF = "security.insecure_connection_text.enabled";
const INSECURE_PBMODE_ICON_PREF = "security.insecure_connection_icon.pbmode.enabled";
function loadNewTab(url) {
return BrowserTestUtils.openNewForegroundTab(gBrowser, url, true);
}
function getIdentityMode(aWindow = window) {
return aWindow.document.getElementById("identity-box").className;
}
function getConnectionState() {
// Prevents items that are being lazy loaded causing issues
document.getElementById("identity-box").click();
gIdentityHandler.refreshIdentityPopup();
return document.getElementById("identity-popup").getAttribute("connection");
}
// This test is slow on Linux debug e10s
requestLongerTimeout(2);
async function webpageTest(secureCheck) {
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let oldTab = gBrowser.selectedTab;
let newTab = await loadNewTab("http://example.com/" + DUMMY);
if (secureCheck) {
is(getIdentityMode(), "notSecure", "Identity should be not secure");
} else {
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
}
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
if (secureCheck) {
is(getIdentityMode(), "notSecure", "Identity should be not secure");
} else {
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
}
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_webpage() {
await webpageTest(false);
await webpageTest(true);
});
async function webpageTestTextWarning(secureCheck) {
await SpecialPowers.pushPrefEnv({set: [[INSECURE_TEXT_PREF, secureCheck]]});
let oldTab = gBrowser.selectedTab;
let newTab = await loadNewTab("http://example.com/" + DUMMY);
if (secureCheck) {
is(getIdentityMode(), "unknownIdentity notSecureText", "Identity should have not secure text");
} else {
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
}
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
if (secureCheck) {
is(getIdentityMode(), "unknownIdentity notSecureText", "Identity should have not secure text");
} else {
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
}
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_webpage_text_warning() {
await webpageTestTextWarning(false);
await webpageTestTextWarning(true);
});
async function webpageTestTextWarningCombined(secureCheck) {
await SpecialPowers.pushPrefEnv({set: [
[INSECURE_TEXT_PREF, secureCheck],
[INSECURE_ICON_PREF, secureCheck]
]});
let oldTab = gBrowser.selectedTab;
let newTab = await loadNewTab("http://example.com/" + DUMMY);
if (secureCheck) {
is(getIdentityMode(), "notSecure notSecureText", "Identity should be not secure");
} else {
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
}
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
if (secureCheck) {
is(getIdentityMode(), "notSecure notSecureText", "Identity should be not secure");
} else {
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
}
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_webpage_text_warning_combined() {
await webpageTestTextWarning(false);
await webpageTestTextWarning(true);
});
async function blankPageTest(secureCheck) {
let oldTab = gBrowser.selectedTab;
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let newTab = await loadNewTab("about:blank");
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_blank() {
await blankPageTest(true);
await blankPageTest(false);
});
async function secureTest(secureCheck) {
let oldTab = gBrowser.selectedTab;
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let newTab = await loadNewTab("https://example.com/" + DUMMY);
is(getIdentityMode(), "verifiedDomain", "Identity should be verified");
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
is(getIdentityMode(), "verifiedDomain", "Identity should be verified");
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_secure_enabled() {
await secureTest(true);
await secureTest(false);
});
async function insecureTest(secureCheck) {
let oldTab = gBrowser.selectedTab;
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let newTab = await loadNewTab("http://example.com/" + DUMMY);
if (secureCheck) {
is(getIdentityMode(), "notSecure", "Identity should be not secure");
} else {
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
}
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
if (secureCheck) {
is(getIdentityMode(), "notSecure", "Identity should be not secure");
} else {
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
}
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_insecure() {
await insecureTest(true);
await insecureTest(false);
});
async function addonsTest(secureCheck) {
let oldTab = gBrowser.selectedTab;
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let newTab = await loadNewTab("about:addons");
is(getIdentityMode(), "chromeUI", "Identity should be chrome");
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
is(getIdentityMode(), "chromeUI", "Identity should be chrome");
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_addons() {
await addonsTest(true);
await addonsTest(false);
});
async function fileTest(secureCheck) {
let oldTab = gBrowser.selectedTab;
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let fileURI = getTestFilePath("");
let newTab = await loadNewTab(fileURI);
is(getConnectionState(), "file", "Connection should be file");
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
is(getConnectionState(), "file", "Connection should be file");
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_file() {
await fileTest(true);
await fileTest(false);
});
async function resourceUriTest(secureCheck) {
let oldTab = gBrowser.selectedTab;
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let dataURI = "resource://gre/modules/Services.jsm";
let newTab = await loadNewTab(dataURI);
is(getConnectionState(), "file", "Connection should be file");
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
is(getConnectionState(), "file", "Connection should be file");
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_resource_uri() {
await resourceUriTest(true);
await resourceUriTest(false);
});
async function noCertErrorTest(secureCheck) {
let oldTab = gBrowser.selectedTab;
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let newTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedTab = newTab;
let promise = BrowserTestUtils.waitForErrorPage(gBrowser.selectedBrowser);
gBrowser.loadURI("https://nocert.example.com/");
await promise;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
is(getConnectionState(), "not-secure", "Connection should be file");
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
is(getConnectionState(), "not-secure", "Connection should be file");
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_about_net_error_uri() {
await noCertErrorTest(true);
await noCertErrorTest(false);
});
async function noCertErrorFromNavigationTest(secureCheck) {
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let newTab = await loadNewTab("http://example.com/" + DUMMY);
let promise = BrowserTestUtils.waitForErrorPage(gBrowser.selectedBrowser);
await ContentTask.spawn(gBrowser.selectedBrowser, {}, function() {
content.document.getElementById("no-cert").click();
});
await promise;
await ContentTask.spawn(gBrowser.selectedBrowser, {}, function() {
is(content.window.location.href, "https://nocert.example.com/", "Should be the cert error URL");
});
is(newTab.linkedBrowser.documentURI.spec.startsWith("about:certerror?"), true, "Should be an about:certerror");
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
is(getConnectionState(), "not-secure", "Connection should be file");
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_about_net_error_uri_from_navigation_tab() {
await noCertErrorFromNavigationTest(true);
await noCertErrorFromNavigationTest(false);
});
async function aboutUriTest(secureCheck) {
let oldTab = gBrowser.selectedTab;
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let aboutURI = "about:robots";
let newTab = await loadNewTab(aboutURI);
is(getConnectionState(), "file", "Connection should be file");
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
is(getConnectionState(), "file", "Connection should be file");
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_about_uri() {
await aboutUriTest(true);
await aboutUriTest(false);
});
async function dataUriTest(secureCheck) {
let oldTab = gBrowser.selectedTab;
await SpecialPowers.pushPrefEnv({set: [[INSECURE_ICON_PREF, secureCheck]]});
let dataURI = "data:text/html,hi";
let newTab = await loadNewTab(dataURI);
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = oldTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.selectedTab = newTab;
is(getIdentityMode(), "unknownIdentity", "Identity should be unknown");
gBrowser.removeTab(newTab);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_data_uri() {
dataUriTest(true);
dataUriTest(false);
});
async function pbModeTest(prefs, secureCheck) {
await SpecialPowers.pushPrefEnv({set: prefs});
let privateWin = await BrowserTestUtils.openNewBrowserWindow({private: true});
let oldTab = privateWin.gBrowser.selectedTab;
let newTab = await BrowserTestUtils.openNewForegroundTab(privateWin.gBrowser, "http://example.com/" + DUMMY);
if (secureCheck) {
is(getIdentityMode(privateWin), "notSecure", "Identity should be not secure");
} else {
is(getIdentityMode(privateWin), "unknownIdentity", "Identity should be unknown");
}
privateWin.gBrowser.selectedTab = oldTab;
is(getIdentityMode(privateWin), "unknownIdentity", "Identity should be unknown");
privateWin.gBrowser.selectedTab = newTab;
if (secureCheck) {
is(getIdentityMode(privateWin), "notSecure", "Identity should be not secure");
} else {
is(getIdentityMode(privateWin), "unknownIdentity", "Identity should be unknown");
}
await BrowserTestUtils.closeWindow(privateWin);
await SpecialPowers.popPrefEnv();
}
add_task(async function test_pb_mode() {
let prefs = [
[INSECURE_ICON_PREF, true],
[INSECURE_PBMODE_ICON_PREF, true]
];
await pbModeTest(prefs, true);
prefs = [
[INSECURE_ICON_PREF, false],
[INSECURE_PBMODE_ICON_PREF, true]
];
await pbModeTest(prefs, true);
prefs = [
[INSECURE_ICON_PREF, false],
[INSECURE_PBMODE_ICON_PREF, false]
];
await pbModeTest(prefs, false);
});