@ai-ecoverse/slicc-browsers 1.21.1 → 1.22.1
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 +7 -6
- package/fixture-server.mjs +7 -0
- package/guard-driver.mjs +18 -2
- package/guard-runner.mjs +617 -123
- package/guard-vectors.json +1773 -13
- package/package.json +6 -5
- package/protected-error-page.mjs +10 -3
- package/protected-worker.mjs +511 -0
- package/schema/guard-vectors.schema.json +88 -1
package/guard-vectors.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"setVersion": "1.
|
|
3
|
+
"setVersion": "1.22.1",
|
|
4
4
|
"sources": [
|
|
5
5
|
{
|
|
6
6
|
"repo": "ai-ecoverse/slicc-cli",
|
|
@@ -103,9 +103,10 @@
|
|
|
103
103
|
"siteIsolationOff": "the browser runs without site isolation, so a cross-site iframe shares its parent's process",
|
|
104
104
|
"inboundDelay": "a harness gate holding browser-to-guard messages until release during a history restore, with seed and release evidence",
|
|
105
105
|
"forwardAudit": "a complete browser-side forwarding ledger for history-restore probes and for checks of a command's forwarded params (client.forwarded)",
|
|
106
|
-
"stockSetup": "the guard admits stock clients' setup calls: init scripts with no code (the no-code regex is matched on the whole string without the multiline flag), the four display emulation calls, bindings scoped to an isolated world, Page.createIsolatedWorld on an ordinary frame with grantUniveralAccess and contentSecurityPolicy stripped and no executionContextId for any other frame, and Target.setAutoAttach
|
|
106
|
+
"stockSetup": "the guard admits stock clients' setup calls: init scripts with no code (the no-code regex is matched on the whole string without the multiline flag), the four display emulation calls, bindings scoped to an isolated world, Page.createIsolatedWorld on an ordinary frame with grantUniveralAccess and contentSecurityPolicy stripped and no executionContextId for any other frame, and Target.setAutoAttach that either narrows to tab targets or hides per target so no protected-origin page, iframe or worker reaches the client (pages under the tab held like pages, with the same URL redaction in targetInfo)",
|
|
107
107
|
"syntheticAutoAttach": "the transport has no native Target.setAutoAttach, so the guard attaches new tabs, pages and their children itself and synthesizes Target.attachedToTarget, with the same placement and holds",
|
|
108
|
-
"secureOrigin": "the fixture and page origins are secure contexts (HTTPS), so service worker registration is available"
|
|
108
|
+
"secureOrigin": "the fixture and page origins are secure contexts (HTTPS), so service worker registration is available",
|
|
109
|
+
"closeProtected": "the guard lets Target.closeTarget close a protected tab"
|
|
109
110
|
},
|
|
110
111
|
"placeholders": {
|
|
111
112
|
"target": "the target's origin; {plain} on the control",
|
|
@@ -130,7 +131,8 @@
|
|
|
130
131
|
"probe": "guard-driver.mjs probe({log}, {tag})",
|
|
131
132
|
"pageTarget": "the current page target id",
|
|
132
133
|
"responseOrigin": "the fixture response CORS origin",
|
|
133
|
-
"browserUi": "the id of one of Chrome's own browser_ui targets, which the runner looks up with its own CDP"
|
|
134
|
+
"browserUi": "the id of one of Chrome's own browser_ui targets, which the runner looks up with its own CDP",
|
|
135
|
+
"workerTarget": "the id of the protected-origin worker the unguarded spawnWorker step created"
|
|
134
136
|
},
|
|
135
137
|
"vectors": [
|
|
136
138
|
{
|
|
@@ -1706,6 +1708,7 @@
|
|
|
1706
1708
|
},
|
|
1707
1709
|
"closeRefused": {
|
|
1708
1710
|
"means": "protected error-page restore: closeRefused",
|
|
1711
|
+
"unless": ["closeProtected"],
|
|
1709
1712
|
"check": {
|
|
1710
1713
|
"result": "errorPage",
|
|
1711
1714
|
"path": "result.closeRefused",
|
|
@@ -1713,6 +1716,16 @@
|
|
|
1713
1716
|
"observer": "client"
|
|
1714
1717
|
}
|
|
1715
1718
|
},
|
|
1719
|
+
"closed": {
|
|
1720
|
+
"means": "protected error-page restore: Target.closeTarget on the locked tab is answered with success and the tab is gone",
|
|
1721
|
+
"check": {
|
|
1722
|
+
"result": "errorPage",
|
|
1723
|
+
"path": "result.closed",
|
|
1724
|
+
"equals": true,
|
|
1725
|
+
"observer": "client"
|
|
1726
|
+
},
|
|
1727
|
+
"requires": ["closeProtected"]
|
|
1728
|
+
},
|
|
1716
1729
|
"attachRedacted": {
|
|
1717
1730
|
"means": "protected error-page restore: attachRedacted",
|
|
1718
1731
|
"check": {
|
|
@@ -1754,6 +1767,7 @@
|
|
|
1754
1767
|
"evaluateRefused": false,
|
|
1755
1768
|
"attachRefused": false,
|
|
1756
1769
|
"closeRefused": false,
|
|
1770
|
+
"closed": true,
|
|
1757
1771
|
"attachRedacted": false,
|
|
1758
1772
|
"fullURL": true
|
|
1759
1773
|
}
|
|
@@ -1770,6 +1784,7 @@
|
|
|
1770
1784
|
"evaluateRefused": true,
|
|
1771
1785
|
"attachRefused": true,
|
|
1772
1786
|
"closeRefused": true,
|
|
1787
|
+
"closed": true,
|
|
1773
1788
|
"attachRedacted": true,
|
|
1774
1789
|
"fullURL": false
|
|
1775
1790
|
}
|
|
@@ -1887,6 +1902,7 @@
|
|
|
1887
1902
|
},
|
|
1888
1903
|
"closeRefused": {
|
|
1889
1904
|
"means": "protected error-page sticky: closeRefused",
|
|
1905
|
+
"unless": ["closeProtected"],
|
|
1890
1906
|
"check": {
|
|
1891
1907
|
"result": "errorPage",
|
|
1892
1908
|
"path": "result.closeRefused",
|
|
@@ -1894,6 +1910,16 @@
|
|
|
1894
1910
|
"observer": "client"
|
|
1895
1911
|
}
|
|
1896
1912
|
},
|
|
1913
|
+
"closed": {
|
|
1914
|
+
"means": "protected error-page sticky: Target.closeTarget on the locked tab is answered with success and the tab is gone",
|
|
1915
|
+
"check": {
|
|
1916
|
+
"result": "errorPage",
|
|
1917
|
+
"path": "result.closed",
|
|
1918
|
+
"equals": true,
|
|
1919
|
+
"observer": "client"
|
|
1920
|
+
},
|
|
1921
|
+
"requires": ["closeProtected"]
|
|
1922
|
+
},
|
|
1897
1923
|
"stickyError": {
|
|
1898
1924
|
"means": "protected error-page sticky: stickyError",
|
|
1899
1925
|
"check": {
|
|
@@ -1944,6 +1970,7 @@
|
|
|
1944
1970
|
"evaluateRefused": false,
|
|
1945
1971
|
"attachRefused": false,
|
|
1946
1972
|
"closeRefused": false,
|
|
1973
|
+
"closed": true,
|
|
1947
1974
|
"stickyError": true,
|
|
1948
1975
|
"attachRedacted": false,
|
|
1949
1976
|
"fullURL": true
|
|
@@ -1961,6 +1988,7 @@
|
|
|
1961
1988
|
"evaluateRefused": true,
|
|
1962
1989
|
"attachRefused": true,
|
|
1963
1990
|
"closeRefused": true,
|
|
1991
|
+
"closed": true,
|
|
1964
1992
|
"stickyError": true,
|
|
1965
1993
|
"attachRedacted": true,
|
|
1966
1994
|
"fullURL": false
|
|
@@ -2080,6 +2108,7 @@
|
|
|
2080
2108
|
},
|
|
2081
2109
|
"closeRefused": {
|
|
2082
2110
|
"means": "protected error-page sticky (query): closeRefused",
|
|
2111
|
+
"unless": ["closeProtected"],
|
|
2083
2112
|
"check": {
|
|
2084
2113
|
"result": "errorPage",
|
|
2085
2114
|
"path": "result.closeRefused",
|
|
@@ -2087,6 +2116,16 @@
|
|
|
2087
2116
|
"observer": "client"
|
|
2088
2117
|
}
|
|
2089
2118
|
},
|
|
2119
|
+
"closed": {
|
|
2120
|
+
"means": "protected error-page sticky (query): Target.closeTarget on the locked tab is answered with success and the tab is gone",
|
|
2121
|
+
"check": {
|
|
2122
|
+
"result": "errorPage",
|
|
2123
|
+
"path": "result.closed",
|
|
2124
|
+
"equals": true,
|
|
2125
|
+
"observer": "client"
|
|
2126
|
+
},
|
|
2127
|
+
"requires": ["closeProtected"]
|
|
2128
|
+
},
|
|
2090
2129
|
"stickyError": {
|
|
2091
2130
|
"means": "protected error-page sticky (query): stickyError",
|
|
2092
2131
|
"check": {
|
|
@@ -2137,6 +2176,7 @@
|
|
|
2137
2176
|
"evaluateRefused": false,
|
|
2138
2177
|
"attachRefused": false,
|
|
2139
2178
|
"closeRefused": false,
|
|
2179
|
+
"closed": true,
|
|
2140
2180
|
"stickyError": true,
|
|
2141
2181
|
"attachRedacted": false,
|
|
2142
2182
|
"fullURL": true
|
|
@@ -2154,6 +2194,7 @@
|
|
|
2154
2194
|
"evaluateRefused": true,
|
|
2155
2195
|
"attachRefused": true,
|
|
2156
2196
|
"closeRefused": true,
|
|
2197
|
+
"closed": true,
|
|
2157
2198
|
"stickyError": true,
|
|
2158
2199
|
"attachRedacted": true,
|
|
2159
2200
|
"fullURL": false
|
|
@@ -2273,6 +2314,7 @@
|
|
|
2273
2314
|
},
|
|
2274
2315
|
"closeRefused": {
|
|
2275
2316
|
"means": "protected error-page sticky (fragment): closeRefused",
|
|
2317
|
+
"unless": ["closeProtected"],
|
|
2276
2318
|
"check": {
|
|
2277
2319
|
"result": "errorPage",
|
|
2278
2320
|
"path": "result.closeRefused",
|
|
@@ -2280,6 +2322,16 @@
|
|
|
2280
2322
|
"observer": "client"
|
|
2281
2323
|
}
|
|
2282
2324
|
},
|
|
2325
|
+
"closed": {
|
|
2326
|
+
"means": "protected error-page sticky (fragment): Target.closeTarget on the locked tab is answered with success and the tab is gone",
|
|
2327
|
+
"check": {
|
|
2328
|
+
"result": "errorPage",
|
|
2329
|
+
"path": "result.closed",
|
|
2330
|
+
"equals": true,
|
|
2331
|
+
"observer": "client"
|
|
2332
|
+
},
|
|
2333
|
+
"requires": ["closeProtected"]
|
|
2334
|
+
},
|
|
2283
2335
|
"stickyError": {
|
|
2284
2336
|
"means": "protected error-page sticky (fragment): stickyError",
|
|
2285
2337
|
"check": {
|
|
@@ -2330,6 +2382,7 @@
|
|
|
2330
2382
|
"evaluateRefused": false,
|
|
2331
2383
|
"attachRefused": false,
|
|
2332
2384
|
"closeRefused": false,
|
|
2385
|
+
"closed": true,
|
|
2333
2386
|
"stickyError": true,
|
|
2334
2387
|
"attachRedacted": false,
|
|
2335
2388
|
"fullURL": true
|
|
@@ -2347,6 +2400,7 @@
|
|
|
2347
2400
|
"evaluateRefused": true,
|
|
2348
2401
|
"attachRefused": true,
|
|
2349
2402
|
"closeRefused": true,
|
|
2403
|
+
"closed": true,
|
|
2350
2404
|
"stickyError": true,
|
|
2351
2405
|
"attachRedacted": true,
|
|
2352
2406
|
"fullURL": false
|
|
@@ -26267,7 +26321,7 @@
|
|
|
26267
26321
|
{
|
|
26268
26322
|
"cdp": "Page.addScriptToEvaluateOnNewDocument",
|
|
26269
26323
|
"params": {
|
|
26270
|
-
"source": "// slicc
|
|
26324
|
+
"source": "// slicc
fetch(new URL('/doc?n=bound-ls-{tag}', location.href)).catch(()=>{})\n//# sourceURL=slicc-ls-{tag}\n",
|
|
26271
26325
|
"worldName": "slicc-bound-ls-{tag}"
|
|
26272
26326
|
},
|
|
26273
26327
|
"as": "boundLs",
|
|
@@ -26279,7 +26333,7 @@
|
|
|
26279
26333
|
{
|
|
26280
26334
|
"cdp": "Page.addScriptToEvaluateOnNewDocument",
|
|
26281
26335
|
"params": {
|
|
26282
|
-
"source": "// slicc
|
|
26336
|
+
"source": "// slicc
fetch(new URL('/doc?n=bound-ps-{tag}', location.href)).catch(()=>{})\n//# sourceURL=slicc-ps-{tag}\n",
|
|
26283
26337
|
"worldName": "slicc-bound-ps-{tag}"
|
|
26284
26338
|
},
|
|
26285
26339
|
"as": "boundPs",
|
|
@@ -26315,7 +26369,7 @@
|
|
|
26315
26369
|
{
|
|
26316
26370
|
"cdp": "Page.addScriptToEvaluateOnNewDocument",
|
|
26317
26371
|
"params": {
|
|
26318
|
-
"source": "
|
|
26372
|
+
"source": "fetch(new URL('/doc?n=bound-bom-{tag}', location.href)).catch(()=>{})\n//# sourceURL=slicc-bom-{tag}\n",
|
|
26319
26373
|
"worldName": "slicc-bound-bom-{tag}"
|
|
26320
26374
|
},
|
|
26321
26375
|
"as": "boundBom",
|
|
@@ -27963,8 +28017,7 @@
|
|
|
27963
28017
|
"or": {
|
|
27964
28018
|
"served": "{target}/doc?n={tag}",
|
|
27965
28019
|
"observer": "fixture"
|
|
27966
|
-
}
|
|
27967
|
-
"required": true
|
|
28020
|
+
}
|
|
27968
28021
|
}
|
|
27969
28022
|
},
|
|
27970
28023
|
{
|
|
@@ -29095,9 +29148,10 @@
|
|
|
29095
29148
|
},
|
|
29096
29149
|
"expected": {
|
|
29097
29150
|
"admitted": true,
|
|
29098
|
-
"workerAttached":
|
|
29151
|
+
"workerAttached": "either",
|
|
29099
29152
|
"workerExists": true
|
|
29100
|
-
}
|
|
29153
|
+
},
|
|
29154
|
+
"designDependent": ["workerAttached"]
|
|
29101
29155
|
},
|
|
29102
29156
|
{
|
|
29103
29157
|
"id": "C3.tab-iframe-leak",
|
|
@@ -29396,8 +29450,1714 @@
|
|
|
29396
29450
|
"expected": {
|
|
29397
29451
|
"admitted": true,
|
|
29398
29452
|
"workerExists": true,
|
|
29399
|
-
"workerAttached":
|
|
29400
|
-
}
|
|
29453
|
+
"workerAttached": "either"
|
|
29454
|
+
},
|
|
29455
|
+
"designDependent": ["workerAttached"]
|
|
29456
|
+
},
|
|
29457
|
+
{
|
|
29458
|
+
"id": "C3.protected-worker-dedicated",
|
|
29459
|
+
"family": "C",
|
|
29460
|
+
"kind": "cdp",
|
|
29461
|
+
"scope": "any",
|
|
29462
|
+
"setup": [
|
|
29463
|
+
{
|
|
29464
|
+
"page": "tab",
|
|
29465
|
+
"url": "{ordinary}/doc?n=opener-{tag}"
|
|
29466
|
+
},
|
|
29467
|
+
{
|
|
29468
|
+
"cdp": "Target.setAutoAttach",
|
|
29469
|
+
"params": {
|
|
29470
|
+
"autoAttach": true,
|
|
29471
|
+
"waitForDebuggerOnStart": true,
|
|
29472
|
+
"flatten": true,
|
|
29473
|
+
"filter": [
|
|
29474
|
+
{
|
|
29475
|
+
"type": "page",
|
|
29476
|
+
"exclude": true
|
|
29477
|
+
},
|
|
29478
|
+
{}
|
|
29479
|
+
]
|
|
29480
|
+
},
|
|
29481
|
+
"session": "browser",
|
|
29482
|
+
"as": "tabs",
|
|
29483
|
+
"requires": ["autoAttach", "browserSession", "stockSetup"]
|
|
29484
|
+
},
|
|
29485
|
+
{
|
|
29486
|
+
"children": [
|
|
29487
|
+
{
|
|
29488
|
+
"cdp": "Target.setAutoAttach",
|
|
29489
|
+
"params": {
|
|
29490
|
+
"autoAttach": true,
|
|
29491
|
+
"waitForDebuggerOnStart": true,
|
|
29492
|
+
"flatten": true,
|
|
29493
|
+
"filter": [{}]
|
|
29494
|
+
}
|
|
29495
|
+
}
|
|
29496
|
+
],
|
|
29497
|
+
"requires": ["autoAttach"],
|
|
29498
|
+
"where": {
|
|
29499
|
+
"type": "page"
|
|
29500
|
+
}
|
|
29501
|
+
}
|
|
29502
|
+
],
|
|
29503
|
+
"trigger": [
|
|
29504
|
+
{
|
|
29505
|
+
"spawnWorker": "dedicated",
|
|
29506
|
+
"url": "{target}/doc?n=host-{tag}",
|
|
29507
|
+
"as": "spawn",
|
|
29508
|
+
"requires": ["autoAttach"]
|
|
29509
|
+
},
|
|
29510
|
+
{
|
|
29511
|
+
"settle": {
|
|
29512
|
+
"served": "{target}/doc?n=host-{tag}",
|
|
29513
|
+
"ms": 5000,
|
|
29514
|
+
"required": true
|
|
29515
|
+
}
|
|
29516
|
+
},
|
|
29517
|
+
{
|
|
29518
|
+
"cdp": "Target.attachToTarget",
|
|
29519
|
+
"params": {
|
|
29520
|
+
"targetId": "{workerTarget}",
|
|
29521
|
+
"flatten": true
|
|
29522
|
+
},
|
|
29523
|
+
"session": "browser",
|
|
29524
|
+
"as": "attach",
|
|
29525
|
+
"requires": ["browserSession"],
|
|
29526
|
+
"reuseSession": true,
|
|
29527
|
+
"refusable": true,
|
|
29528
|
+
"refusal": {
|
|
29529
|
+
"match": "refused"
|
|
29530
|
+
}
|
|
29531
|
+
},
|
|
29532
|
+
{
|
|
29533
|
+
"wait": 1500
|
|
29534
|
+
},
|
|
29535
|
+
{
|
|
29536
|
+
"cdp": "Target.getTargets",
|
|
29537
|
+
"session": "browser",
|
|
29538
|
+
"as": "targets",
|
|
29539
|
+
"requires": ["browserSession"]
|
|
29540
|
+
},
|
|
29541
|
+
{
|
|
29542
|
+
"probeSessions": {
|
|
29543
|
+
"since": "spawn",
|
|
29544
|
+
"path": "/worker.js",
|
|
29545
|
+
"attach": ["attach"]
|
|
29546
|
+
},
|
|
29547
|
+
"as": "probe",
|
|
29548
|
+
"requires": ["autoAttach"]
|
|
29549
|
+
}
|
|
29550
|
+
],
|
|
29551
|
+
"targets": ["seven", "vault"],
|
|
29552
|
+
"requires": ["autoAttach", "browserSession", "stockSetup"],
|
|
29553
|
+
"observe": {
|
|
29554
|
+
"admitted": {
|
|
29555
|
+
"means": "the guard answered tabs without an error and the unguarded spawn finished",
|
|
29556
|
+
"check": {
|
|
29557
|
+
"all": [
|
|
29558
|
+
{
|
|
29559
|
+
"result": "tabs",
|
|
29560
|
+
"path": "ok",
|
|
29561
|
+
"equals": true,
|
|
29562
|
+
"observer": "client"
|
|
29563
|
+
},
|
|
29564
|
+
{
|
|
29565
|
+
"result": "spawn",
|
|
29566
|
+
"path": "result.exists",
|
|
29567
|
+
"equals": true,
|
|
29568
|
+
"observer": "client"
|
|
29569
|
+
}
|
|
29570
|
+
],
|
|
29571
|
+
"observer": "client"
|
|
29572
|
+
},
|
|
29573
|
+
"dependsOn": []
|
|
29574
|
+
},
|
|
29575
|
+
"workerExists": {
|
|
29576
|
+
"means": "the unguarded spawn left a live protected-origin worker",
|
|
29577
|
+
"dependsOn": [],
|
|
29578
|
+
"check": {
|
|
29579
|
+
"result": "spawn",
|
|
29580
|
+
"path": "result.exists",
|
|
29581
|
+
"equals": true,
|
|
29582
|
+
"observer": "client"
|
|
29583
|
+
}
|
|
29584
|
+
},
|
|
29585
|
+
"workerAttached": {
|
|
29586
|
+
"means": "the client got Target.attachedToTarget for a worker",
|
|
29587
|
+
"dependsOn": [],
|
|
29588
|
+
"check": {
|
|
29589
|
+
"any": [
|
|
29590
|
+
{
|
|
29591
|
+
"event": "Target.attachedToTarget",
|
|
29592
|
+
"where": {
|
|
29593
|
+
"params": {
|
|
29594
|
+
"targetInfo": {
|
|
29595
|
+
"targetId": "{workerTarget}"
|
|
29596
|
+
}
|
|
29597
|
+
}
|
|
29598
|
+
},
|
|
29599
|
+
"observer": "client"
|
|
29600
|
+
},
|
|
29601
|
+
{
|
|
29602
|
+
"event": "Target.attachedToTarget",
|
|
29603
|
+
"where": {
|
|
29604
|
+
"params": {
|
|
29605
|
+
"targetInfo": {
|
|
29606
|
+
"type": "worker"
|
|
29607
|
+
}
|
|
29608
|
+
}
|
|
29609
|
+
},
|
|
29610
|
+
"observer": "client"
|
|
29611
|
+
},
|
|
29612
|
+
{
|
|
29613
|
+
"event": "Target.attachedToTarget",
|
|
29614
|
+
"where": {
|
|
29615
|
+
"params": {
|
|
29616
|
+
"targetInfo": {
|
|
29617
|
+
"type": "worker",
|
|
29618
|
+
"url": {
|
|
29619
|
+
"$contains": "{target}"
|
|
29620
|
+
}
|
|
29621
|
+
}
|
|
29622
|
+
}
|
|
29623
|
+
},
|
|
29624
|
+
"observer": "client"
|
|
29625
|
+
},
|
|
29626
|
+
{
|
|
29627
|
+
"event": "Target.attachedToTarget",
|
|
29628
|
+
"where": {
|
|
29629
|
+
"params": {
|
|
29630
|
+
"targetInfo": {
|
|
29631
|
+
"type": "worker",
|
|
29632
|
+
"url": {
|
|
29633
|
+
"$contains": "/worker.js"
|
|
29634
|
+
}
|
|
29635
|
+
}
|
|
29636
|
+
}
|
|
29637
|
+
},
|
|
29638
|
+
"observer": "client"
|
|
29639
|
+
}
|
|
29640
|
+
],
|
|
29641
|
+
"observer": "client"
|
|
29642
|
+
}
|
|
29643
|
+
},
|
|
29644
|
+
"workerListed": {
|
|
29645
|
+
"means": "Target.getTargets shows the protected worker script URL to the client",
|
|
29646
|
+
"dependsOn": [],
|
|
29647
|
+
"check": {
|
|
29648
|
+
"any": [
|
|
29649
|
+
{
|
|
29650
|
+
"result": "targets",
|
|
29651
|
+
"path": "result.targetInfos",
|
|
29652
|
+
"equals": {
|
|
29653
|
+
"$some": {
|
|
29654
|
+
"targetId": "{workerTarget}"
|
|
29655
|
+
}
|
|
29656
|
+
},
|
|
29657
|
+
"observer": "client"
|
|
29658
|
+
},
|
|
29659
|
+
{
|
|
29660
|
+
"result": "targets",
|
|
29661
|
+
"path": "result.targetInfos",
|
|
29662
|
+
"equals": {
|
|
29663
|
+
"$some": {
|
|
29664
|
+
"type": "worker"
|
|
29665
|
+
}
|
|
29666
|
+
},
|
|
29667
|
+
"observer": "client"
|
|
29668
|
+
},
|
|
29669
|
+
{
|
|
29670
|
+
"result": "targets",
|
|
29671
|
+
"path": "result.targetInfos",
|
|
29672
|
+
"equals": {
|
|
29673
|
+
"$some": {
|
|
29674
|
+
"type": "worker",
|
|
29675
|
+
"url": {
|
|
29676
|
+
"$contains": "{target}"
|
|
29677
|
+
}
|
|
29678
|
+
}
|
|
29679
|
+
},
|
|
29680
|
+
"observer": "client"
|
|
29681
|
+
},
|
|
29682
|
+
{
|
|
29683
|
+
"result": "targets",
|
|
29684
|
+
"path": "result.targetInfos",
|
|
29685
|
+
"equals": {
|
|
29686
|
+
"$some": {
|
|
29687
|
+
"type": "worker",
|
|
29688
|
+
"url": {
|
|
29689
|
+
"$contains": "/worker.js"
|
|
29690
|
+
}
|
|
29691
|
+
}
|
|
29692
|
+
},
|
|
29693
|
+
"observer": "client"
|
|
29694
|
+
}
|
|
29695
|
+
],
|
|
29696
|
+
"observer": "client"
|
|
29697
|
+
},
|
|
29698
|
+
"absencePoll": true
|
|
29699
|
+
},
|
|
29700
|
+
"workerDiscovered": {
|
|
29701
|
+
"means": "a discovery event carries the protected worker script URL to the client",
|
|
29702
|
+
"dependsOn": [],
|
|
29703
|
+
"requires": ["discovery"],
|
|
29704
|
+
"check": {
|
|
29705
|
+
"any": [
|
|
29706
|
+
{
|
|
29707
|
+
"event": "Target.targetCreated",
|
|
29708
|
+
"where": {
|
|
29709
|
+
"params": {
|
|
29710
|
+
"targetInfo": {
|
|
29711
|
+
"targetId": "{workerTarget}"
|
|
29712
|
+
}
|
|
29713
|
+
}
|
|
29714
|
+
},
|
|
29715
|
+
"observer": "client"
|
|
29716
|
+
},
|
|
29717
|
+
{
|
|
29718
|
+
"event": "Target.targetInfoChanged",
|
|
29719
|
+
"where": {
|
|
29720
|
+
"params": {
|
|
29721
|
+
"targetInfo": {
|
|
29722
|
+
"targetId": "{workerTarget}"
|
|
29723
|
+
}
|
|
29724
|
+
}
|
|
29725
|
+
},
|
|
29726
|
+
"observer": "client"
|
|
29727
|
+
},
|
|
29728
|
+
{
|
|
29729
|
+
"event": "Target.targetCreated",
|
|
29730
|
+
"where": {
|
|
29731
|
+
"params": {
|
|
29732
|
+
"targetInfo": {
|
|
29733
|
+
"type": "worker"
|
|
29734
|
+
}
|
|
29735
|
+
}
|
|
29736
|
+
},
|
|
29737
|
+
"observer": "client"
|
|
29738
|
+
},
|
|
29739
|
+
{
|
|
29740
|
+
"event": "Target.targetInfoChanged",
|
|
29741
|
+
"where": {
|
|
29742
|
+
"params": {
|
|
29743
|
+
"targetInfo": {
|
|
29744
|
+
"type": "worker"
|
|
29745
|
+
}
|
|
29746
|
+
}
|
|
29747
|
+
},
|
|
29748
|
+
"observer": "client"
|
|
29749
|
+
},
|
|
29750
|
+
{
|
|
29751
|
+
"event": "Target.targetCreated",
|
|
29752
|
+
"where": {
|
|
29753
|
+
"params": {
|
|
29754
|
+
"targetInfo": {
|
|
29755
|
+
"type": "worker",
|
|
29756
|
+
"url": {
|
|
29757
|
+
"$contains": "{target}"
|
|
29758
|
+
}
|
|
29759
|
+
}
|
|
29760
|
+
}
|
|
29761
|
+
},
|
|
29762
|
+
"observer": "client"
|
|
29763
|
+
},
|
|
29764
|
+
{
|
|
29765
|
+
"event": "Target.targetCreated",
|
|
29766
|
+
"where": {
|
|
29767
|
+
"params": {
|
|
29768
|
+
"targetInfo": {
|
|
29769
|
+
"type": "worker",
|
|
29770
|
+
"url": {
|
|
29771
|
+
"$contains": "/worker.js"
|
|
29772
|
+
}
|
|
29773
|
+
}
|
|
29774
|
+
}
|
|
29775
|
+
},
|
|
29776
|
+
"observer": "client"
|
|
29777
|
+
},
|
|
29778
|
+
{
|
|
29779
|
+
"event": "Target.targetInfoChanged",
|
|
29780
|
+
"where": {
|
|
29781
|
+
"params": {
|
|
29782
|
+
"targetInfo": {
|
|
29783
|
+
"type": "worker",
|
|
29784
|
+
"url": {
|
|
29785
|
+
"$contains": "{target}"
|
|
29786
|
+
}
|
|
29787
|
+
}
|
|
29788
|
+
}
|
|
29789
|
+
},
|
|
29790
|
+
"observer": "client"
|
|
29791
|
+
},
|
|
29792
|
+
{
|
|
29793
|
+
"event": "Target.targetInfoChanged",
|
|
29794
|
+
"where": {
|
|
29795
|
+
"params": {
|
|
29796
|
+
"targetInfo": {
|
|
29797
|
+
"type": "worker",
|
|
29798
|
+
"url": {
|
|
29799
|
+
"$contains": "/worker.js"
|
|
29800
|
+
}
|
|
29801
|
+
}
|
|
29802
|
+
}
|
|
29803
|
+
},
|
|
29804
|
+
"observer": "client"
|
|
29805
|
+
}
|
|
29806
|
+
],
|
|
29807
|
+
"observer": "client"
|
|
29808
|
+
}
|
|
29809
|
+
},
|
|
29810
|
+
"attachSession": {
|
|
29811
|
+
"means": "Target.attachToTarget on the worker targetId returned a session",
|
|
29812
|
+
"dependsOn": [],
|
|
29813
|
+
"check": {
|
|
29814
|
+
"result": "attach",
|
|
29815
|
+
"path": "result.sessionId",
|
|
29816
|
+
"equals": {
|
|
29817
|
+
"$regex": "."
|
|
29818
|
+
},
|
|
29819
|
+
"observer": "client"
|
|
29820
|
+
}
|
|
29821
|
+
},
|
|
29822
|
+
"attachRefused": {
|
|
29823
|
+
"means": "Target.attachToTarget on the worker targetId was refused",
|
|
29824
|
+
"dependsOn": [],
|
|
29825
|
+
"check": {
|
|
29826
|
+
"refused": ["attach"],
|
|
29827
|
+
"observer": "client"
|
|
29828
|
+
}
|
|
29829
|
+
},
|
|
29830
|
+
"workerReachable": {
|
|
29831
|
+
"means": "a client session can evaluate in the protected worker global scope",
|
|
29832
|
+
"dependsOn": [],
|
|
29833
|
+
"check": {
|
|
29834
|
+
"result": "probe",
|
|
29835
|
+
"path": "result.reachable",
|
|
29836
|
+
"equals": true,
|
|
29837
|
+
"observer": "client"
|
|
29838
|
+
}
|
|
29839
|
+
}
|
|
29840
|
+
},
|
|
29841
|
+
"live": "the stand-in served the protected host document and the unguarded worker still exists",
|
|
29842
|
+
"liveCheck": {
|
|
29843
|
+
"all": [
|
|
29844
|
+
{
|
|
29845
|
+
"loaded": "{target}/doc?n=host-{tag}",
|
|
29846
|
+
"observer": "fixture"
|
|
29847
|
+
},
|
|
29848
|
+
{
|
|
29849
|
+
"result": "spawn",
|
|
29850
|
+
"path": "result.exists",
|
|
29851
|
+
"equals": true,
|
|
29852
|
+
"observer": "client"
|
|
29853
|
+
}
|
|
29854
|
+
],
|
|
29855
|
+
"observer": "client"
|
|
29856
|
+
},
|
|
29857
|
+
"control": {
|
|
29858
|
+
"origin": "ordinary",
|
|
29859
|
+
"via": "unguarded",
|
|
29860
|
+
"expected": {
|
|
29861
|
+
"admitted": true,
|
|
29862
|
+
"workerExists": true,
|
|
29863
|
+
"workerAttached": "either",
|
|
29864
|
+
"workerListed": true,
|
|
29865
|
+
"attachSession": true,
|
|
29866
|
+
"attachRefused": false,
|
|
29867
|
+
"workerReachable": "either"
|
|
29868
|
+
}
|
|
29869
|
+
},
|
|
29870
|
+
"expected": {
|
|
29871
|
+
"admitted": true,
|
|
29872
|
+
"workerExists": true,
|
|
29873
|
+
"workerAttached": false,
|
|
29874
|
+
"workerListed": false,
|
|
29875
|
+
"workerDiscovered": false,
|
|
29876
|
+
"attachSession": false,
|
|
29877
|
+
"attachRefused": "either",
|
|
29878
|
+
"workerReachable": false
|
|
29879
|
+
},
|
|
29880
|
+
"designDependent": ["attachRefused", "workerAttached"]
|
|
29881
|
+
},
|
|
29882
|
+
{
|
|
29883
|
+
"id": "C3.protected-worker-shared",
|
|
29884
|
+
"family": "C",
|
|
29885
|
+
"kind": "cdp",
|
|
29886
|
+
"scope": "any",
|
|
29887
|
+
"setup": [
|
|
29888
|
+
{
|
|
29889
|
+
"page": "tab",
|
|
29890
|
+
"url": "{ordinary}/doc?n=opener-{tag}"
|
|
29891
|
+
},
|
|
29892
|
+
{
|
|
29893
|
+
"cdp": "Target.setAutoAttach",
|
|
29894
|
+
"params": {
|
|
29895
|
+
"autoAttach": true,
|
|
29896
|
+
"waitForDebuggerOnStart": false,
|
|
29897
|
+
"flatten": true,
|
|
29898
|
+
"filter": [
|
|
29899
|
+
{
|
|
29900
|
+
"type": "page",
|
|
29901
|
+
"exclude": true
|
|
29902
|
+
},
|
|
29903
|
+
{}
|
|
29904
|
+
]
|
|
29905
|
+
},
|
|
29906
|
+
"session": "browser",
|
|
29907
|
+
"as": "tabs",
|
|
29908
|
+
"requires": ["autoAttach", "browserSession", "stockSetup"]
|
|
29909
|
+
},
|
|
29910
|
+
{
|
|
29911
|
+
"children": [
|
|
29912
|
+
{
|
|
29913
|
+
"cdp": "Target.setAutoAttach",
|
|
29914
|
+
"params": {
|
|
29915
|
+
"autoAttach": true,
|
|
29916
|
+
"waitForDebuggerOnStart": true,
|
|
29917
|
+
"flatten": true,
|
|
29918
|
+
"filter": [{}]
|
|
29919
|
+
}
|
|
29920
|
+
}
|
|
29921
|
+
],
|
|
29922
|
+
"requires": ["autoAttach"],
|
|
29923
|
+
"where": {
|
|
29924
|
+
"type": "page"
|
|
29925
|
+
}
|
|
29926
|
+
}
|
|
29927
|
+
],
|
|
29928
|
+
"trigger": [
|
|
29929
|
+
{
|
|
29930
|
+
"spawnWorker": "shared",
|
|
29931
|
+
"url": "{target}/doc?n=host-{tag}",
|
|
29932
|
+
"as": "spawn",
|
|
29933
|
+
"requires": ["autoAttach"]
|
|
29934
|
+
},
|
|
29935
|
+
{
|
|
29936
|
+
"settle": {
|
|
29937
|
+
"served": "{target}/doc?n=host-{tag}",
|
|
29938
|
+
"ms": 5000,
|
|
29939
|
+
"required": true
|
|
29940
|
+
}
|
|
29941
|
+
},
|
|
29942
|
+
{
|
|
29943
|
+
"cdp": "Target.attachToTarget",
|
|
29944
|
+
"params": {
|
|
29945
|
+
"targetId": "{workerTarget}",
|
|
29946
|
+
"flatten": true
|
|
29947
|
+
},
|
|
29948
|
+
"session": "browser",
|
|
29949
|
+
"as": "attach",
|
|
29950
|
+
"requires": ["browserSession"],
|
|
29951
|
+
"reuseSession": true,
|
|
29952
|
+
"refusable": true,
|
|
29953
|
+
"refusal": {
|
|
29954
|
+
"match": "refused"
|
|
29955
|
+
}
|
|
29956
|
+
},
|
|
29957
|
+
{
|
|
29958
|
+
"wait": 1500
|
|
29959
|
+
},
|
|
29960
|
+
{
|
|
29961
|
+
"cdp": "Target.getTargets",
|
|
29962
|
+
"session": "browser",
|
|
29963
|
+
"as": "targets",
|
|
29964
|
+
"requires": ["browserSession"]
|
|
29965
|
+
},
|
|
29966
|
+
{
|
|
29967
|
+
"probeSessions": {
|
|
29968
|
+
"since": "spawn",
|
|
29969
|
+
"path": "/shared-worker.js",
|
|
29970
|
+
"attach": ["attach"]
|
|
29971
|
+
},
|
|
29972
|
+
"as": "probe",
|
|
29973
|
+
"requires": ["autoAttach"]
|
|
29974
|
+
}
|
|
29975
|
+
],
|
|
29976
|
+
"targets": ["seven", "vault"],
|
|
29977
|
+
"requires": ["autoAttach", "browserSession", "stockSetup"],
|
|
29978
|
+
"observe": {
|
|
29979
|
+
"admitted": {
|
|
29980
|
+
"means": "the guard answered tabs without an error and the unguarded spawn finished",
|
|
29981
|
+
"check": {
|
|
29982
|
+
"all": [
|
|
29983
|
+
{
|
|
29984
|
+
"result": "tabs",
|
|
29985
|
+
"path": "ok",
|
|
29986
|
+
"equals": true,
|
|
29987
|
+
"observer": "client"
|
|
29988
|
+
},
|
|
29989
|
+
{
|
|
29990
|
+
"result": "spawn",
|
|
29991
|
+
"path": "result.exists",
|
|
29992
|
+
"equals": true,
|
|
29993
|
+
"observer": "client"
|
|
29994
|
+
}
|
|
29995
|
+
],
|
|
29996
|
+
"observer": "client"
|
|
29997
|
+
},
|
|
29998
|
+
"dependsOn": []
|
|
29999
|
+
},
|
|
30000
|
+
"workerExists": {
|
|
30001
|
+
"means": "the unguarded spawn left a live protected-origin worker",
|
|
30002
|
+
"dependsOn": [],
|
|
30003
|
+
"check": {
|
|
30004
|
+
"result": "spawn",
|
|
30005
|
+
"path": "result.exists",
|
|
30006
|
+
"equals": true,
|
|
30007
|
+
"observer": "client"
|
|
30008
|
+
}
|
|
30009
|
+
},
|
|
30010
|
+
"workerAttached": {
|
|
30011
|
+
"means": "the client got Target.attachedToTarget for a shared_worker",
|
|
30012
|
+
"dependsOn": [],
|
|
30013
|
+
"check": {
|
|
30014
|
+
"any": [
|
|
30015
|
+
{
|
|
30016
|
+
"event": "Target.attachedToTarget",
|
|
30017
|
+
"where": {
|
|
30018
|
+
"params": {
|
|
30019
|
+
"targetInfo": {
|
|
30020
|
+
"targetId": "{workerTarget}"
|
|
30021
|
+
}
|
|
30022
|
+
}
|
|
30023
|
+
},
|
|
30024
|
+
"observer": "client"
|
|
30025
|
+
},
|
|
30026
|
+
{
|
|
30027
|
+
"event": "Target.attachedToTarget",
|
|
30028
|
+
"where": {
|
|
30029
|
+
"params": {
|
|
30030
|
+
"targetInfo": {
|
|
30031
|
+
"type": "shared_worker"
|
|
30032
|
+
}
|
|
30033
|
+
}
|
|
30034
|
+
},
|
|
30035
|
+
"observer": "client"
|
|
30036
|
+
},
|
|
30037
|
+
{
|
|
30038
|
+
"event": "Target.attachedToTarget",
|
|
30039
|
+
"where": {
|
|
30040
|
+
"params": {
|
|
30041
|
+
"targetInfo": {
|
|
30042
|
+
"type": "shared_worker",
|
|
30043
|
+
"url": {
|
|
30044
|
+
"$contains": "{target}"
|
|
30045
|
+
}
|
|
30046
|
+
}
|
|
30047
|
+
}
|
|
30048
|
+
},
|
|
30049
|
+
"observer": "client"
|
|
30050
|
+
},
|
|
30051
|
+
{
|
|
30052
|
+
"event": "Target.attachedToTarget",
|
|
30053
|
+
"where": {
|
|
30054
|
+
"params": {
|
|
30055
|
+
"targetInfo": {
|
|
30056
|
+
"type": "shared_worker",
|
|
30057
|
+
"url": {
|
|
30058
|
+
"$contains": "/shared-worker.js"
|
|
30059
|
+
}
|
|
30060
|
+
}
|
|
30061
|
+
}
|
|
30062
|
+
},
|
|
30063
|
+
"observer": "client"
|
|
30064
|
+
}
|
|
30065
|
+
],
|
|
30066
|
+
"observer": "client"
|
|
30067
|
+
}
|
|
30068
|
+
},
|
|
30069
|
+
"workerListed": {
|
|
30070
|
+
"means": "Target.getTargets shows the protected worker script URL to the client",
|
|
30071
|
+
"dependsOn": [],
|
|
30072
|
+
"check": {
|
|
30073
|
+
"any": [
|
|
30074
|
+
{
|
|
30075
|
+
"result": "targets",
|
|
30076
|
+
"path": "result.targetInfos",
|
|
30077
|
+
"equals": {
|
|
30078
|
+
"$some": {
|
|
30079
|
+
"targetId": "{workerTarget}"
|
|
30080
|
+
}
|
|
30081
|
+
},
|
|
30082
|
+
"observer": "client"
|
|
30083
|
+
},
|
|
30084
|
+
{
|
|
30085
|
+
"result": "targets",
|
|
30086
|
+
"path": "result.targetInfos",
|
|
30087
|
+
"equals": {
|
|
30088
|
+
"$some": {
|
|
30089
|
+
"type": "shared_worker"
|
|
30090
|
+
}
|
|
30091
|
+
},
|
|
30092
|
+
"observer": "client"
|
|
30093
|
+
},
|
|
30094
|
+
{
|
|
30095
|
+
"result": "targets",
|
|
30096
|
+
"path": "result.targetInfos",
|
|
30097
|
+
"equals": {
|
|
30098
|
+
"$some": {
|
|
30099
|
+
"type": "shared_worker",
|
|
30100
|
+
"url": {
|
|
30101
|
+
"$contains": "{target}"
|
|
30102
|
+
}
|
|
30103
|
+
}
|
|
30104
|
+
},
|
|
30105
|
+
"observer": "client"
|
|
30106
|
+
},
|
|
30107
|
+
{
|
|
30108
|
+
"result": "targets",
|
|
30109
|
+
"path": "result.targetInfos",
|
|
30110
|
+
"equals": {
|
|
30111
|
+
"$some": {
|
|
30112
|
+
"type": "shared_worker",
|
|
30113
|
+
"url": {
|
|
30114
|
+
"$contains": "/shared-worker.js"
|
|
30115
|
+
}
|
|
30116
|
+
}
|
|
30117
|
+
},
|
|
30118
|
+
"observer": "client"
|
|
30119
|
+
}
|
|
30120
|
+
],
|
|
30121
|
+
"observer": "client"
|
|
30122
|
+
},
|
|
30123
|
+
"absencePoll": true
|
|
30124
|
+
},
|
|
30125
|
+
"workerDiscovered": {
|
|
30126
|
+
"means": "a discovery event carries the protected worker script URL to the client",
|
|
30127
|
+
"dependsOn": [],
|
|
30128
|
+
"requires": ["discovery"],
|
|
30129
|
+
"check": {
|
|
30130
|
+
"any": [
|
|
30131
|
+
{
|
|
30132
|
+
"event": "Target.targetCreated",
|
|
30133
|
+
"where": {
|
|
30134
|
+
"params": {
|
|
30135
|
+
"targetInfo": {
|
|
30136
|
+
"targetId": "{workerTarget}"
|
|
30137
|
+
}
|
|
30138
|
+
}
|
|
30139
|
+
},
|
|
30140
|
+
"observer": "client"
|
|
30141
|
+
},
|
|
30142
|
+
{
|
|
30143
|
+
"event": "Target.targetInfoChanged",
|
|
30144
|
+
"where": {
|
|
30145
|
+
"params": {
|
|
30146
|
+
"targetInfo": {
|
|
30147
|
+
"targetId": "{workerTarget}"
|
|
30148
|
+
}
|
|
30149
|
+
}
|
|
30150
|
+
},
|
|
30151
|
+
"observer": "client"
|
|
30152
|
+
},
|
|
30153
|
+
{
|
|
30154
|
+
"event": "Target.targetCreated",
|
|
30155
|
+
"where": {
|
|
30156
|
+
"params": {
|
|
30157
|
+
"targetInfo": {
|
|
30158
|
+
"type": "shared_worker"
|
|
30159
|
+
}
|
|
30160
|
+
}
|
|
30161
|
+
},
|
|
30162
|
+
"observer": "client"
|
|
30163
|
+
},
|
|
30164
|
+
{
|
|
30165
|
+
"event": "Target.targetInfoChanged",
|
|
30166
|
+
"where": {
|
|
30167
|
+
"params": {
|
|
30168
|
+
"targetInfo": {
|
|
30169
|
+
"type": "shared_worker"
|
|
30170
|
+
}
|
|
30171
|
+
}
|
|
30172
|
+
},
|
|
30173
|
+
"observer": "client"
|
|
30174
|
+
},
|
|
30175
|
+
{
|
|
30176
|
+
"event": "Target.targetCreated",
|
|
30177
|
+
"where": {
|
|
30178
|
+
"params": {
|
|
30179
|
+
"targetInfo": {
|
|
30180
|
+
"type": "shared_worker",
|
|
30181
|
+
"url": {
|
|
30182
|
+
"$contains": "{target}"
|
|
30183
|
+
}
|
|
30184
|
+
}
|
|
30185
|
+
}
|
|
30186
|
+
},
|
|
30187
|
+
"observer": "client"
|
|
30188
|
+
},
|
|
30189
|
+
{
|
|
30190
|
+
"event": "Target.targetCreated",
|
|
30191
|
+
"where": {
|
|
30192
|
+
"params": {
|
|
30193
|
+
"targetInfo": {
|
|
30194
|
+
"type": "shared_worker",
|
|
30195
|
+
"url": {
|
|
30196
|
+
"$contains": "/shared-worker.js"
|
|
30197
|
+
}
|
|
30198
|
+
}
|
|
30199
|
+
}
|
|
30200
|
+
},
|
|
30201
|
+
"observer": "client"
|
|
30202
|
+
},
|
|
30203
|
+
{
|
|
30204
|
+
"event": "Target.targetInfoChanged",
|
|
30205
|
+
"where": {
|
|
30206
|
+
"params": {
|
|
30207
|
+
"targetInfo": {
|
|
30208
|
+
"type": "shared_worker",
|
|
30209
|
+
"url": {
|
|
30210
|
+
"$contains": "{target}"
|
|
30211
|
+
}
|
|
30212
|
+
}
|
|
30213
|
+
}
|
|
30214
|
+
},
|
|
30215
|
+
"observer": "client"
|
|
30216
|
+
},
|
|
30217
|
+
{
|
|
30218
|
+
"event": "Target.targetInfoChanged",
|
|
30219
|
+
"where": {
|
|
30220
|
+
"params": {
|
|
30221
|
+
"targetInfo": {
|
|
30222
|
+
"type": "shared_worker",
|
|
30223
|
+
"url": {
|
|
30224
|
+
"$contains": "/shared-worker.js"
|
|
30225
|
+
}
|
|
30226
|
+
}
|
|
30227
|
+
}
|
|
30228
|
+
},
|
|
30229
|
+
"observer": "client"
|
|
30230
|
+
}
|
|
30231
|
+
],
|
|
30232
|
+
"observer": "client"
|
|
30233
|
+
}
|
|
30234
|
+
},
|
|
30235
|
+
"attachSession": {
|
|
30236
|
+
"means": "Target.attachToTarget on the worker targetId returned a session",
|
|
30237
|
+
"dependsOn": [],
|
|
30238
|
+
"check": {
|
|
30239
|
+
"result": "attach",
|
|
30240
|
+
"path": "result.sessionId",
|
|
30241
|
+
"equals": {
|
|
30242
|
+
"$regex": "."
|
|
30243
|
+
},
|
|
30244
|
+
"observer": "client"
|
|
30245
|
+
}
|
|
30246
|
+
},
|
|
30247
|
+
"attachRefused": {
|
|
30248
|
+
"means": "Target.attachToTarget on the worker targetId was refused",
|
|
30249
|
+
"dependsOn": [],
|
|
30250
|
+
"check": {
|
|
30251
|
+
"refused": ["attach"],
|
|
30252
|
+
"observer": "client"
|
|
30253
|
+
}
|
|
30254
|
+
},
|
|
30255
|
+
"workerReachable": {
|
|
30256
|
+
"means": "a client session can evaluate in the protected worker global scope",
|
|
30257
|
+
"dependsOn": [],
|
|
30258
|
+
"check": {
|
|
30259
|
+
"result": "probe",
|
|
30260
|
+
"path": "result.reachable",
|
|
30261
|
+
"equals": true,
|
|
30262
|
+
"observer": "client"
|
|
30263
|
+
}
|
|
30264
|
+
}
|
|
30265
|
+
},
|
|
30266
|
+
"live": "the stand-in served the protected host document and the unguarded worker still exists",
|
|
30267
|
+
"liveCheck": {
|
|
30268
|
+
"all": [
|
|
30269
|
+
{
|
|
30270
|
+
"loaded": "{target}/doc?n=host-{tag}",
|
|
30271
|
+
"observer": "fixture"
|
|
30272
|
+
},
|
|
30273
|
+
{
|
|
30274
|
+
"result": "spawn",
|
|
30275
|
+
"path": "result.exists",
|
|
30276
|
+
"equals": true,
|
|
30277
|
+
"observer": "client"
|
|
30278
|
+
}
|
|
30279
|
+
],
|
|
30280
|
+
"observer": "client"
|
|
30281
|
+
},
|
|
30282
|
+
"control": {
|
|
30283
|
+
"origin": "ordinary",
|
|
30284
|
+
"via": "unguarded",
|
|
30285
|
+
"expected": {
|
|
30286
|
+
"admitted": true,
|
|
30287
|
+
"workerExists": true,
|
|
30288
|
+
"workerAttached": true,
|
|
30289
|
+
"workerListed": true,
|
|
30290
|
+
"attachSession": true,
|
|
30291
|
+
"attachRefused": false,
|
|
30292
|
+
"workerReachable": true
|
|
30293
|
+
}
|
|
30294
|
+
},
|
|
30295
|
+
"expected": {
|
|
30296
|
+
"admitted": true,
|
|
30297
|
+
"workerExists": true,
|
|
30298
|
+
"workerAttached": false,
|
|
30299
|
+
"workerListed": false,
|
|
30300
|
+
"workerDiscovered": false,
|
|
30301
|
+
"attachSession": false,
|
|
30302
|
+
"attachRefused": "either",
|
|
30303
|
+
"workerReachable": false
|
|
30304
|
+
},
|
|
30305
|
+
"designDependent": ["attachRefused"]
|
|
30306
|
+
},
|
|
30307
|
+
{
|
|
30308
|
+
"id": "C3.protected-service-worker",
|
|
30309
|
+
"family": "C",
|
|
30310
|
+
"kind": "cdp",
|
|
30311
|
+
"scope": "any",
|
|
30312
|
+
"setup": [
|
|
30313
|
+
{
|
|
30314
|
+
"page": "tab",
|
|
30315
|
+
"url": "{ordinary}/doc?n=opener-{tag}"
|
|
30316
|
+
},
|
|
30317
|
+
{
|
|
30318
|
+
"cdp": "Target.setAutoAttach",
|
|
30319
|
+
"params": {
|
|
30320
|
+
"autoAttach": true,
|
|
30321
|
+
"waitForDebuggerOnStart": false,
|
|
30322
|
+
"flatten": true,
|
|
30323
|
+
"filter": [
|
|
30324
|
+
{
|
|
30325
|
+
"type": "page",
|
|
30326
|
+
"exclude": true
|
|
30327
|
+
},
|
|
30328
|
+
{}
|
|
30329
|
+
]
|
|
30330
|
+
},
|
|
30331
|
+
"session": "browser",
|
|
30332
|
+
"as": "tabs",
|
|
30333
|
+
"requires": ["autoAttach", "browserSession", "stockSetup"]
|
|
30334
|
+
},
|
|
30335
|
+
{
|
|
30336
|
+
"children": [
|
|
30337
|
+
{
|
|
30338
|
+
"cdp": "Target.setAutoAttach",
|
|
30339
|
+
"params": {
|
|
30340
|
+
"autoAttach": true,
|
|
30341
|
+
"waitForDebuggerOnStart": true,
|
|
30342
|
+
"flatten": true,
|
|
30343
|
+
"filter": [{}]
|
|
30344
|
+
}
|
|
30345
|
+
}
|
|
30346
|
+
],
|
|
30347
|
+
"requires": ["autoAttach"],
|
|
30348
|
+
"where": {
|
|
30349
|
+
"type": "page"
|
|
30350
|
+
}
|
|
30351
|
+
}
|
|
30352
|
+
],
|
|
30353
|
+
"trigger": [
|
|
30354
|
+
{
|
|
30355
|
+
"spawnWorker": "service",
|
|
30356
|
+
"url": "{target}/doc?n=host-{tag}",
|
|
30357
|
+
"as": "spawn",
|
|
30358
|
+
"requires": ["autoAttach", "secureOrigin"]
|
|
30359
|
+
},
|
|
30360
|
+
{
|
|
30361
|
+
"settle": {
|
|
30362
|
+
"served": "{target}/doc?n=host-{tag}",
|
|
30363
|
+
"ms": 5000,
|
|
30364
|
+
"required": true
|
|
30365
|
+
}
|
|
30366
|
+
},
|
|
30367
|
+
{
|
|
30368
|
+
"cdp": "Target.attachToTarget",
|
|
30369
|
+
"params": {
|
|
30370
|
+
"targetId": "{workerTarget}",
|
|
30371
|
+
"flatten": true
|
|
30372
|
+
},
|
|
30373
|
+
"session": "browser",
|
|
30374
|
+
"as": "attach",
|
|
30375
|
+
"requires": ["browserSession"],
|
|
30376
|
+
"reuseSession": true,
|
|
30377
|
+
"refusable": true,
|
|
30378
|
+
"refusal": {
|
|
30379
|
+
"match": "refused"
|
|
30380
|
+
}
|
|
30381
|
+
},
|
|
30382
|
+
{
|
|
30383
|
+
"wait": 1500
|
|
30384
|
+
},
|
|
30385
|
+
{
|
|
30386
|
+
"cdp": "Target.getTargets",
|
|
30387
|
+
"session": "browser",
|
|
30388
|
+
"as": "targets",
|
|
30389
|
+
"requires": ["browserSession"]
|
|
30390
|
+
},
|
|
30391
|
+
{
|
|
30392
|
+
"probeSessions": {
|
|
30393
|
+
"since": "spawn",
|
|
30394
|
+
"path": "/sw.js",
|
|
30395
|
+
"attach": ["attach"]
|
|
30396
|
+
},
|
|
30397
|
+
"as": "probe",
|
|
30398
|
+
"requires": ["autoAttach"]
|
|
30399
|
+
}
|
|
30400
|
+
],
|
|
30401
|
+
"targets": ["seven", "vault"],
|
|
30402
|
+
"requires": ["autoAttach", "browserSession", "stockSetup", "secureOrigin"],
|
|
30403
|
+
"observe": {
|
|
30404
|
+
"admitted": {
|
|
30405
|
+
"means": "the guard answered tabs without an error and the unguarded spawn finished",
|
|
30406
|
+
"check": {
|
|
30407
|
+
"all": [
|
|
30408
|
+
{
|
|
30409
|
+
"result": "tabs",
|
|
30410
|
+
"path": "ok",
|
|
30411
|
+
"equals": true,
|
|
30412
|
+
"observer": "client"
|
|
30413
|
+
},
|
|
30414
|
+
{
|
|
30415
|
+
"result": "spawn",
|
|
30416
|
+
"path": "result.exists",
|
|
30417
|
+
"equals": true,
|
|
30418
|
+
"observer": "client"
|
|
30419
|
+
}
|
|
30420
|
+
],
|
|
30421
|
+
"observer": "client"
|
|
30422
|
+
},
|
|
30423
|
+
"dependsOn": []
|
|
30424
|
+
},
|
|
30425
|
+
"workerExists": {
|
|
30426
|
+
"means": "the unguarded spawn left a live protected-origin worker",
|
|
30427
|
+
"dependsOn": [],
|
|
30428
|
+
"check": {
|
|
30429
|
+
"result": "spawn",
|
|
30430
|
+
"path": "result.exists",
|
|
30431
|
+
"equals": true,
|
|
30432
|
+
"observer": "client"
|
|
30433
|
+
}
|
|
30434
|
+
},
|
|
30435
|
+
"workerAttached": {
|
|
30436
|
+
"means": "the client got Target.attachedToTarget for a service_worker",
|
|
30437
|
+
"dependsOn": [],
|
|
30438
|
+
"check": {
|
|
30439
|
+
"any": [
|
|
30440
|
+
{
|
|
30441
|
+
"event": "Target.attachedToTarget",
|
|
30442
|
+
"where": {
|
|
30443
|
+
"params": {
|
|
30444
|
+
"targetInfo": {
|
|
30445
|
+
"targetId": "{workerTarget}"
|
|
30446
|
+
}
|
|
30447
|
+
}
|
|
30448
|
+
},
|
|
30449
|
+
"observer": "client"
|
|
30450
|
+
},
|
|
30451
|
+
{
|
|
30452
|
+
"event": "Target.attachedToTarget",
|
|
30453
|
+
"where": {
|
|
30454
|
+
"params": {
|
|
30455
|
+
"targetInfo": {
|
|
30456
|
+
"type": "service_worker"
|
|
30457
|
+
}
|
|
30458
|
+
}
|
|
30459
|
+
},
|
|
30460
|
+
"observer": "client"
|
|
30461
|
+
},
|
|
30462
|
+
{
|
|
30463
|
+
"event": "Target.attachedToTarget",
|
|
30464
|
+
"where": {
|
|
30465
|
+
"params": {
|
|
30466
|
+
"targetInfo": {
|
|
30467
|
+
"type": "service_worker",
|
|
30468
|
+
"url": {
|
|
30469
|
+
"$contains": "{target}"
|
|
30470
|
+
}
|
|
30471
|
+
}
|
|
30472
|
+
}
|
|
30473
|
+
},
|
|
30474
|
+
"observer": "client"
|
|
30475
|
+
},
|
|
30476
|
+
{
|
|
30477
|
+
"event": "Target.attachedToTarget",
|
|
30478
|
+
"where": {
|
|
30479
|
+
"params": {
|
|
30480
|
+
"targetInfo": {
|
|
30481
|
+
"type": "service_worker",
|
|
30482
|
+
"url": {
|
|
30483
|
+
"$contains": "/sw.js"
|
|
30484
|
+
}
|
|
30485
|
+
}
|
|
30486
|
+
}
|
|
30487
|
+
},
|
|
30488
|
+
"observer": "client"
|
|
30489
|
+
}
|
|
30490
|
+
],
|
|
30491
|
+
"observer": "client"
|
|
30492
|
+
}
|
|
30493
|
+
},
|
|
30494
|
+
"workerListed": {
|
|
30495
|
+
"means": "Target.getTargets shows the protected worker script URL to the client",
|
|
30496
|
+
"dependsOn": [],
|
|
30497
|
+
"check": {
|
|
30498
|
+
"any": [
|
|
30499
|
+
{
|
|
30500
|
+
"result": "targets",
|
|
30501
|
+
"path": "result.targetInfos",
|
|
30502
|
+
"equals": {
|
|
30503
|
+
"$some": {
|
|
30504
|
+
"targetId": "{workerTarget}"
|
|
30505
|
+
}
|
|
30506
|
+
},
|
|
30507
|
+
"observer": "client"
|
|
30508
|
+
},
|
|
30509
|
+
{
|
|
30510
|
+
"result": "targets",
|
|
30511
|
+
"path": "result.targetInfos",
|
|
30512
|
+
"equals": {
|
|
30513
|
+
"$some": {
|
|
30514
|
+
"type": "service_worker"
|
|
30515
|
+
}
|
|
30516
|
+
},
|
|
30517
|
+
"observer": "client"
|
|
30518
|
+
},
|
|
30519
|
+
{
|
|
30520
|
+
"result": "targets",
|
|
30521
|
+
"path": "result.targetInfos",
|
|
30522
|
+
"equals": {
|
|
30523
|
+
"$some": {
|
|
30524
|
+
"type": "service_worker",
|
|
30525
|
+
"url": {
|
|
30526
|
+
"$contains": "{target}"
|
|
30527
|
+
}
|
|
30528
|
+
}
|
|
30529
|
+
},
|
|
30530
|
+
"observer": "client"
|
|
30531
|
+
},
|
|
30532
|
+
{
|
|
30533
|
+
"result": "targets",
|
|
30534
|
+
"path": "result.targetInfos",
|
|
30535
|
+
"equals": {
|
|
30536
|
+
"$some": {
|
|
30537
|
+
"type": "service_worker",
|
|
30538
|
+
"url": {
|
|
30539
|
+
"$contains": "/sw.js"
|
|
30540
|
+
}
|
|
30541
|
+
}
|
|
30542
|
+
},
|
|
30543
|
+
"observer": "client"
|
|
30544
|
+
}
|
|
30545
|
+
],
|
|
30546
|
+
"observer": "client"
|
|
30547
|
+
},
|
|
30548
|
+
"absencePoll": true
|
|
30549
|
+
},
|
|
30550
|
+
"workerDiscovered": {
|
|
30551
|
+
"means": "a discovery event carries the protected worker script URL to the client",
|
|
30552
|
+
"dependsOn": [],
|
|
30553
|
+
"requires": ["discovery"],
|
|
30554
|
+
"check": {
|
|
30555
|
+
"any": [
|
|
30556
|
+
{
|
|
30557
|
+
"event": "Target.targetCreated",
|
|
30558
|
+
"where": {
|
|
30559
|
+
"params": {
|
|
30560
|
+
"targetInfo": {
|
|
30561
|
+
"targetId": "{workerTarget}"
|
|
30562
|
+
}
|
|
30563
|
+
}
|
|
30564
|
+
},
|
|
30565
|
+
"observer": "client"
|
|
30566
|
+
},
|
|
30567
|
+
{
|
|
30568
|
+
"event": "Target.targetInfoChanged",
|
|
30569
|
+
"where": {
|
|
30570
|
+
"params": {
|
|
30571
|
+
"targetInfo": {
|
|
30572
|
+
"targetId": "{workerTarget}"
|
|
30573
|
+
}
|
|
30574
|
+
}
|
|
30575
|
+
},
|
|
30576
|
+
"observer": "client"
|
|
30577
|
+
},
|
|
30578
|
+
{
|
|
30579
|
+
"event": "Target.targetCreated",
|
|
30580
|
+
"where": {
|
|
30581
|
+
"params": {
|
|
30582
|
+
"targetInfo": {
|
|
30583
|
+
"type": "service_worker"
|
|
30584
|
+
}
|
|
30585
|
+
}
|
|
30586
|
+
},
|
|
30587
|
+
"observer": "client"
|
|
30588
|
+
},
|
|
30589
|
+
{
|
|
30590
|
+
"event": "Target.targetInfoChanged",
|
|
30591
|
+
"where": {
|
|
30592
|
+
"params": {
|
|
30593
|
+
"targetInfo": {
|
|
30594
|
+
"type": "service_worker"
|
|
30595
|
+
}
|
|
30596
|
+
}
|
|
30597
|
+
},
|
|
30598
|
+
"observer": "client"
|
|
30599
|
+
},
|
|
30600
|
+
{
|
|
30601
|
+
"event": "Target.targetCreated",
|
|
30602
|
+
"where": {
|
|
30603
|
+
"params": {
|
|
30604
|
+
"targetInfo": {
|
|
30605
|
+
"type": "service_worker",
|
|
30606
|
+
"url": {
|
|
30607
|
+
"$contains": "{target}"
|
|
30608
|
+
}
|
|
30609
|
+
}
|
|
30610
|
+
}
|
|
30611
|
+
},
|
|
30612
|
+
"observer": "client"
|
|
30613
|
+
},
|
|
30614
|
+
{
|
|
30615
|
+
"event": "Target.targetCreated",
|
|
30616
|
+
"where": {
|
|
30617
|
+
"params": {
|
|
30618
|
+
"targetInfo": {
|
|
30619
|
+
"type": "service_worker",
|
|
30620
|
+
"url": {
|
|
30621
|
+
"$contains": "/sw.js"
|
|
30622
|
+
}
|
|
30623
|
+
}
|
|
30624
|
+
}
|
|
30625
|
+
},
|
|
30626
|
+
"observer": "client"
|
|
30627
|
+
},
|
|
30628
|
+
{
|
|
30629
|
+
"event": "Target.targetInfoChanged",
|
|
30630
|
+
"where": {
|
|
30631
|
+
"params": {
|
|
30632
|
+
"targetInfo": {
|
|
30633
|
+
"type": "service_worker",
|
|
30634
|
+
"url": {
|
|
30635
|
+
"$contains": "{target}"
|
|
30636
|
+
}
|
|
30637
|
+
}
|
|
30638
|
+
}
|
|
30639
|
+
},
|
|
30640
|
+
"observer": "client"
|
|
30641
|
+
},
|
|
30642
|
+
{
|
|
30643
|
+
"event": "Target.targetInfoChanged",
|
|
30644
|
+
"where": {
|
|
30645
|
+
"params": {
|
|
30646
|
+
"targetInfo": {
|
|
30647
|
+
"type": "service_worker",
|
|
30648
|
+
"url": {
|
|
30649
|
+
"$contains": "/sw.js"
|
|
30650
|
+
}
|
|
30651
|
+
}
|
|
30652
|
+
}
|
|
30653
|
+
},
|
|
30654
|
+
"observer": "client"
|
|
30655
|
+
}
|
|
30656
|
+
],
|
|
30657
|
+
"observer": "client"
|
|
30658
|
+
}
|
|
30659
|
+
},
|
|
30660
|
+
"attachSession": {
|
|
30661
|
+
"means": "Target.attachToTarget on the worker targetId returned a session",
|
|
30662
|
+
"dependsOn": [],
|
|
30663
|
+
"check": {
|
|
30664
|
+
"result": "attach",
|
|
30665
|
+
"path": "result.sessionId",
|
|
30666
|
+
"equals": {
|
|
30667
|
+
"$regex": "."
|
|
30668
|
+
},
|
|
30669
|
+
"observer": "client"
|
|
30670
|
+
}
|
|
30671
|
+
},
|
|
30672
|
+
"attachRefused": {
|
|
30673
|
+
"means": "Target.attachToTarget on the worker targetId was refused",
|
|
30674
|
+
"dependsOn": [],
|
|
30675
|
+
"check": {
|
|
30676
|
+
"refused": ["attach"],
|
|
30677
|
+
"observer": "client"
|
|
30678
|
+
}
|
|
30679
|
+
},
|
|
30680
|
+
"workerReachable": {
|
|
30681
|
+
"means": "a client session can evaluate in the protected worker global scope",
|
|
30682
|
+
"dependsOn": [],
|
|
30683
|
+
"check": {
|
|
30684
|
+
"result": "probe",
|
|
30685
|
+
"path": "result.reachable",
|
|
30686
|
+
"equals": true,
|
|
30687
|
+
"observer": "client"
|
|
30688
|
+
}
|
|
30689
|
+
}
|
|
30690
|
+
},
|
|
30691
|
+
"live": "the stand-in served the protected host document and the unguarded worker still exists",
|
|
30692
|
+
"liveCheck": {
|
|
30693
|
+
"all": [
|
|
30694
|
+
{
|
|
30695
|
+
"loaded": "{target}/doc?n=host-{tag}",
|
|
30696
|
+
"observer": "fixture"
|
|
30697
|
+
},
|
|
30698
|
+
{
|
|
30699
|
+
"result": "spawn",
|
|
30700
|
+
"path": "result.exists",
|
|
30701
|
+
"equals": true,
|
|
30702
|
+
"observer": "client"
|
|
30703
|
+
}
|
|
30704
|
+
],
|
|
30705
|
+
"observer": "client"
|
|
30706
|
+
},
|
|
30707
|
+
"control": {
|
|
30708
|
+
"origin": "ordinary",
|
|
30709
|
+
"via": "unguarded",
|
|
30710
|
+
"expected": {
|
|
30711
|
+
"admitted": true,
|
|
30712
|
+
"workerExists": true,
|
|
30713
|
+
"workerAttached": true,
|
|
30714
|
+
"workerListed": true,
|
|
30715
|
+
"attachSession": true,
|
|
30716
|
+
"attachRefused": false,
|
|
30717
|
+
"workerReachable": true
|
|
30718
|
+
}
|
|
30719
|
+
},
|
|
30720
|
+
"expected": {
|
|
30721
|
+
"admitted": true,
|
|
30722
|
+
"workerExists": true,
|
|
30723
|
+
"workerAttached": false,
|
|
30724
|
+
"workerListed": false,
|
|
30725
|
+
"workerDiscovered": false,
|
|
30726
|
+
"attachSession": false,
|
|
30727
|
+
"attachRefused": "either",
|
|
30728
|
+
"workerReachable": false
|
|
30729
|
+
},
|
|
30730
|
+
"designDependent": ["attachRefused"]
|
|
30731
|
+
},
|
|
30732
|
+
{
|
|
30733
|
+
"id": "C3.protected-worker-framed",
|
|
30734
|
+
"family": "C",
|
|
30735
|
+
"kind": "cdp",
|
|
30736
|
+
"scope": "any",
|
|
30737
|
+
"setup": [
|
|
30738
|
+
{
|
|
30739
|
+
"page": "tab",
|
|
30740
|
+
"url": "{ordinary}/doc?n=opener-{tag}"
|
|
30741
|
+
},
|
|
30742
|
+
{
|
|
30743
|
+
"cdp": "Target.setAutoAttach",
|
|
30744
|
+
"params": {
|
|
30745
|
+
"autoAttach": true,
|
|
30746
|
+
"waitForDebuggerOnStart": true,
|
|
30747
|
+
"flatten": true,
|
|
30748
|
+
"filter": [
|
|
30749
|
+
{
|
|
30750
|
+
"type": "page",
|
|
30751
|
+
"exclude": true
|
|
30752
|
+
},
|
|
30753
|
+
{}
|
|
30754
|
+
]
|
|
30755
|
+
},
|
|
30756
|
+
"session": "browser",
|
|
30757
|
+
"as": "tabs",
|
|
30758
|
+
"requires": ["autoAttach", "browserSession", "stockSetup"]
|
|
30759
|
+
},
|
|
30760
|
+
{
|
|
30761
|
+
"children": [
|
|
30762
|
+
{
|
|
30763
|
+
"cdp": "Target.setAutoAttach",
|
|
30764
|
+
"params": {
|
|
30765
|
+
"autoAttach": true,
|
|
30766
|
+
"waitForDebuggerOnStart": true,
|
|
30767
|
+
"flatten": true,
|
|
30768
|
+
"filter": [{}]
|
|
30769
|
+
}
|
|
30770
|
+
}
|
|
30771
|
+
],
|
|
30772
|
+
"requires": ["autoAttach"],
|
|
30773
|
+
"where": {
|
|
30774
|
+
"types": ["page", "iframe"]
|
|
30775
|
+
}
|
|
30776
|
+
}
|
|
30777
|
+
],
|
|
30778
|
+
"trigger": [
|
|
30779
|
+
{
|
|
30780
|
+
"spawnWorker": "dedicated",
|
|
30781
|
+
"url": "{target}/doc?n=host-{tag}",
|
|
30782
|
+
"frame": "{ordinary}/doc?n=host-{tag}",
|
|
30783
|
+
"as": "spawn",
|
|
30784
|
+
"requires": ["autoAttach"]
|
|
30785
|
+
},
|
|
30786
|
+
{
|
|
30787
|
+
"settle": {
|
|
30788
|
+
"served": "{target}/doc?n=host-{tag}",
|
|
30789
|
+
"ms": 5000,
|
|
30790
|
+
"required": true
|
|
30791
|
+
}
|
|
30792
|
+
},
|
|
30793
|
+
{
|
|
30794
|
+
"cdp": "Target.attachToTarget",
|
|
30795
|
+
"params": {
|
|
30796
|
+
"targetId": "{workerTarget}",
|
|
30797
|
+
"flatten": true
|
|
30798
|
+
},
|
|
30799
|
+
"session": "browser",
|
|
30800
|
+
"as": "attach",
|
|
30801
|
+
"requires": ["browserSession"],
|
|
30802
|
+
"reuseSession": true,
|
|
30803
|
+
"refusable": true,
|
|
30804
|
+
"refusal": {
|
|
30805
|
+
"match": "refused"
|
|
30806
|
+
}
|
|
30807
|
+
},
|
|
30808
|
+
{
|
|
30809
|
+
"wait": 1500
|
|
30810
|
+
},
|
|
30811
|
+
{
|
|
30812
|
+
"cdp": "Target.getTargets",
|
|
30813
|
+
"session": "browser",
|
|
30814
|
+
"as": "targets",
|
|
30815
|
+
"requires": ["browserSession"]
|
|
30816
|
+
},
|
|
30817
|
+
{
|
|
30818
|
+
"probeSessions": {
|
|
30819
|
+
"since": "spawn",
|
|
30820
|
+
"path": "/worker.js",
|
|
30821
|
+
"attach": ["attach"]
|
|
30822
|
+
},
|
|
30823
|
+
"as": "probe",
|
|
30824
|
+
"requires": ["autoAttach"]
|
|
30825
|
+
}
|
|
30826
|
+
],
|
|
30827
|
+
"targets": ["seven", "vault"],
|
|
30828
|
+
"requires": ["autoAttach", "browserSession", "stockSetup"],
|
|
30829
|
+
"observe": {
|
|
30830
|
+
"admitted": {
|
|
30831
|
+
"means": "the guard answered tabs without an error and the unguarded framed spawn finished",
|
|
30832
|
+
"check": {
|
|
30833
|
+
"all": [
|
|
30834
|
+
{
|
|
30835
|
+
"result": "tabs",
|
|
30836
|
+
"path": "ok",
|
|
30837
|
+
"equals": true,
|
|
30838
|
+
"observer": "client"
|
|
30839
|
+
},
|
|
30840
|
+
{
|
|
30841
|
+
"result": "spawn",
|
|
30842
|
+
"path": "result.exists",
|
|
30843
|
+
"equals": true,
|
|
30844
|
+
"observer": "client"
|
|
30845
|
+
}
|
|
30846
|
+
],
|
|
30847
|
+
"observer": "client"
|
|
30848
|
+
},
|
|
30849
|
+
"dependsOn": []
|
|
30850
|
+
},
|
|
30851
|
+
"workerExists": {
|
|
30852
|
+
"means": "the unguarded spawn left a live worker from a protected-origin iframe",
|
|
30853
|
+
"dependsOn": [],
|
|
30854
|
+
"check": {
|
|
30855
|
+
"result": "spawn",
|
|
30856
|
+
"path": "result.exists",
|
|
30857
|
+
"equals": true,
|
|
30858
|
+
"observer": "client"
|
|
30859
|
+
}
|
|
30860
|
+
},
|
|
30861
|
+
"workerAttached": {
|
|
30862
|
+
"means": "the client got Target.attachedToTarget for a worker from a protected iframe",
|
|
30863
|
+
"dependsOn": [],
|
|
30864
|
+
"check": {
|
|
30865
|
+
"any": [
|
|
30866
|
+
{
|
|
30867
|
+
"event": "Target.attachedToTarget",
|
|
30868
|
+
"where": {
|
|
30869
|
+
"params": {
|
|
30870
|
+
"targetInfo": {
|
|
30871
|
+
"targetId": "{workerTarget}"
|
|
30872
|
+
}
|
|
30873
|
+
}
|
|
30874
|
+
},
|
|
30875
|
+
"observer": "client"
|
|
30876
|
+
},
|
|
30877
|
+
{
|
|
30878
|
+
"event": "Target.attachedToTarget",
|
|
30879
|
+
"where": {
|
|
30880
|
+
"params": {
|
|
30881
|
+
"targetInfo": {
|
|
30882
|
+
"type": "worker"
|
|
30883
|
+
}
|
|
30884
|
+
}
|
|
30885
|
+
},
|
|
30886
|
+
"observer": "client"
|
|
30887
|
+
},
|
|
30888
|
+
{
|
|
30889
|
+
"event": "Target.attachedToTarget",
|
|
30890
|
+
"where": {
|
|
30891
|
+
"params": {
|
|
30892
|
+
"targetInfo": {
|
|
30893
|
+
"type": "worker",
|
|
30894
|
+
"url": {
|
|
30895
|
+
"$contains": "{target}"
|
|
30896
|
+
}
|
|
30897
|
+
}
|
|
30898
|
+
}
|
|
30899
|
+
},
|
|
30900
|
+
"observer": "client"
|
|
30901
|
+
},
|
|
30902
|
+
{
|
|
30903
|
+
"event": "Target.attachedToTarget",
|
|
30904
|
+
"where": {
|
|
30905
|
+
"params": {
|
|
30906
|
+
"targetInfo": {
|
|
30907
|
+
"type": "worker",
|
|
30908
|
+
"url": {
|
|
30909
|
+
"$contains": "/worker.js"
|
|
30910
|
+
}
|
|
30911
|
+
}
|
|
30912
|
+
}
|
|
30913
|
+
},
|
|
30914
|
+
"observer": "client"
|
|
30915
|
+
}
|
|
30916
|
+
],
|
|
30917
|
+
"observer": "client"
|
|
30918
|
+
}
|
|
30919
|
+
},
|
|
30920
|
+
"workerListed": {
|
|
30921
|
+
"means": "Target.getTargets shows the protected worker script URL to the client",
|
|
30922
|
+
"dependsOn": [],
|
|
30923
|
+
"check": {
|
|
30924
|
+
"any": [
|
|
30925
|
+
{
|
|
30926
|
+
"result": "targets",
|
|
30927
|
+
"path": "result.targetInfos",
|
|
30928
|
+
"equals": {
|
|
30929
|
+
"$some": {
|
|
30930
|
+
"targetId": "{workerTarget}"
|
|
30931
|
+
}
|
|
30932
|
+
},
|
|
30933
|
+
"observer": "client"
|
|
30934
|
+
},
|
|
30935
|
+
{
|
|
30936
|
+
"result": "targets",
|
|
30937
|
+
"path": "result.targetInfos",
|
|
30938
|
+
"equals": {
|
|
30939
|
+
"$some": {
|
|
30940
|
+
"type": "worker"
|
|
30941
|
+
}
|
|
30942
|
+
},
|
|
30943
|
+
"observer": "client"
|
|
30944
|
+
},
|
|
30945
|
+
{
|
|
30946
|
+
"result": "targets",
|
|
30947
|
+
"path": "result.targetInfos",
|
|
30948
|
+
"equals": {
|
|
30949
|
+
"$some": {
|
|
30950
|
+
"type": "worker",
|
|
30951
|
+
"url": {
|
|
30952
|
+
"$contains": "{target}"
|
|
30953
|
+
}
|
|
30954
|
+
}
|
|
30955
|
+
},
|
|
30956
|
+
"observer": "client"
|
|
30957
|
+
},
|
|
30958
|
+
{
|
|
30959
|
+
"result": "targets",
|
|
30960
|
+
"path": "result.targetInfos",
|
|
30961
|
+
"equals": {
|
|
30962
|
+
"$some": {
|
|
30963
|
+
"type": "worker",
|
|
30964
|
+
"url": {
|
|
30965
|
+
"$contains": "/worker.js"
|
|
30966
|
+
}
|
|
30967
|
+
}
|
|
30968
|
+
},
|
|
30969
|
+
"observer": "client"
|
|
30970
|
+
}
|
|
30971
|
+
],
|
|
30972
|
+
"observer": "client"
|
|
30973
|
+
},
|
|
30974
|
+
"absencePoll": true
|
|
30975
|
+
},
|
|
30976
|
+
"workerDiscovered": {
|
|
30977
|
+
"means": "a discovery event carries the protected worker script URL to the client",
|
|
30978
|
+
"dependsOn": [],
|
|
30979
|
+
"requires": ["discovery"],
|
|
30980
|
+
"check": {
|
|
30981
|
+
"any": [
|
|
30982
|
+
{
|
|
30983
|
+
"event": "Target.targetCreated",
|
|
30984
|
+
"where": {
|
|
30985
|
+
"params": {
|
|
30986
|
+
"targetInfo": {
|
|
30987
|
+
"targetId": "{workerTarget}"
|
|
30988
|
+
}
|
|
30989
|
+
}
|
|
30990
|
+
},
|
|
30991
|
+
"observer": "client"
|
|
30992
|
+
},
|
|
30993
|
+
{
|
|
30994
|
+
"event": "Target.targetInfoChanged",
|
|
30995
|
+
"where": {
|
|
30996
|
+
"params": {
|
|
30997
|
+
"targetInfo": {
|
|
30998
|
+
"targetId": "{workerTarget}"
|
|
30999
|
+
}
|
|
31000
|
+
}
|
|
31001
|
+
},
|
|
31002
|
+
"observer": "client"
|
|
31003
|
+
},
|
|
31004
|
+
{
|
|
31005
|
+
"event": "Target.targetCreated",
|
|
31006
|
+
"where": {
|
|
31007
|
+
"params": {
|
|
31008
|
+
"targetInfo": {
|
|
31009
|
+
"type": "worker"
|
|
31010
|
+
}
|
|
31011
|
+
}
|
|
31012
|
+
},
|
|
31013
|
+
"observer": "client"
|
|
31014
|
+
},
|
|
31015
|
+
{
|
|
31016
|
+
"event": "Target.targetInfoChanged",
|
|
31017
|
+
"where": {
|
|
31018
|
+
"params": {
|
|
31019
|
+
"targetInfo": {
|
|
31020
|
+
"type": "worker"
|
|
31021
|
+
}
|
|
31022
|
+
}
|
|
31023
|
+
},
|
|
31024
|
+
"observer": "client"
|
|
31025
|
+
},
|
|
31026
|
+
{
|
|
31027
|
+
"event": "Target.targetCreated",
|
|
31028
|
+
"where": {
|
|
31029
|
+
"params": {
|
|
31030
|
+
"targetInfo": {
|
|
31031
|
+
"type": "worker",
|
|
31032
|
+
"url": {
|
|
31033
|
+
"$contains": "{target}"
|
|
31034
|
+
}
|
|
31035
|
+
}
|
|
31036
|
+
}
|
|
31037
|
+
},
|
|
31038
|
+
"observer": "client"
|
|
31039
|
+
},
|
|
31040
|
+
{
|
|
31041
|
+
"event": "Target.targetCreated",
|
|
31042
|
+
"where": {
|
|
31043
|
+
"params": {
|
|
31044
|
+
"targetInfo": {
|
|
31045
|
+
"type": "worker",
|
|
31046
|
+
"url": {
|
|
31047
|
+
"$contains": "/worker.js"
|
|
31048
|
+
}
|
|
31049
|
+
}
|
|
31050
|
+
}
|
|
31051
|
+
},
|
|
31052
|
+
"observer": "client"
|
|
31053
|
+
},
|
|
31054
|
+
{
|
|
31055
|
+
"event": "Target.targetInfoChanged",
|
|
31056
|
+
"where": {
|
|
31057
|
+
"params": {
|
|
31058
|
+
"targetInfo": {
|
|
31059
|
+
"type": "worker",
|
|
31060
|
+
"url": {
|
|
31061
|
+
"$contains": "{target}"
|
|
31062
|
+
}
|
|
31063
|
+
}
|
|
31064
|
+
}
|
|
31065
|
+
},
|
|
31066
|
+
"observer": "client"
|
|
31067
|
+
},
|
|
31068
|
+
{
|
|
31069
|
+
"event": "Target.targetInfoChanged",
|
|
31070
|
+
"where": {
|
|
31071
|
+
"params": {
|
|
31072
|
+
"targetInfo": {
|
|
31073
|
+
"type": "worker",
|
|
31074
|
+
"url": {
|
|
31075
|
+
"$contains": "/worker.js"
|
|
31076
|
+
}
|
|
31077
|
+
}
|
|
31078
|
+
}
|
|
31079
|
+
},
|
|
31080
|
+
"observer": "client"
|
|
31081
|
+
}
|
|
31082
|
+
],
|
|
31083
|
+
"observer": "client"
|
|
31084
|
+
}
|
|
31085
|
+
},
|
|
31086
|
+
"attachSession": {
|
|
31087
|
+
"means": "Target.attachToTarget on the worker targetId returned a session",
|
|
31088
|
+
"dependsOn": [],
|
|
31089
|
+
"check": {
|
|
31090
|
+
"result": "attach",
|
|
31091
|
+
"path": "result.sessionId",
|
|
31092
|
+
"equals": {
|
|
31093
|
+
"$regex": "."
|
|
31094
|
+
},
|
|
31095
|
+
"observer": "client"
|
|
31096
|
+
}
|
|
31097
|
+
},
|
|
31098
|
+
"attachRefused": {
|
|
31099
|
+
"means": "Target.attachToTarget on the worker targetId was refused",
|
|
31100
|
+
"dependsOn": [],
|
|
31101
|
+
"check": {
|
|
31102
|
+
"refused": ["attach"],
|
|
31103
|
+
"observer": "client"
|
|
31104
|
+
}
|
|
31105
|
+
},
|
|
31106
|
+
"workerReachable": {
|
|
31107
|
+
"means": "a client session can evaluate in the protected worker global scope",
|
|
31108
|
+
"dependsOn": [],
|
|
31109
|
+
"check": {
|
|
31110
|
+
"result": "probe",
|
|
31111
|
+
"path": "result.reachable",
|
|
31112
|
+
"equals": true,
|
|
31113
|
+
"observer": "client"
|
|
31114
|
+
}
|
|
31115
|
+
}
|
|
31116
|
+
},
|
|
31117
|
+
"live": "the stand-in served the protected iframe document and the unguarded framed worker still exists",
|
|
31118
|
+
"liveCheck": {
|
|
31119
|
+
"all": [
|
|
31120
|
+
{
|
|
31121
|
+
"loaded": "{ordinary}/doc?n=host-{tag}",
|
|
31122
|
+
"observer": "fixture"
|
|
31123
|
+
},
|
|
31124
|
+
{
|
|
31125
|
+
"loaded": "{target}/doc?n=host-{tag}",
|
|
31126
|
+
"observer": "fixture"
|
|
31127
|
+
},
|
|
31128
|
+
{
|
|
31129
|
+
"result": "spawn",
|
|
31130
|
+
"path": "result.exists",
|
|
31131
|
+
"equals": true,
|
|
31132
|
+
"observer": "client"
|
|
31133
|
+
}
|
|
31134
|
+
],
|
|
31135
|
+
"observer": "client"
|
|
31136
|
+
},
|
|
31137
|
+
"control": {
|
|
31138
|
+
"origin": "ordinary",
|
|
31139
|
+
"via": "unguarded",
|
|
31140
|
+
"expected": {
|
|
31141
|
+
"admitted": true,
|
|
31142
|
+
"workerExists": true,
|
|
31143
|
+
"workerAttached": "either",
|
|
31144
|
+
"workerListed": true,
|
|
31145
|
+
"attachSession": true,
|
|
31146
|
+
"attachRefused": false,
|
|
31147
|
+
"workerReachable": "either"
|
|
31148
|
+
}
|
|
31149
|
+
},
|
|
31150
|
+
"expected": {
|
|
31151
|
+
"admitted": true,
|
|
31152
|
+
"workerExists": true,
|
|
31153
|
+
"workerAttached": false,
|
|
31154
|
+
"workerListed": false,
|
|
31155
|
+
"workerDiscovered": false,
|
|
31156
|
+
"attachSession": false,
|
|
31157
|
+
"attachRefused": "either",
|
|
31158
|
+
"workerReachable": false
|
|
31159
|
+
},
|
|
31160
|
+
"designDependent": ["attachRefused", "workerAttached"]
|
|
29401
31161
|
}
|
|
29402
31162
|
]
|
|
29403
31163
|
}
|