зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1706608
- Part 3: Add a test for URLQueryStrippingListService. r=pbz
Differential Revision: https://phabricator.services.mozilla.com/D116600
This commit is contained in:
Родитель
2a0c743211
Коммит
596be2baad
|
@ -129,6 +129,7 @@ support-files = file_stripping.html
|
||||||
skip-if =
|
skip-if =
|
||||||
fission && os == "linux" && asan # Bug 1713909 - new Fission platform triage
|
fission && os == "linux" && asan # Bug 1713909 - new Fission platform triage
|
||||||
support-files = file_stripping.html
|
support-files = file_stripping.html
|
||||||
|
[browser_urlQueryStrippingListService.js]
|
||||||
[browser_staticPartition_cache.js]
|
[browser_staticPartition_cache.js]
|
||||||
support-files =
|
support-files =
|
||||||
!/browser/components/originattributes/test/browser/file_cache.html
|
!/browser/components/originattributes/test/browser/file_cache.html
|
||||||
|
|
|
@ -0,0 +1,208 @@
|
||||||
|
/* 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/. */
|
||||||
|
|
||||||
|
/* import-globals-from head.js */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const { RemoteSettings } = ChromeUtils.import(
|
||||||
|
"resource://services-settings/remote-settings.js"
|
||||||
|
);
|
||||||
|
|
||||||
|
XPCOMUtils.defineLazyServiceGetter(
|
||||||
|
this,
|
||||||
|
"urlQueryStrippingListService",
|
||||||
|
"@mozilla.org/query-stripping-list-service;1",
|
||||||
|
"nsIURLQueryStrippingListService"
|
||||||
|
);
|
||||||
|
|
||||||
|
const COLLECTION_NAME = "query-stripping";
|
||||||
|
|
||||||
|
const TEST_URI = TEST_DOMAIN + TEST_PATH + "empty.html";
|
||||||
|
|
||||||
|
// The Update Event here is used to listen the observer from the
|
||||||
|
// URLQueryStrippingListService. We need to use the event here so that the same
|
||||||
|
// observer can be called multiple times.
|
||||||
|
class UpdateEvent extends EventTarget {}
|
||||||
|
function waitForEvent(element, eventName) {
|
||||||
|
return BrowserTestUtils.waitForEvent(element, eventName).then(e => e.detail);
|
||||||
|
}
|
||||||
|
|
||||||
|
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.");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function check(query, expected) {
|
||||||
|
// Open a tab with the query string.
|
||||||
|
let testURI = TEST_URI + "?" + query;
|
||||||
|
|
||||||
|
await BrowserTestUtils.withNewTab(testURI, async browser => {
|
||||||
|
// Verify if the query string is expected in the new tab.
|
||||||
|
await verifyQueryString(browser, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
add_task(async function testPrefSettings() {
|
||||||
|
// Enable query stripping and clear the prefs at the beginning.
|
||||||
|
await SpecialPowers.pushPrefEnv({
|
||||||
|
set: [
|
||||||
|
["privacy.query_stripping.enabled", true],
|
||||||
|
["privacy.query_stripping.strip_list", ""],
|
||||||
|
["privacy.query_stripping.allow_list", ""],
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test if the observer been called when adding to the service.
|
||||||
|
let updateEvent = new UpdateEvent();
|
||||||
|
let obs = (stripList, allowList) => {
|
||||||
|
let event = new CustomEvent("update", { detail: { stripList, allowList } });
|
||||||
|
updateEvent.dispatchEvent(event);
|
||||||
|
};
|
||||||
|
let promise = waitForEvent(updateEvent, "update");
|
||||||
|
urlQueryStrippingListService.registerAndRunObserver(obs);
|
||||||
|
let lists = await promise;
|
||||||
|
is(lists.stripList, "", "No strip list at the beginning.");
|
||||||
|
is(lists.allowList, "", "No allow list at the beginning.");
|
||||||
|
|
||||||
|
// Verify that no query stripping happens.
|
||||||
|
await check("pref_query1=123", "pref_query1=123");
|
||||||
|
await check("pref_query2=456", "pref_query2=456");
|
||||||
|
|
||||||
|
// Set pref for strip list
|
||||||
|
promise = waitForEvent(updateEvent, "update");
|
||||||
|
await SpecialPowers.pushPrefEnv({
|
||||||
|
set: [["privacy.query_stripping.strip_list", "pref_query1 pref_query2"]],
|
||||||
|
});
|
||||||
|
lists = await promise;
|
||||||
|
|
||||||
|
is(
|
||||||
|
lists.stripList,
|
||||||
|
"pref_query1 pref_query2",
|
||||||
|
"There should be strip list entries."
|
||||||
|
);
|
||||||
|
is(lists.allowList, "", "There should be no allow list entries.");
|
||||||
|
|
||||||
|
// The query string should be stripped.
|
||||||
|
await check("pref_query1=123", "");
|
||||||
|
await check("pref_query2=456", "");
|
||||||
|
|
||||||
|
// Set the pref for allow list.
|
||||||
|
promise = waitForEvent(updateEvent, "update");
|
||||||
|
await SpecialPowers.pushPrefEnv({
|
||||||
|
set: [["privacy.query_stripping.allow_list", "example.net"]],
|
||||||
|
});
|
||||||
|
lists = await promise;
|
||||||
|
|
||||||
|
is(
|
||||||
|
lists.stripList,
|
||||||
|
"pref_query1 pref_query2",
|
||||||
|
"There should be strip list entires."
|
||||||
|
);
|
||||||
|
is(lists.allowList, "example.net", "There should be one allow list entry.");
|
||||||
|
|
||||||
|
// The query string shouldn't be stripped because this host is in allow list.
|
||||||
|
await check("pref_query1=123", "pref_query1=123");
|
||||||
|
await check("pref_query2=123", "pref_query2=123");
|
||||||
|
|
||||||
|
urlQueryStrippingListService.unregisterObserver(obs);
|
||||||
|
|
||||||
|
// Clear prefs.
|
||||||
|
SpecialPowers.flushPrefEnv();
|
||||||
|
});
|
||||||
|
|
||||||
|
add_task(async function testRemoteSettings() {
|
||||||
|
// Enable query stripping and clear the prefs at the beginning.
|
||||||
|
await SpecialPowers.pushPrefEnv({
|
||||||
|
set: [
|
||||||
|
["privacy.query_stripping.enabled", true],
|
||||||
|
["privacy.query_stripping.strip_list", ""],
|
||||||
|
["privacy.query_stripping.allow_list", ""],
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
// Add initial empty record.
|
||||||
|
let db = await RemoteSettings(COLLECTION_NAME).db;
|
||||||
|
await db.importChanges({}, 42, []);
|
||||||
|
|
||||||
|
// Test if the observer been called when adding to the service.
|
||||||
|
let updateEvent = new UpdateEvent();
|
||||||
|
let obs = (stripList, allowList) => {
|
||||||
|
let event = new CustomEvent("update", { detail: { stripList, allowList } });
|
||||||
|
updateEvent.dispatchEvent(event);
|
||||||
|
};
|
||||||
|
let promise = waitForEvent(updateEvent, "update");
|
||||||
|
urlQueryStrippingListService.registerAndRunObserver(obs);
|
||||||
|
let lists = await promise;
|
||||||
|
is(lists.stripList, "", "No strip list at the beginning.");
|
||||||
|
is(lists.allowList, "", "No allow list at the beginning.");
|
||||||
|
|
||||||
|
// Verify that no query stripping happens.
|
||||||
|
await check("remote_query1=123", "remote_query1=123");
|
||||||
|
await check("remote_query2=456", "remote_query2=456");
|
||||||
|
|
||||||
|
// Set record for strip list.
|
||||||
|
promise = waitForEvent(updateEvent, "update");
|
||||||
|
await RemoteSettings(COLLECTION_NAME).emit("sync", {
|
||||||
|
data: {
|
||||||
|
current: [
|
||||||
|
{
|
||||||
|
id: "1",
|
||||||
|
last_modified: 100000000000000000001,
|
||||||
|
stripList: ["remote_query1", "remote_query2"],
|
||||||
|
allowList: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
lists = await promise;
|
||||||
|
|
||||||
|
is(
|
||||||
|
lists.stripList,
|
||||||
|
"remote_query1 remote_query2",
|
||||||
|
"There should be strip list entries."
|
||||||
|
);
|
||||||
|
is(lists.allowList, "", "There should be no allow list entries.");
|
||||||
|
|
||||||
|
// The query string should be stripped.
|
||||||
|
await check("remote_query1=123", "");
|
||||||
|
await check("remote_query2=456", "");
|
||||||
|
|
||||||
|
// Set record for strip list and allow list.
|
||||||
|
promise = waitForEvent(updateEvent, "update");
|
||||||
|
await RemoteSettings(COLLECTION_NAME).emit("sync", {
|
||||||
|
data: {
|
||||||
|
current: [
|
||||||
|
{
|
||||||
|
id: "2",
|
||||||
|
last_modified: 100000000000000000002,
|
||||||
|
stripList: ["remote_query1", "remote_query2"],
|
||||||
|
allowList: ["example.net"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
lists = await promise;
|
||||||
|
|
||||||
|
is(
|
||||||
|
lists.stripList,
|
||||||
|
"remote_query1 remote_query2",
|
||||||
|
"There should be strip list entries."
|
||||||
|
);
|
||||||
|
is(lists.allowList, "example.net", "There should be one allow list entry.");
|
||||||
|
|
||||||
|
// The query string shouldn't be stripped because this host is in allow list.
|
||||||
|
await check("remote_query1=123", "remote_query1=123");
|
||||||
|
await check("remote_query2=123", "remote_query2=123");
|
||||||
|
|
||||||
|
urlQueryStrippingListService.unregisterObserver(obs);
|
||||||
|
|
||||||
|
// Clear the remote settings.
|
||||||
|
await db.clear();
|
||||||
|
});
|
Загрузка…
Ссылка в новой задаче