/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; var data = [ { // singleword. wrong: "http://example/", fixed: "https://www.example.com/", }, { // upgrade protocol. wrong: "http://www.example.com/", fixed: "https://www.example.com/", noAlternateURI: true, }, { // no difference. wrong: "https://www.example.com/", fixed: "https://www.example.com/", noProtocolFixup: true, noAlternateURI: true, }, { // don't add prefix when there's more than one dot. wrong: "http://www.example.abc.def/", fixed: "https://www.example.abc.def/", noAlternateURI: true, }, { // http -> https. wrong: "http://www.example/", fixed: "https://www.example/", noAlternateURI: true, }, { // domain.com -> https://www.domain.com. wrong: "http://example.com/", fixed: "https://www.example.com/", }, { // example/example... -> https://www.example.com/example/ wrong: "http://example/example/", fixed: "https://www.example.com/example/", }, { // example/example/s#q -> www.example.com/example/s#q. wrong: "http://example/example/s#q", fixed: "https://www.example.com/example/s#q", }, { wrong: "http://モジラ.org", fixed: "https://www.xn--yck6dwa.org/", }, { wrong: "http://モジラ", fixed: "https://www.xn--yck6dwa.com/", }, { wrong: "http://xn--yck6dwa", fixed: "https://www.xn--yck6dwa.com/", }, { wrong: "https://モジラ.org", fixed: "https://www.xn--yck6dwa.org/", noProtocolFixup: true, }, { wrong: "https://モジラ", fixed: "https://www.xn--yck6dwa.com/", noProtocolFixup: true, }, { wrong: "https://xn--yck6dwa", fixed: "https://www.xn--yck6dwa.com/", noProtocolFixup: true, }, { // Host is https -> fixup typos of protocol wrong: "htp://https://mozilla.org", fixed: "http://https//mozilla.org", noAlternateURI: true, }, { // Host is http -> fixup typos of protocol wrong: "ttp://http://mozilla.org", fixed: "http://http//mozilla.org", noAlternateURI: true, }, { // Host is localhost -> fixup typos of protocol wrong: "htps://localhost://mozilla.org", fixed: "https://localhost//mozilla.org", noAlternateURI: true, }, { // view-source is not http/https -> error wrong: "view-source:http://example/example/example/example", reject: true, comment: "Scheme should be either http or https", }, { // file is not http/https -> error wrong: "file://http://example/example/example/example", reject: true, comment: "Scheme should be either http or https", }, { // Protocol is missing -> error wrong: "example.com", reject: true, comment: "Scheme should be either http or https", }, { // Empty input -> error wrong: "", reject: true, comment: "Should pass a non-null uri", }, ]; add_task(async function setup() { Services.prefs.setStringPref("browser.fixup.alternate.prefix", "www."); Services.prefs.setStringPref("browser.fixup.alternate.suffix", ".com"); Services.prefs.setStringPref("browser.fixup.alternate.protocol", "https"); registerCleanupFunction(function () { Services.prefs.clearUserPref("browser.fixup.alternate.prefix"); Services.prefs.clearUserPref("browser.fixup.alternate.suffix"); Services.prefs.clearUserPref("browser.fixup.alternate.protocol"); }); }); add_task(function test_default_https_pref() { for (let item of data) { if (item.reject) { Assert.throws( () => Services.uriFixup.forceHttpFixup(item.wrong), /NS_ERROR_FAILURE/, item.comment ); } else { let { fixupChangedProtocol, fixupCreatedAlternateURI, fixedURI } = Services.uriFixup.forceHttpFixup(item.wrong); Assert.equal(fixedURI.spec, item.fixed, "Specs should be the same"); Assert.equal( fixupChangedProtocol, !item.noProtocolFixup, `fixupChangedProtocol should be ${!item.noAlternateURI}` ); Assert.equal( fixupCreatedAlternateURI, !item.noAlternateURI, `fixupCreatedAlternateURI should be ${!item.limitedFixup}` ); } } });