@ai-ecoverse/slicc-browsers 1.8.4 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -8
- package/catalog.json +7 -0
- package/extension-world.mjs +316 -0
- package/guard-runner.mjs +17 -0
- package/guard-vectors.json +1149 -238
- package/package.json +7 -6
- package/protected.json +220 -0
- package/schema/guard-vectors.schema.json +34 -2
package/guard-vectors.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"setVersion": "1.
|
|
3
|
+
"setVersion": "1.9.0",
|
|
4
4
|
"sources": [
|
|
5
5
|
{
|
|
6
6
|
"repo": "ai-ecoverse/slicc-cli",
|
|
@@ -61,6 +61,14 @@
|
|
|
61
61
|
"url": "chrome://settings/",
|
|
62
62
|
"description": "Chrome's settings page, a privileged chrome: page"
|
|
63
63
|
},
|
|
64
|
+
"network-error": {
|
|
65
|
+
"url": "http://nonexistent.invalid/",
|
|
66
|
+
"description": "an ordinary URL with a failing DNS lookup, used on both reachability legs"
|
|
67
|
+
},
|
|
68
|
+
"chrome-search": {
|
|
69
|
+
"url": "chrome-search://most-visited/",
|
|
70
|
+
"description": "Chrome's internal search UI, including NTP search-provider resources"
|
|
71
|
+
},
|
|
64
72
|
"chrome-passwords": {
|
|
65
73
|
"url": "chrome://password-manager/",
|
|
66
74
|
"description": "Chrome's password manager, a privileged chrome: page"
|
|
@@ -82,6 +90,7 @@
|
|
|
82
90
|
"autoAttach": "Target.setAutoAttach, the children steps and child sessions",
|
|
83
91
|
"browserSession": "CDP calls on the browser session",
|
|
84
92
|
"browserContexts": "Target.createBrowserContext and Target.disposeBrowserContext",
|
|
93
|
+
"extensionWorld": "a browser hosting a foreign content-script extension isolated world on the ordinary fixture page",
|
|
85
94
|
"chromeUrlsAttach": "attaching to and driving chrome:// pages, which CDP over a DevTools port can and chrome.debugger can't"
|
|
86
95
|
},
|
|
87
96
|
"placeholders": {
|
|
@@ -94,6 +103,7 @@
|
|
|
94
103
|
"own": "the own target's origin, which is {client}",
|
|
95
104
|
"ordinary": "the ordinary origin the run starts from",
|
|
96
105
|
"ordinary-same-site": "the ordinary-same-site origin",
|
|
106
|
+
"network-error": "the ordinary failing-network URL, unchanged on the control",
|
|
97
107
|
"client": "the client page's origin, which the runner maps",
|
|
98
108
|
"cross": "another ordinary origin, cross-site with {ordinary}",
|
|
99
109
|
"plain": "an ordinary destination origin, the control target",
|
|
@@ -109,272 +119,803 @@
|
|
|
109
119
|
},
|
|
110
120
|
"vectors": [
|
|
111
121
|
{
|
|
112
|
-
"id": "
|
|
122
|
+
"id": "C9.world-hidden",
|
|
113
123
|
"family": "C",
|
|
114
124
|
"kind": "cdp",
|
|
115
125
|
"scope": "any",
|
|
126
|
+
"defaultContext": true,
|
|
116
127
|
"setup": [
|
|
117
|
-
{
|
|
118
|
-
"text": "an allowed tab with an init script that beacons its origin"
|
|
119
|
-
},
|
|
120
128
|
{
|
|
121
129
|
"page": "tab",
|
|
122
|
-
"url": "{ordinary}/
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
"cdp": "Page.enable"
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
"cdp": "Page.addScriptToEvaluateOnNewDocument",
|
|
129
|
-
"params": {
|
|
130
|
-
"source": "{beacon}"
|
|
131
|
-
},
|
|
132
|
-
"refusable": true,
|
|
133
|
-
"refusal": {
|
|
134
|
-
"match": "refused"
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"cdp": "Page.setBypassCSP",
|
|
139
|
-
"params": {
|
|
140
|
-
"enabled": true
|
|
141
|
-
},
|
|
142
|
-
"refusable": true,
|
|
143
|
-
"refusal": {
|
|
144
|
-
"match": "refused"
|
|
145
|
-
}
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
"page": "navigate",
|
|
149
|
-
"url": "{ordinary}/doc?n=next-{tag}"
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
"settle": {
|
|
153
|
-
"beacon": "{ordinary}",
|
|
154
|
-
"ms": 5000,
|
|
155
|
-
"required": true,
|
|
156
|
-
"dependsOn": ["refused.3"]
|
|
157
|
-
}
|
|
130
|
+
"url": "{ordinary}/blank"
|
|
158
131
|
}
|
|
159
132
|
],
|
|
160
133
|
"trigger": [
|
|
161
134
|
{
|
|
162
|
-
"
|
|
163
|
-
"
|
|
164
|
-
|
|
165
|
-
{
|
|
166
|
-
"settle": {
|
|
167
|
-
"beacon": "{target}",
|
|
168
|
-
"dependsOn": ["refused.3"],
|
|
169
|
-
"or": {
|
|
170
|
-
"served": "{target}/doc?n={tag}",
|
|
171
|
-
"observer": "fixture"
|
|
172
|
-
}
|
|
173
|
-
}
|
|
135
|
+
"extensionWorld": "hidden",
|
|
136
|
+
"as": "world",
|
|
137
|
+
"requires": ["extensionWorld"]
|
|
174
138
|
}
|
|
175
139
|
],
|
|
176
|
-
"targets": ["
|
|
140
|
+
"targets": ["ordinary"],
|
|
141
|
+
"requires": ["extensionWorld"],
|
|
177
142
|
"observe": {
|
|
178
|
-
"
|
|
179
|
-
"means": "
|
|
180
|
-
"dependsOn": ["refused.3"],
|
|
143
|
+
"exists": {
|
|
144
|
+
"means": "foreign extension world exists",
|
|
181
145
|
"check": {
|
|
182
|
-
"
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
"observer": "fixture"
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
"beacon": "{ordinary-same-site}",
|
|
189
|
-
"observer": "fixture"
|
|
190
|
-
}
|
|
191
|
-
],
|
|
146
|
+
"result": "world",
|
|
147
|
+
"path": "result.exists",
|
|
148
|
+
"equals": true,
|
|
192
149
|
"observer": "client"
|
|
193
150
|
}
|
|
194
151
|
},
|
|
195
|
-
"
|
|
196
|
-
"means": "
|
|
197
|
-
"dependsOn": ["refused.3"],
|
|
152
|
+
"listed": {
|
|
153
|
+
"means": "foreign extension world listed",
|
|
198
154
|
"check": {
|
|
199
|
-
"
|
|
200
|
-
"
|
|
155
|
+
"result": "world",
|
|
156
|
+
"path": "result.listed",
|
|
157
|
+
"equals": true,
|
|
158
|
+
"observer": "client"
|
|
201
159
|
}
|
|
202
160
|
},
|
|
203
|
-
"
|
|
204
|
-
"means": "
|
|
205
|
-
"dependsOn": [],
|
|
161
|
+
"leaks": {
|
|
162
|
+
"means": "foreign extension world leaks",
|
|
206
163
|
"check": {
|
|
207
|
-
"
|
|
208
|
-
"
|
|
164
|
+
"result": "world",
|
|
165
|
+
"path": "result.leaks",
|
|
166
|
+
"equals": true,
|
|
167
|
+
"observer": "client"
|
|
209
168
|
}
|
|
210
169
|
},
|
|
211
|
-
"
|
|
212
|
-
"means": "
|
|
213
|
-
"dependsOn": ["refused.3", "refused.4"],
|
|
170
|
+
"defaultSeen": {
|
|
171
|
+
"means": "foreign extension world defaultSeen",
|
|
214
172
|
"check": {
|
|
215
|
-
"
|
|
173
|
+
"result": "world",
|
|
174
|
+
"path": "result.defaultSeen",
|
|
175
|
+
"equals": true,
|
|
216
176
|
"observer": "client"
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
"any": [
|
|
226
|
-
{
|
|
227
|
-
"blocked": {
|
|
228
|
-
"url": "{target}/doc?n={tag}",
|
|
229
|
-
"session": "page",
|
|
230
|
-
"frame": false
|
|
231
|
-
},
|
|
232
|
-
"observer": "client"
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
"blocked": {
|
|
236
|
-
"url": "{target}/doc?n={tag}",
|
|
237
|
-
"session": "page",
|
|
238
|
-
"frame": false
|
|
239
|
-
},
|
|
240
|
-
"observer": "unguarded"
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
"history": {
|
|
244
|
-
"url": "{target}/doc?n={tag}",
|
|
245
|
-
"session": "page"
|
|
246
|
-
},
|
|
247
|
-
"observer": "unguarded"
|
|
248
|
-
}
|
|
249
|
-
],
|
|
250
|
-
"observer": "client"
|
|
251
|
-
}
|
|
252
|
-
],
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
"alive": {
|
|
180
|
+
"means": "foreign extension world alive",
|
|
181
|
+
"check": {
|
|
182
|
+
"result": "world",
|
|
183
|
+
"path": "result.alive",
|
|
184
|
+
"equals": true,
|
|
253
185
|
"observer": "client"
|
|
254
186
|
}
|
|
255
187
|
}
|
|
256
188
|
},
|
|
257
|
-
"live": "the
|
|
189
|
+
"live": "the observer confirms a foreign extension isolated world exists on an ordinary page",
|
|
190
|
+
"liveCheck": {
|
|
191
|
+
"result": "world",
|
|
192
|
+
"path": "result.exists",
|
|
193
|
+
"equals": true,
|
|
194
|
+
"observer": "client"
|
|
195
|
+
},
|
|
258
196
|
"control": {
|
|
259
197
|
"origin": "ordinary",
|
|
260
|
-
"via": "
|
|
198
|
+
"via": "unguarded",
|
|
261
199
|
"expected": {
|
|
262
|
-
"
|
|
263
|
-
"
|
|
264
|
-
"
|
|
265
|
-
"
|
|
200
|
+
"exists": true,
|
|
201
|
+
"listed": true,
|
|
202
|
+
"leaks": true,
|
|
203
|
+
"defaultSeen": true,
|
|
204
|
+
"alive": true
|
|
266
205
|
}
|
|
267
206
|
},
|
|
268
207
|
"expected": {
|
|
269
|
-
"
|
|
270
|
-
"
|
|
271
|
-
"
|
|
272
|
-
"
|
|
273
|
-
|
|
274
|
-
"designDependent": ["loaded", "detached"],
|
|
275
|
-
"liveCheck": {
|
|
276
|
-
"any": [
|
|
277
|
-
{
|
|
278
|
-
"loaded": "{target}/doc?n={tag}",
|
|
279
|
-
"observer": "fixture"
|
|
280
|
-
},
|
|
281
|
-
{
|
|
282
|
-
"all": [
|
|
283
|
-
{
|
|
284
|
-
"pre": "{target}/doc?n={tag}",
|
|
285
|
-
"observer": "fixture"
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
"any": [
|
|
289
|
-
{
|
|
290
|
-
"blocked": {
|
|
291
|
-
"url": "{target}/doc?n={tag}",
|
|
292
|
-
"session": "page",
|
|
293
|
-
"frame": false
|
|
294
|
-
},
|
|
295
|
-
"observer": "client"
|
|
296
|
-
},
|
|
297
|
-
{
|
|
298
|
-
"blocked": {
|
|
299
|
-
"url": "{target}/doc?n={tag}",
|
|
300
|
-
"session": "page",
|
|
301
|
-
"frame": false
|
|
302
|
-
},
|
|
303
|
-
"observer": "unguarded"
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
"history": {
|
|
307
|
-
"url": "{target}/doc?n={tag}",
|
|
308
|
-
"session": "page"
|
|
309
|
-
},
|
|
310
|
-
"observer": "unguarded"
|
|
311
|
-
}
|
|
312
|
-
],
|
|
313
|
-
"observer": "client"
|
|
314
|
-
}
|
|
315
|
-
],
|
|
316
|
-
"observer": "client"
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
"registration": "any",
|
|
320
|
-
"observer": "client"
|
|
321
|
-
}
|
|
322
|
-
],
|
|
323
|
-
"observer": "client"
|
|
208
|
+
"exists": true,
|
|
209
|
+
"listed": false,
|
|
210
|
+
"leaks": false,
|
|
211
|
+
"defaultSeen": true,
|
|
212
|
+
"alive": true
|
|
324
213
|
}
|
|
325
214
|
},
|
|
326
215
|
{
|
|
327
|
-
"id": "
|
|
216
|
+
"id": "C9.world-select",
|
|
328
217
|
"family": "C",
|
|
329
218
|
"kind": "cdp",
|
|
330
219
|
"scope": "any",
|
|
220
|
+
"defaultContext": true,
|
|
331
221
|
"setup": [
|
|
332
|
-
{
|
|
333
|
-
"text": "an allowed tab with an init script that beacons its origin"
|
|
334
|
-
},
|
|
335
222
|
{
|
|
336
223
|
"page": "tab",
|
|
337
|
-
"url": "{ordinary}/
|
|
338
|
-
}
|
|
224
|
+
"url": "{ordinary}/blank"
|
|
225
|
+
}
|
|
226
|
+
],
|
|
227
|
+
"trigger": [
|
|
339
228
|
{
|
|
340
|
-
"
|
|
229
|
+
"extensionWorld": "select",
|
|
230
|
+
"as": "world",
|
|
231
|
+
"requires": ["extensionWorld"]
|
|
232
|
+
}
|
|
233
|
+
],
|
|
234
|
+
"targets": ["ordinary"],
|
|
235
|
+
"requires": ["extensionWorld"],
|
|
236
|
+
"observe": {
|
|
237
|
+
"exists": {
|
|
238
|
+
"means": "foreign extension world exists",
|
|
239
|
+
"check": {
|
|
240
|
+
"result": "world",
|
|
241
|
+
"path": "result.exists",
|
|
242
|
+
"equals": true,
|
|
243
|
+
"observer": "client"
|
|
244
|
+
}
|
|
341
245
|
},
|
|
342
|
-
{
|
|
343
|
-
"
|
|
344
|
-
"
|
|
345
|
-
"
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
"match": "refused"
|
|
246
|
+
"alive": {
|
|
247
|
+
"means": "foreign extension world alive",
|
|
248
|
+
"check": {
|
|
249
|
+
"result": "world",
|
|
250
|
+
"path": "result.alive",
|
|
251
|
+
"equals": true,
|
|
252
|
+
"observer": "client"
|
|
350
253
|
}
|
|
351
254
|
},
|
|
352
|
-
{
|
|
353
|
-
"
|
|
354
|
-
"
|
|
355
|
-
"
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
"match": "refused"
|
|
255
|
+
"contextIdRefused": {
|
|
256
|
+
"means": "foreign extension world contextIdRefused",
|
|
257
|
+
"check": {
|
|
258
|
+
"result": "world",
|
|
259
|
+
"path": "result.contextIdRefused",
|
|
260
|
+
"equals": true,
|
|
261
|
+
"observer": "client"
|
|
360
262
|
}
|
|
361
263
|
},
|
|
362
|
-
{
|
|
363
|
-
"
|
|
364
|
-
"
|
|
264
|
+
"uniqueContextIdRefused": {
|
|
265
|
+
"means": "foreign extension world uniqueContextIdRefused",
|
|
266
|
+
"check": {
|
|
267
|
+
"result": "world",
|
|
268
|
+
"path": "result.uniqueContextIdRefused",
|
|
269
|
+
"equals": true,
|
|
270
|
+
"observer": "client"
|
|
271
|
+
}
|
|
365
272
|
},
|
|
366
|
-
{
|
|
367
|
-
"
|
|
368
|
-
|
|
369
|
-
"
|
|
370
|
-
"
|
|
371
|
-
"
|
|
273
|
+
"executionContextIdRefused": {
|
|
274
|
+
"means": "foreign extension world executionContextIdRefused",
|
|
275
|
+
"check": {
|
|
276
|
+
"result": "world",
|
|
277
|
+
"path": "result.executionContextIdRefused",
|
|
278
|
+
"equals": true,
|
|
279
|
+
"observer": "client"
|
|
372
280
|
}
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
281
|
+
},
|
|
282
|
+
"objectIdRefused": {
|
|
283
|
+
"means": "foreign extension world objectIdRefused",
|
|
284
|
+
"check": {
|
|
285
|
+
"result": "world",
|
|
286
|
+
"path": "result.objectIdRefused",
|
|
287
|
+
"equals": true,
|
|
288
|
+
"observer": "client"
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
"argumentRefused": {
|
|
292
|
+
"means": "foreign extension world argumentRefused",
|
|
293
|
+
"check": {
|
|
294
|
+
"result": "world",
|
|
295
|
+
"path": "result.argumentRefused",
|
|
296
|
+
"equals": true,
|
|
297
|
+
"observer": "client"
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
"promiseObjectIdRefused": {
|
|
301
|
+
"means": "foreign extension world promiseObjectIdRefused",
|
|
302
|
+
"check": {
|
|
303
|
+
"result": "world",
|
|
304
|
+
"path": "result.promiseObjectIdRefused",
|
|
305
|
+
"equals": true,
|
|
306
|
+
"observer": "client"
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
"propertiesRefused": {
|
|
310
|
+
"means": "foreign extension world propertiesRefused",
|
|
311
|
+
"check": {
|
|
312
|
+
"result": "world",
|
|
313
|
+
"path": "result.propertiesRefused",
|
|
314
|
+
"equals": true,
|
|
315
|
+
"observer": "client"
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
"bindingRefused": {
|
|
319
|
+
"means": "foreign extension world bindingRefused",
|
|
320
|
+
"check": {
|
|
321
|
+
"result": "world",
|
|
322
|
+
"path": "result.bindingRefused",
|
|
323
|
+
"equals": true,
|
|
324
|
+
"observer": "client"
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
"resolveNodeRefused": {
|
|
328
|
+
"means": "foreign extension world resolveNodeRefused",
|
|
329
|
+
"check": {
|
|
330
|
+
"result": "world",
|
|
331
|
+
"path": "result.resolveNodeRefused",
|
|
332
|
+
"equals": true,
|
|
333
|
+
"observer": "client"
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"contextIdReached": {
|
|
337
|
+
"means": "foreign extension world contextIdReached",
|
|
338
|
+
"check": {
|
|
339
|
+
"result": "world",
|
|
340
|
+
"path": "result.contextIdReached",
|
|
341
|
+
"equals": true,
|
|
342
|
+
"observer": "client"
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
"uniqueContextIdReached": {
|
|
346
|
+
"means": "foreign extension world uniqueContextIdReached",
|
|
347
|
+
"check": {
|
|
348
|
+
"result": "world",
|
|
349
|
+
"path": "result.uniqueContextIdReached",
|
|
350
|
+
"equals": true,
|
|
351
|
+
"observer": "client"
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
"executionContextIdReached": {
|
|
355
|
+
"means": "foreign extension world executionContextIdReached",
|
|
356
|
+
"check": {
|
|
357
|
+
"result": "world",
|
|
358
|
+
"path": "result.executionContextIdReached",
|
|
359
|
+
"equals": true,
|
|
360
|
+
"observer": "client"
|
|
361
|
+
}
|
|
362
|
+
},
|
|
363
|
+
"objectIdReached": {
|
|
364
|
+
"means": "foreign extension world objectIdReached",
|
|
365
|
+
"check": {
|
|
366
|
+
"result": "world",
|
|
367
|
+
"path": "result.objectIdReached",
|
|
368
|
+
"equals": true,
|
|
369
|
+
"observer": "client"
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
"argumentReached": {
|
|
373
|
+
"means": "foreign extension world argumentReached",
|
|
374
|
+
"check": {
|
|
375
|
+
"result": "world",
|
|
376
|
+
"path": "result.argumentReached",
|
|
377
|
+
"equals": true,
|
|
378
|
+
"observer": "client"
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
"promiseObjectIdReached": {
|
|
382
|
+
"means": "foreign extension world promiseObjectIdReached",
|
|
383
|
+
"check": {
|
|
384
|
+
"result": "world",
|
|
385
|
+
"path": "result.promiseObjectIdReached",
|
|
386
|
+
"equals": true,
|
|
387
|
+
"observer": "client"
|
|
388
|
+
}
|
|
389
|
+
},
|
|
390
|
+
"propertiesReached": {
|
|
391
|
+
"means": "foreign extension world propertiesReached",
|
|
392
|
+
"check": {
|
|
393
|
+
"result": "world",
|
|
394
|
+
"path": "result.propertiesReached",
|
|
395
|
+
"equals": true,
|
|
396
|
+
"observer": "client"
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
"bindingReached": {
|
|
400
|
+
"means": "foreign extension world bindingReached",
|
|
401
|
+
"check": {
|
|
402
|
+
"result": "world",
|
|
403
|
+
"path": "result.bindingReached",
|
|
404
|
+
"equals": true,
|
|
405
|
+
"observer": "client"
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
"resolveNodeReached": {
|
|
409
|
+
"means": "foreign extension world resolveNodeReached",
|
|
410
|
+
"check": {
|
|
411
|
+
"result": "world",
|
|
412
|
+
"path": "result.resolveNodeReached",
|
|
413
|
+
"equals": true,
|
|
414
|
+
"observer": "client"
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
"guessesRefused": {
|
|
418
|
+
"means": "numeric and unique context ids guessed from the successful control leg",
|
|
419
|
+
"check": {
|
|
420
|
+
"result": "world",
|
|
421
|
+
"path": "result.guessesRefused",
|
|
422
|
+
"equals": true,
|
|
423
|
+
"observer": "client"
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
"guessesReached": {
|
|
427
|
+
"means": "numeric and unique context ids guessed from the successful control leg",
|
|
428
|
+
"check": {
|
|
429
|
+
"result": "world",
|
|
430
|
+
"path": "result.guessesReached",
|
|
431
|
+
"equals": true,
|
|
432
|
+
"observer": "client"
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
"live": "the observer confirms a foreign extension isolated world exists on an ordinary page",
|
|
437
|
+
"liveCheck": {
|
|
438
|
+
"result": "world",
|
|
439
|
+
"path": "result.exists",
|
|
440
|
+
"equals": true,
|
|
441
|
+
"observer": "client"
|
|
442
|
+
},
|
|
443
|
+
"control": {
|
|
444
|
+
"origin": "ordinary",
|
|
445
|
+
"via": "unguarded",
|
|
446
|
+
"expected": {
|
|
447
|
+
"exists": true,
|
|
448
|
+
"alive": true,
|
|
449
|
+
"contextIdRefused": false,
|
|
450
|
+
"contextIdReached": true,
|
|
451
|
+
"uniqueContextIdRefused": false,
|
|
452
|
+
"uniqueContextIdReached": true,
|
|
453
|
+
"executionContextIdRefused": false,
|
|
454
|
+
"executionContextIdReached": true,
|
|
455
|
+
"objectIdRefused": false,
|
|
456
|
+
"objectIdReached": true,
|
|
457
|
+
"argumentRefused": false,
|
|
458
|
+
"argumentReached": true,
|
|
459
|
+
"promiseObjectIdRefused": false,
|
|
460
|
+
"promiseObjectIdReached": true,
|
|
461
|
+
"propertiesRefused": false,
|
|
462
|
+
"propertiesReached": true,
|
|
463
|
+
"bindingRefused": false,
|
|
464
|
+
"bindingReached": true,
|
|
465
|
+
"resolveNodeRefused": false,
|
|
466
|
+
"resolveNodeReached": true,
|
|
467
|
+
"guessesRefused": false,
|
|
468
|
+
"guessesReached": true
|
|
469
|
+
}
|
|
470
|
+
},
|
|
471
|
+
"expected": {
|
|
472
|
+
"exists": true,
|
|
473
|
+
"alive": true,
|
|
474
|
+
"contextIdRefused": true,
|
|
475
|
+
"uniqueContextIdRefused": true,
|
|
476
|
+
"executionContextIdRefused": true,
|
|
477
|
+
"objectIdRefused": true,
|
|
478
|
+
"argumentRefused": true,
|
|
479
|
+
"promiseObjectIdRefused": true,
|
|
480
|
+
"propertiesRefused": true,
|
|
481
|
+
"bindingRefused": true,
|
|
482
|
+
"resolveNodeRefused": true,
|
|
483
|
+
"guessesRefused": true
|
|
484
|
+
}
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"id": "C9.world-debugger",
|
|
488
|
+
"family": "C",
|
|
489
|
+
"kind": "cdp",
|
|
490
|
+
"scope": "any",
|
|
491
|
+
"defaultContext": true,
|
|
492
|
+
"setup": [
|
|
493
|
+
{
|
|
494
|
+
"page": "tab",
|
|
495
|
+
"url": "{ordinary}/blank"
|
|
496
|
+
}
|
|
497
|
+
],
|
|
498
|
+
"trigger": [
|
|
499
|
+
{
|
|
500
|
+
"extensionWorld": "debugger",
|
|
501
|
+
"as": "world",
|
|
502
|
+
"requires": ["extensionWorld"]
|
|
503
|
+
}
|
|
504
|
+
],
|
|
505
|
+
"targets": ["ordinary"],
|
|
506
|
+
"requires": ["extensionWorld"],
|
|
507
|
+
"observe": {
|
|
508
|
+
"exists": {
|
|
509
|
+
"means": "foreign extension world exists",
|
|
510
|
+
"check": {
|
|
511
|
+
"result": "world",
|
|
512
|
+
"path": "result.exists",
|
|
513
|
+
"equals": true,
|
|
514
|
+
"observer": "client"
|
|
515
|
+
}
|
|
516
|
+
},
|
|
517
|
+
"reachable": {
|
|
518
|
+
"means": "foreign extension world reachable",
|
|
519
|
+
"check": {
|
|
520
|
+
"result": "world",
|
|
521
|
+
"path": "result.reachable",
|
|
522
|
+
"equals": true,
|
|
523
|
+
"observer": "client"
|
|
524
|
+
}
|
|
525
|
+
},
|
|
526
|
+
"protected": {
|
|
527
|
+
"means": "foreign extension world protected",
|
|
528
|
+
"check": {
|
|
529
|
+
"result": "world",
|
|
530
|
+
"path": "result.protected",
|
|
531
|
+
"equals": true,
|
|
532
|
+
"observer": "client"
|
|
533
|
+
}
|
|
534
|
+
},
|
|
535
|
+
"alive": {
|
|
536
|
+
"means": "foreign extension world alive",
|
|
537
|
+
"check": {
|
|
538
|
+
"result": "world",
|
|
539
|
+
"path": "result.alive",
|
|
540
|
+
"equals": true,
|
|
541
|
+
"observer": "client"
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
},
|
|
545
|
+
"live": "the observer confirms a foreign extension isolated world exists on an ordinary page",
|
|
546
|
+
"liveCheck": {
|
|
547
|
+
"result": "world",
|
|
548
|
+
"path": "result.exists",
|
|
549
|
+
"equals": true,
|
|
550
|
+
"observer": "client"
|
|
551
|
+
},
|
|
552
|
+
"control": {
|
|
553
|
+
"origin": "ordinary",
|
|
554
|
+
"via": "unguarded",
|
|
555
|
+
"expected": {
|
|
556
|
+
"exists": true,
|
|
557
|
+
"reachable": true,
|
|
558
|
+
"protected": false,
|
|
559
|
+
"alive": true
|
|
560
|
+
}
|
|
561
|
+
},
|
|
562
|
+
"expected": {
|
|
563
|
+
"exists": true,
|
|
564
|
+
"reachable": false,
|
|
565
|
+
"protected": true,
|
|
566
|
+
"alive": true
|
|
567
|
+
}
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
"id": "C9.page-drivable",
|
|
571
|
+
"family": "C",
|
|
572
|
+
"kind": "cdp",
|
|
573
|
+
"scope": "any",
|
|
574
|
+
"defaultContext": true,
|
|
575
|
+
"setup": [
|
|
576
|
+
{
|
|
577
|
+
"page": "tab",
|
|
578
|
+
"url": "{ordinary}/blank"
|
|
579
|
+
}
|
|
580
|
+
],
|
|
581
|
+
"trigger": [
|
|
582
|
+
{
|
|
583
|
+
"extensionWorld": "drivable",
|
|
584
|
+
"as": "world",
|
|
585
|
+
"requires": ["extensionWorld"]
|
|
586
|
+
}
|
|
587
|
+
],
|
|
588
|
+
"targets": ["ordinary"],
|
|
589
|
+
"requires": ["extensionWorld"],
|
|
590
|
+
"observe": {
|
|
591
|
+
"exists": {
|
|
592
|
+
"means": "foreign extension world exists",
|
|
593
|
+
"check": {
|
|
594
|
+
"result": "world",
|
|
595
|
+
"path": "result.exists",
|
|
596
|
+
"equals": true,
|
|
597
|
+
"observer": "client"
|
|
598
|
+
}
|
|
599
|
+
},
|
|
600
|
+
"alive": {
|
|
601
|
+
"means": "foreign extension world alive",
|
|
602
|
+
"check": {
|
|
603
|
+
"result": "world",
|
|
604
|
+
"path": "result.alive",
|
|
605
|
+
"equals": true,
|
|
606
|
+
"observer": "client"
|
|
607
|
+
}
|
|
608
|
+
},
|
|
609
|
+
"snapshot": {
|
|
610
|
+
"means": "foreign extension world snapshot",
|
|
611
|
+
"check": {
|
|
612
|
+
"result": "world",
|
|
613
|
+
"path": "result.snapshot",
|
|
614
|
+
"equals": true,
|
|
615
|
+
"observer": "client"
|
|
616
|
+
}
|
|
617
|
+
},
|
|
618
|
+
"click": {
|
|
619
|
+
"means": "foreign extension world click",
|
|
620
|
+
"check": {
|
|
621
|
+
"result": "world",
|
|
622
|
+
"path": "result.click",
|
|
623
|
+
"equals": true,
|
|
624
|
+
"observer": "client"
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
},
|
|
628
|
+
"live": "the observer confirms a foreign extension isolated world exists on an ordinary page",
|
|
629
|
+
"liveCheck": {
|
|
630
|
+
"result": "world",
|
|
631
|
+
"path": "result.exists",
|
|
632
|
+
"equals": true,
|
|
633
|
+
"observer": "client"
|
|
634
|
+
},
|
|
635
|
+
"control": {
|
|
636
|
+
"origin": "ordinary",
|
|
637
|
+
"via": "unguarded",
|
|
638
|
+
"expected": {
|
|
639
|
+
"exists": true,
|
|
640
|
+
"alive": true,
|
|
641
|
+
"snapshot": true,
|
|
642
|
+
"click": true
|
|
643
|
+
}
|
|
644
|
+
},
|
|
645
|
+
"expected": {
|
|
646
|
+
"exists": true,
|
|
647
|
+
"alive": true,
|
|
648
|
+
"snapshot": true,
|
|
649
|
+
"click": true
|
|
650
|
+
}
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
"id": "C1.script-nav",
|
|
654
|
+
"family": "C",
|
|
655
|
+
"kind": "cdp",
|
|
656
|
+
"scope": "any",
|
|
657
|
+
"setup": [
|
|
658
|
+
{
|
|
659
|
+
"text": "an allowed tab with an init script that beacons its origin"
|
|
660
|
+
},
|
|
661
|
+
{
|
|
662
|
+
"page": "tab",
|
|
663
|
+
"url": "{ordinary}/doc?n=start"
|
|
664
|
+
},
|
|
665
|
+
{
|
|
666
|
+
"cdp": "Page.enable"
|
|
667
|
+
},
|
|
668
|
+
{
|
|
669
|
+
"cdp": "Page.addScriptToEvaluateOnNewDocument",
|
|
670
|
+
"params": {
|
|
671
|
+
"source": "{beacon}"
|
|
672
|
+
},
|
|
673
|
+
"refusable": true,
|
|
674
|
+
"refusal": {
|
|
675
|
+
"match": "refused"
|
|
676
|
+
}
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
"cdp": "Page.setBypassCSP",
|
|
680
|
+
"params": {
|
|
681
|
+
"enabled": true
|
|
682
|
+
},
|
|
683
|
+
"refusable": true,
|
|
684
|
+
"refusal": {
|
|
685
|
+
"match": "refused"
|
|
686
|
+
}
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
"page": "navigate",
|
|
690
|
+
"url": "{ordinary}/doc?n=next-{tag}"
|
|
691
|
+
},
|
|
692
|
+
{
|
|
693
|
+
"settle": {
|
|
694
|
+
"beacon": "{ordinary}",
|
|
695
|
+
"ms": 5000,
|
|
696
|
+
"required": true,
|
|
697
|
+
"dependsOn": ["refused.3"]
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
],
|
|
701
|
+
"trigger": [
|
|
702
|
+
{
|
|
703
|
+
"page": "href",
|
|
704
|
+
"url": "{target}/doc?n={tag}"
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
"settle": {
|
|
708
|
+
"beacon": "{target}",
|
|
709
|
+
"dependsOn": ["refused.3"],
|
|
710
|
+
"or": {
|
|
711
|
+
"served": "{target}/doc?n={tag}",
|
|
712
|
+
"observer": "fixture"
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
],
|
|
717
|
+
"targets": ["seven", "vault", "vault-x", "apex", "own"],
|
|
718
|
+
"observe": {
|
|
719
|
+
"allowedBeacon": {
|
|
720
|
+
"means": "a beacon from {ordinary}",
|
|
721
|
+
"dependsOn": ["refused.3"],
|
|
722
|
+
"check": {
|
|
723
|
+
"any": [
|
|
724
|
+
{
|
|
725
|
+
"beacon": "{ordinary}",
|
|
726
|
+
"observer": "fixture"
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
"beacon": "{ordinary-same-site}",
|
|
730
|
+
"observer": "fixture"
|
|
731
|
+
}
|
|
732
|
+
],
|
|
733
|
+
"observer": "client"
|
|
734
|
+
}
|
|
735
|
+
},
|
|
736
|
+
"beacon": {
|
|
737
|
+
"means": "a beacon from {target}",
|
|
738
|
+
"dependsOn": ["refused.3"],
|
|
739
|
+
"check": {
|
|
740
|
+
"beacon": "{target}",
|
|
741
|
+
"observer": "fixture"
|
|
742
|
+
}
|
|
743
|
+
},
|
|
744
|
+
"loaded": {
|
|
745
|
+
"means": "the stand-in served {target}/doc?n={tag}",
|
|
746
|
+
"dependsOn": [],
|
|
747
|
+
"check": {
|
|
748
|
+
"served": "{target}/doc?n={tag}",
|
|
749
|
+
"observer": "fixture"
|
|
750
|
+
}
|
|
751
|
+
},
|
|
752
|
+
"detached": {
|
|
753
|
+
"means": "the page session was detached",
|
|
754
|
+
"dependsOn": ["refused.3", "refused.4"],
|
|
755
|
+
"check": {
|
|
756
|
+
"detached": "page",
|
|
757
|
+
"observer": "client"
|
|
758
|
+
},
|
|
759
|
+
"eitherWhen": {
|
|
760
|
+
"all": [
|
|
761
|
+
{
|
|
762
|
+
"pre": "{target}/doc?n={tag}",
|
|
763
|
+
"observer": "fixture"
|
|
764
|
+
},
|
|
765
|
+
{
|
|
766
|
+
"any": [
|
|
767
|
+
{
|
|
768
|
+
"blocked": {
|
|
769
|
+
"url": "{target}/doc?n={tag}",
|
|
770
|
+
"session": "page",
|
|
771
|
+
"frame": false
|
|
772
|
+
},
|
|
773
|
+
"observer": "client"
|
|
774
|
+
},
|
|
775
|
+
{
|
|
776
|
+
"blocked": {
|
|
777
|
+
"url": "{target}/doc?n={tag}",
|
|
778
|
+
"session": "page",
|
|
779
|
+
"frame": false
|
|
780
|
+
},
|
|
781
|
+
"observer": "unguarded"
|
|
782
|
+
},
|
|
783
|
+
{
|
|
784
|
+
"history": {
|
|
785
|
+
"url": "{target}/doc?n={tag}",
|
|
786
|
+
"session": "page"
|
|
787
|
+
},
|
|
788
|
+
"observer": "unguarded"
|
|
789
|
+
}
|
|
790
|
+
],
|
|
791
|
+
"observer": "client"
|
|
792
|
+
}
|
|
793
|
+
],
|
|
794
|
+
"observer": "client"
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
},
|
|
798
|
+
"live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
|
|
799
|
+
"control": {
|
|
800
|
+
"origin": "ordinary",
|
|
801
|
+
"via": "guard",
|
|
802
|
+
"expected": {
|
|
803
|
+
"allowedBeacon": true,
|
|
804
|
+
"beacon": true,
|
|
805
|
+
"loaded": true,
|
|
806
|
+
"detached": false
|
|
807
|
+
}
|
|
808
|
+
},
|
|
809
|
+
"expected": {
|
|
810
|
+
"allowedBeacon": true,
|
|
811
|
+
"beacon": false,
|
|
812
|
+
"loaded": "either",
|
|
813
|
+
"detached": true
|
|
814
|
+
},
|
|
815
|
+
"designDependent": ["loaded", "detached"],
|
|
816
|
+
"liveCheck": {
|
|
817
|
+
"any": [
|
|
818
|
+
{
|
|
819
|
+
"loaded": "{target}/doc?n={tag}",
|
|
820
|
+
"observer": "fixture"
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
"all": [
|
|
824
|
+
{
|
|
825
|
+
"pre": "{target}/doc?n={tag}",
|
|
826
|
+
"observer": "fixture"
|
|
827
|
+
},
|
|
828
|
+
{
|
|
829
|
+
"any": [
|
|
830
|
+
{
|
|
831
|
+
"blocked": {
|
|
832
|
+
"url": "{target}/doc?n={tag}",
|
|
833
|
+
"session": "page",
|
|
834
|
+
"frame": false
|
|
835
|
+
},
|
|
836
|
+
"observer": "client"
|
|
837
|
+
},
|
|
838
|
+
{
|
|
839
|
+
"blocked": {
|
|
840
|
+
"url": "{target}/doc?n={tag}",
|
|
841
|
+
"session": "page",
|
|
842
|
+
"frame": false
|
|
843
|
+
},
|
|
844
|
+
"observer": "unguarded"
|
|
845
|
+
},
|
|
846
|
+
{
|
|
847
|
+
"history": {
|
|
848
|
+
"url": "{target}/doc?n={tag}",
|
|
849
|
+
"session": "page"
|
|
850
|
+
},
|
|
851
|
+
"observer": "unguarded"
|
|
852
|
+
}
|
|
853
|
+
],
|
|
854
|
+
"observer": "client"
|
|
855
|
+
}
|
|
856
|
+
],
|
|
857
|
+
"observer": "client"
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
"registration": "any",
|
|
861
|
+
"observer": "client"
|
|
862
|
+
}
|
|
863
|
+
],
|
|
864
|
+
"observer": "client"
|
|
865
|
+
}
|
|
866
|
+
},
|
|
867
|
+
{
|
|
868
|
+
"id": "C2.chain-301-302-303",
|
|
869
|
+
"family": "C",
|
|
870
|
+
"kind": "cdp",
|
|
871
|
+
"scope": "any",
|
|
872
|
+
"setup": [
|
|
873
|
+
{
|
|
874
|
+
"text": "an allowed tab with an init script that beacons its origin"
|
|
875
|
+
},
|
|
876
|
+
{
|
|
877
|
+
"page": "tab",
|
|
878
|
+
"url": "{ordinary}/doc?n=start"
|
|
879
|
+
},
|
|
880
|
+
{
|
|
881
|
+
"cdp": "Page.enable"
|
|
882
|
+
},
|
|
883
|
+
{
|
|
884
|
+
"cdp": "Page.addScriptToEvaluateOnNewDocument",
|
|
885
|
+
"params": {
|
|
886
|
+
"source": "{beacon}"
|
|
887
|
+
},
|
|
888
|
+
"refusable": true,
|
|
889
|
+
"refusal": {
|
|
890
|
+
"match": "refused"
|
|
891
|
+
}
|
|
892
|
+
},
|
|
893
|
+
{
|
|
894
|
+
"cdp": "Page.setBypassCSP",
|
|
895
|
+
"params": {
|
|
896
|
+
"enabled": true
|
|
897
|
+
},
|
|
898
|
+
"refusable": true,
|
|
899
|
+
"refusal": {
|
|
900
|
+
"match": "refused"
|
|
901
|
+
}
|
|
902
|
+
},
|
|
903
|
+
{
|
|
904
|
+
"page": "navigate",
|
|
905
|
+
"url": "{ordinary}/doc?n=next-{tag}"
|
|
906
|
+
},
|
|
907
|
+
{
|
|
908
|
+
"settle": {
|
|
909
|
+
"beacon": "{ordinary}",
|
|
910
|
+
"ms": 5000,
|
|
911
|
+
"required": true,
|
|
912
|
+
"dependsOn": ["refused.3"]
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
],
|
|
916
|
+
"trigger": [
|
|
917
|
+
{
|
|
918
|
+
"page": "href",
|
|
378
919
|
"url": "{target}/doc?n={tag}",
|
|
379
920
|
"hops": [
|
|
380
921
|
{
|
|
@@ -12341,53 +12882,291 @@
|
|
|
12341
12882
|
{
|
|
12342
12883
|
"text": "getCookies {urls:[vault, plain]}; setCookie by url or domain, setCookies, Storage.setCookies, deleteCookies by url or domain, clearBrowserCookies, Storage.clearCookies and Storage.clearDataForOrigin(vault)"
|
|
12343
12884
|
}
|
|
12344
|
-
],
|
|
12345
|
-
"targets": ["seven", "vault", "vault-x", "apex"],
|
|
12346
|
-
"live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
|
|
12885
|
+
],
|
|
12886
|
+
"targets": ["seven", "vault", "vault-x", "apex"],
|
|
12887
|
+
"live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
|
|
12888
|
+
"control": {
|
|
12889
|
+
"origin": "ordinary",
|
|
12890
|
+
"via": "guard",
|
|
12891
|
+
"expected": "the same setup and trigger against a plain, unprotected test origin must SUCCEED."
|
|
12892
|
+
},
|
|
12893
|
+
"expected": "getCookies drops the protected cookies; the others are refused."
|
|
12894
|
+
},
|
|
12895
|
+
{
|
|
12896
|
+
"id": "B7",
|
|
12897
|
+
"family": "B",
|
|
12898
|
+
"kind": "text",
|
|
12899
|
+
"scope": "any",
|
|
12900
|
+
"setup": [
|
|
12901
|
+
{
|
|
12902
|
+
"text": "The same vectors through every transport a guard exposes (bios: the page-side link, and the kernel CDP facade)."
|
|
12903
|
+
}
|
|
12904
|
+
],
|
|
12905
|
+
"trigger": [
|
|
12906
|
+
{
|
|
12907
|
+
"text": "as each vector"
|
|
12908
|
+
}
|
|
12909
|
+
],
|
|
12910
|
+
"targets": ["seven", "vault", "vault-x", "apex"],
|
|
12911
|
+
"live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
|
|
12912
|
+
"control": {
|
|
12913
|
+
"origin": "ordinary",
|
|
12914
|
+
"via": "guard",
|
|
12915
|
+
"expected": "the same setup and trigger against a plain, unprotected test origin must SUCCEED."
|
|
12916
|
+
},
|
|
12917
|
+
"expected": "as each vector"
|
|
12918
|
+
},
|
|
12919
|
+
{
|
|
12920
|
+
"id": "C8.newtab",
|
|
12921
|
+
"defaultContext": true,
|
|
12922
|
+
"family": "C",
|
|
12923
|
+
"kind": "cdp",
|
|
12924
|
+
"scope": "any",
|
|
12925
|
+
"setup": [
|
|
12926
|
+
{
|
|
12927
|
+
"page": "tab",
|
|
12928
|
+
"url": "{target}"
|
|
12929
|
+
}
|
|
12930
|
+
],
|
|
12931
|
+
"trigger": [
|
|
12932
|
+
{
|
|
12933
|
+
"cdp": "Target.attachToTarget",
|
|
12934
|
+
"params": {
|
|
12935
|
+
"targetId": "{pageTarget}",
|
|
12936
|
+
"flatten": true
|
|
12937
|
+
},
|
|
12938
|
+
"session": "browser",
|
|
12939
|
+
"as": "attach",
|
|
12940
|
+
"requires": ["browserSession", "chromeUrlsAttach"]
|
|
12941
|
+
},
|
|
12942
|
+
{
|
|
12943
|
+
"page": "navigate",
|
|
12944
|
+
"url": "{ordinary}/doc?tag={tag}",
|
|
12945
|
+
"as": "navigate"
|
|
12946
|
+
},
|
|
12947
|
+
{
|
|
12948
|
+
"settle": {
|
|
12949
|
+
"title": "doc",
|
|
12950
|
+
"ms": 5000,
|
|
12951
|
+
"required": true
|
|
12952
|
+
}
|
|
12953
|
+
}
|
|
12954
|
+
],
|
|
12955
|
+
"targets": ["chrome-newtab", "chrome-new-tab-page"],
|
|
12956
|
+
"requires": ["browserSession", "chromeUrlsAttach"],
|
|
12957
|
+
"observe": {
|
|
12958
|
+
"attached": {
|
|
12959
|
+
"means": "the guard attached to the settled new tab page",
|
|
12960
|
+
"check": {
|
|
12961
|
+
"result": "attach",
|
|
12962
|
+
"path": "ok",
|
|
12963
|
+
"equals": true,
|
|
12964
|
+
"observer": "client"
|
|
12965
|
+
}
|
|
12966
|
+
},
|
|
12967
|
+
"navigated": {
|
|
12968
|
+
"means": "the same tab reached an ordinary document through the guard",
|
|
12969
|
+
"check": {
|
|
12970
|
+
"title": "doc",
|
|
12971
|
+
"via": "unguarded",
|
|
12972
|
+
"observer": "unguarded"
|
|
12973
|
+
}
|
|
12974
|
+
}
|
|
12975
|
+
},
|
|
12976
|
+
"live": "the runner sees the ordinary document in the same tab",
|
|
12347
12977
|
"control": {
|
|
12348
12978
|
"origin": "ordinary",
|
|
12349
12979
|
"via": "guard",
|
|
12350
|
-
"expected":
|
|
12980
|
+
"expected": {
|
|
12981
|
+
"attached": true,
|
|
12982
|
+
"navigated": true
|
|
12983
|
+
}
|
|
12351
12984
|
},
|
|
12352
|
-
"expected":
|
|
12985
|
+
"expected": {
|
|
12986
|
+
"attached": true,
|
|
12987
|
+
"navigated": true
|
|
12988
|
+
},
|
|
12989
|
+
"liveCheck": {
|
|
12990
|
+
"title": "doc",
|
|
12991
|
+
"via": "unguarded",
|
|
12992
|
+
"observer": "unguarded"
|
|
12993
|
+
}
|
|
12353
12994
|
},
|
|
12354
12995
|
{
|
|
12355
|
-
"id": "
|
|
12356
|
-
"family": "
|
|
12357
|
-
"kind": "
|
|
12996
|
+
"id": "C8.network-error",
|
|
12997
|
+
"family": "C",
|
|
12998
|
+
"kind": "cdp",
|
|
12358
12999
|
"scope": "any",
|
|
12359
13000
|
"setup": [
|
|
12360
13001
|
{
|
|
12361
|
-
"text": "
|
|
13002
|
+
"text": "an ordinary tab hits a network error; the error document must remain readable, attachable and navigable"
|
|
13003
|
+
},
|
|
13004
|
+
{
|
|
13005
|
+
"page": "tab",
|
|
13006
|
+
"url": "{ordinary}/doc?tag={tag}"
|
|
13007
|
+
},
|
|
13008
|
+
{
|
|
13009
|
+
"cdp": "Page.enable"
|
|
13010
|
+
},
|
|
13011
|
+
{
|
|
13012
|
+
"cdp": "Network.enable"
|
|
12362
13013
|
}
|
|
12363
13014
|
],
|
|
12364
13015
|
"trigger": [
|
|
12365
13016
|
{
|
|
12366
|
-
"
|
|
13017
|
+
"page": "navigate",
|
|
13018
|
+
"url": "{network-error}"
|
|
13019
|
+
},
|
|
13020
|
+
{
|
|
13021
|
+
"settle": {
|
|
13022
|
+
"ms": 2500
|
|
13023
|
+
}
|
|
13024
|
+
},
|
|
13025
|
+
{
|
|
13026
|
+
"cdp": "Target.attachToTarget",
|
|
13027
|
+
"params": {
|
|
13028
|
+
"targetId": "{pageTarget}",
|
|
13029
|
+
"flatten": true
|
|
13030
|
+
},
|
|
13031
|
+
"session": "browser",
|
|
13032
|
+
"as": "attach",
|
|
13033
|
+
"requires": ["browserSession"]
|
|
13034
|
+
},
|
|
13035
|
+
{
|
|
13036
|
+
"page": "eval",
|
|
13037
|
+
"expression": "Boolean(document.body)",
|
|
13038
|
+
"as": "read"
|
|
13039
|
+
},
|
|
13040
|
+
{
|
|
13041
|
+
"cdp": "DOM.getDocument",
|
|
13042
|
+
"params": {
|
|
13043
|
+
"depth": 1
|
|
13044
|
+
},
|
|
13045
|
+
"as": "snapshot"
|
|
13046
|
+
},
|
|
13047
|
+
{
|
|
13048
|
+
"page": "navigate",
|
|
13049
|
+
"url": "{ordinary}/doc?tag={tag}",
|
|
13050
|
+
"as": "navigate"
|
|
13051
|
+
},
|
|
13052
|
+
{
|
|
13053
|
+
"settle": {
|
|
13054
|
+
"title": "doc",
|
|
13055
|
+
"ms": 5000,
|
|
13056
|
+
"required": true
|
|
13057
|
+
}
|
|
12367
13058
|
}
|
|
12368
13059
|
],
|
|
12369
|
-
"targets": ["
|
|
12370
|
-
"
|
|
13060
|
+
"targets": ["network-error"],
|
|
13061
|
+
"requires": ["browserSession"],
|
|
13062
|
+
"observe": {
|
|
13063
|
+
"errorSeen": {
|
|
13064
|
+
"means": "Chrome reported a failed ordinary document request before the tab navigated away",
|
|
13065
|
+
"check": {
|
|
13066
|
+
"event": "Network.loadingFailed",
|
|
13067
|
+
"where": {
|
|
13068
|
+
"params": {
|
|
13069
|
+
"type": "Document",
|
|
13070
|
+
"errorText": {
|
|
13071
|
+
"$regex": "^net::ERR_"
|
|
13072
|
+
}
|
|
13073
|
+
}
|
|
13074
|
+
},
|
|
13075
|
+
"observer": "client"
|
|
13076
|
+
}
|
|
13077
|
+
},
|
|
13078
|
+
"attached": {
|
|
13079
|
+
"means": "the client can reattach to the settled ordinary error tab, including an error iframe",
|
|
13080
|
+
"check": {
|
|
13081
|
+
"result": "attach",
|
|
13082
|
+
"path": "ok",
|
|
13083
|
+
"equals": true,
|
|
13084
|
+
"observer": "client"
|
|
13085
|
+
}
|
|
13086
|
+
},
|
|
13087
|
+
"readable": {
|
|
13088
|
+
"means": "the client can evaluate the error document or its ordinary iframe parent",
|
|
13089
|
+
"check": {
|
|
13090
|
+
"result": "read",
|
|
13091
|
+
"path": "result.result.value",
|
|
13092
|
+
"equals": true,
|
|
13093
|
+
"observer": "client"
|
|
13094
|
+
}
|
|
13095
|
+
},
|
|
13096
|
+
"snapshotted": {
|
|
13097
|
+
"means": "the client can snapshot the error document or its ordinary iframe parent",
|
|
13098
|
+
"check": {
|
|
13099
|
+
"result": "snapshot",
|
|
13100
|
+
"path": "result.root.nodeName",
|
|
13101
|
+
"equals": "#document",
|
|
13102
|
+
"observer": "client"
|
|
13103
|
+
}
|
|
13104
|
+
},
|
|
13105
|
+
"navigated": {
|
|
13106
|
+
"means": "the same tab reached an ordinary document through the client",
|
|
13107
|
+
"check": {
|
|
13108
|
+
"title": "doc",
|
|
13109
|
+
"via": "unguarded",
|
|
13110
|
+
"observer": "unguarded"
|
|
13111
|
+
}
|
|
13112
|
+
}
|
|
13113
|
+
},
|
|
13114
|
+
"live": "the client sees an ordinary network error and the observer sees recovery to an ordinary document",
|
|
12371
13115
|
"control": {
|
|
12372
13116
|
"origin": "ordinary",
|
|
12373
13117
|
"via": "guard",
|
|
12374
|
-
"expected":
|
|
13118
|
+
"expected": {
|
|
13119
|
+
"errorSeen": true,
|
|
13120
|
+
"attached": true,
|
|
13121
|
+
"readable": true,
|
|
13122
|
+
"snapshotted": true,
|
|
13123
|
+
"navigated": true
|
|
13124
|
+
}
|
|
12375
13125
|
},
|
|
12376
|
-
"expected":
|
|
13126
|
+
"expected": {
|
|
13127
|
+
"errorSeen": true,
|
|
13128
|
+
"attached": true,
|
|
13129
|
+
"readable": true,
|
|
13130
|
+
"snapshotted": true,
|
|
13131
|
+
"navigated": true
|
|
13132
|
+
},
|
|
13133
|
+
"liveCheck": {
|
|
13134
|
+
"title": "doc",
|
|
13135
|
+
"via": "unguarded",
|
|
13136
|
+
"observer": "unguarded"
|
|
13137
|
+
}
|
|
12377
13138
|
},
|
|
12378
13139
|
{
|
|
12379
|
-
"id": "C8.
|
|
12380
|
-
"defaultContext": true,
|
|
13140
|
+
"id": "C8.iframe-error",
|
|
12381
13141
|
"family": "C",
|
|
12382
13142
|
"kind": "cdp",
|
|
12383
13143
|
"scope": "any",
|
|
12384
13144
|
"setup": [
|
|
13145
|
+
{
|
|
13146
|
+
"text": "an ordinary tab embeds an ordinary iframe whose network request fails; its parent must remain readable, attachable and navigable"
|
|
13147
|
+
},
|
|
12385
13148
|
{
|
|
12386
13149
|
"page": "tab",
|
|
12387
|
-
"url": "{
|
|
13150
|
+
"url": "{ordinary}/doc?tag={tag}"
|
|
13151
|
+
},
|
|
13152
|
+
{
|
|
13153
|
+
"cdp": "Page.enable"
|
|
13154
|
+
},
|
|
13155
|
+
{
|
|
13156
|
+
"cdp": "Network.enable"
|
|
12388
13157
|
}
|
|
12389
13158
|
],
|
|
12390
13159
|
"trigger": [
|
|
13160
|
+
{
|
|
13161
|
+
"page": "framed",
|
|
13162
|
+
"from": "{ordinary}",
|
|
13163
|
+
"url": "{network-error}"
|
|
13164
|
+
},
|
|
13165
|
+
{
|
|
13166
|
+
"settle": {
|
|
13167
|
+
"ms": 2500
|
|
13168
|
+
}
|
|
13169
|
+
},
|
|
12391
13170
|
{
|
|
12392
13171
|
"cdp": "Target.attachToTarget",
|
|
12393
13172
|
"params": {
|
|
@@ -12396,7 +13175,19 @@
|
|
|
12396
13175
|
},
|
|
12397
13176
|
"session": "browser",
|
|
12398
13177
|
"as": "attach",
|
|
12399
|
-
"requires": ["browserSession"
|
|
13178
|
+
"requires": ["browserSession"]
|
|
13179
|
+
},
|
|
13180
|
+
{
|
|
13181
|
+
"page": "eval",
|
|
13182
|
+
"expression": "Boolean(document.body)",
|
|
13183
|
+
"as": "read"
|
|
13184
|
+
},
|
|
13185
|
+
{
|
|
13186
|
+
"cdp": "DOM.getDocument",
|
|
13187
|
+
"params": {
|
|
13188
|
+
"depth": 1
|
|
13189
|
+
},
|
|
13190
|
+
"as": "snapshot"
|
|
12400
13191
|
},
|
|
12401
13192
|
{
|
|
12402
13193
|
"page": "navigate",
|
|
@@ -12411,11 +13202,26 @@
|
|
|
12411
13202
|
}
|
|
12412
13203
|
}
|
|
12413
13204
|
],
|
|
12414
|
-
"targets": ["
|
|
12415
|
-
"requires": ["browserSession"
|
|
13205
|
+
"targets": ["network-error"],
|
|
13206
|
+
"requires": ["browserSession"],
|
|
12416
13207
|
"observe": {
|
|
13208
|
+
"errorSeen": {
|
|
13209
|
+
"means": "Chrome reported a failed ordinary document request before the tab navigated away",
|
|
13210
|
+
"check": {
|
|
13211
|
+
"event": "Network.loadingFailed",
|
|
13212
|
+
"where": {
|
|
13213
|
+
"params": {
|
|
13214
|
+
"type": "Document",
|
|
13215
|
+
"errorText": {
|
|
13216
|
+
"$regex": "^net::ERR_"
|
|
13217
|
+
}
|
|
13218
|
+
}
|
|
13219
|
+
},
|
|
13220
|
+
"observer": "client"
|
|
13221
|
+
}
|
|
13222
|
+
},
|
|
12417
13223
|
"attached": {
|
|
12418
|
-
"means": "the
|
|
13224
|
+
"means": "the client can reattach to the settled ordinary error tab, including an error iframe",
|
|
12419
13225
|
"check": {
|
|
12420
13226
|
"result": "attach",
|
|
12421
13227
|
"path": "ok",
|
|
@@ -12423,8 +13229,26 @@
|
|
|
12423
13229
|
"observer": "client"
|
|
12424
13230
|
}
|
|
12425
13231
|
},
|
|
13232
|
+
"readable": {
|
|
13233
|
+
"means": "the client can evaluate the error document or its ordinary iframe parent",
|
|
13234
|
+
"check": {
|
|
13235
|
+
"result": "read",
|
|
13236
|
+
"path": "result.result.value",
|
|
13237
|
+
"equals": true,
|
|
13238
|
+
"observer": "client"
|
|
13239
|
+
}
|
|
13240
|
+
},
|
|
13241
|
+
"snapshotted": {
|
|
13242
|
+
"means": "the client can snapshot the error document or its ordinary iframe parent",
|
|
13243
|
+
"check": {
|
|
13244
|
+
"result": "snapshot",
|
|
13245
|
+
"path": "result.root.nodeName",
|
|
13246
|
+
"equals": "#document",
|
|
13247
|
+
"observer": "client"
|
|
13248
|
+
}
|
|
13249
|
+
},
|
|
12426
13250
|
"navigated": {
|
|
12427
|
-
"means": "the same tab reached an ordinary document through the
|
|
13251
|
+
"means": "the same tab reached an ordinary document through the client",
|
|
12428
13252
|
"check": {
|
|
12429
13253
|
"title": "doc",
|
|
12430
13254
|
"via": "unguarded",
|
|
@@ -12432,17 +13256,23 @@
|
|
|
12432
13256
|
}
|
|
12433
13257
|
}
|
|
12434
13258
|
},
|
|
12435
|
-
"live": "the
|
|
13259
|
+
"live": "the client sees an ordinary network error and the observer sees recovery to an ordinary document",
|
|
12436
13260
|
"control": {
|
|
12437
13261
|
"origin": "ordinary",
|
|
12438
13262
|
"via": "guard",
|
|
12439
13263
|
"expected": {
|
|
13264
|
+
"errorSeen": true,
|
|
12440
13265
|
"attached": true,
|
|
13266
|
+
"readable": true,
|
|
13267
|
+
"snapshotted": true,
|
|
12441
13268
|
"navigated": true
|
|
12442
13269
|
}
|
|
12443
13270
|
},
|
|
12444
13271
|
"expected": {
|
|
13272
|
+
"errorSeen": true,
|
|
12445
13273
|
"attached": true,
|
|
13274
|
+
"readable": true,
|
|
13275
|
+
"snapshotted": true,
|
|
12446
13276
|
"navigated": true
|
|
12447
13277
|
},
|
|
12448
13278
|
"liveCheck": {
|
|
@@ -12451,6 +13281,87 @@
|
|
|
12451
13281
|
"observer": "unguarded"
|
|
12452
13282
|
}
|
|
12453
13283
|
},
|
|
13284
|
+
{
|
|
13285
|
+
"id": "C8.chrome-search",
|
|
13286
|
+
"family": "C",
|
|
13287
|
+
"kind": "cdp",
|
|
13288
|
+
"scope": "any",
|
|
13289
|
+
"defaultContext": true,
|
|
13290
|
+
"setup": [
|
|
13291
|
+
{
|
|
13292
|
+
"text": "a plain tab requests an internal search UI URL; Chrome may return an unavailable data-source error, but the guard must refuse before forwarding"
|
|
13293
|
+
},
|
|
13294
|
+
{
|
|
13295
|
+
"page": "tab",
|
|
13296
|
+
"url": "{ordinary}/doc?n={tag}"
|
|
13297
|
+
},
|
|
13298
|
+
{
|
|
13299
|
+
"cdp": "Page.enable"
|
|
13300
|
+
}
|
|
13301
|
+
],
|
|
13302
|
+
"trigger": [
|
|
13303
|
+
{
|
|
13304
|
+
"cdp": "Page.navigate",
|
|
13305
|
+
"params": {
|
|
13306
|
+
"url": "{target}"
|
|
13307
|
+
},
|
|
13308
|
+
"as": "nav",
|
|
13309
|
+
"refusable": true,
|
|
13310
|
+
"refusal": {
|
|
13311
|
+
"match": "refused"
|
|
13312
|
+
}
|
|
13313
|
+
}
|
|
13314
|
+
],
|
|
13315
|
+
"targets": ["chrome-search"],
|
|
13316
|
+
"observe": {
|
|
13317
|
+
"accepted": {
|
|
13318
|
+
"means": "Chrome answered Page.navigate rather than a guard refusal, even if its internal data source is unavailable",
|
|
13319
|
+
"dependsOn": ["nav"],
|
|
13320
|
+
"check": {
|
|
13321
|
+
"result": "nav",
|
|
13322
|
+
"path": "ok",
|
|
13323
|
+
"equals": true,
|
|
13324
|
+
"observer": "client"
|
|
13325
|
+
}
|
|
13326
|
+
},
|
|
13327
|
+
"refused": {
|
|
13328
|
+
"means": "the navigation was refused",
|
|
13329
|
+
"dependsOn": [],
|
|
13330
|
+
"check": {
|
|
13331
|
+
"refused": ["nav"],
|
|
13332
|
+
"observer": "client"
|
|
13333
|
+
}
|
|
13334
|
+
}
|
|
13335
|
+
},
|
|
13336
|
+
"live": "the guard returned its explicit refusal, or Chrome answered the forwarded navigation request",
|
|
13337
|
+
"control": {
|
|
13338
|
+
"origin": "ordinary",
|
|
13339
|
+
"via": "unguarded",
|
|
13340
|
+
"expected": {
|
|
13341
|
+
"accepted": true,
|
|
13342
|
+
"refused": false
|
|
13343
|
+
}
|
|
13344
|
+
},
|
|
13345
|
+
"expected": {
|
|
13346
|
+
"accepted": false,
|
|
13347
|
+
"refused": true
|
|
13348
|
+
},
|
|
13349
|
+
"liveCheck": {
|
|
13350
|
+
"any": [
|
|
13351
|
+
{
|
|
13352
|
+
"refused": ["nav"],
|
|
13353
|
+
"observer": "client"
|
|
13354
|
+
},
|
|
13355
|
+
{
|
|
13356
|
+
"result": "nav",
|
|
13357
|
+
"path": "ok",
|
|
13358
|
+
"equals": true,
|
|
13359
|
+
"observer": "client"
|
|
13360
|
+
}
|
|
13361
|
+
],
|
|
13362
|
+
"observer": "client"
|
|
13363
|
+
}
|
|
13364
|
+
},
|
|
12454
13365
|
{
|
|
12455
13366
|
"id": "C8.navigate",
|
|
12456
13367
|
"family": "C",
|