@ai-ecoverse/slicc-browsers 1.21.0 → 1.22.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "setVersion": "1.21.0",
3
+ "setVersion": "1.22.0",
4
4
  "sources": [
5
5
  {
6
6
  "repo": "ai-ecoverse/slicc-cli",
@@ -105,7 +105,8 @@
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
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 narrowed to tab targets (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",
@@ -1706,6 +1707,7 @@
1706
1707
  },
1707
1708
  "closeRefused": {
1708
1709
  "means": "protected error-page restore: closeRefused",
1710
+ "unless": ["closeProtected"],
1709
1711
  "check": {
1710
1712
  "result": "errorPage",
1711
1713
  "path": "result.closeRefused",
@@ -1713,6 +1715,16 @@
1713
1715
  "observer": "client"
1714
1716
  }
1715
1717
  },
1718
+ "closed": {
1719
+ "means": "protected error-page restore: Target.closeTarget on the locked tab is answered with success and the tab is gone",
1720
+ "check": {
1721
+ "result": "errorPage",
1722
+ "path": "result.closed",
1723
+ "equals": true,
1724
+ "observer": "client"
1725
+ },
1726
+ "requires": ["closeProtected"]
1727
+ },
1716
1728
  "attachRedacted": {
1717
1729
  "means": "protected error-page restore: attachRedacted",
1718
1730
  "check": {
@@ -1754,6 +1766,7 @@
1754
1766
  "evaluateRefused": false,
1755
1767
  "attachRefused": false,
1756
1768
  "closeRefused": false,
1769
+ "closed": true,
1757
1770
  "attachRedacted": false,
1758
1771
  "fullURL": true
1759
1772
  }
@@ -1770,6 +1783,7 @@
1770
1783
  "evaluateRefused": true,
1771
1784
  "attachRefused": true,
1772
1785
  "closeRefused": true,
1786
+ "closed": true,
1773
1787
  "attachRedacted": true,
1774
1788
  "fullURL": false
1775
1789
  }
@@ -1887,6 +1901,7 @@
1887
1901
  },
1888
1902
  "closeRefused": {
1889
1903
  "means": "protected error-page sticky: closeRefused",
1904
+ "unless": ["closeProtected"],
1890
1905
  "check": {
1891
1906
  "result": "errorPage",
1892
1907
  "path": "result.closeRefused",
@@ -1894,6 +1909,16 @@
1894
1909
  "observer": "client"
1895
1910
  }
1896
1911
  },
1912
+ "closed": {
1913
+ "means": "protected error-page sticky: Target.closeTarget on the locked tab is answered with success and the tab is gone",
1914
+ "check": {
1915
+ "result": "errorPage",
1916
+ "path": "result.closed",
1917
+ "equals": true,
1918
+ "observer": "client"
1919
+ },
1920
+ "requires": ["closeProtected"]
1921
+ },
1897
1922
  "stickyError": {
1898
1923
  "means": "protected error-page sticky: stickyError",
1899
1924
  "check": {
@@ -1944,6 +1969,7 @@
1944
1969
  "evaluateRefused": false,
1945
1970
  "attachRefused": false,
1946
1971
  "closeRefused": false,
1972
+ "closed": true,
1947
1973
  "stickyError": true,
1948
1974
  "attachRedacted": false,
1949
1975
  "fullURL": true
@@ -1961,6 +1987,7 @@
1961
1987
  "evaluateRefused": true,
1962
1988
  "attachRefused": true,
1963
1989
  "closeRefused": true,
1990
+ "closed": true,
1964
1991
  "stickyError": true,
1965
1992
  "attachRedacted": true,
1966
1993
  "fullURL": false
@@ -2080,6 +2107,7 @@
2080
2107
  },
2081
2108
  "closeRefused": {
2082
2109
  "means": "protected error-page sticky (query): closeRefused",
2110
+ "unless": ["closeProtected"],
2083
2111
  "check": {
2084
2112
  "result": "errorPage",
2085
2113
  "path": "result.closeRefused",
@@ -2087,6 +2115,16 @@
2087
2115
  "observer": "client"
2088
2116
  }
2089
2117
  },
2118
+ "closed": {
2119
+ "means": "protected error-page sticky (query): Target.closeTarget on the locked tab is answered with success and the tab is gone",
2120
+ "check": {
2121
+ "result": "errorPage",
2122
+ "path": "result.closed",
2123
+ "equals": true,
2124
+ "observer": "client"
2125
+ },
2126
+ "requires": ["closeProtected"]
2127
+ },
2090
2128
  "stickyError": {
2091
2129
  "means": "protected error-page sticky (query): stickyError",
2092
2130
  "check": {
@@ -2137,6 +2175,7 @@
2137
2175
  "evaluateRefused": false,
2138
2176
  "attachRefused": false,
2139
2177
  "closeRefused": false,
2178
+ "closed": true,
2140
2179
  "stickyError": true,
2141
2180
  "attachRedacted": false,
2142
2181
  "fullURL": true
@@ -2154,6 +2193,7 @@
2154
2193
  "evaluateRefused": true,
2155
2194
  "attachRefused": true,
2156
2195
  "closeRefused": true,
2196
+ "closed": true,
2157
2197
  "stickyError": true,
2158
2198
  "attachRedacted": true,
2159
2199
  "fullURL": false
@@ -2273,6 +2313,7 @@
2273
2313
  },
2274
2314
  "closeRefused": {
2275
2315
  "means": "protected error-page sticky (fragment): closeRefused",
2316
+ "unless": ["closeProtected"],
2276
2317
  "check": {
2277
2318
  "result": "errorPage",
2278
2319
  "path": "result.closeRefused",
@@ -2280,6 +2321,16 @@
2280
2321
  "observer": "client"
2281
2322
  }
2282
2323
  },
2324
+ "closed": {
2325
+ "means": "protected error-page sticky (fragment): Target.closeTarget on the locked tab is answered with success and the tab is gone",
2326
+ "check": {
2327
+ "result": "errorPage",
2328
+ "path": "result.closed",
2329
+ "equals": true,
2330
+ "observer": "client"
2331
+ },
2332
+ "requires": ["closeProtected"]
2333
+ },
2283
2334
  "stickyError": {
2284
2335
  "means": "protected error-page sticky (fragment): stickyError",
2285
2336
  "check": {
@@ -2330,6 +2381,7 @@
2330
2381
  "evaluateRefused": false,
2331
2382
  "attachRefused": false,
2332
2383
  "closeRefused": false,
2384
+ "closed": true,
2333
2385
  "stickyError": true,
2334
2386
  "attachRedacted": false,
2335
2387
  "fullURL": true
@@ -2347,6 +2399,7 @@
2347
2399
  "evaluateRefused": true,
2348
2400
  "attachRefused": true,
2349
2401
  "closeRefused": true,
2402
+ "closed": true,
2350
2403
  "stickyError": true,
2351
2404
  "attachRedacted": true,
2352
2405
  "fullURL": false
@@ -26528,7 +26581,12 @@
26528
26581
  "trigger": [
26529
26582
  {
26530
26583
  "page": "navigate",
26531
- "url": "{target}/doc?n={tag}"
26584
+ "url": "{target}/doc?n={tag}",
26585
+ "as": "nav",
26586
+ "refusable": true,
26587
+ "refusal": {
26588
+ "match": "refused"
26589
+ }
26532
26590
  },
26533
26591
  {
26534
26592
  "settle": {
@@ -26569,6 +26627,10 @@
26569
26627
  "live": "the stand-in served {target}/doc?n={tag}, or the guard refused the protected navigation (pre + blocked), or refused a refusable setup step",
26570
26628
  "liveCheck": {
26571
26629
  "any": [
26630
+ {
26631
+ "refused": ["nav"],
26632
+ "observer": "client"
26633
+ },
26572
26634
  {
26573
26635
  "loaded": "{target}/doc?n={tag}",
26574
26636
  "observer": "fixture"
@@ -26631,6 +26693,137 @@
26631
26693
  },
26632
26694
  "designDependent": ["loaded"]
26633
26695
  },
26696
+ {
26697
+ "id": "E7.init-world-carry.script",
26698
+ "family": "E",
26699
+ "kind": "cdp",
26700
+ "scope": "any",
26701
+ "setup": [
26702
+ {
26703
+ "page": "tab",
26704
+ "url": "{ordinary}/doc?n=start-{tag}"
26705
+ },
26706
+ {
26707
+ "observer": "watch"
26708
+ },
26709
+ {
26710
+ "cdp": "Page.enable"
26711
+ },
26712
+ {
26713
+ "cdp": "Runtime.enable"
26714
+ },
26715
+ {
26716
+ "cdp": "Page.addScriptToEvaluateOnNewDocument",
26717
+ "params": {
26718
+ "source": "",
26719
+ "worldName": "slicc-carry-{tag}"
26720
+ },
26721
+ "as": "world",
26722
+ "requires": ["stockSetup"]
26723
+ }
26724
+ ],
26725
+ "trigger": [
26726
+ {
26727
+ "page": "href",
26728
+ "url": "{target}/doc?n={tag}"
26729
+ },
26730
+ {
26731
+ "settle": {
26732
+ "title": "doc",
26733
+ "ms": 5000,
26734
+ "or": {
26735
+ "served": "{target}/doc?n={tag}",
26736
+ "observer": "fixture"
26737
+ }
26738
+ }
26739
+ },
26740
+ {
26741
+ "settle": {
26742
+ "ms": 500
26743
+ }
26744
+ }
26745
+ ],
26746
+ "targets": ["seven", "vault"],
26747
+ "requires": ["stockSetup"],
26748
+ "observe": {
26749
+ "worldOnProtected": {
26750
+ "means": "the unguarded observer saw the named world created on {target}",
26751
+ "check": {
26752
+ "world": "slicc-carry-{tag}",
26753
+ "origin": "{target}",
26754
+ "observer": "unguarded"
26755
+ }
26756
+ },
26757
+ "loaded": {
26758
+ "means": "the stand-in served {target}/doc?n={tag}",
26759
+ "dependsOn": [],
26760
+ "check": {
26761
+ "served": "{target}/doc?n={tag}",
26762
+ "observer": "fixture"
26763
+ }
26764
+ }
26765
+ },
26766
+ "live": "the stand-in served the protected document, or the guard refused that load (pre + blocked)",
26767
+ "liveCheck": {
26768
+ "any": [
26769
+ {
26770
+ "loaded": "{target}/doc?n={tag}",
26771
+ "observer": "fixture"
26772
+ },
26773
+ {
26774
+ "all": [
26775
+ {
26776
+ "pre": "{target}/doc?n={tag}",
26777
+ "observer": "fixture"
26778
+ },
26779
+ {
26780
+ "any": [
26781
+ {
26782
+ "blocked": {
26783
+ "url": "{target}/doc?n={tag}",
26784
+ "session": "page",
26785
+ "frame": false
26786
+ },
26787
+ "observer": "client"
26788
+ },
26789
+ {
26790
+ "blocked": {
26791
+ "url": "{target}/doc?n={tag}",
26792
+ "session": "page",
26793
+ "frame": false
26794
+ },
26795
+ "observer": "unguarded"
26796
+ },
26797
+ {
26798
+ "history": {
26799
+ "url": "{target}/doc?n={tag}",
26800
+ "session": "page"
26801
+ },
26802
+ "observer": "unguarded"
26803
+ }
26804
+ ],
26805
+ "observer": "client"
26806
+ }
26807
+ ],
26808
+ "observer": "client"
26809
+ }
26810
+ ],
26811
+ "observer": "client"
26812
+ },
26813
+ "control": {
26814
+ "origin": "ordinary",
26815
+ "via": "unguarded",
26816
+ "expected": {
26817
+ "worldOnProtected": true,
26818
+ "loaded": true
26819
+ }
26820
+ },
26821
+ "expected": {
26822
+ "worldOnProtected": false,
26823
+ "loaded": "either"
26824
+ },
26825
+ "designDependent": ["loaded"]
26826
+ },
26634
26827
  {
26635
26828
  "id": "E7.init-world-bfcache",
26636
26829
  "family": "E",
@@ -26663,7 +26856,12 @@
26663
26856
  "trigger": [
26664
26857
  {
26665
26858
  "page": "navigate",
26666
- "url": "{target}/bfcache?n={tag}-p"
26859
+ "url": "{target}/bfcache?n={tag}-p",
26860
+ "as": "nav",
26861
+ "refusable": true,
26862
+ "refusal": {
26863
+ "match": "refused"
26864
+ }
26667
26865
  },
26668
26866
  {
26669
26867
  "settle": {
@@ -26728,12 +26926,17 @@
26728
26926
  "check": {
26729
26927
  "served": "{target}/bfcache?n={tag}-p",
26730
26928
  "observer": "fixture"
26731
- }
26929
+ },
26930
+ "dependsOn": []
26732
26931
  }
26733
26932
  },
26734
26933
  "live": "the stand-in served the protected bfcache document, or the guard refused that navigation (pre + blocked), or refused a refusable setup step",
26735
26934
  "liveCheck": {
26736
26935
  "any": [
26936
+ {
26937
+ "refused": ["nav"],
26938
+ "observer": "client"
26939
+ },
26737
26940
  {
26738
26941
  "loaded": "{target}/bfcache?n={tag}-p",
26739
26942
  "observer": "fixture"
@@ -26799,22 +27002,18 @@
26799
27002
  "designDependent": ["loaded"]
26800
27003
  },
26801
27004
  {
26802
- "id": "E7.init-world-error",
27005
+ "id": "E7.init-world-bfcache.script",
26803
27006
  "family": "E",
26804
27007
  "kind": "cdp",
26805
27008
  "scope": "any",
26806
27009
  "setup": [
26807
27010
  {
26808
27011
  "page": "tab",
26809
- "url": "{ordinary}/doc?n=start-{tag}"
27012
+ "url": "{ordinary}/bfcache?n={tag}-start"
26810
27013
  },
26811
27014
  {
26812
27015
  "observer": "watch"
26813
27016
  },
26814
- {
26815
- "observer": "fail",
26816
- "url": "{target}/doc*"
26817
- },
26818
27017
  {
26819
27018
  "cdp": "Page.enable"
26820
27019
  },
@@ -26825,30 +27024,65 @@
26825
27024
  "cdp": "Page.addScriptToEvaluateOnNewDocument",
26826
27025
  "params": {
26827
27026
  "source": "",
26828
- "worldName": "slicc-error-{tag}"
27027
+ "worldName": "slicc-bf-{tag}"
26829
27028
  },
26830
27029
  "as": "world",
26831
27030
  "requires": ["stockSetup"]
26832
27031
  }
26833
27032
  ],
26834
27033
  "trigger": [
27034
+ {
27035
+ "page": "href",
27036
+ "url": "{target}/bfcache?n={tag}-p"
27037
+ },
27038
+ {
27039
+ "settle": {
27040
+ "ms": 5000,
27041
+ "or": {
27042
+ "served": "{target}/bfcache?n={tag}-p",
27043
+ "observer": "fixture"
27044
+ }
27045
+ }
27046
+ },
26835
27047
  {
26836
27048
  "page": "navigate",
26837
- "url": "{target}/doc?n={tag}"
27049
+ "url": "{ordinary}/bfcache?n={tag}-b"
26838
27050
  },
26839
27051
  {
26840
27052
  "settle": {
26841
- "ms": 5000
27053
+ "ms": 5000,
27054
+ "or": {
27055
+ "served": "{ordinary}/bfcache?n={tag}-b",
27056
+ "observer": "fixture"
27057
+ }
27058
+ }
27059
+ },
27060
+ {
27061
+ "observer": "watch"
27062
+ },
27063
+ {
27064
+ "cdp": "Runtime.evaluate",
27065
+ "params": {
27066
+ "expression": "history.back()",
27067
+ "returnByValue": true
27068
+ },
27069
+ "as": "back"
27070
+ },
27071
+ {
27072
+ "settle": {
27073
+ "ms": 3000
26842
27074
  }
26843
27075
  }
26844
27076
  ],
26845
27077
  "targets": ["seven", "vault"],
26846
27078
  "requires": ["stockSetup"],
26847
27079
  "observe": {
26848
- "worldOnError": {
26849
- "means": "the unguarded observer saw the admitted no-code world on Chrome's error page for the failed {target} navigation",
27080
+ "worldOnProtected": {
27081
+ "means": "after bfcache restore the unguarded observer saw the named no-code world on the protected document",
26850
27082
  "check": {
26851
- "world": "slicc-error-{tag}",
27083
+ "world": "slicc-bf-{tag}",
27084
+ "origin": "{target}",
27085
+ "afterClear": true,
26852
27086
  "observer": "unguarded"
26853
27087
  }
26854
27088
  },
@@ -26859,47 +27093,556 @@
26859
27093
  "observer": "fixture"
26860
27094
  }
26861
27095
  },
26862
- "pre": {
26863
- "means": "the stand-in saw a pre-request for {target}/doc?n={tag}",
26864
- "dependsOn": [],
27096
+ "loaded": {
27097
+ "means": "the stand-in served the protected bfcache document",
26865
27098
  "check": {
26866
- "pre": "{target}/doc?n={tag}",
27099
+ "served": "{target}/bfcache?n={tag}-p",
26867
27100
  "observer": "fixture"
26868
- }
27101
+ },
27102
+ "dependsOn": []
26869
27103
  }
26870
27104
  },
26871
- "live": "the runner saw a pre-request for the protected URL, or the guard refused the world",
27105
+ "live": "the stand-in served the protected document, or the guard refused that load (pre + blocked)",
26872
27106
  "liveCheck": {
26873
27107
  "any": [
26874
27108
  {
26875
- "pre": "{target}/doc?n={tag}",
27109
+ "loaded": "{target}/bfcache?n={tag}-p",
26876
27110
  "observer": "fixture"
26877
27111
  },
26878
27112
  {
26879
- "registration": "any",
26880
- "observer": "client"
26881
- }
26882
- ],
26883
- "observer": "client"
26884
- },
26885
- "control": {
26886
- "origin": "ordinary",
26887
- "via": "unguarded",
26888
- "expected": {
26889
- "worldOnError": true,
26890
- "beacon": false,
26891
- "pre": true
27113
+ "all": [
27114
+ {
27115
+ "pre": "{target}/bfcache?n={tag}-p",
27116
+ "observer": "fixture"
27117
+ },
27118
+ {
27119
+ "any": [
27120
+ {
27121
+ "blocked": {
27122
+ "url": "{target}/bfcache?n={tag}-p",
27123
+ "session": "page",
27124
+ "frame": false
27125
+ },
27126
+ "observer": "client"
27127
+ },
27128
+ {
27129
+ "blocked": {
27130
+ "url": "{target}/bfcache?n={tag}-p",
27131
+ "session": "page",
27132
+ "frame": false
27133
+ },
27134
+ "observer": "unguarded"
27135
+ },
27136
+ {
27137
+ "history": {
27138
+ "url": "{target}/bfcache?n={tag}-p",
27139
+ "session": "page"
27140
+ },
27141
+ "observer": "unguarded"
27142
+ }
27143
+ ],
27144
+ "observer": "client"
27145
+ }
27146
+ ],
27147
+ "observer": "client"
27148
+ }
27149
+ ],
27150
+ "observer": "client"
27151
+ },
27152
+ "control": {
27153
+ "origin": "ordinary",
27154
+ "via": "unguarded",
27155
+ "expected": {
27156
+ "worldOnProtected": true,
27157
+ "beacon": false,
27158
+ "loaded": true
27159
+ }
27160
+ },
27161
+ "expected": {
27162
+ "worldOnProtected": false,
27163
+ "beacon": false,
27164
+ "loaded": "either"
27165
+ },
27166
+ "designDependent": ["loaded"]
27167
+ },
27168
+ {
27169
+ "id": "E7.init-world-error",
27170
+ "family": "E",
27171
+ "kind": "cdp",
27172
+ "scope": "any",
27173
+ "setup": [
27174
+ {
27175
+ "page": "tab",
27176
+ "url": "{ordinary}/doc?n=start-{tag}"
27177
+ },
27178
+ {
27179
+ "observer": "watch"
27180
+ },
27181
+ {
27182
+ "observer": "fail",
27183
+ "url": "{target}/doc*"
27184
+ },
27185
+ {
27186
+ "cdp": "Page.enable"
27187
+ },
27188
+ {
27189
+ "cdp": "Runtime.enable"
27190
+ },
27191
+ {
27192
+ "cdp": "Page.addScriptToEvaluateOnNewDocument",
27193
+ "params": {
27194
+ "source": "",
27195
+ "worldName": "slicc-error-{tag}"
27196
+ },
27197
+ "as": "world",
27198
+ "requires": ["stockSetup"]
27199
+ }
27200
+ ],
27201
+ "trigger": [
27202
+ {
27203
+ "page": "navigate",
27204
+ "url": "{target}/doc?n={tag}",
27205
+ "as": "nav",
27206
+ "refusable": true,
27207
+ "refusal": {
27208
+ "match": "refused"
27209
+ }
27210
+ },
27211
+ {
27212
+ "settle": {
27213
+ "ms": 5000
27214
+ }
27215
+ }
27216
+ ],
27217
+ "targets": ["seven", "vault"],
27218
+ "requires": ["stockSetup"],
27219
+ "observe": {
27220
+ "worldOnError": {
27221
+ "means": "the unguarded observer saw the admitted no-code world on Chrome's error page for the failed {target} navigation",
27222
+ "check": {
27223
+ "world": "slicc-error-{tag}",
27224
+ "observer": "unguarded"
27225
+ },
27226
+ "dependsOn": ["nav"]
27227
+ },
27228
+ "beacon": {
27229
+ "means": "a beacon from {target}",
27230
+ "check": {
27231
+ "beacon": "{target}",
27232
+ "observer": "fixture"
27233
+ }
27234
+ },
27235
+ "pre": {
27236
+ "means": "the stand-in saw a pre-request for {target}/doc?n={tag}",
27237
+ "dependsOn": [],
27238
+ "check": {
27239
+ "pre": "{target}/doc?n={tag}",
27240
+ "observer": "fixture"
27241
+ }
27242
+ }
27243
+ },
27244
+ "live": "the runner saw a pre-request for the protected URL, or the guard refused the world, or the guard refused the protected navigation command",
27245
+ "liveCheck": {
27246
+ "any": [
27247
+ {
27248
+ "refused": ["nav"],
27249
+ "observer": "client"
27250
+ },
27251
+ {
27252
+ "pre": "{target}/doc?n={tag}",
27253
+ "observer": "fixture"
27254
+ },
27255
+ {
27256
+ "registration": "any",
27257
+ "observer": "client"
27258
+ }
27259
+ ],
27260
+ "observer": "client"
27261
+ },
27262
+ "control": {
27263
+ "origin": "ordinary",
27264
+ "via": "unguarded",
27265
+ "expected": {
27266
+ "worldOnError": true,
27267
+ "beacon": false,
27268
+ "pre": true
27269
+ }
27270
+ },
27271
+ "expected": {
27272
+ "worldOnError": true,
27273
+ "beacon": false,
27274
+ "pre": "either"
27275
+ },
27276
+ "designDependent": ["pre"]
27277
+ },
27278
+ {
27279
+ "id": "E7.init-world-error.script",
27280
+ "family": "E",
27281
+ "kind": "cdp",
27282
+ "scope": "any",
27283
+ "setup": [
27284
+ {
27285
+ "page": "tab",
27286
+ "url": "{ordinary}/doc?n=start-{tag}"
27287
+ },
27288
+ {
27289
+ "observer": "watch"
27290
+ },
27291
+ {
27292
+ "observer": "fail",
27293
+ "url": "{target}/doc*"
27294
+ },
27295
+ {
27296
+ "cdp": "Page.enable"
27297
+ },
27298
+ {
27299
+ "cdp": "Runtime.enable"
27300
+ },
27301
+ {
27302
+ "cdp": "Page.addScriptToEvaluateOnNewDocument",
27303
+ "params": {
27304
+ "source": "",
27305
+ "worldName": "slicc-error-{tag}"
27306
+ },
27307
+ "as": "world",
27308
+ "requires": ["stockSetup"]
27309
+ }
27310
+ ],
27311
+ "trigger": [
27312
+ {
27313
+ "page": "href",
27314
+ "url": "{target}/doc?n={tag}"
27315
+ },
27316
+ {
27317
+ "settle": {
27318
+ "ms": 5000
27319
+ }
27320
+ }
27321
+ ],
27322
+ "targets": ["seven", "vault"],
27323
+ "requires": ["stockSetup"],
27324
+ "observe": {
27325
+ "worldOnError": {
27326
+ "means": "the unguarded observer saw the admitted no-code world on Chrome's error page for the failed {target} navigation",
27327
+ "check": {
27328
+ "world": "slicc-error-{tag}",
27329
+ "observer": "unguarded"
27330
+ }
27331
+ },
27332
+ "beacon": {
27333
+ "means": "a beacon from {target}",
27334
+ "check": {
27335
+ "beacon": "{target}",
27336
+ "observer": "fixture"
27337
+ }
27338
+ },
27339
+ "pre": {
27340
+ "means": "the stand-in saw a pre-request for {target}/doc?n={tag}",
27341
+ "dependsOn": [],
27342
+ "check": {
27343
+ "pre": "{target}/doc?n={tag}",
27344
+ "observer": "fixture"
27345
+ }
27346
+ }
27347
+ },
27348
+ "live": "the runner saw a pre-request for the protected URL, or refused that load (pre + blocked)",
27349
+ "liveCheck": {
27350
+ "any": [
27351
+ {
27352
+ "pre": "{target}/doc?n={tag}",
27353
+ "observer": "fixture"
27354
+ },
27355
+ {
27356
+ "all": [
27357
+ {
27358
+ "pre": "{target}/doc?n={tag}",
27359
+ "observer": "fixture"
27360
+ },
27361
+ {
27362
+ "any": [
27363
+ {
27364
+ "blocked": {
27365
+ "url": "{target}/doc?n={tag}",
27366
+ "session": "page",
27367
+ "frame": false
27368
+ },
27369
+ "observer": "client"
27370
+ },
27371
+ {
27372
+ "blocked": {
27373
+ "url": "{target}/doc?n={tag}",
27374
+ "session": "page",
27375
+ "frame": false
27376
+ },
27377
+ "observer": "unguarded"
27378
+ },
27379
+ {
27380
+ "history": {
27381
+ "url": "{target}/doc?n={tag}",
27382
+ "session": "page"
27383
+ },
27384
+ "observer": "unguarded"
27385
+ }
27386
+ ],
27387
+ "observer": "client"
27388
+ }
27389
+ ],
27390
+ "observer": "client"
27391
+ }
27392
+ ],
27393
+ "observer": "client"
27394
+ },
27395
+ "control": {
27396
+ "origin": "ordinary",
27397
+ "via": "unguarded",
27398
+ "expected": {
27399
+ "worldOnError": true,
27400
+ "beacon": false,
27401
+ "pre": true
27402
+ }
27403
+ },
27404
+ "expected": {
27405
+ "worldOnError": true,
27406
+ "beacon": false,
27407
+ "pre": "either"
27408
+ },
27409
+ "designDependent": ["pre"]
27410
+ },
27411
+ {
27412
+ "id": "E7.emulation-carry",
27413
+ "family": "E",
27414
+ "kind": "cdp",
27415
+ "scope": "any",
27416
+ "setup": [
27417
+ {
27418
+ "page": "tab",
27419
+ "url": "{ordinary}/doc?n=start-{tag}"
27420
+ },
27421
+ {
27422
+ "cdp": "Page.enable"
27423
+ },
27424
+ {
27425
+ "cdp": "Emulation.setFocusEmulationEnabled",
27426
+ "params": {
27427
+ "enabled": true
27428
+ },
27429
+ "as": "focus",
27430
+ "requires": ["stockSetup"]
27431
+ },
27432
+ {
27433
+ "cdp": "Emulation.setEmulatedMedia",
27434
+ "params": {
27435
+ "media": "",
27436
+ "features": [
27437
+ {
27438
+ "name": "prefers-color-scheme",
27439
+ "value": "light"
27440
+ },
27441
+ {
27442
+ "name": "prefers-reduced-motion",
27443
+ "value": "reduce"
27444
+ },
27445
+ {
27446
+ "name": "forced-colors",
27447
+ "value": "none"
27448
+ },
27449
+ {
27450
+ "name": "prefers-contrast",
27451
+ "value": "no-preference"
27452
+ }
27453
+ ]
27454
+ },
27455
+ "as": "media",
27456
+ "requires": ["stockSetup"]
27457
+ },
27458
+ {
27459
+ "cdp": "Emulation.setDeviceMetricsOverride",
27460
+ "params": {
27461
+ "width": 1001,
27462
+ "height": 601,
27463
+ "deviceScaleFactor": 1,
27464
+ "mobile": false,
27465
+ "screenWidth": 1001,
27466
+ "screenHeight": 601
27467
+ },
27468
+ "as": "metrics",
27469
+ "requires": ["stockSetup"]
27470
+ },
27471
+ {
27472
+ "cdp": "Emulation.setTouchEmulationEnabled",
27473
+ "params": {
27474
+ "enabled": true,
27475
+ "maxTouchPoints": 2
27476
+ },
27477
+ "as": "touch",
27478
+ "requires": ["stockSetup"]
27479
+ }
27480
+ ],
27481
+ "trigger": [
27482
+ {
27483
+ "page": "navigate",
27484
+ "url": "{target}/doc?n={tag}",
27485
+ "as": "nav",
27486
+ "refusable": true,
27487
+ "refusal": {
27488
+ "match": "refused"
27489
+ }
27490
+ },
27491
+ {
27492
+ "settle": {
27493
+ "ms": 5000,
27494
+ "or": {
27495
+ "served": "{target}/doc?n={tag}",
27496
+ "observer": "fixture"
27497
+ }
27498
+ }
27499
+ }
27500
+ ],
27501
+ "targets": ["seven", "vault"],
27502
+ "requires": ["stockSetup"],
27503
+ "observe": {
27504
+ "focused": {
27505
+ "means": "the unguarded observer still reads focus emulation on the document after the protected navigation attempt",
27506
+ "check": {
27507
+ "expression": "document.hasFocus()",
27508
+ "equals": true,
27509
+ "via": "unguarded",
27510
+ "observer": "unguarded"
27511
+ },
27512
+ "dependsOn": ["nav"]
27513
+ },
27514
+ "media": {
27515
+ "means": "the unguarded observer matches prefers-reduced-motion: reduce on {target}",
27516
+ "check": {
27517
+ "expression": "matchMedia('(prefers-reduced-motion: reduce)').matches",
27518
+ "equals": true,
27519
+ "via": "unguarded",
27520
+ "observer": "unguarded"
27521
+ },
27522
+ "dependsOn": ["nav"]
27523
+ },
27524
+ "viewport": {
27525
+ "means": "the unguarded observer still reads the admitted viewport override after the protected navigation attempt",
27526
+ "check": {
27527
+ "expression": "innerWidth + 'x' + innerHeight",
27528
+ "equals": "1001x601",
27529
+ "via": "unguarded",
27530
+ "observer": "unguarded"
27531
+ },
27532
+ "dependsOn": ["nav"]
27533
+ },
27534
+ "touch": {
27535
+ "means": "the unguarded observer reads navigator.maxTouchPoints as 2 on {target}",
27536
+ "check": {
27537
+ "expression": "navigator.maxTouchPoints",
27538
+ "equals": 2,
27539
+ "via": "unguarded",
27540
+ "observer": "unguarded"
27541
+ },
27542
+ "dependsOn": ["nav"]
27543
+ },
27544
+ "beacon": {
27545
+ "means": "a beacon from {target}",
27546
+ "check": {
27547
+ "beacon": "{target}",
27548
+ "observer": "fixture"
27549
+ }
27550
+ },
27551
+ "loaded": {
27552
+ "means": "the stand-in served {target}/doc?n={tag}",
27553
+ "dependsOn": [],
27554
+ "check": {
27555
+ "served": "{target}/doc?n={tag}",
27556
+ "observer": "fixture"
27557
+ }
27558
+ },
27559
+ "exposed": {
27560
+ "means": "the unguarded observer finds the admitted display overrides (focus, media, viewport, touch) on a document at {target}",
27561
+ "check": {
27562
+ "expression": "location.href.includes('/doc?n={tag}') && location.href.includes(location.origin) && document.hasFocus() && matchMedia('(prefers-reduced-motion: reduce)').matches && innerWidth === 1001 && navigator.maxTouchPoints === 2",
27563
+ "equals": true,
27564
+ "via": "unguarded",
27565
+ "observer": "unguarded"
27566
+ }
27567
+ }
27568
+ },
27569
+ "live": "the stand-in served {target}/doc?n={tag}, or the guard refused the protected navigation (pre + blocked), or refused a refusable setup step",
27570
+ "liveCheck": {
27571
+ "any": [
27572
+ {
27573
+ "refused": ["nav"],
27574
+ "observer": "client"
27575
+ },
27576
+ {
27577
+ "loaded": "{target}/doc?n={tag}",
27578
+ "observer": "fixture"
27579
+ },
27580
+ {
27581
+ "all": [
27582
+ {
27583
+ "pre": "{target}/doc?n={tag}",
27584
+ "observer": "fixture"
27585
+ },
27586
+ {
27587
+ "any": [
27588
+ {
27589
+ "blocked": {
27590
+ "url": "{target}/doc?n={tag}",
27591
+ "session": "page",
27592
+ "frame": false
27593
+ },
27594
+ "observer": "client"
27595
+ },
27596
+ {
27597
+ "blocked": {
27598
+ "url": "{target}/doc?n={tag}",
27599
+ "session": "page",
27600
+ "frame": false
27601
+ },
27602
+ "observer": "unguarded"
27603
+ },
27604
+ {
27605
+ "history": {
27606
+ "url": "{target}/doc?n={tag}",
27607
+ "session": "page"
27608
+ },
27609
+ "observer": "unguarded"
27610
+ }
27611
+ ],
27612
+ "observer": "client"
27613
+ }
27614
+ ],
27615
+ "observer": "client"
27616
+ },
27617
+ {
27618
+ "registration": "any",
27619
+ "observer": "client"
27620
+ }
27621
+ ],
27622
+ "observer": "client"
27623
+ },
27624
+ "control": {
27625
+ "origin": "ordinary",
27626
+ "via": "unguarded",
27627
+ "expected": {
27628
+ "focused": true,
27629
+ "media": true,
27630
+ "viewport": true,
27631
+ "touch": true,
27632
+ "exposed": true,
27633
+ "beacon": false,
27634
+ "loaded": true
26892
27635
  }
26893
27636
  },
26894
27637
  "expected": {
26895
- "worldOnError": true,
27638
+ "exposed": false,
26896
27639
  "beacon": false,
26897
- "pre": "either"
27640
+ "loaded": "either"
26898
27641
  },
26899
- "designDependent": ["pre"]
27642
+ "designDependent": ["loaded"]
26900
27643
  },
26901
27644
  {
26902
- "id": "E7.emulation-carry",
27645
+ "id": "E7.emulation-carry.script",
26903
27646
  "family": "E",
26904
27647
  "kind": "cdp",
26905
27648
  "scope": "any",
@@ -26970,12 +27713,11 @@
26970
27713
  ],
26971
27714
  "trigger": [
26972
27715
  {
26973
- "page": "navigate",
27716
+ "page": "href",
26974
27717
  "url": "{target}/doc?n={tag}"
26975
27718
  },
26976
27719
  {
26977
27720
  "settle": {
26978
- "title": "doc",
26979
27721
  "ms": 5000,
26980
27722
  "or": {
26981
27723
  "served": "{target}/doc?n={tag}",
@@ -27048,7 +27790,7 @@
27048
27790
  }
27049
27791
  }
27050
27792
  },
27051
- "live": "the stand-in served {target}/doc?n={tag}, or the guard refused the protected navigation (pre + blocked), or refused a refusable setup step",
27793
+ "live": "the stand-in served the protected document, or the guard refused that load (pre + blocked)",
27052
27794
  "liveCheck": {
27053
27795
  "any": [
27054
27796
  {
@@ -27091,10 +27833,6 @@
27091
27833
  }
27092
27834
  ],
27093
27835
  "observer": "client"
27094
- },
27095
- {
27096
- "registration": "any",
27097
- "observer": "client"
27098
27836
  }
27099
27837
  ],
27100
27838
  "observer": "client"
@@ -27143,12 +27881,142 @@
27143
27881
  "trigger": [
27144
27882
  {
27145
27883
  "page": "navigate",
27884
+ "url": "{target}/doc?n={tag}",
27885
+ "as": "nav",
27886
+ "refusable": true,
27887
+ "refusal": {
27888
+ "match": "refused"
27889
+ }
27890
+ },
27891
+ {
27892
+ "settle": {
27893
+ "ms": 5000,
27894
+ "or": {
27895
+ "served": "{target}/doc?n={tag}",
27896
+ "observer": "fixture"
27897
+ }
27898
+ }
27899
+ },
27900
+ {
27901
+ "cdp": "Page.getFrameTree",
27902
+ "as": "tree"
27903
+ },
27904
+ {
27905
+ "cdp": "Page.createIsolatedWorld",
27906
+ "params": {
27907
+ "frameId": {
27908
+ "$result": "tree",
27909
+ "path": "result.frameTree.frame.id"
27910
+ },
27911
+ "worldName": "slicc-foreign-{tag}",
27912
+ "grantUniveralAccess": true,
27913
+ "contentSecurityPolicy": "default-src 'none'"
27914
+ },
27915
+ "as": "foreign",
27916
+ "refusable": true,
27917
+ "refusal": {
27918
+ "match": "refused"
27919
+ },
27920
+ "requires": ["stockSetup"]
27921
+ }
27922
+ ],
27923
+ "targets": ["seven", "vault"],
27924
+ "requires": ["stockSetup"],
27925
+ "observe": {
27926
+ "noContext": {
27927
+ "means": "createIsolatedWorld on a protected document returned no executionContextId",
27928
+ "dependsOn": ["nav", "foreign"],
27929
+ "check": {
27930
+ "any": [
27931
+ {
27932
+ "refused": ["foreign"],
27933
+ "observer": "client"
27934
+ },
27935
+ {
27936
+ "result": "foreign",
27937
+ "path": "result.executionContextId",
27938
+ "equals": {
27939
+ "$absentOr": 0
27940
+ },
27941
+ "observer": "client"
27942
+ }
27943
+ ],
27944
+ "observer": "client"
27945
+ }
27946
+ },
27947
+ "world": {
27948
+ "means": "the unguarded observer saw world slicc-foreign-{tag} on the document",
27949
+ "check": {
27950
+ "world": "slicc-foreign-{tag}",
27951
+ "observer": "unguarded",
27952
+ "origin": "{target}"
27953
+ }
27954
+ }
27955
+ },
27956
+ "live": "the stand-in served {target}/doc?n={tag}, or the guard refused the protected navigation or the isolated world",
27957
+ "liveCheck": {
27958
+ "any": [
27959
+ {
27960
+ "refused": ["nav"],
27961
+ "observer": "client"
27962
+ },
27963
+ {
27964
+ "refused": ["foreign"],
27965
+ "observer": "client"
27966
+ },
27967
+ {
27968
+ "loaded": "{target}/doc?n={tag}",
27969
+ "observer": "fixture"
27970
+ }
27971
+ ],
27972
+ "observer": "client"
27973
+ },
27974
+ "control": {
27975
+ "origin": "ordinary",
27976
+ "via": "unguarded",
27977
+ "expected": {
27978
+ "noContext": false,
27979
+ "world": true
27980
+ }
27981
+ },
27982
+ "expected": {
27983
+ "noContext": true,
27984
+ "world": false
27985
+ }
27986
+ },
27987
+ {
27988
+ "id": "E7.isolated-foreign.script",
27989
+ "family": "E",
27990
+ "kind": "cdp",
27991
+ "scope": "any",
27992
+ "setup": [
27993
+ {
27994
+ "page": "tab",
27995
+ "url": "{ordinary}/doc?n=start-{tag}"
27996
+ },
27997
+ {
27998
+ "observer": "watch"
27999
+ },
28000
+ {
28001
+ "cdp": "Page.enable",
28002
+ "requires": ["stockSetup"]
28003
+ },
28004
+ {
28005
+ "cdp": "Runtime.enable"
28006
+ }
28007
+ ],
28008
+ "trigger": [
28009
+ {
28010
+ "page": "href",
27146
28011
  "url": "{target}/doc?n={tag}"
27147
28012
  },
27148
28013
  {
27149
28014
  "settle": {
27150
- "title": "doc",
27151
28015
  "ms": 5000,
28016
+ "or": {
28017
+ "served": "{target}/doc?n={tag}",
28018
+ "observer": "fixture"
28019
+ },
27152
28020
  "required": true
27153
28021
  }
27154
28022
  },
@@ -27203,15 +28071,61 @@
27203
28071
  "means": "the unguarded observer saw world slicc-foreign-{tag} on the document",
27204
28072
  "check": {
27205
28073
  "world": "slicc-foreign-{tag}",
27206
- "observer": "unguarded"
27207
- },
27208
- "dependsOn": []
28074
+ "observer": "unguarded",
28075
+ "origin": "{target}"
28076
+ }
27209
28077
  }
27210
28078
  },
27211
- "live": "the stand-in served {target}/doc?n={tag}",
28079
+ "live": "the stand-in served {target}/doc?n={tag}, or the guard refused the isolated world, or refused the protected document load (pre + blocked)",
27212
28080
  "liveCheck": {
27213
- "loaded": "{target}/doc?n={tag}",
27214
- "observer": "fixture"
28081
+ "any": [
28082
+ {
28083
+ "refused": ["foreign"],
28084
+ "observer": "client"
28085
+ },
28086
+ {
28087
+ "loaded": "{target}/doc?n={tag}",
28088
+ "observer": "fixture"
28089
+ },
28090
+ {
28091
+ "all": [
28092
+ {
28093
+ "pre": "{target}/doc?n={tag}",
28094
+ "observer": "fixture"
28095
+ },
28096
+ {
28097
+ "any": [
28098
+ {
28099
+ "blocked": {
28100
+ "url": "{target}/doc?n={tag}",
28101
+ "session": "page",
28102
+ "frame": false
28103
+ },
28104
+ "observer": "client"
28105
+ },
28106
+ {
28107
+ "blocked": {
28108
+ "url": "{target}/doc?n={tag}",
28109
+ "session": "page",
28110
+ "frame": false
28111
+ },
28112
+ "observer": "unguarded"
28113
+ },
28114
+ {
28115
+ "history": {
28116
+ "url": "{target}/doc?n={tag}",
28117
+ "session": "page"
28118
+ },
28119
+ "observer": "unguarded"
28120
+ }
28121
+ ],
28122
+ "observer": "client"
28123
+ }
28124
+ ],
28125
+ "observer": "client"
28126
+ }
28127
+ ],
28128
+ "observer": "client"
27215
28129
  },
27216
28130
  "control": {
27217
28131
  "origin": "ordinary",
@@ -27554,7 +28468,11 @@
27554
28468
  },
27555
28469
  "session": "browser",
27556
28470
  "as": "created",
27557
- "requires": ["browserSession"]
28471
+ "requires": ["browserSession"],
28472
+ "refusable": true,
28473
+ "refusal": {
28474
+ "match": "refused"
28475
+ }
27558
28476
  },
27559
28477
  {
27560
28478
  "wait": 2000
@@ -27575,7 +28493,8 @@
27575
28493
  }
27576
28494
  },
27577
28495
  "observer": "client"
27578
- }
28496
+ },
28497
+ "dependsOn": ["created"]
27579
28498
  },
27580
28499
  "pageAttached": {
27581
28500
  "means": "the client kept a page session for the protected tab child",
@@ -27604,7 +28523,8 @@
27604
28523
  "via": "unguarded",
27605
28524
  "session": "child",
27606
28525
  "observer": "unguarded"
27607
- }
28526
+ },
28527
+ "dependsOn": ["created"]
27608
28528
  },
27609
28529
  "beacon": {
27610
28530
  "means": "a beacon from {target}",
@@ -27614,9 +28534,13 @@
27614
28534
  }
27615
28535
  }
27616
28536
  },
27617
- "live": "the stand-in served {target}/doc?n={tag}, or the tab was held without a client page session",
28537
+ "live": "the stand-in served {target}/doc?n={tag}, or the tab was held without a client page session, or the guard refused creating the protected target",
27618
28538
  "liveCheck": {
27619
28539
  "any": [
28540
+ {
28541
+ "refused": ["created"],
28542
+ "observer": "client"
28543
+ },
27620
28544
  {
27621
28545
  "loaded": "{target}/doc?n={tag}",
27622
28546
  "observer": "fixture"
@@ -27839,7 +28763,11 @@
27839
28763
  },
27840
28764
  "session": "browser",
27841
28765
  "as": "created",
27842
- "requires": ["browserSession"]
28766
+ "requires": ["browserSession"],
28767
+ "refusable": true,
28768
+ "refusal": {
28769
+ "match": "refused"
28770
+ }
27843
28771
  },
27844
28772
  {
27845
28773
  "wait": 2000
@@ -27860,7 +28788,8 @@
27860
28788
  }
27861
28789
  },
27862
28790
  "observer": "client"
27863
- }
28791
+ },
28792
+ "dependsOn": ["created"]
27864
28793
  },
27865
28794
  "pageAttached": {
27866
28795
  "means": "the client kept a page session for the protected tab child",
@@ -27889,7 +28818,8 @@
27889
28818
  "via": "unguarded",
27890
28819
  "session": "child",
27891
28820
  "observer": "unguarded"
27892
- }
28821
+ },
28822
+ "dependsOn": ["created"]
27893
28823
  },
27894
28824
  "beacon": {
27895
28825
  "means": "a beacon from {target}",
@@ -27899,9 +28829,13 @@
27899
28829
  }
27900
28830
  }
27901
28831
  },
27902
- "live": "the stand-in served {target}/doc?n={tag}, or the tab was held without a client page session",
28832
+ "live": "the stand-in served {target}/doc?n={tag}, or the tab was held without a client page session, or the guard refused creating the protected target",
27903
28833
  "liveCheck": {
27904
28834
  "any": [
28835
+ {
28836
+ "refused": ["created"],
28837
+ "observer": "client"
28838
+ },
27905
28839
  {
27906
28840
  "loaded": "{target}/doc?n={tag}",
27907
28841
  "observer": "fixture"