Skip to content

Commit c97aa45

Browse files
Add priv interface loading (#391)
* POC add priv interface loading * Add global site object to load * Use processedConfig for supporting platforms
1 parent 9a7992e commit c97aa45

File tree

10 files changed

+63
-29
lines changed

10 files changed

+63
-29
lines changed

inject/android.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ function initCode () {
2525
load({
2626
platform: processedConfig.platform,
2727
trackerLookup: processedConfig.trackerLookup,
28-
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup)
28+
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup),
29+
site: processedConfig.site
2930
})
3031

3132
const messageSecret = processedConfig.messageSecret

inject/apple.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ function initCode () {
1616
load({
1717
platform: processedConfig.platform,
1818
trackerLookup: processedConfig.trackerLookup,
19-
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup)
19+
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup),
20+
site: processedConfig.site
2021
})
2122

2223
init(processedConfig)

inject/chrome-mv3.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
import { load, init, update } from '../src/content-scope-features.js'
66
import { isTrackerOrigin } from '../src/trackers'
7+
import { computeLimitedSiteObject } from '../src/utils.js'
78

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

@@ -15,6 +16,7 @@ load({
1516
},
1617
trackerLookup,
1718
documentOriginIsTracker: isTrackerOrigin(trackerLookup),
19+
site: computeLimitedSiteObject(),
1820
// @ts-expect-error https://app.asana.com/0/1201614831475344/1203979574128023/f
1921
bundledConfig: $BUNDLED_CONFIG$
2022
})

inject/chrome.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* @category Content Scope Scripts Integrations
44
*/
55
import { isTrackerOrigin } from '../src/trackers'
6+
import { computeLimitedSiteObject } from '../src/utils'
67

78
/**
89
* Inject all the overwrites into the page.
@@ -46,13 +47,15 @@ function init () {
4647
const randomPassword = '_p' + randomString()
4748
const reusableMethodName = '_rm' + randomString()
4849
const reusableSecret = '_r' + randomString()
50+
const siteObject = computeLimitedSiteObject()
4951
const initialScript = `
5052
/* global contentScopeFeatures */
5153
contentScopeFeatures.load({
5254
platform: {
5355
name: 'extension'
5456
},
5557
trackerLookup: ${JSON.stringify(trackerLookup)},
58+
site: ${JSON.stringify(siteObject)},
5659
documentOriginIsTracker: ${documentOriginIsTracker},
5760
bundledConfig: ${JSON.stringify(bundledConfig)}
5861
})

inject/integration.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ async function initCode () {
7676
load({
7777
platform: processedConfig.platform,
7878
trackerLookup: processedConfig.trackerLookup,
79-
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup)
79+
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup),
80+
site: processedConfig.site
8081
})
8182

8283
// mark this phase as loaded

inject/mozilla.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
import { load, init, update } from '../src/content-scope-features.js'
66
import { isTrackerOrigin } from '../src/trackers'
7+
import { computeLimitedSiteObject } from '../src/utils.js'
78

89
const allowedMessages = [
910
'getClickToLoadState',
@@ -28,6 +29,7 @@ function initCode () {
2829
},
2930
trackerLookup,
3031
documentOriginIsTracker: isTrackerOrigin(trackerLookup),
32+
site: computeLimitedSiteObject(),
3133
// @ts-expect-error https://app.asana.com/0/1201614831475344/1203979574128023/f
3234
bundledConfig: $BUNDLED_CONFIG$
3335
})

inject/windows.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ function initCode () {
1616
load({
1717
platform: processedConfig.platform,
1818
trackerLookup: processedConfig.trackerLookup,
19-
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup)
19+
documentOriginIsTracker: isTrackerOrigin(processedConfig.trackerLookup),
20+
site: processedConfig.site
2021
})
2122

2223
init(processedConfig)

src/content-scope-features.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const performanceMonitor = new PerformanceMonitor()
2525

2626
/**
2727
* @typedef {object} LoadArgs
28+
* @property {object} site
2829
* @property {object} platform
2930
* @property {string} platform.name
3031
* @property {string} [platform.version]

src/features/navigator-interface.js

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,39 @@
11
import { defineProperty, DDGPromise } from '../utils'
22
import ContentFeature from '../content-feature'
33

4+
function injectNavigatorInterface (args) {
5+
try {
6+
// @ts-expect-error https://app.asana.com/0/1201614831475344/1203979574128023/f
7+
if (navigator.duckduckgo) {
8+
return
9+
}
10+
if (!args.platform || !args.platform.name) {
11+
return
12+
}
13+
defineProperty(Navigator.prototype, 'duckduckgo', {
14+
value: {
15+
platform: args.platform.name,
16+
isDuckDuckGo () {
17+
return DDGPromise.resolve(true)
18+
}
19+
},
20+
enumerable: true,
21+
configurable: false,
22+
writable: false
23+
})
24+
} catch {
25+
// todo: Just ignore this exception?
26+
}
27+
}
28+
429
export default class NavigatorInterface extends ContentFeature {
5-
init (args) {
6-
try {
7-
// @ts-expect-error https://app.asana.com/0/1201614831475344/1203979574128023/f
8-
if (navigator.duckduckgo) {
9-
return
10-
}
11-
if (!args.platform || !args.platform.name) {
12-
return
13-
}
14-
defineProperty(Navigator.prototype, 'duckduckgo', {
15-
value: {
16-
platform: args.platform.name,
17-
isDuckDuckGo () {
18-
return DDGPromise.resolve(true)
19-
}
20-
},
21-
enumerable: true,
22-
configurable: false,
23-
writable: false
24-
})
25-
} catch {
26-
// todo: Just ignore this exception?
30+
load (args) {
31+
if (this.matchDomainFeatureSetting('privilegedDomains').length) {
32+
injectNavigatorInterface(args)
2733
}
2834
}
35+
36+
init (args) {
37+
injectNavigatorInterface(args)
38+
}
2939
}

src/utils.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,16 @@ export function isUnprotectedDomain (topLevelHostname, featureList) {
506506
* @property {string} sessionKey
507507
*/
508508

509+
/**
510+
* Used to inialize extension code in the load phase
511+
*/
512+
export function computeLimitedSiteObject () {
513+
const topLevelHostname = getTabHostname()
514+
return {
515+
domain: topLevelHostname
516+
}
517+
}
518+
509519
/**
510520
* Expansion point to add platform specific versioning logic
511521
* @param {UserPreferences} preferences
@@ -576,7 +586,10 @@ function isSupportedVersion (minSupportedVersion, currentVersion) {
576586
*/
577587
export function processConfig (data, userList, preferences, platformSpecificFeatures = []) {
578588
const topLevelHostname = getTabHostname()
589+
const site = computeLimitedSiteObject()
579590
const allowlisted = userList.filter(domain => domain === topLevelHostname).length > 0
591+
const remoteFeatureNames = Object.keys(data.features)
592+
const platformSpecificFeaturesNotInRemoteConfig = platformSpecificFeatures.filter((featureName) => !remoteFeatureNames.includes(featureName))
580593
/** @type {Record<string, any>} */
581594
const output = { ...preferences }
582595
if (output.platform) {
@@ -587,12 +600,11 @@ export function processConfig (data, userList, preferences, platformSpecificFeat
587600
}
588601
const enabledFeatures = computeEnabledFeatures(data, topLevelHostname, preferences.platform?.version, platformSpecificFeatures)
589602
const isBroken = isUnprotectedDomain(topLevelHostname, data.unprotectedTemporary)
590-
output.site = {
591-
domain: topLevelHostname,
603+
output.site = Object.assign(site, {
592604
isBroken,
593605
allowlisted,
594606
enabledFeatures
595-
}
607+
})
596608
// TODO
597609
output.cookie = {}
598610

0 commit comments

Comments
 (0)