summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_identity_UI.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/general/browser_identity_UI.js')
-rw-r--r--browser/base/content/test/general/browser_identity_UI.js146
1 files changed, 146 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_identity_UI.js b/browser/base/content/test/general/browser_identity_UI.js
new file mode 100644
index 000000000..5aacb2e79
--- /dev/null
+++ b/browser/base/content/test/general/browser_identity_UI.js
@@ -0,0 +1,146 @@
+/* Tests for correct behaviour of getEffectiveHost on identity handler */
+
+function test() {
+ waitForExplicitFinish();
+ requestLongerTimeout(2);
+
+ ok(gIdentityHandler, "gIdentityHandler should exist");
+
+ BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank", true).then(() => {
+ gBrowser.selectedBrowser.addEventListener("load", checkResult, true);
+ nextTest();
+ });
+}
+
+// Greek IDN for 'example.test'.
+var idnDomain = "\u03C0\u03B1\u03C1\u03AC\u03B4\u03B5\u03B9\u03B3\u03BC\u03B1.\u03B4\u03BF\u03BA\u03B9\u03BC\u03AE";
+var tests = [
+ {
+ name: "normal domain",
+ location: "http://test1.example.org/",
+ effectiveHost: "test1.example.org"
+ },
+ {
+ name: "view-source",
+ location: "view-source:http://example.com/",
+ effectiveHost: null
+ },
+ {
+ name: "normal HTTPS",
+ location: "https://example.com/",
+ effectiveHost: "example.com",
+ isHTTPS: true
+ },
+ {
+ name: "IDN subdomain",
+ location: "http://sub1." + idnDomain + "/",
+ effectiveHost: "sub1." + idnDomain
+ },
+ {
+ name: "subdomain with port",
+ location: "http://sub1.test1.example.org:8000/",
+ effectiveHost: "sub1.test1.example.org"
+ },
+ {
+ name: "subdomain HTTPS",
+ location: "https://test1.example.com/",
+ effectiveHost: "test1.example.com",
+ isHTTPS: true
+ },
+ {
+ name: "view-source HTTPS",
+ location: "view-source:https://example.com/",
+ effectiveHost: null,
+ isHTTPS: true
+ },
+ {
+ name: "IP address",
+ location: "http://127.0.0.1:8888/",
+ effectiveHost: "127.0.0.1"
+ },
+]
+
+var gCurrentTest, gCurrentTestIndex = -1, gTestDesc, gPopupHidden;
+// Go through the tests in both directions, to add additional coverage for
+// transitions between different states.
+var gForward = true;
+var gCheckETLD = false;
+function nextTest() {
+ if (!gCheckETLD) {
+ if (gForward)
+ gCurrentTestIndex++;
+ else
+ gCurrentTestIndex--;
+
+ if (gCurrentTestIndex == tests.length) {
+ // Went too far, reverse
+ gCurrentTestIndex--;
+ gForward = false;
+ }
+
+ if (gCurrentTestIndex == -1) {
+ gBrowser.selectedBrowser.removeEventListener("load", checkResult, true);
+ gBrowser.removeCurrentTab();
+ finish();
+ return;
+ }
+
+ gCurrentTest = tests[gCurrentTestIndex];
+ gTestDesc = "#" + gCurrentTestIndex + " (" + gCurrentTest.name + ")";
+ if (!gForward)
+ gTestDesc += " (second time)";
+ if (gCurrentTest.isHTTPS) {
+ gCheckETLD = true;
+ }
+
+ // Navigate to the next page, which will cause checkResult to fire.
+ let spec = gBrowser.selectedBrowser.currentURI.spec;
+ if (spec == "about:blank" || spec == gCurrentTest.location) {
+ BrowserTestUtils.loadURI(gBrowser.selectedBrowser, gCurrentTest.location);
+ } else {
+ // Open the Control Center and make sure it closes after nav (Bug 1207542).
+ let popupShown = promisePopupShown(gIdentityHandler._identityPopup);
+ gPopupHidden = promisePopupHidden(gIdentityHandler._identityPopup);
+ gIdentityHandler._identityBox.click();
+ info("Waiting for the Control Center to be shown");
+ popupShown.then(() => {
+ is_element_visible(gIdentityHandler._identityPopup, "Control Center is visible");
+ // Show the subview, which is an easy way in automation to reproduce
+ // Bug 1207542, where the CC wouldn't close on navigation.
+ gBrowser.ownerDocument.querySelector("#identity-popup-security-expander").click();
+ BrowserTestUtils.loadURI(gBrowser.selectedBrowser, gCurrentTest.location);
+ });
+ }
+ } else {
+ gCheckETLD = false;
+ gTestDesc = "#" + gCurrentTestIndex + " (" + gCurrentTest.name + " without eTLD in identity icon label)";
+ if (!gForward)
+ gTestDesc += " (second time)";
+ gBrowser.selectedBrowser.reloadWithFlags(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE |
+ Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY);
+ }
+}
+
+function checkResult() {
+ // Sanity check other values, and the value of gIdentityHandler.getEffectiveHost()
+ is(gIdentityHandler._uri.spec, gCurrentTest.location, "location matches for test " + gTestDesc);
+ // getEffectiveHost can't be called for all modes
+ if (gCurrentTest.effectiveHost === null) {
+ let identityBox = document.getElementById("identity-box");
+ ok(identityBox.className == "unknownIdentity" ||
+ identityBox.className == "chromeUI", "mode matched");
+ } else {
+ is(gIdentityHandler.getEffectiveHost(), gCurrentTest.effectiveHost, "effectiveHost matches for test " + gTestDesc);
+ }
+
+ if (gPopupHidden) {
+ info("Waiting for the Control Center to hide");
+ gPopupHidden.then(() => {
+ gPopupHidden = null;
+ is_element_hidden(gIdentityHandler._identityPopup, "control center is hidden");
+ executeSoon(nextTest);
+ });
+ } else {
+ executeSoon(nextTest);
+ }
+}