@@ -7,67 +7,19 @@ const { JsonSchema } = ChromeUtils.importESModule(
77 "resource://gre/modules/JsonSchema.sys.mjs"
88) ;
99
10- let stripOnShareList ;
10+ let stripOnShareMergedList , stripOnShareLGPLParams , stripOnShareList ;
1111
12- // Fetching strip on share list
13- add_setup ( async function ( ) {
14- /* globals fetch */
15- let response = await fetch (
16- "chrome://global/content/antitracking/StripOnShare.json"
17- ) ;
12+ async function fetchAndParseList ( fileName ) {
13+ let response = await fetch ( "chrome://global/content/" + fileName ) ;
1814 if ( ! response . ok ) {
1915 throw new Error (
2016 "Error fetching strip-on-share strip list" + response . status
2117 ) ;
2218 }
23- stripOnShareList = await response . json ( ) ;
24- } ) ;
25-
26- // Check if the Strip on Share list contains any duplicate params
27- add_task ( async function test_check_duplicates ( ) {
28- let stripOnShareParams = stripOnShareList ;
29-
30- const allQueryParams = [ ] ;
31-
32- for ( const domain in stripOnShareParams ) {
33- for ( let param in stripOnShareParams [ domain ] . queryParams ) {
34- allQueryParams . push ( stripOnShareParams [ domain ] . queryParams [ param ] ) ;
35- }
36- }
37-
38- let setOfParams = new Set ( allQueryParams ) ;
39-
40- if ( setOfParams . size != allQueryParams . length ) {
41- let setToCheckDupes = new Set ( ) ;
42- let dupeList = new Set ( ) ;
43- for ( const domain in stripOnShareParams ) {
44- for ( let param in stripOnShareParams [ domain ] . queryParams ) {
45- let tempParam = stripOnShareParams [ domain ] . queryParams [ param ] ;
46-
47- if ( setToCheckDupes . has ( tempParam ) ) {
48- dupeList . add ( tempParam ) ;
49- } else {
50- setToCheckDupes . add ( tempParam ) ;
51- }
52- }
53- }
54-
55- Assert . equal (
56- setOfParams . size ,
57- allQueryParams . length ,
58- "There are duplicates rules. The duplicate rules are " + [ ...dupeList ]
59- ) ;
60- }
19+ return await response . json ( ) ;
20+ }
6121
62- Assert . equal (
63- setOfParams . size ,
64- allQueryParams . length ,
65- "There are no duplicates rules."
66- ) ;
67- } ) ;
68-
69- // Validate the format of Strip on Share list with Schema
70- add_task ( async function test_check_schema ( ) {
22+ async function validateSchema ( paramList , nameOfList ) {
7123 let schema = {
7224 $schema : "http://json-schema.org/draft-07/schema#" ,
7325 type : "object" ,
@@ -88,13 +40,86 @@ add_task(async function test_check_schema() {
8840 required : [ "global" ] ,
8941 } ;
9042
91- let stripOnShareParams = stripOnShareList ;
9243 let validator = new JsonSchema . Validator ( schema ) ;
93- let { valid, errors } = validator . validate ( stripOnShareParams ) ;
44+ let { valid, errors } = validator . validate ( paramList ) ;
9445
9546 if ( ! valid ) {
96- info ( "validation errors: " + JSON . stringify ( errors , null , 2 ) ) ;
47+ info (
48+ nameOfList +
49+ " JSON contains these validation errors: " +
50+ JSON . stringify ( errors , null , 2 )
51+ ) ;
52+ }
53+
54+ Assert . ok ( valid , nameOfList + " JSON is valid" ) ;
55+ }
56+
57+ // Fetching strip on share list
58+ add_setup ( async function ( ) {
59+ /* globals fetch */
60+
61+ [ stripOnShareList , stripOnShareLGPLParams ] = await Promise . all ( [
62+ fetchAndParseList ( "antitracking/StripOnShare.json" ) ,
63+ fetchAndParseList ( "antitracking/StripOnShareLGPL.json" ) ,
64+ ] ) ;
65+
66+ stripOnShareMergedList = stripOnShareList ;
67+
68+ // Combines the mozilla licensed strip on share param
69+ // list and the LGPL licensed strip on share param list
70+ for ( const key in stripOnShareLGPLParams ) {
71+ if ( Object . hasOwn ( stripOnShareMergedList , key ) ) {
72+ stripOnShareMergedList [ key ] . queryParams . push (
73+ ...stripOnShareLGPLParams [ key ] . queryParams
74+ ) ;
75+ } else {
76+ stripOnShareMergedList [ key ] = stripOnShareLGPLParams [ key ] ;
77+ }
78+ }
79+ } ) ;
80+
81+ // Check if the Strip on Share list contains any duplicate params
82+ add_task ( async function test_check_duplicates ( ) {
83+ for ( const domain in stripOnShareMergedList ) {
84+ // Creates a set of query parameters for a given domain to check
85+ // for duplicates
86+ let setOfParams = new Set ( stripOnShareMergedList [ domain ] . queryParams ) ;
87+
88+ // If there are duplicates which is known because the sizes of the set
89+ // and array don't match, then we check which parameters are duplciates
90+ if ( setOfParams . size != stripOnShareMergedList [ domain ] . queryParams . length ) {
91+ let setToCheckDupes = new Set ( ) ;
92+ let dupeList = new Set ( ) ;
93+ for ( let param in stripOnShareMergedList [ domain ] . queryParams ) {
94+ let tempParam = stripOnShareMergedList [ domain ] . queryParams [ param ] ;
95+
96+ if ( setToCheckDupes . has ( tempParam ) ) {
97+ dupeList . add ( tempParam ) ;
98+ } else {
99+ setToCheckDupes . add ( tempParam ) ;
100+ }
101+ }
102+
103+ Assert . equal (
104+ setOfParams . size ,
105+ stripOnShareMergedList [ domain ] . queryParams . length ,
106+ "There are duplicates rules in " +
107+ domain +
108+ ". The duplicate rules are " +
109+ [ ...dupeList ]
110+ ) ;
111+ }
112+
113+ Assert . equal (
114+ setOfParams . size ,
115+ stripOnShareMergedList [ domain ] . queryParams . length ,
116+ "There are no duplicates rules."
117+ ) ;
97118 }
119+ } ) ;
98120
99- Assert . ok ( valid , "Strip on share JSON is valid" ) ;
121+ // Validate the format of Strip on Share list with Schema
122+ add_task ( async function test_check_schema ( ) {
123+ validateSchema ( stripOnShareLGPLParams , "Strip On Share LGPL" ) ;
124+ validateSchema ( stripOnShareList , "Strip On Share" ) ;
100125} ) ;
0 commit comments