@@ -6,7 +6,7 @@ import settings from './settings';
66import { emitter , TrackerBlockedEvent } from './before-request.js' ;
77import { generateDNRRule } from '@duckduckgo/ddg2dnr/lib/utils' ;
88import { NEWTAB_TRACKER_STATS_REDIRECT_PRIORITY } from '@duckduckgo/ddg2dnr/lib/rulePriorities' ;
9- import { NEWTAB_TRACKER_STATS_REDIRECT_RULE_ID } from './dnr-utils' ;
9+ import { NEWTAB_BLOCKED_STATS_REDIRECT_RULE_ID , NEWTAB_TRACKER_STATS_REDIRECT_RULE_ID } from './dnr-utils' ;
1010
1111/**
1212 * @typedef {import('./settings.js') } Settings
@@ -373,11 +373,10 @@ export class NewTabTrackerStats {
373373 * Respond to requests for `tracker-stats.html` - if we determine
374374 * that the request was from an allowed origin, re-direct the
375375 * request to the web_accessible_resource file 'html/tracker-stats.html'
376- *
377- * @param details
378376 */
379377export function mv2Redirect ( ) {
380- const incomingUrl = new URL ( constants . trackerStats . allowedPathname , constants . trackerStats . allowedOrigin ) ;
378+ const { allowedOrigin, allowedPathname, legacyPathname, redirectTarget } = constants . trackerStats ;
379+ const pathnames = [ allowedPathname , legacyPathname ] ;
381380 /**
382381 * This listener will redirect the request for tracker-stats.html
383382 * on the new tab page to our own HTML file under `web_accessible_resources`
@@ -387,39 +386,45 @@ export function mv2Redirect() {
387386 // Only do the redirect if we're being iframed into a known origin
388387 if ( details . type === 'sub_frame' ) {
389388 const parsed = new URL ( details . url ) ;
390- if ( parsed . origin === constants . trackerStats . allowedOrigin ) {
391- if ( parsed . pathname . includes ( constants . trackerStats . allowedPathname ) ) {
389+ if ( parsed . origin === allowedOrigin ) {
390+ if ( pathnames . some ( ( pathname ) => parsed . pathname . includes ( pathname ) ) ) {
392391 return {
393- redirectUrl : chrome . runtime . getURL ( constants . trackerStats . redirectTarget ) ,
392+ redirectUrl : chrome . runtime . getURL ( redirectTarget ) ,
394393 } ;
395394 }
396395 }
397396 }
398397 return undefined ;
399398 } ,
400399 {
401- urls : [ incomingUrl . toString ( ) ] ,
400+ urls : pathnames . map ( ( pathname ) => new URL ( pathname , allowedOrigin ) . toString ( ) ) ,
402401 types : [ 'sub_frame' ] ,
403402 } ,
404403 [ 'blocking' ] ,
405404 ) ;
406405}
407406
408407function mv3Redirect ( ) {
409- const targetUrl = chrome . runtime . getURL ( constants . trackerStats . redirectTarget ) ;
410- const incomingUrl = new URL ( constants . trackerStats . allowedPathname , constants . trackerStats . allowedOrigin ) ;
411- const redirectRule = generateDNRRule ( {
412- id : NEWTAB_TRACKER_STATS_REDIRECT_RULE_ID ,
413- priority : NEWTAB_TRACKER_STATS_REDIRECT_PRIORITY ,
414- actionType : 'redirect' ,
415- redirect : {
416- url : targetUrl ,
417- } ,
418- urlFilter : incomingUrl . toString ( ) ,
419- resourceTypes : [ 'sub_frame' ] ,
420- } ) ;
408+ const { allowedOrigin, allowedPathname, legacyPathname, redirectTarget } = constants . trackerStats ;
409+ const targetUrl = chrome . runtime . getURL ( redirectTarget ) ;
410+ const redirectRules = [
411+ { id : NEWTAB_BLOCKED_STATS_REDIRECT_RULE_ID , pathname : allowedPathname } ,
412+ { id : NEWTAB_TRACKER_STATS_REDIRECT_RULE_ID , pathname : legacyPathname } ,
413+ ] . map ( ( { id, pathname } ) =>
414+ generateDNRRule ( {
415+ id,
416+ priority : NEWTAB_TRACKER_STATS_REDIRECT_PRIORITY ,
417+ actionType : 'redirect' ,
418+ redirect : {
419+ url : targetUrl ,
420+ } ,
421+ urlFilter : new URL ( pathname , allowedOrigin ) . toString ( ) ,
422+ resourceTypes : [ 'sub_frame' ] ,
423+ requestDomains : [ new URL ( allowedOrigin ) . hostname ] ,
424+ } ) ,
425+ ) ;
421426 chrome . declarativeNetRequest . updateDynamicRules ( {
422- removeRuleIds : [ redirectRule . id ] ,
423- addRules : [ redirectRule ] ,
427+ removeRuleIds : redirectRules . map ( ( rule ) => rule . id ) ,
428+ addRules : redirectRules ,
424429 } ) ;
425430}
0 commit comments