Skip to content

Commit ca9f4d9

Browse files
authored
Merge branch 'duckduckgo:main' into ffaccin/ctl-mobile-block-placeholder
2 parents a2892d8 + adfe2d6 commit ca9f4d9

File tree

9 files changed

+846
-267
lines changed

9 files changed

+846
-267
lines changed

integration-test/test-pages.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ describe('Test integration pages', () => {
2424
it('Should be successful page script check', async () => {
2525
const pages = {
2626
'runtime-checks/pages/basic-run.html': 'runtime-checks/config/basic-run.json',
27+
'runtime-checks/pages/replace-element.html': 'runtime-checks/config/replace-element.json',
2728
'runtime-checks/pages/filter-props.html': 'runtime-checks/config/filter-props.json',
2829
'runtime-checks/pages/shadow-dom.html': 'runtime-checks/config/shadow-dom.json',
2930
'runtime-checks/pages/script-overload.html': 'runtime-checks/config/script-overload.json'
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"features": {
3+
"runtimeChecks": {
4+
"state": "enabled",
5+
"exceptions": [],
6+
"settings": {
7+
"taintCheck": "enabled",
8+
"matchAllDomains": "enabled",
9+
"matchAllStackDomains": "enabled",
10+
"overloadInstanceOf": "enabled",
11+
"elementRemovalTimeout": 100,
12+
"injectGlobalStyles": "enabled",
13+
"replaceElement": "enabled",
14+
"domains": [
15+
],
16+
"stackDomains": [
17+
]
18+
}
19+
}
20+
}
21+
}

integration-test/test-pages/runtime-checks/pages/basic-run.html

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,17 @@
2424
const hadInspectorNode = scriptElement === document.querySelector('ddg-runtime-checks:last-of-type');
2525
// Continue to modify the script element after it has been added to the DOM
2626
scriptElement.integrity = 'sha256-123';
27-
scriptElement.madeUpProp = 'val';
27+
scriptElement.setAttribute('madeUpAttr', 'val');
2828
const instanceofResult = scriptElement instanceof HTMLScriptElement;
29-
const scripty = document.querySelector('#scripty');
29+
const scripty = document.querySelector('script#scripty');
3030

3131
return [
3232
{ name: 'hadInspectorNode', result: hadInspectorNode, expected: true },
3333
{ name: 'expect script to match', result: scripty, expected: scriptElement },
3434
{ name: 'instanceof matches HTMLScriptElement', result: instanceofResult, expected: true },
3535
{ name: 'Element is hidden', result: window.getComputedStyle(scriptElement).display, expected: 'none' },
3636
{ name: 'scripty.integrity', result: scripty.integrity, expected: 'sha256-123' },
37-
{ name: 'scripty.madeUpProp', result: scripty.madeUpProp, expected: 'val' },
37+
{ name: 'scripty.madeUpAttr', result: scripty.getAttribute('madeUpAttr'), expected: 'val' },
3838
{ name: 'scripty.type', result: scripty.type, expected: 'application/evilscript' },
3939
{ name: 'scripty.id', result: scripty.id, expected: 'scripty' },
4040
{ name: 'script ran', result: window.scripty1Ran, expected: false }
@@ -56,12 +56,12 @@
5656

5757
const hadInspectorNode = scriptElement === document.querySelector('ddg-runtime-checks:last-of-type');
5858
// Continue to modify the script element after it has been added to the DOM
59-
scriptElement.madeUpProp = 'val';
59+
scriptElement.setAttribute('madeUpAttr', 'val');
6060
const childCount = section.children.length;
6161
scriptElement.remove();
6262
const childCountAfter = section.children.length;
6363
const instanceofResult = scriptElement instanceof HTMLScriptElement;
64-
const scripty = document.querySelector('#scriptyRemove');
64+
const scripty = document.querySelector('script#scriptyRemove');
6565
await new Promise(resolve => setTimeout(resolve, 300));
6666

6767
const htmlCache = section.innerHTML;
@@ -95,15 +95,15 @@
9595
document.body.appendChild(scriptElement);
9696
const hadInspectorNode = scriptElement === document.querySelector('ddg-runtime-checks:last-of-type');
9797
// Continue to modify the script element after it has been added to the DOM
98-
scriptElement.madeUpProp = 'val';
98+
scriptElement.setAttribute('madeUpAttr', 'val')
9999
const instanceofResult = scriptElement instanceof HTMLScriptElement;
100-
const scripty = document.querySelector('#scripty2');
100+
const scripty = document.querySelector('script#scripty2');
101101

102102
return [
103103
{ name: 'hadInspectorNode', result: hadInspectorNode, expected: true },
104104
{ name: 'expect script to match', result: scripty, expected: scriptElement },
105105
{ name: 'instanceof matches HTMLScriptElement', result: instanceofResult, expected: true },
106-
{ name: 'scripty.madeUpProp', result: scripty.madeUpProp, expected: 'val' },
106+
{ name: 'scripty.madeUpAttr', result: scripty.getAttribute('madeUpAttr'), expected: 'val' },
107107
{ name: 'scripty.type', result: scripty.type, expected: 'application/javascript' },
108108
{ name: 'scripty.id', result: scripty.id, expected: 'scripty2' },
109109
{ name: 'script ran', result: window.scripty2Ran, expected: true }
@@ -124,7 +124,7 @@
124124
}
125125
const hadInspectorNode = scriptElementArray === document.querySelector('ddg-runtime-checks:last-of-type');
126126
const instanceofResult = scriptElementArray instanceof HTMLScriptElement;
127-
const scriptyArray = document.querySelector('#scripty2a');
127+
const scriptyArray = document.querySelector('script#scripty2a');
128128

129129
return [
130130
{ name: 'hadInspectorNode', result: hadInspectorNode, expected: true },
@@ -167,15 +167,15 @@
167167
const hadInspectorNode = scriptElement === document.querySelector('ddg-runtime-checks:last-of-type');
168168
// Continue to modify the script element after it has been added to the DOM
169169
// @ts-expect-error https://app.asana.com/0/1201614831475344/1203979574128023/f
170-
scriptElement.madeUpProp = 'val';
170+
scriptElement.setAttribute('madeUpAttr', 'val');
171171
const instanceofResult = scriptElement instanceof HTMLScriptElement;
172-
const scripty = document.querySelector('#scripty3');
172+
const scripty = document.querySelector('script#scripty3');
173173

174174
return [
175175
{ name: 'listenerCount', result: listenerCount, expected: 2 },
176176
{ name: 'hadInspectorNode', result: hadInspectorNode, expected: true },
177177
{ name: 'instanceof matches HTMLScriptElement', result: instanceofResult, expected: true },
178-
{ name: 'scripty.madeUpProp', result: scripty.madeUpProp, expected: 'val' },
178+
{ name: 'scripty.madeUpAttr', result: scripty.getAttribute('madeUpAttr'), expected: 'val' },
179179
{ name: 'scripty.type', result: scripty.type, expected: 'application/javascript' },
180180
{ name: 'scripty.id', result: scripty.id, expected: 'scripty3' },
181181
{ name: 'scripty.src', result: scripty.src, expected: 'invalid://url' }
@@ -207,9 +207,9 @@
207207
document.body.appendChild(scriptElement);
208208
const hadInspectorNode = scriptElement === document.querySelector('ddg-runtime-checks:last-of-type');
209209
// Continue to modify the script element after it has been added to the DOM
210-
scriptElement.madeUpProp = 'val';
210+
scriptElement.setAttribute('madeUpAttr', 'val');
211211
const instanceofResult = scriptElement instanceof HTMLScriptElement;
212-
const scripty = document.querySelector('#scripty2');
212+
const scripty = document.querySelector('script#scripty2');
213213

214214
return [
215215
{ name: 'hadInspectorNode', result: hadInspectorNode, expected: true },
@@ -233,9 +233,9 @@
233233
document.body.appendChild(scriptElement);
234234
const hadInspectorNode = scriptElement === document.querySelector('ddg-runtime-checks:last-of-type');
235235
// Continue to modify the script element after it has been added to the DOM
236-
scriptElement.madeUpProp = 'val';
236+
scriptElement.setAttribute('madeUpAttr', 'val');
237237
const instanceofResult = scriptElement instanceof HTMLScriptElement;
238-
const scripty = document.querySelector('#scriptyNS');
238+
const scripty = document.querySelector('script#scriptyNS');
239239

240240
return [
241241
{ name: 'hadInspectorNode', result: hadInspectorNode, expected: true },

0 commit comments

Comments
 (0)