93 lines
3.1 KiB
JavaScript
93 lines
3.1 KiB
JavaScript
/* vim: set ts=2 et sw=2 tw=80: */
|
|
/* 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";
|
|
|
|
const TEST_THIRD_PARTY_DOMAIN = TEST_DOMAIN_2;
|
|
const TEST_URI = TEST_DOMAIN + TEST_PATH + "file_stripping.html";
|
|
const TEST_THIRD_PARTY_URI =
|
|
TEST_THIRD_PARTY_DOMAIN + TEST_PATH + "file_stripping.html";
|
|
|
|
async function verifyQueryString(browser, expected) {
|
|
await SpecialPowers.spawn(browser, [expected], expected => {
|
|
// Strip the first question mark.
|
|
let search = content.location.search.slice(1);
|
|
|
|
is(search, expected, "The query string is correct.");
|
|
});
|
|
}
|
|
|
|
let listService;
|
|
|
|
add_setup(async function () {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["privacy.query_stripping.strip_list", "paramToStrip1 paramToStrip2"],
|
|
["privacy.query_stripping.redirect", true],
|
|
["privacy.query_stripping.enabled", true],
|
|
["privacy.query_stripping.listService.logLevel", "Debug"],
|
|
["privacy.query_stripping.strip_on_share.enabled", false],
|
|
],
|
|
});
|
|
|
|
// Get the list service so we can wait for it to be fully initialized before running tests.
|
|
listService = Cc["@mozilla.org/query-stripping-list-service;1"].getService(
|
|
Ci.nsIURLQueryStrippingListService
|
|
);
|
|
// Here we don't care about the actual enabled state, we just want any init to be done so we get reliable starting conditions.
|
|
await listService.testWaitForInit();
|
|
});
|
|
|
|
add_task(async function testRedirectWithStrippingMultipleTimes() {
|
|
info(
|
|
"Start testing query stripping for redirect link with multiple query paramaters"
|
|
);
|
|
|
|
const NESTED_QUERY = "paramToStrip1=123¶mToKeep=123";
|
|
const NESTED_QUERY_STRIPPED = "paramToKeep=123";
|
|
const INITIAL_QUERY = "paramToStrip2=123";
|
|
|
|
let encodedURI = encodeURIComponent(
|
|
`${TEST_THIRD_PARTY_URI}?${NESTED_QUERY}`
|
|
);
|
|
|
|
let testThirdPartyURI = `${TEST_URI}?redirect=${encodedURI}&${INITIAL_QUERY}`;
|
|
let testThirdPartyURIStrippedQuery = `redirect=${encodedURI}`;
|
|
let targetURI = `${TEST_THIRD_PARTY_URI}?${NESTED_QUERY_STRIPPED}`;
|
|
|
|
// 1. Open a new tab with the redirect link
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(
|
|
gBrowser,
|
|
testThirdPartyURI
|
|
);
|
|
let browser = tab.linkedBrowser;
|
|
|
|
// 2. Ensure the initial query parameter is stripped before the redirect
|
|
await verifyQueryString(browser, testThirdPartyURIStrippedQuery);
|
|
|
|
// Create the promise to wait for the location change.
|
|
let targetURLLoadedPromise = BrowserTestUtils.browserLoaded(
|
|
browser,
|
|
false,
|
|
targetURI
|
|
);
|
|
|
|
// 4. Trigger redirect by decoding the embedded URI
|
|
await SpecialPowers.spawn(browser, [], async function () {
|
|
let url = new URL(content.location);
|
|
let value = url.searchParams.get("redirect");
|
|
let decodedValue = decodeURIComponent(value);
|
|
|
|
content.location.href = decodedValue;
|
|
});
|
|
|
|
// 5. Wait for the location change
|
|
await targetURLLoadedPromise;
|
|
|
|
// 6. Verify that the query parameters in the nested link have been stripped
|
|
await verifyQueryString(browser, NESTED_QUERY_STRIPPED);
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|