@ai-ecoverse/slicc-browsers 1.22.0 → 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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "setVersion": "1.22.0",
3
+ "setVersion": "1.22.1",
4
4
  "sources": [
5
5
  {
6
6
  "repo": "ai-ecoverse/slicc-cli",
@@ -103,7 +103,7 @@
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 narrowed to tab targets (pages under the tab held like pages, with the same URL redaction in targetInfo)",
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
108
  "secureOrigin": "the fixture and page origins are secure contexts (HTTPS), so service worker registration is available",
109
109
  "closeProtected": "the guard lets Target.closeTarget close a protected tab"
@@ -131,7 +131,8 @@
131
131
  "probe": "guard-driver.mjs probe({log}, {tag})",
132
132
  "pageTarget": "the current page target id",
133
133
  "responseOrigin": "the fixture response CORS origin",
134
- "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"
135
136
  },
136
137
  "vectors": [
137
138
  {
@@ -28016,8 +28017,7 @@
28016
28017
  "or": {
28017
28018
  "served": "{target}/doc?n={tag}",
28018
28019
  "observer": "fixture"
28019
- },
28020
- "required": true
28020
+ }
28021
28021
  }
28022
28022
  },
28023
28023
  {
@@ -29148,9 +29148,10 @@
29148
29148
  },
29149
29149
  "expected": {
29150
29150
  "admitted": true,
29151
- "workerAttached": false,
29151
+ "workerAttached": "either",
29152
29152
  "workerExists": true
29153
- }
29153
+ },
29154
+ "designDependent": ["workerAttached"]
29154
29155
  },
29155
29156
  {
29156
29157
  "id": "C3.tab-iframe-leak",
@@ -29449,8 +29450,1714 @@
29449
29450
  "expected": {
29450
29451
  "admitted": true,
29451
29452
  "workerExists": true,
29452
- "workerAttached": false
29453
- }
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"]
29454
31161
  }
29455
31162
  ]
29456
31163
  }