diff options
Diffstat (limited to 'toolkit/components/antitracking/test/xpcshell/test_validate_strip_on_share_list.js')
-rw-r--r-- | toolkit/components/antitracking/test/xpcshell/test_validate_strip_on_share_list.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/toolkit/components/antitracking/test/xpcshell/test_validate_strip_on_share_list.js b/toolkit/components/antitracking/test/xpcshell/test_validate_strip_on_share_list.js new file mode 100644 index 0000000000..48a0bd4682 --- /dev/null +++ b/toolkit/components/antitracking/test/xpcshell/test_validate_strip_on_share_list.js @@ -0,0 +1,100 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const { JsonSchema } = ChromeUtils.importESModule( + "resource://gre/modules/JsonSchema.sys.mjs" +); + +let stripOnShareList; + +// Fetching strip on share list +add_setup(async function () { + /* globals fetch */ + let response = await fetch( + "chrome://global/content/antitracking/StripOnShare.json" + ); + if (!response.ok) { + throw new Error( + "Error fetching strip-on-share strip list" + response.status + ); + } + stripOnShareList = await response.json(); +}); + +// Check if the Strip on Share list contains any duplicate params +add_task(async function test_check_duplicates() { + let stripOnShareParams = stripOnShareList; + + const allQueryParams = []; + + for (const domain in stripOnShareParams) { + for (let param in stripOnShareParams[domain].queryParams) { + allQueryParams.push(stripOnShareParams[domain].queryParams[param]); + } + } + + let setOfParams = new Set(allQueryParams); + + if (setOfParams.size != allQueryParams.length) { + let setToCheckDupes = new Set(); + let dupeList = new Set(); + for (const domain in stripOnShareParams) { + for (let param in stripOnShareParams[domain].queryParams) { + let tempParam = stripOnShareParams[domain].queryParams[param]; + + if (setToCheckDupes.has(tempParam)) { + dupeList.add(tempParam); + } else { + setToCheckDupes.add(tempParam); + } + } + } + + Assert.equal( + setOfParams.size, + allQueryParams.length, + "There are duplicates rules. The duplicate rules are " + [...dupeList] + ); + } + + Assert.equal( + setOfParams.size, + allQueryParams.length, + "There are no duplicates rules." + ); +}); + +// Validate the format of Strip on Share list with Schema +add_task(async function test_check_schema() { + let schema = { + $schema: "http://json-schema.org/draft-07/schema#", + type: "object", + properties: { + type: "object", + properties: { + queryParams: { + type: "array", + items: { type: "string" }, + }, + topLevelSites: { + type: "array", + items: { type: "string" }, + }, + }, + required: ["queryParams", "topLevelSites"], + }, + required: ["global"], + }; + + let stripOnShareParams = stripOnShareList; + let validator = new JsonSchema.Validator(schema); + let { valid, errors } = validator.validate(stripOnShareParams); + + if (!valid) { + info("validation errors: " + JSON.stringify(errors, null, 2)); + } + + Assert.ok(valid, "Strip on share JSON is valid"); +}); |