diff options
Diffstat (limited to 'toolkit/components/antitracking/URLQueryStrippingListService.sys.mjs')
-rw-r--r-- | toolkit/components/antitracking/URLQueryStrippingListService.sys.mjs | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/toolkit/components/antitracking/URLQueryStrippingListService.sys.mjs b/toolkit/components/antitracking/URLQueryStrippingListService.sys.mjs index baaa9f3824..d9c1995821 100644 --- a/toolkit/components/antitracking/URLQueryStrippingListService.sys.mjs +++ b/toolkit/components/antitracking/URLQueryStrippingListService.sys.mjs @@ -31,10 +31,9 @@ XPCOMUtils.defineLazyPreferenceGetter( PREF_STRIP_IS_TEST ); -// Lazy getter for the strip-on-share strip list. -ChromeUtils.defineLazyGetter(lazy, "StripOnShareList", async () => { +async function fetchAndParseList(fileName) { let response = await fetch( - "chrome://global/content/antitracking/StripOnShare.json" + "chrome://global/content/antitracking/" + fileName ); if (!response.ok) { lazy.logger.error( @@ -44,7 +43,48 @@ ChromeUtils.defineLazyGetter(lazy, "StripOnShareList", async () => { "Error fetching strip-on-share strip list" + response.status ); } - return response.json(); + return await response.json(); +} + +// Lazy getter for the strip-on-share strip list. +ChromeUtils.defineLazyGetter(lazy, "StripOnShareList", async () => { + let [stripOnShareList, stripOnShareLGPLParams] = await Promise.all([ + fetchAndParseList("StripOnShare.json"), + fetchAndParseList("StripOnShareLGPL.json"), + ]); + + if (!stripOnShareList || !stripOnShareLGPLParams) { + lazy.logger.error("Error strip-on-share strip list were not loaded"); + throw new Error("Error fetching strip-on-share strip list were not loaded"); + } + + // Combines the mozilla licensed strip on share param + // list and the LGPL licensed strip on share param list + for (const key in stripOnShareLGPLParams) { + if (Object.hasOwn(stripOnShareList, key)) { + stripOnShareList[key].queryParams.push( + ...stripOnShareLGPLParams[key].queryParams + ); + + stripOnShareList[key].topLevelSites.push( + ...stripOnShareLGPLParams[key].topLevelSites + ); + + // Removes duplicates topLevelSitres + stripOnShareList[key].topLevelSites = [ + ...new Set(stripOnShareList[key].topLevelSites), + ]; + + // Removes duplicates queryParams + stripOnShareList[key].queryParams = [ + ...new Set(stripOnShareList[key].queryParams), + ]; + } else { + stripOnShareList[key] = stripOnShareLGPLParams[key]; + } + } + + return stripOnShareList; }); export class URLQueryStrippingListService { @@ -142,11 +182,11 @@ export class URLQueryStrippingListService { } // Get the list from pref. - this._onPrefUpdate( + await this._onPrefUpdate( PREF_STRIP_LIST_NAME, Services.prefs.getStringPref(PREF_STRIP_LIST_NAME, "") ); - this._onPrefUpdate( + await this._onPrefUpdate( PREF_ALLOW_LIST_NAME, Services.prefs.getStringPref(PREF_ALLOW_LIST_NAME, "") ); @@ -219,7 +259,7 @@ export class URLQueryStrippingListService { this._notifyObservers(); } - _onPrefUpdate(pref, value) { + async _onPrefUpdate(pref, value) { switch (pref) { case PREF_STRIP_LIST_NAME: this.prefStripList = new Set(value ? value.split(" ") : []); @@ -235,7 +275,7 @@ export class URLQueryStrippingListService { } this._notifyObservers(); - this._notifyStripOnShareObservers(); + await this._notifyStripOnShareObservers(); } _getListFromSharedData() { |