michael@0: /* Tests for correct behaviour of getEffectiveHost on identity handler */ michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: ok(gIdentityHandler, "gIdentityHandler should exist"); michael@0: michael@0: gBrowser.selectedTab = gBrowser.addTab(); michael@0: gBrowser.selectedBrowser.addEventListener("load", checkResult, true); michael@0: michael@0: nextTest(); michael@0: } michael@0: michael@0: // Greek IDN for 'example.test'. michael@0: var idnDomain = "\u03C0\u03B1\u03C1\u03AC\u03B4\u03B5\u03B9\u03B3\u03BC\u03B1.\u03B4\u03BF\u03BA\u03B9\u03BC\u03AE"; michael@0: var tests = [ michael@0: { michael@0: name: "normal domain", michael@0: location: "http://test1.example.org/", michael@0: effectiveHost: "example.org" michael@0: }, michael@0: { michael@0: name: "view-source", michael@0: location: "view-source:http://example.com/", michael@0: effectiveHost: null michael@0: }, michael@0: { michael@0: name: "normal HTTPS", michael@0: location: "https://example.com/", michael@0: effectiveHost: "example.com", michael@0: isHTTPS: true michael@0: }, michael@0: { michael@0: name: "IDN subdomain", michael@0: location: "http://sub1." + idnDomain + "/", michael@0: effectiveHost: idnDomain michael@0: }, michael@0: { michael@0: name: "subdomain with port", michael@0: location: "http://sub1.test1.example.org:8000/", michael@0: effectiveHost: "example.org" michael@0: }, michael@0: { michael@0: name: "subdomain HTTPS", michael@0: location: "https://test1.example.com/", michael@0: michael@0: effectiveHost: "example.com", michael@0: isHTTPS: true michael@0: }, michael@0: { michael@0: name: "view-source HTTPS", michael@0: location: "view-source:https://example.com/", michael@0: effectiveHost: null, michael@0: isHTTPS: true michael@0: }, michael@0: { michael@0: name: "IP address", michael@0: location: "http://127.0.0.1:8888/", michael@0: effectiveHost: "127.0.0.1" michael@0: }, michael@0: ] michael@0: michael@0: let gCurrentTest, gCurrentTestIndex = -1, gTestDesc; michael@0: // Go through the tests in both directions, to add additional coverage for michael@0: // transitions between different states. michael@0: let gForward = true; michael@0: let gCheckETLD = false; michael@0: function nextTest() { michael@0: if (!gCheckETLD) { michael@0: if (gForward) michael@0: gCurrentTestIndex++; michael@0: else michael@0: gCurrentTestIndex--; michael@0: michael@0: if (gCurrentTestIndex == tests.length) { michael@0: // Went too far, reverse michael@0: gCurrentTestIndex--; michael@0: gForward = false; michael@0: } michael@0: michael@0: if (gCurrentTestIndex == -1) { michael@0: gBrowser.selectedBrowser.removeEventListener("load", checkResult, true); michael@0: gBrowser.removeCurrentTab(); michael@0: finish(); michael@0: return; michael@0: } michael@0: michael@0: gCurrentTest = tests[gCurrentTestIndex]; michael@0: gTestDesc = "#" + gCurrentTestIndex + " (" + gCurrentTest.name + ")"; michael@0: if (!gForward) michael@0: gTestDesc += " (second time)"; michael@0: if (gCurrentTest.isHTTPS) { michael@0: gCheckETLD = true; michael@0: } michael@0: content.location = gCurrentTest.location; michael@0: } else { michael@0: gCheckETLD = false; michael@0: gTestDesc = "#" + gCurrentTestIndex + " (" + gCurrentTest.name + " without eTLD in identity icon label)"; michael@0: if (!gForward) michael@0: gTestDesc += " (second time)"; michael@0: content.location.reload(true); michael@0: } michael@0: } michael@0: michael@0: function checkResult() { michael@0: // Sanity check other values, and the value of gIdentityHandler.getEffectiveHost() michael@0: is(gIdentityHandler._lastUri.spec, gCurrentTest.location, "location matches for test " + gTestDesc); michael@0: // getEffectiveHost can't be called for all modes michael@0: if (gCurrentTest.effectiveHost === null) michael@0: is(gIdentityHandler._mode == gIdentityHandler.IDENTITY_MODE_UNKNOWN || gIdentityHandler._mode == gIdentityHandler.IDENTITY_MODE_CHROMEUI, true, "mode matched"); michael@0: else michael@0: is(gIdentityHandler.getEffectiveHost(), gCurrentTest.effectiveHost, "effectiveHost matches for test " + gTestDesc); michael@0: michael@0: executeSoon(nextTest); michael@0: }