Skip to content

Commit e7e6721

Browse files
committed
refactor: parameterize trackerLookup
1 parent a4840a2 commit e7e6721

File tree

13 files changed

+70
-40
lines changed

13 files changed

+70
-40
lines changed

injected/entry-points/android.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
*/
44
import { load, init } from '../src/content-scope-features.js';
55
import { processConfig, isGloballyDisabled } from './../src/utils';
6-
import { isTrackerOrigin } from '../src/trackers';
76
import { AndroidMessagingConfig } from '../../messaging/index.js';
87

98
function initCode() {
@@ -31,10 +30,14 @@ function initCode() {
3130
debug: processedConfig.debug,
3231
});
3332

33+
const importConfig = {
34+
trackerLookup: import.meta.trackerLookup,
35+
injectName: import.meta.injectName,
36+
};
37+
3438
load({
3539
platform: processedConfig.platform,
36-
trackerLookup: processedConfig.trackerLookup,
37-
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup),
40+
importConfig,
3841
site: processedConfig.site,
3942
bundledConfig: processedConfig.bundledConfig,
4043
messagingConfig: processedConfig.messagingConfig,

injected/entry-points/apple.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
*/
44
import { load, init } from '../src/content-scope-features.js';
55
import { processConfig, isGloballyDisabled, platformSpecificFeatures } from './../src/utils';
6-
import { isTrackerOrigin } from '../src/trackers';
76
import { WebkitMessagingConfig, TestTransportConfig } from '../../messaging/index.js';
87

98
function initCode() {
@@ -42,10 +41,14 @@ function initCode() {
4241
});
4342
}
4443

44+
const importConfig = {
45+
trackerLookup: import.meta.trackerLookup,
46+
injectName: import.meta.injectName,
47+
};
48+
4549
load({
4650
platform: processedConfig.platform,
47-
trackerLookup: processedConfig.trackerLookup,
48-
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup),
51+
importConfig,
4952
site: processedConfig.site,
5053
bundledConfig: processedConfig.bundledConfig,
5154
messagingConfig: processedConfig.messagingConfig,

injected/entry-points/extension-mv3.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,20 @@
22
* @module main world integration for Chrome MV3 and Firefox (enhanced) MV2
33
*/
44
import { load, init, update } from '../src/content-scope-features.js';
5-
import { isTrackerOrigin } from '../src/trackers.js';
65
import { computeLimitedSiteObject } from '../src/utils.js';
76

87
const secret = (crypto.getRandomValues(new Uint32Array(1))[0] / 2 ** 32).toString().replace('0.', '');
98

10-
const trackerLookup = import.meta.trackerLookup;
9+
const importConfig = {
10+
trackerLookup: import.meta.trackerLookup,
11+
injectName: import.meta.injectName,
12+
};
1113

1214
load({
1315
platform: {
1416
name: 'extension',
1517
},
16-
trackerLookup,
17-
documentOriginIsTracker: isTrackerOrigin(trackerLookup),
18+
importConfig,
1819
site: computeLimitedSiteObject(),
1920
// @ts-expect-error https://app.asana.com/0/1201614831475344/1203979574128023/f
2021
bundledConfig: $BUNDLED_CONFIG$,

injected/entry-points/integration.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { load, init } from '../src/content-scope-features.js';
2-
import { isTrackerOrigin } from '../src/trackers';
32
import { TestTransportConfig } from '../../messaging/index.js';
43
function getTopLevelURL() {
54
try {
@@ -84,11 +83,16 @@ async function initCode() {
8483
};
8584
},
8685
});
86+
87+
const importConfig = {
88+
trackerLookup: processedConfig.trackerLookup,
89+
injectName: import.meta.injectName,
90+
};
91+
8792
load({
8893
// @ts-expect-error Types of property 'name' are incompatible.
8994
platform: processedConfig.platform,
90-
trackerLookup: processedConfig.trackerLookup,
91-
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup),
95+
importConfig,
9296
site: processedConfig.site,
9397
messagingConfig: processedConfig.messagingConfig,
9498
});

injected/entry-points/windows.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
*/
44
import { load, init } from '../src/content-scope-features.js';
55
import { processConfig, isGloballyDisabled, platformSpecificFeatures } from './../src/utils';
6-
import { isTrackerOrigin } from '../src/trackers';
76
import { WindowsMessagingConfig } from '../../messaging/index.js';
87

98
function initCode() {
@@ -29,10 +28,14 @@ function initCode() {
2928
},
3029
});
3130

31+
const importConfig = {
32+
trackerLookup: processedConfig.trackerLookup,
33+
injectName: import.meta.injectName,
34+
};
35+
3236
load({
3337
platform: processedConfig.platform,
34-
trackerLookup: processedConfig.trackerLookup,
35-
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup),
38+
importConfig,
3639
site: processedConfig.site,
3740
bundledConfig: processedConfig.bundledConfig,
3841
messagingConfig: processedConfig.messagingConfig,

injected/src/content-feature.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { defineProperty, shimInterface, shimProperty, wrapMethod, wrapProperty,
66
import { Proxy, Reflect } from './captured-globals.js';
77
import { Messaging, MessagingContext } from '../../messaging/index.js';
88
import { extensionConstructMessagingConfig } from './sendmessage-transport.js';
9+
import { isTrackerOrigin } from './trackers.js';
910

1011
/**
1112
* @typedef {object} AssetConfig
@@ -40,6 +41,9 @@ class ConfigParser {
4041
/** @type {boolean | undefined} */
4142
#documentOriginIsTracker;
4243

44+
/** @type {string} */
45+
#injectName;
46+
4347
/**
4448
* @param {any} name
4549
*/
@@ -53,14 +57,15 @@ class ConfigParser {
5357
initLoadArgs(loadArgs) {
5458
const { bundledConfig, site, platform } = loadArgs;
5559
this.#bundledConfig = bundledConfig;
60+
this.#injectName = loadArgs.importConfig.injectName;
5661
// If we have a bundled config, treat it as a regular config
5762
// This will be overriden by the remote config if it is available
5863
if (this.#bundledConfig) {
5964
const enabledFeatures = computeEnabledFeatures(bundledConfig, site.domain, platform.version);
6065
this.#featureSettings = parseFeatureSettings(bundledConfig, enabledFeatures);
6166
}
62-
this.#trackerLookup = loadArgs.trackerLookup;
63-
this.#documentOriginIsTracker = loadArgs.documentOriginIsTracker;
67+
this.#trackerLookup = loadArgs.importConfig.trackerLookup;
68+
this.#documentOriginIsTracker = isTrackerOrigin(this.#trackerLookup);
6469
}
6570

6671
/**
@@ -197,6 +202,13 @@ class ConfigParser {
197202
set documentOriginIsTracker(value) {
198203
this.#documentOriginIsTracker = value;
199204
}
205+
206+
/**
207+
* @returns {string}
208+
*/
209+
get injectName() {
210+
return this.#injectName;
211+
}
200212
}
201213

202214
export default class ContentFeature extends ConfigParser {
@@ -252,8 +264,7 @@ export default class ContentFeature extends ConfigParser {
252264
* @return {MessagingContext}
253265
*/
254266
_createMessagingContext() {
255-
const injectName = import.meta.injectName;
256-
const contextName = injectName === 'apple-isolated' ? 'contentScopeScriptsIsolated' : 'contentScopeScripts';
267+
const contextName = this.injectName === 'apple-isolated' ? 'contentScopeScriptsIsolated' : 'contentScopeScripts';
257268

258269
return new MessagingContext({
259270
context: contextName,
@@ -432,7 +443,7 @@ export default class ContentFeature extends ConfigParser {
432443
* @param {import('./wrapper-utils').DefineInterfaceOptions} options
433444
*/
434445
shimInterface(interfaceName, ImplClass, options) {
435-
return shimInterface(interfaceName, ImplClass, options, this.defineProperty.bind(this));
446+
return shimInterface(interfaceName, ImplClass, options, this.defineProperty.bind(this), this.injectName);
436447
}
437448

438449
/**
@@ -447,6 +458,6 @@ export default class ContentFeature extends ConfigParser {
447458
* @param {boolean} [readOnly] - whether the property should be read-only (default: false)
448459
*/
449460
shimProperty(instanceHost, instanceProp, implInstance, readOnly = false) {
450-
return shimProperty(instanceHost, instanceProp, implInstance, readOnly, this.defineProperty.bind(this));
461+
return shimProperty(instanceHost, instanceProp, implInstance, readOnly, this.defineProperty.bind(this), this.injectName);
451462
}
452463
}

injected/src/content-scope-features.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@ const isHTMLDocument =
2222
* @typedef {object} LoadArgs
2323
* @property {import('./content-feature').Site} site
2424
* @property {import('./utils.js').Platform} platform
25-
* @property {boolean} documentOriginIsTracker
2625
* @property {import('./utils.js').RemoteConfig} bundledConfig
27-
* @property {string} [injectName]
28-
* @property {object} trackerLookup - provided currently only by the extension
26+
* @property {object} importConfig - contains trackerLookup and injectName, trackerLookup is provided currently only by the extension
2927
* @property {import('@duckduckgo/messaging').MessagingConfig} [messagingConfig]
3028
* @property {string} [messageSecret] - optional, used in the messageBridge creation
3129
*/
@@ -39,7 +37,7 @@ export function load(args) {
3937
return;
4038
}
4139

42-
const featureNames = typeof import.meta.injectName === 'string' ? platformSupport[import.meta.injectName] : [];
40+
const featureNames = typeof args.importConfig.injectName === 'string' ? platformSupport[args.importConfig.injectName] : [];
4341

4442
for (const featureName of featureNames) {
4543
const ContentFeature = platformFeatures['ddg_feature_' + featureName];

injected/src/features/element-hiding.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,12 +320,10 @@ export default class ElementHiding extends ContentFeature {
320320

321321
// determine whether strict hide rules should be injected as a style tag
322322
if (shouldInjectStyleTag) {
323-
// @ts-expect-error: Accessing private method
324323
shouldInjectStyleTag = this.matchDomainFeatureSetting('styleTagExceptions').length === 0;
325324
}
326325

327326
// collect all matching rules for domain
328-
// @ts-expect-error: Accessing private method
329327
const activeDomainRules = this.matchDomainFeatureSetting('domains').flatMap((item) => item.rules);
330328

331329
const overrideRules = activeDomainRules.filter((rule) => {

injected/src/features/navigator-interface.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { createPageWorldBridge } from './message-bridge/create-page-world-bridge
44

55
export default class NavigatorInterface extends ContentFeature {
66
load(args) {
7-
// @ts-expect-error: Accessing private method
87
if (this.matchDomainFeatureSetting('privilegedDomains').length) {
98
this.injectNavigatorInterface(args);
109
}

injected/src/features/web-compat.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ export class WebCompat extends ContentFeature {
463463

464464
mediaSessionFix() {
465465
try {
466-
if (window.navigator.mediaSession && import.meta.injectName !== 'integration') {
466+
if (window.navigator.mediaSession && this.injectName !== 'integration') {
467467
return;
468468
}
469469

@@ -509,7 +509,7 @@ export class WebCompat extends ContentFeature {
509509
presentationFix() {
510510
try {
511511
// @ts-expect-error due to: Property 'presentation' does not exist on type 'Navigator'
512-
if (window.navigator.presentation && import.meta.injectName !== 'integration') {
512+
if (window.navigator.presentation && this.injectName !== 'integration') {
513513
return;
514514
}
515515

injected/src/utils.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,6 @@ export function processConfig(data, userList, preferences, platformSpecificFeatu
642642

643643
// Copy feature settings from remote config to preferences object
644644
output.featureSettings = parseFeatureSettings(data, enabledFeatures);
645-
output.trackerLookup = import.meta.trackerLookup;
646645
output.bundledConfig = data;
647646

648647
return output;

injected/src/wrapper-utils.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,8 @@ export function wrapMethod(object, propertyName, wrapperFn, definePropertyFn) {
194194
* @param {DefineInterfaceOptions} options - options for defining the interface
195195
* @param {DefinePropertyFn} definePropertyFn - function to use for defining the property
196196
*/
197-
export function shimInterface(interfaceName, ImplClass, options, definePropertyFn) {
198-
if (import.meta.injectName === 'integration') {
197+
export function shimInterface(interfaceName, ImplClass, options, definePropertyFn, injectName) {
198+
if (injectName === 'integration') {
199199
if (!globalThis.origInterfaceDescriptors) globalThis.origInterfaceDescriptors = {};
200200
const descriptor = Object.getOwnPropertyDescriptor(globalThis, interfaceName);
201201
globalThis.origInterfaceDescriptors[interfaceName] = descriptor;
@@ -270,7 +270,7 @@ export function shimInterface(interfaceName, ImplClass, options, definePropertyF
270270
}
271271
}
272272

273-
if (import.meta.injectName === 'integration') {
273+
if (injectName === 'integration') {
274274
// mark the class as a shimmed class
275275
// we do it only in test mode, to avoid potential side effects in production. See the playwright test in integration-test/test-pages/webcompat/pages/shims.html
276276
definePropertyFn(ImplClass, ddgShimMark, {
@@ -305,11 +305,11 @@ export function shimInterface(interfaceName, ImplClass, options, definePropertyF
305305
* @param {boolean} readOnly - whether the property should be read-only
306306
* @param {DefinePropertyFn} definePropertyFn - function to use for defining the property
307307
*/
308-
export function shimProperty(baseObject, propertyName, implInstance, readOnly, definePropertyFn) {
308+
export function shimProperty(baseObject, propertyName, implInstance, readOnly, definePropertyFn, injectName) {
309309
// @ts-expect-error - implInstance is a class instance
310310
const ImplClass = implInstance.constructor;
311311

312-
if (import.meta.injectName === 'integration') {
312+
if (injectName === 'integration') {
313313
if (!globalThis.origPropDescriptors) globalThis.origPropDescriptors = [];
314314
const descriptor = Object.getOwnPropertyDescriptor(baseObject, propertyName);
315315
globalThis.origPropDescriptors.push([baseObject, propertyName, descriptor]);

0 commit comments

Comments
 (0)