103 lines
3.6 KiB
JavaScript
103 lines
3.6 KiB
JavaScript
/* 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/. */
|
|
|
|
ChromeUtils.defineESModuleGetters(this, {
|
|
RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
|
|
});
|
|
|
|
const {
|
|
checkInputAndSerializationMatch,
|
|
checkInputAndSerializationMatchChild,
|
|
checkSerializationMissingSecondColon,
|
|
checkSerializationMissingSecondColonChild,
|
|
removeSecondColon,
|
|
} = ChromeUtils.importESModule(
|
|
"resource://testing-common/simple_unknown_uri_helpers.sys.mjs"
|
|
);
|
|
|
|
add_setup(async () => {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["network.url.useDefaultURI", true],
|
|
["network.url.simple_uri_unknown_schemes_enabled", true],
|
|
["network.url.simple_uri_unknown_schemes", "simpleprotocol,otherproto"],
|
|
],
|
|
});
|
|
});
|
|
|
|
add_task(async function test_bypass_remote_settings_static_parent() {
|
|
// sanity check
|
|
checkInputAndSerializationMatch("https://example.com/");
|
|
|
|
// nsStandardURL removes second colon when nesting protocols
|
|
checkSerializationMissingSecondColon("https://https://example.com/");
|
|
|
|
// no-bypass unknown protocol uses defaultURI
|
|
checkSerializationMissingSecondColon(
|
|
"nonsimpleprotocol://https://example.com"
|
|
);
|
|
|
|
// simpleURI keeps the second colon
|
|
// an unknown protocol in the bypass list will use simpleURI
|
|
// despite network.url.useDefaultURI being enabled
|
|
let same = "simpleprotocol://https://example.com";
|
|
checkInputAndSerializationMatch(same);
|
|
|
|
// scheme bypass from static remote-settings
|
|
checkInputAndSerializationMatch("ed2k://https://example.com");
|
|
|
|
// check the pref-specified scheme again (remote settings shouldn't overwrite)
|
|
checkInputAndSerializationMatch(same);
|
|
});
|
|
|
|
add_task(async function test_bypass_remote_settings_static_child() {
|
|
const URL_EXAMPLE = "https://example.com";
|
|
const tab = BrowserTestUtils.addTab(gBrowser, URL_EXAMPLE);
|
|
const browser = gBrowser.getBrowserForTab(tab);
|
|
await BrowserTestUtils.browserLoaded(browser);
|
|
|
|
await SpecialPowers.spawn(
|
|
browser,
|
|
|
|
[
|
|
removeSecondColon.toString(),
|
|
checkSerializationMissingSecondColonChild.toString(),
|
|
checkInputAndSerializationMatchChild.toString(),
|
|
],
|
|
(rscSource, csmscSource, ciasmcSource) => {
|
|
/* eslint-disable no-eval */
|
|
// eslint-disable-next-line no-unused-vars
|
|
let removeSecondColon = eval(`(${rscSource})`); // used by check fns
|
|
let checkSerializationMissingSecondColonChild = eval(`(${csmscSource})`);
|
|
let checkInputAndSerializationMatchChild = eval(`(${ciasmcSource})`);
|
|
/* eslint-enable no-eval */
|
|
|
|
checkInputAndSerializationMatchChild("https://example.com/");
|
|
|
|
// nsStandardURL removes second colon when nesting protocols
|
|
checkSerializationMissingSecondColonChild("https://https://example.com");
|
|
|
|
// no-bypass protocol uses defaultURI
|
|
checkSerializationMissingSecondColonChild(
|
|
"nonsimpleprotocol://https://example.com"
|
|
);
|
|
|
|
// simpleURI keeps the second colon
|
|
// an unknown protocol in the bypass list will use simpleURI
|
|
// despite network.url.useDefaultURI being enabled
|
|
let same = "simpleprotocol://https://example.com";
|
|
checkInputAndSerializationMatchChild(same);
|
|
|
|
// scheme bypass from static remote-settings
|
|
checkInputAndSerializationMatchChild("ed2k://https://example.com");
|
|
|
|
// pref-specified scheme shouldn't be overwritten by remote settings schemes
|
|
checkInputAndSerializationMatchChild(same);
|
|
}
|
|
);
|
|
|
|
// Cleanup
|
|
BrowserTestUtils.removeTab(tab);
|
|
Services.cookies.removeAll();
|
|
});
|