@ai-ecoverse/slicc-browsers 1.7.2 → 1.7.4

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.7.2",
3
+ "setVersion": "1.7.4",
4
4
  "sources": [
5
5
  {
6
6
  "repo": "ai-ecoverse/slicc-cli",
@@ -116,6 +116,14 @@
116
116
  {
117
117
  "page": "navigate",
118
118
  "url": "{ordinary}/doc?n=next-{tag}"
119
+ },
120
+ {
121
+ "settle": {
122
+ "beacon": "{ordinary}",
123
+ "ms": 5000,
124
+ "required": true,
125
+ "dependsOn": ["refused.3"]
126
+ }
119
127
  }
120
128
  ],
121
129
  "trigger": [
@@ -170,6 +178,43 @@
170
178
  "check": {
171
179
  "detached": "page",
172
180
  "observer": "client"
181
+ },
182
+ "eitherWhen": {
183
+ "all": [
184
+ {
185
+ "pre": "{target}/doc?n={tag}",
186
+ "observer": "fixture"
187
+ },
188
+ {
189
+ "any": [
190
+ {
191
+ "blocked": {
192
+ "url": "{target}/doc?n={tag}",
193
+ "session": "page",
194
+ "frame": false
195
+ },
196
+ "observer": "client"
197
+ },
198
+ {
199
+ "blocked": {
200
+ "url": "{target}/doc?n={tag}",
201
+ "session": "page",
202
+ "frame": false
203
+ },
204
+ "observer": "unguarded"
205
+ },
206
+ {
207
+ "history": {
208
+ "url": "{target}/doc?n={tag}",
209
+ "session": "page"
210
+ },
211
+ "observer": "unguarded"
212
+ }
213
+ ],
214
+ "observer": "client"
215
+ }
216
+ ],
217
+ "observer": "client"
173
218
  }
174
219
  }
175
220
  },
@@ -190,7 +235,7 @@
190
235
  "loaded": "either",
191
236
  "detached": true
192
237
  },
193
- "designDependent": ["loaded"],
238
+ "designDependent": ["loaded", "detached"],
194
239
  "liveCheck": {
195
240
  "any": [
196
241
  {
@@ -220,6 +265,13 @@
220
265
  "frame": false
221
266
  },
222
267
  "observer": "unguarded"
268
+ },
269
+ {
270
+ "history": {
271
+ "url": "{target}/doc?n={tag}",
272
+ "session": "page"
273
+ },
274
+ "observer": "unguarded"
223
275
  }
224
276
  ],
225
277
  "observer": "client"
@@ -274,6 +326,14 @@
274
326
  {
275
327
  "page": "navigate",
276
328
  "url": "{ordinary}/doc?n=next-{tag}"
329
+ },
330
+ {
331
+ "settle": {
332
+ "beacon": "{ordinary}",
333
+ "ms": 5000,
334
+ "required": true,
335
+ "dependsOn": ["refused.3"]
336
+ }
277
337
  }
278
338
  ],
279
339
  "trigger": [
@@ -342,61 +402,8 @@
342
402
  "check": {
343
403
  "detached": "page",
344
404
  "observer": "client"
345
- }
346
- },
347
- "hopped": {
348
- "means": "every hop in the chain was served",
349
- "dependsOn": [],
350
- "check": {
351
- "hops": [
352
- {
353
- "origin": "{ordinary}",
354
- "code": 301
355
- },
356
- {
357
- "origin": "{cross}",
358
- "code": 302
359
- },
360
- {
361
- "origin": "{ordinary}",
362
- "code": 303
363
- }
364
- ],
365
- "to": "{target}/doc?n={tag}",
366
- "observer": "fixture"
367
- }
368
- }
369
- },
370
- "live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
371
- "control": {
372
- "origin": "ordinary",
373
- "via": "guard",
374
- "expected": {
375
- "allowedBeacon": true,
376
- "beacon": true,
377
- "loaded": true,
378
- "detached": false,
379
- "hopped": true
380
- }
381
- },
382
- "expected": {
383
- "allowedBeacon": true,
384
- "beacon": false,
385
- "loaded": "either",
386
- "detached": true,
387
- "hopped": true
388
- },
389
- "observable": {
390
- "own": false
391
- },
392
- "designDependent": ["loaded"],
393
- "liveCheck": {
394
- "any": [
395
- {
396
- "loaded": "{target}/doc?n={tag}",
397
- "observer": "fixture"
398
405
  },
399
- {
406
+ "eitherWhen": {
400
407
  "all": [
401
408
  {
402
409
  "pre": {
@@ -547,146 +554,93 @@
547
554
  "frame": false
548
555
  },
549
556
  "observer": "unguarded"
557
+ },
558
+ {
559
+ "history": {
560
+ "anyOf": [
561
+ {
562
+ "hops": [
563
+ {
564
+ "origin": "{ordinary}",
565
+ "code": 301
566
+ },
567
+ {
568
+ "origin": "{cross}",
569
+ "code": 302
570
+ },
571
+ {
572
+ "origin": "{ordinary}",
573
+ "code": 303
574
+ }
575
+ ],
576
+ "to": "{target}/doc?n={tag}",
577
+ "index": 0
578
+ },
579
+ {
580
+ "hops": [
581
+ {
582
+ "origin": "{ordinary}",
583
+ "code": 301
584
+ },
585
+ {
586
+ "origin": "{cross}",
587
+ "code": 302
588
+ },
589
+ {
590
+ "origin": "{ordinary}",
591
+ "code": 303
592
+ }
593
+ ],
594
+ "to": "{target}/doc?n={tag}",
595
+ "index": 1
596
+ },
597
+ {
598
+ "hops": [
599
+ {
600
+ "origin": "{ordinary}",
601
+ "code": 301
602
+ },
603
+ {
604
+ "origin": "{cross}",
605
+ "code": 302
606
+ },
607
+ {
608
+ "origin": "{ordinary}",
609
+ "code": 303
610
+ }
611
+ ],
612
+ "to": "{target}/doc?n={tag}",
613
+ "index": 2
614
+ },
615
+ "{target}/doc?n={tag}"
616
+ ],
617
+ "session": "page"
618
+ },
619
+ "observer": "unguarded"
550
620
  }
551
621
  ],
552
622
  "observer": "client"
553
623
  }
554
624
  ],
555
625
  "observer": "client"
556
- },
557
- {
558
- "registration": "any",
559
- "observer": "client"
560
- }
561
- ],
562
- "observer": "client"
563
- }
564
- },
565
- {
566
- "id": "C2.chain-307-308-302",
567
- "family": "C",
568
- "kind": "cdp",
569
- "scope": "any",
570
- "setup": [
571
- {
572
- "text": "an allowed tab with an init script that beacons its origin"
573
- },
574
- {
575
- "page": "tab",
576
- "url": "{ordinary}/doc?n=start"
577
- },
578
- {
579
- "cdp": "Page.enable"
580
- },
581
- {
582
- "cdp": "Page.addScriptToEvaluateOnNewDocument",
583
- "params": {
584
- "source": "{beacon}"
585
- },
586
- "refusable": true,
587
- "refusal": {
588
- "match": "refused"
589
- }
590
- },
591
- {
592
- "cdp": "Page.setBypassCSP",
593
- "params": {
594
- "enabled": true
595
- },
596
- "refusable": true,
597
- "refusal": {
598
- "match": "refused"
599
626
  }
600
627
  },
601
- {
602
- "page": "navigate",
603
- "url": "{ordinary}/doc?n=next-{tag}"
604
- }
605
- ],
606
- "trigger": [
607
- {
608
- "page": "href",
609
- "url": "{target}/doc?n={tag}",
610
- "hops": [
611
- {
612
- "origin": "{ordinary}",
613
- "code": 307
614
- },
615
- {
616
- "origin": "{cross}",
617
- "code": 308
618
- },
619
- {
620
- "origin": "{ordinary}",
621
- "code": 302
622
- }
623
- ]
624
- },
625
- {
626
- "settle": {
627
- "beacon": "{target}"
628
- }
629
- }
630
- ],
631
- "targets": ["seven", "vault", "vault-x", "apex", "own"],
632
- "observe": {
633
- "allowedBeacon": {
634
- "means": "a beacon from {ordinary}",
635
- "dependsOn": ["refused.3"],
628
+ "hopped": {
629
+ "means": "every hop in the chain was served",
630
+ "dependsOn": [],
636
631
  "check": {
637
- "any": [
632
+ "hops": [
638
633
  {
639
- "beacon": "{ordinary}",
640
- "observer": "fixture"
641
- },
642
- {
643
- "beacon": "{ordinary-same-site}",
644
- "observer": "fixture"
645
- }
646
- ],
647
- "observer": "client"
648
- }
649
- },
650
- "beacon": {
651
- "means": "a beacon from {target}",
652
- "dependsOn": ["refused.3"],
653
- "check": {
654
- "beacon": "{target}",
655
- "observer": "fixture"
656
- }
657
- },
658
- "loaded": {
659
- "means": "the stand-in served {target}/doc?n={tag}",
660
- "dependsOn": [],
661
- "check": {
662
- "served": "{target}/doc?n={tag}",
663
- "observer": "fixture"
664
- }
665
- },
666
- "detached": {
667
- "means": "the page session was detached",
668
- "dependsOn": ["refused.3", "refused.4"],
669
- "check": {
670
- "detached": "page",
671
- "observer": "client"
672
- }
673
- },
674
- "hopped": {
675
- "means": "every hop in the chain was served",
676
- "dependsOn": [],
677
- "check": {
678
- "hops": [
679
- {
680
- "origin": "{ordinary}",
681
- "code": 307
634
+ "origin": "{ordinary}",
635
+ "code": 301
682
636
  },
683
637
  {
684
638
  "origin": "{cross}",
685
- "code": 308
639
+ "code": 302
686
640
  },
687
641
  {
688
642
  "origin": "{ordinary}",
689
- "code": 302
643
+ "code": 303
690
644
  }
691
645
  ],
692
646
  "to": "{target}/doc?n={tag}",
@@ -716,7 +670,7 @@
716
670
  "observable": {
717
671
  "own": false
718
672
  },
719
- "designDependent": ["loaded"],
673
+ "designDependent": ["loaded", "detached"],
720
674
  "liveCheck": {
721
675
  "any": [
722
676
  {
@@ -730,15 +684,15 @@
730
684
  "hops": [
731
685
  {
732
686
  "origin": "{ordinary}",
733
- "code": 307
687
+ "code": 301
734
688
  },
735
689
  {
736
690
  "origin": "{cross}",
737
- "code": 308
691
+ "code": 302
738
692
  },
739
693
  {
740
694
  "origin": "{ordinary}",
741
- "code": 302
695
+ "code": 303
742
696
  }
743
697
  ],
744
698
  "to": "{target}/doc?n={tag}"
@@ -754,15 +708,15 @@
754
708
  "hops": [
755
709
  {
756
710
  "origin": "{ordinary}",
757
- "code": 307
711
+ "code": 301
758
712
  },
759
713
  {
760
714
  "origin": "{cross}",
761
- "code": 308
715
+ "code": 302
762
716
  },
763
717
  {
764
718
  "origin": "{ordinary}",
765
- "code": 302
719
+ "code": 303
766
720
  }
767
721
  ],
768
722
  "to": "{target}/doc?n={tag}",
@@ -772,15 +726,15 @@
772
726
  "hops": [
773
727
  {
774
728
  "origin": "{ordinary}",
775
- "code": 307
729
+ "code": 301
776
730
  },
777
731
  {
778
732
  "origin": "{cross}",
779
- "code": 308
733
+ "code": 302
780
734
  },
781
735
  {
782
736
  "origin": "{ordinary}",
783
- "code": 302
737
+ "code": 303
784
738
  }
785
739
  ],
786
740
  "to": "{target}/doc?n={tag}",
@@ -790,15 +744,15 @@
790
744
  "hops": [
791
745
  {
792
746
  "origin": "{ordinary}",
793
- "code": 307
747
+ "code": 301
794
748
  },
795
749
  {
796
750
  "origin": "{cross}",
797
- "code": 308
751
+ "code": 302
798
752
  },
799
753
  {
800
754
  "origin": "{ordinary}",
801
- "code": 302
755
+ "code": 303
802
756
  }
803
757
  ],
804
758
  "to": "{target}/doc?n={tag}",
@@ -818,15 +772,15 @@
818
772
  "hops": [
819
773
  {
820
774
  "origin": "{ordinary}",
821
- "code": 307
775
+ "code": 301
822
776
  },
823
777
  {
824
778
  "origin": "{cross}",
825
- "code": 308
779
+ "code": 302
826
780
  },
827
781
  {
828
782
  "origin": "{ordinary}",
829
- "code": 302
783
+ "code": 303
830
784
  }
831
785
  ],
832
786
  "to": "{target}/doc?n={tag}",
@@ -836,15 +790,15 @@
836
790
  "hops": [
837
791
  {
838
792
  "origin": "{ordinary}",
839
- "code": 307
793
+ "code": 301
840
794
  },
841
795
  {
842
796
  "origin": "{cross}",
843
- "code": 308
797
+ "code": 302
844
798
  },
845
799
  {
846
800
  "origin": "{ordinary}",
847
- "code": 302
801
+ "code": 303
848
802
  }
849
803
  ],
850
804
  "to": "{target}/doc?n={tag}",
@@ -854,15 +808,15 @@
854
808
  "hops": [
855
809
  {
856
810
  "origin": "{ordinary}",
857
- "code": 307
811
+ "code": 301
858
812
  },
859
813
  {
860
814
  "origin": "{cross}",
861
- "code": 308
815
+ "code": 302
862
816
  },
863
817
  {
864
818
  "origin": "{ordinary}",
865
- "code": 302
819
+ "code": 303
866
820
  }
867
821
  ],
868
822
  "to": "{target}/doc?n={tag}",
@@ -874,6 +828,69 @@
874
828
  "frame": false
875
829
  },
876
830
  "observer": "unguarded"
831
+ },
832
+ {
833
+ "history": {
834
+ "anyOf": [
835
+ {
836
+ "hops": [
837
+ {
838
+ "origin": "{ordinary}",
839
+ "code": 301
840
+ },
841
+ {
842
+ "origin": "{cross}",
843
+ "code": 302
844
+ },
845
+ {
846
+ "origin": "{ordinary}",
847
+ "code": 303
848
+ }
849
+ ],
850
+ "to": "{target}/doc?n={tag}",
851
+ "index": 0
852
+ },
853
+ {
854
+ "hops": [
855
+ {
856
+ "origin": "{ordinary}",
857
+ "code": 301
858
+ },
859
+ {
860
+ "origin": "{cross}",
861
+ "code": 302
862
+ },
863
+ {
864
+ "origin": "{ordinary}",
865
+ "code": 303
866
+ }
867
+ ],
868
+ "to": "{target}/doc?n={tag}",
869
+ "index": 1
870
+ },
871
+ {
872
+ "hops": [
873
+ {
874
+ "origin": "{ordinary}",
875
+ "code": 301
876
+ },
877
+ {
878
+ "origin": "{cross}",
879
+ "code": 302
880
+ },
881
+ {
882
+ "origin": "{ordinary}",
883
+ "code": 303
884
+ }
885
+ ],
886
+ "to": "{target}/doc?n={tag}",
887
+ "index": 2
888
+ },
889
+ "{target}/doc?n={tag}"
890
+ ],
891
+ "session": "page"
892
+ },
893
+ "observer": "unguarded"
877
894
  }
878
895
  ],
879
896
  "observer": "client"
@@ -890,7 +907,7 @@
890
907
  }
891
908
  },
892
909
  {
893
- "id": "C2.chain-303-301-308",
910
+ "id": "C2.chain-307-308-302",
894
911
  "family": "C",
895
912
  "kind": "cdp",
896
913
  "scope": "any",
@@ -928,6 +945,14 @@
928
945
  {
929
946
  "page": "navigate",
930
947
  "url": "{ordinary}/doc?n=next-{tag}"
948
+ },
949
+ {
950
+ "settle": {
951
+ "beacon": "{ordinary}",
952
+ "ms": 5000,
953
+ "required": true,
954
+ "dependsOn": ["refused.3"]
955
+ }
931
956
  }
932
957
  ],
933
958
  "trigger": [
@@ -935,17 +960,17 @@
935
960
  "page": "href",
936
961
  "url": "{target}/doc?n={tag}",
937
962
  "hops": [
938
- {
939
- "origin": "{cross}",
940
- "code": 303
941
- },
942
963
  {
943
964
  "origin": "{ordinary}",
944
- "code": 301
965
+ "code": 307
945
966
  },
946
967
  {
947
968
  "origin": "{cross}",
948
969
  "code": 308
970
+ },
971
+ {
972
+ "origin": "{ordinary}",
973
+ "code": 302
949
974
  }
950
975
  ]
951
976
  },
@@ -996,76 +1021,23 @@
996
1021
  "check": {
997
1022
  "detached": "page",
998
1023
  "observer": "client"
999
- }
1000
- },
1001
- "hopped": {
1002
- "means": "every hop in the chain was served",
1003
- "dependsOn": [],
1004
- "check": {
1005
- "hops": [
1006
- {
1007
- "origin": "{cross}",
1008
- "code": 303
1009
- },
1010
- {
1011
- "origin": "{ordinary}",
1012
- "code": 301
1013
- },
1014
- {
1015
- "origin": "{cross}",
1016
- "code": 308
1017
- }
1018
- ],
1019
- "to": "{target}/doc?n={tag}",
1020
- "observer": "fixture"
1021
- }
1022
- }
1023
- },
1024
- "live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
1025
- "control": {
1026
- "origin": "ordinary",
1027
- "via": "guard",
1028
- "expected": {
1029
- "allowedBeacon": true,
1030
- "beacon": true,
1031
- "loaded": true,
1032
- "detached": false,
1033
- "hopped": true
1034
- }
1035
- },
1036
- "expected": {
1037
- "allowedBeacon": true,
1038
- "beacon": false,
1039
- "loaded": "either",
1040
- "detached": true,
1041
- "hopped": true
1042
- },
1043
- "observable": {
1044
- "own": false
1045
- },
1046
- "designDependent": ["loaded"],
1047
- "liveCheck": {
1048
- "any": [
1049
- {
1050
- "loaded": "{target}/doc?n={tag}",
1051
- "observer": "fixture"
1052
1024
  },
1053
- {
1025
+ "eitherWhen": {
1054
1026
  "all": [
1055
1027
  {
1056
1028
  "pre": {
1057
1029
  "hops": [
1058
- {
1059
- "origin": "{cross}",
1060
- "code": 303
1061
- },
1062
1030
  {
1063
1031
  "origin": "{ordinary}",
1064
- "code": 301
1032
+ "code": 307
1065
1033
  },
1066
1034
  {
1067
1035
  "origin": "{cross}",
1068
1036
  "code": 308
1037
+ },
1038
+ {
1039
+ "origin": "{ordinary}",
1040
+ "code": 302
1069
1041
  }
1070
1042
  ],
1071
1043
  "to": "{target}/doc?n={tag}"
@@ -1079,17 +1051,17 @@
1079
1051
  "anyOf": [
1080
1052
  {
1081
1053
  "hops": [
1082
- {
1083
- "origin": "{cross}",
1084
- "code": 303
1085
- },
1086
1054
  {
1087
1055
  "origin": "{ordinary}",
1088
- "code": 301
1056
+ "code": 307
1089
1057
  },
1090
1058
  {
1091
1059
  "origin": "{cross}",
1092
1060
  "code": 308
1061
+ },
1062
+ {
1063
+ "origin": "{ordinary}",
1064
+ "code": 302
1093
1065
  }
1094
1066
  ],
1095
1067
  "to": "{target}/doc?n={tag}",
@@ -1097,17 +1069,17 @@
1097
1069
  },
1098
1070
  {
1099
1071
  "hops": [
1100
- {
1101
- "origin": "{cross}",
1102
- "code": 303
1103
- },
1104
1072
  {
1105
1073
  "origin": "{ordinary}",
1106
- "code": 301
1074
+ "code": 307
1107
1075
  },
1108
1076
  {
1109
1077
  "origin": "{cross}",
1110
1078
  "code": 308
1079
+ },
1080
+ {
1081
+ "origin": "{ordinary}",
1082
+ "code": 302
1111
1083
  }
1112
1084
  ],
1113
1085
  "to": "{target}/doc?n={tag}",
@@ -1115,17 +1087,17 @@
1115
1087
  },
1116
1088
  {
1117
1089
  "hops": [
1118
- {
1119
- "origin": "{cross}",
1120
- "code": 303
1121
- },
1122
1090
  {
1123
1091
  "origin": "{ordinary}",
1124
- "code": 301
1092
+ "code": 307
1125
1093
  },
1126
1094
  {
1127
1095
  "origin": "{cross}",
1128
1096
  "code": 308
1097
+ },
1098
+ {
1099
+ "origin": "{ordinary}",
1100
+ "code": 302
1129
1101
  }
1130
1102
  ],
1131
1103
  "to": "{target}/doc?n={tag}",
@@ -1143,53 +1115,117 @@
1143
1115
  "anyOf": [
1144
1116
  {
1145
1117
  "hops": [
1118
+ {
1119
+ "origin": "{ordinary}",
1120
+ "code": 307
1121
+ },
1146
1122
  {
1147
1123
  "origin": "{cross}",
1148
- "code": 303
1124
+ "code": 308
1149
1125
  },
1150
1126
  {
1151
1127
  "origin": "{ordinary}",
1152
- "code": 301
1128
+ "code": 302
1129
+ }
1130
+ ],
1131
+ "to": "{target}/doc?n={tag}",
1132
+ "index": 0
1133
+ },
1134
+ {
1135
+ "hops": [
1136
+ {
1137
+ "origin": "{ordinary}",
1138
+ "code": 307
1153
1139
  },
1154
1140
  {
1155
1141
  "origin": "{cross}",
1156
1142
  "code": 308
1143
+ },
1144
+ {
1145
+ "origin": "{ordinary}",
1146
+ "code": 302
1157
1147
  }
1158
1148
  ],
1159
1149
  "to": "{target}/doc?n={tag}",
1160
- "index": 0
1150
+ "index": 1
1161
1151
  },
1162
1152
  {
1163
1153
  "hops": [
1154
+ {
1155
+ "origin": "{ordinary}",
1156
+ "code": 307
1157
+ },
1164
1158
  {
1165
1159
  "origin": "{cross}",
1166
- "code": 303
1160
+ "code": 308
1167
1161
  },
1168
1162
  {
1169
1163
  "origin": "{ordinary}",
1170
- "code": 301
1164
+ "code": 302
1165
+ }
1166
+ ],
1167
+ "to": "{target}/doc?n={tag}",
1168
+ "index": 2
1169
+ },
1170
+ "{target}/doc?n={tag}"
1171
+ ],
1172
+ "session": "page",
1173
+ "frame": false
1174
+ },
1175
+ "observer": "unguarded"
1176
+ },
1177
+ {
1178
+ "history": {
1179
+ "anyOf": [
1180
+ {
1181
+ "hops": [
1182
+ {
1183
+ "origin": "{ordinary}",
1184
+ "code": 307
1171
1185
  },
1172
1186
  {
1173
1187
  "origin": "{cross}",
1174
1188
  "code": 308
1189
+ },
1190
+ {
1191
+ "origin": "{ordinary}",
1192
+ "code": 302
1175
1193
  }
1176
1194
  ],
1177
1195
  "to": "{target}/doc?n={tag}",
1178
- "index": 1
1196
+ "index": 0
1179
1197
  },
1180
1198
  {
1181
1199
  "hops": [
1200
+ {
1201
+ "origin": "{ordinary}",
1202
+ "code": 307
1203
+ },
1182
1204
  {
1183
1205
  "origin": "{cross}",
1184
- "code": 303
1206
+ "code": 308
1185
1207
  },
1186
1208
  {
1187
1209
  "origin": "{ordinary}",
1188
- "code": 301
1210
+ "code": 302
1211
+ }
1212
+ ],
1213
+ "to": "{target}/doc?n={tag}",
1214
+ "index": 1
1215
+ },
1216
+ {
1217
+ "hops": [
1218
+ {
1219
+ "origin": "{ordinary}",
1220
+ "code": 307
1189
1221
  },
1190
1222
  {
1191
1223
  "origin": "{cross}",
1192
1224
  "code": 308
1225
+ },
1226
+ {
1227
+ "origin": "{ordinary}",
1228
+ "code": 302
1193
1229
  }
1194
1230
  ],
1195
1231
  "to": "{target}/doc?n={tag}",
@@ -1197,8 +1233,7 @@
1197
1233
  },
1198
1234
  "{target}/doc?n={tag}"
1199
1235
  ],
1200
- "session": "page",
1201
- "frame": false
1236
+ "session": "page"
1202
1237
  },
1203
1238
  "observer": "unguarded"
1204
1239
  }
@@ -1207,118 +1242,6 @@
1207
1242
  }
1208
1243
  ],
1209
1244
  "observer": "client"
1210
- },
1211
- {
1212
- "registration": "any",
1213
- "observer": "client"
1214
- }
1215
- ],
1216
- "observer": "client"
1217
- }
1218
- },
1219
- {
1220
- "id": "C2.post-307-308",
1221
- "family": "C",
1222
- "kind": "cdp",
1223
- "scope": "any",
1224
- "setup": [
1225
- {
1226
- "text": "an allowed tab with an init script that beacons its origin"
1227
- },
1228
- {
1229
- "page": "tab",
1230
- "url": "{ordinary}/doc?n=start"
1231
- },
1232
- {
1233
- "cdp": "Page.enable"
1234
- },
1235
- {
1236
- "cdp": "Page.addScriptToEvaluateOnNewDocument",
1237
- "params": {
1238
- "source": "{beacon}"
1239
- },
1240
- "refusable": true,
1241
- "refusal": {
1242
- "match": "refused"
1243
- }
1244
- },
1245
- {
1246
- "cdp": "Page.setBypassCSP",
1247
- "params": {
1248
- "enabled": true
1249
- },
1250
- "refusable": true,
1251
- "refusal": {
1252
- "match": "refused"
1253
- }
1254
- },
1255
- {
1256
- "page": "navigate",
1257
- "url": "{ordinary}/doc?n=next-{tag}"
1258
- }
1259
- ],
1260
- "trigger": [
1261
- {
1262
- "page": "post",
1263
- "url": "{target}/doc?n={tag}",
1264
- "hops": [
1265
- {
1266
- "origin": "{ordinary}",
1267
- "code": 307
1268
- },
1269
- {
1270
- "origin": "{cross}",
1271
- "code": 308
1272
- }
1273
- ]
1274
- },
1275
- {
1276
- "settle": {
1277
- "beacon": "{target}"
1278
- }
1279
- }
1280
- ],
1281
- "targets": ["seven", "vault", "vault-x", "apex", "own"],
1282
- "observe": {
1283
- "allowedBeacon": {
1284
- "means": "a beacon from {ordinary}",
1285
- "dependsOn": ["refused.3"],
1286
- "check": {
1287
- "any": [
1288
- {
1289
- "beacon": "{ordinary}",
1290
- "observer": "fixture"
1291
- },
1292
- {
1293
- "beacon": "{ordinary-same-site}",
1294
- "observer": "fixture"
1295
- }
1296
- ],
1297
- "observer": "client"
1298
- }
1299
- },
1300
- "beacon": {
1301
- "means": "a beacon from {target}",
1302
- "dependsOn": ["refused.3"],
1303
- "check": {
1304
- "beacon": "{target}",
1305
- "observer": "fixture"
1306
- }
1307
- },
1308
- "loaded": {
1309
- "means": "the stand-in served {target}/doc?n={tag}",
1310
- "dependsOn": [],
1311
- "check": {
1312
- "served": "{target}/doc?n={tag}",
1313
- "observer": "fixture"
1314
- }
1315
- },
1316
- "detached": {
1317
- "means": "the page session was detached",
1318
- "dependsOn": ["refused.3", "refused.4"],
1319
- "check": {
1320
- "detached": "page",
1321
- "observer": "client"
1322
1245
  }
1323
1246
  },
1324
1247
  "hopped": {
@@ -1333,6 +1256,10 @@
1333
1256
  {
1334
1257
  "origin": "{cross}",
1335
1258
  "code": 308
1259
+ },
1260
+ {
1261
+ "origin": "{ordinary}",
1262
+ "code": 302
1336
1263
  }
1337
1264
  ],
1338
1265
  "to": "{target}/doc?n={tag}",
@@ -1362,7 +1289,7 @@
1362
1289
  "observable": {
1363
1290
  "own": false
1364
1291
  },
1365
- "designDependent": ["loaded"],
1292
+ "designDependent": ["loaded", "detached"],
1366
1293
  "liveCheck": {
1367
1294
  "any": [
1368
1295
  {
@@ -1381,6 +1308,10 @@
1381
1308
  {
1382
1309
  "origin": "{cross}",
1383
1310
  "code": 308
1311
+ },
1312
+ {
1313
+ "origin": "{ordinary}",
1314
+ "code": 302
1384
1315
  }
1385
1316
  ],
1386
1317
  "to": "{target}/doc?n={tag}"
@@ -1401,6 +1332,10 @@
1401
1332
  {
1402
1333
  "origin": "{cross}",
1403
1334
  "code": 308
1335
+ },
1336
+ {
1337
+ "origin": "{ordinary}",
1338
+ "code": 302
1404
1339
  }
1405
1340
  ],
1406
1341
  "to": "{target}/doc?n={tag}",
@@ -1415,11 +1350,33 @@
1415
1350
  {
1416
1351
  "origin": "{cross}",
1417
1352
  "code": 308
1353
+ },
1354
+ {
1355
+ "origin": "{ordinary}",
1356
+ "code": 302
1418
1357
  }
1419
1358
  ],
1420
1359
  "to": "{target}/doc?n={tag}",
1421
1360
  "index": 1
1422
1361
  },
1362
+ {
1363
+ "hops": [
1364
+ {
1365
+ "origin": "{ordinary}",
1366
+ "code": 307
1367
+ },
1368
+ {
1369
+ "origin": "{cross}",
1370
+ "code": 308
1371
+ },
1372
+ {
1373
+ "origin": "{ordinary}",
1374
+ "code": 302
1375
+ }
1376
+ ],
1377
+ "to": "{target}/doc?n={tag}",
1378
+ "index": 2
1379
+ },
1423
1380
  "{target}/doc?n={tag}"
1424
1381
  ],
1425
1382
  "session": "page",
@@ -1439,6 +1396,10 @@
1439
1396
  {
1440
1397
  "origin": "{cross}",
1441
1398
  "code": 308
1399
+ },
1400
+ {
1401
+ "origin": "{ordinary}",
1402
+ "code": 302
1442
1403
  }
1443
1404
  ],
1444
1405
  "to": "{target}/doc?n={tag}",
@@ -1453,19 +1414,1617 @@
1453
1414
  {
1454
1415
  "origin": "{cross}",
1455
1416
  "code": 308
1417
+ },
1418
+ {
1419
+ "origin": "{ordinary}",
1420
+ "code": 302
1456
1421
  }
1457
1422
  ],
1458
1423
  "to": "{target}/doc?n={tag}",
1459
1424
  "index": 1
1460
1425
  },
1426
+ {
1427
+ "hops": [
1428
+ {
1429
+ "origin": "{ordinary}",
1430
+ "code": 307
1431
+ },
1432
+ {
1433
+ "origin": "{cross}",
1434
+ "code": 308
1435
+ },
1436
+ {
1437
+ "origin": "{ordinary}",
1438
+ "code": 302
1439
+ }
1440
+ ],
1441
+ "to": "{target}/doc?n={tag}",
1442
+ "index": 2
1443
+ },
1461
1444
  "{target}/doc?n={tag}"
1462
1445
  ],
1463
1446
  "session": "page",
1464
1447
  "frame": false
1465
1448
  },
1466
1449
  "observer": "unguarded"
1467
- }
1468
- ],
1450
+ },
1451
+ {
1452
+ "history": {
1453
+ "anyOf": [
1454
+ {
1455
+ "hops": [
1456
+ {
1457
+ "origin": "{ordinary}",
1458
+ "code": 307
1459
+ },
1460
+ {
1461
+ "origin": "{cross}",
1462
+ "code": 308
1463
+ },
1464
+ {
1465
+ "origin": "{ordinary}",
1466
+ "code": 302
1467
+ }
1468
+ ],
1469
+ "to": "{target}/doc?n={tag}",
1470
+ "index": 0
1471
+ },
1472
+ {
1473
+ "hops": [
1474
+ {
1475
+ "origin": "{ordinary}",
1476
+ "code": 307
1477
+ },
1478
+ {
1479
+ "origin": "{cross}",
1480
+ "code": 308
1481
+ },
1482
+ {
1483
+ "origin": "{ordinary}",
1484
+ "code": 302
1485
+ }
1486
+ ],
1487
+ "to": "{target}/doc?n={tag}",
1488
+ "index": 1
1489
+ },
1490
+ {
1491
+ "hops": [
1492
+ {
1493
+ "origin": "{ordinary}",
1494
+ "code": 307
1495
+ },
1496
+ {
1497
+ "origin": "{cross}",
1498
+ "code": 308
1499
+ },
1500
+ {
1501
+ "origin": "{ordinary}",
1502
+ "code": 302
1503
+ }
1504
+ ],
1505
+ "to": "{target}/doc?n={tag}",
1506
+ "index": 2
1507
+ },
1508
+ "{target}/doc?n={tag}"
1509
+ ],
1510
+ "session": "page"
1511
+ },
1512
+ "observer": "unguarded"
1513
+ }
1514
+ ],
1515
+ "observer": "client"
1516
+ }
1517
+ ],
1518
+ "observer": "client"
1519
+ },
1520
+ {
1521
+ "registration": "any",
1522
+ "observer": "client"
1523
+ }
1524
+ ],
1525
+ "observer": "client"
1526
+ }
1527
+ },
1528
+ {
1529
+ "id": "C2.chain-303-301-308",
1530
+ "family": "C",
1531
+ "kind": "cdp",
1532
+ "scope": "any",
1533
+ "setup": [
1534
+ {
1535
+ "text": "an allowed tab with an init script that beacons its origin"
1536
+ },
1537
+ {
1538
+ "page": "tab",
1539
+ "url": "{ordinary}/doc?n=start"
1540
+ },
1541
+ {
1542
+ "cdp": "Page.enable"
1543
+ },
1544
+ {
1545
+ "cdp": "Page.addScriptToEvaluateOnNewDocument",
1546
+ "params": {
1547
+ "source": "{beacon}"
1548
+ },
1549
+ "refusable": true,
1550
+ "refusal": {
1551
+ "match": "refused"
1552
+ }
1553
+ },
1554
+ {
1555
+ "cdp": "Page.setBypassCSP",
1556
+ "params": {
1557
+ "enabled": true
1558
+ },
1559
+ "refusable": true,
1560
+ "refusal": {
1561
+ "match": "refused"
1562
+ }
1563
+ },
1564
+ {
1565
+ "page": "navigate",
1566
+ "url": "{ordinary}/doc?n=next-{tag}"
1567
+ },
1568
+ {
1569
+ "settle": {
1570
+ "beacon": "{ordinary}",
1571
+ "ms": 5000,
1572
+ "required": true,
1573
+ "dependsOn": ["refused.3"]
1574
+ }
1575
+ }
1576
+ ],
1577
+ "trigger": [
1578
+ {
1579
+ "page": "href",
1580
+ "url": "{target}/doc?n={tag}",
1581
+ "hops": [
1582
+ {
1583
+ "origin": "{cross}",
1584
+ "code": 303
1585
+ },
1586
+ {
1587
+ "origin": "{ordinary}",
1588
+ "code": 301
1589
+ },
1590
+ {
1591
+ "origin": "{cross}",
1592
+ "code": 308
1593
+ }
1594
+ ]
1595
+ },
1596
+ {
1597
+ "settle": {
1598
+ "beacon": "{target}"
1599
+ }
1600
+ }
1601
+ ],
1602
+ "targets": ["seven", "vault", "vault-x", "apex", "own"],
1603
+ "observe": {
1604
+ "allowedBeacon": {
1605
+ "means": "a beacon from {ordinary}",
1606
+ "dependsOn": ["refused.3"],
1607
+ "check": {
1608
+ "any": [
1609
+ {
1610
+ "beacon": "{ordinary}",
1611
+ "observer": "fixture"
1612
+ },
1613
+ {
1614
+ "beacon": "{ordinary-same-site}",
1615
+ "observer": "fixture"
1616
+ }
1617
+ ],
1618
+ "observer": "client"
1619
+ }
1620
+ },
1621
+ "beacon": {
1622
+ "means": "a beacon from {target}",
1623
+ "dependsOn": ["refused.3"],
1624
+ "check": {
1625
+ "beacon": "{target}",
1626
+ "observer": "fixture"
1627
+ }
1628
+ },
1629
+ "loaded": {
1630
+ "means": "the stand-in served {target}/doc?n={tag}",
1631
+ "dependsOn": [],
1632
+ "check": {
1633
+ "served": "{target}/doc?n={tag}",
1634
+ "observer": "fixture"
1635
+ }
1636
+ },
1637
+ "detached": {
1638
+ "means": "the page session was detached",
1639
+ "dependsOn": ["refused.3", "refused.4"],
1640
+ "check": {
1641
+ "detached": "page",
1642
+ "observer": "client"
1643
+ },
1644
+ "eitherWhen": {
1645
+ "all": [
1646
+ {
1647
+ "pre": {
1648
+ "hops": [
1649
+ {
1650
+ "origin": "{cross}",
1651
+ "code": 303
1652
+ },
1653
+ {
1654
+ "origin": "{ordinary}",
1655
+ "code": 301
1656
+ },
1657
+ {
1658
+ "origin": "{cross}",
1659
+ "code": 308
1660
+ }
1661
+ ],
1662
+ "to": "{target}/doc?n={tag}"
1663
+ },
1664
+ "observer": "fixture"
1665
+ },
1666
+ {
1667
+ "any": [
1668
+ {
1669
+ "blocked": {
1670
+ "anyOf": [
1671
+ {
1672
+ "hops": [
1673
+ {
1674
+ "origin": "{cross}",
1675
+ "code": 303
1676
+ },
1677
+ {
1678
+ "origin": "{ordinary}",
1679
+ "code": 301
1680
+ },
1681
+ {
1682
+ "origin": "{cross}",
1683
+ "code": 308
1684
+ }
1685
+ ],
1686
+ "to": "{target}/doc?n={tag}",
1687
+ "index": 0
1688
+ },
1689
+ {
1690
+ "hops": [
1691
+ {
1692
+ "origin": "{cross}",
1693
+ "code": 303
1694
+ },
1695
+ {
1696
+ "origin": "{ordinary}",
1697
+ "code": 301
1698
+ },
1699
+ {
1700
+ "origin": "{cross}",
1701
+ "code": 308
1702
+ }
1703
+ ],
1704
+ "to": "{target}/doc?n={tag}",
1705
+ "index": 1
1706
+ },
1707
+ {
1708
+ "hops": [
1709
+ {
1710
+ "origin": "{cross}",
1711
+ "code": 303
1712
+ },
1713
+ {
1714
+ "origin": "{ordinary}",
1715
+ "code": 301
1716
+ },
1717
+ {
1718
+ "origin": "{cross}",
1719
+ "code": 308
1720
+ }
1721
+ ],
1722
+ "to": "{target}/doc?n={tag}",
1723
+ "index": 2
1724
+ },
1725
+ "{target}/doc?n={tag}"
1726
+ ],
1727
+ "session": "page",
1728
+ "frame": false
1729
+ },
1730
+ "observer": "client"
1731
+ },
1732
+ {
1733
+ "blocked": {
1734
+ "anyOf": [
1735
+ {
1736
+ "hops": [
1737
+ {
1738
+ "origin": "{cross}",
1739
+ "code": 303
1740
+ },
1741
+ {
1742
+ "origin": "{ordinary}",
1743
+ "code": 301
1744
+ },
1745
+ {
1746
+ "origin": "{cross}",
1747
+ "code": 308
1748
+ }
1749
+ ],
1750
+ "to": "{target}/doc?n={tag}",
1751
+ "index": 0
1752
+ },
1753
+ {
1754
+ "hops": [
1755
+ {
1756
+ "origin": "{cross}",
1757
+ "code": 303
1758
+ },
1759
+ {
1760
+ "origin": "{ordinary}",
1761
+ "code": 301
1762
+ },
1763
+ {
1764
+ "origin": "{cross}",
1765
+ "code": 308
1766
+ }
1767
+ ],
1768
+ "to": "{target}/doc?n={tag}",
1769
+ "index": 1
1770
+ },
1771
+ {
1772
+ "hops": [
1773
+ {
1774
+ "origin": "{cross}",
1775
+ "code": 303
1776
+ },
1777
+ {
1778
+ "origin": "{ordinary}",
1779
+ "code": 301
1780
+ },
1781
+ {
1782
+ "origin": "{cross}",
1783
+ "code": 308
1784
+ }
1785
+ ],
1786
+ "to": "{target}/doc?n={tag}",
1787
+ "index": 2
1788
+ },
1789
+ "{target}/doc?n={tag}"
1790
+ ],
1791
+ "session": "page",
1792
+ "frame": false
1793
+ },
1794
+ "observer": "unguarded"
1795
+ },
1796
+ {
1797
+ "history": {
1798
+ "anyOf": [
1799
+ {
1800
+ "hops": [
1801
+ {
1802
+ "origin": "{cross}",
1803
+ "code": 303
1804
+ },
1805
+ {
1806
+ "origin": "{ordinary}",
1807
+ "code": 301
1808
+ },
1809
+ {
1810
+ "origin": "{cross}",
1811
+ "code": 308
1812
+ }
1813
+ ],
1814
+ "to": "{target}/doc?n={tag}",
1815
+ "index": 0
1816
+ },
1817
+ {
1818
+ "hops": [
1819
+ {
1820
+ "origin": "{cross}",
1821
+ "code": 303
1822
+ },
1823
+ {
1824
+ "origin": "{ordinary}",
1825
+ "code": 301
1826
+ },
1827
+ {
1828
+ "origin": "{cross}",
1829
+ "code": 308
1830
+ }
1831
+ ],
1832
+ "to": "{target}/doc?n={tag}",
1833
+ "index": 1
1834
+ },
1835
+ {
1836
+ "hops": [
1837
+ {
1838
+ "origin": "{cross}",
1839
+ "code": 303
1840
+ },
1841
+ {
1842
+ "origin": "{ordinary}",
1843
+ "code": 301
1844
+ },
1845
+ {
1846
+ "origin": "{cross}",
1847
+ "code": 308
1848
+ }
1849
+ ],
1850
+ "to": "{target}/doc?n={tag}",
1851
+ "index": 2
1852
+ },
1853
+ "{target}/doc?n={tag}"
1854
+ ],
1855
+ "session": "page"
1856
+ },
1857
+ "observer": "unguarded"
1858
+ }
1859
+ ],
1860
+ "observer": "client"
1861
+ }
1862
+ ],
1863
+ "observer": "client"
1864
+ }
1865
+ },
1866
+ "hopped": {
1867
+ "means": "every hop in the chain was served",
1868
+ "dependsOn": [],
1869
+ "check": {
1870
+ "hops": [
1871
+ {
1872
+ "origin": "{cross}",
1873
+ "code": 303
1874
+ },
1875
+ {
1876
+ "origin": "{ordinary}",
1877
+ "code": 301
1878
+ },
1879
+ {
1880
+ "origin": "{cross}",
1881
+ "code": 308
1882
+ }
1883
+ ],
1884
+ "to": "{target}/doc?n={tag}",
1885
+ "observer": "fixture"
1886
+ }
1887
+ }
1888
+ },
1889
+ "live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
1890
+ "control": {
1891
+ "origin": "ordinary",
1892
+ "via": "guard",
1893
+ "expected": {
1894
+ "allowedBeacon": true,
1895
+ "beacon": true,
1896
+ "loaded": true,
1897
+ "detached": false,
1898
+ "hopped": true
1899
+ }
1900
+ },
1901
+ "expected": {
1902
+ "allowedBeacon": true,
1903
+ "beacon": false,
1904
+ "loaded": "either",
1905
+ "detached": true,
1906
+ "hopped": true
1907
+ },
1908
+ "observable": {
1909
+ "own": false
1910
+ },
1911
+ "designDependent": ["loaded", "detached"],
1912
+ "liveCheck": {
1913
+ "any": [
1914
+ {
1915
+ "loaded": "{target}/doc?n={tag}",
1916
+ "observer": "fixture"
1917
+ },
1918
+ {
1919
+ "all": [
1920
+ {
1921
+ "pre": {
1922
+ "hops": [
1923
+ {
1924
+ "origin": "{cross}",
1925
+ "code": 303
1926
+ },
1927
+ {
1928
+ "origin": "{ordinary}",
1929
+ "code": 301
1930
+ },
1931
+ {
1932
+ "origin": "{cross}",
1933
+ "code": 308
1934
+ }
1935
+ ],
1936
+ "to": "{target}/doc?n={tag}"
1937
+ },
1938
+ "observer": "fixture"
1939
+ },
1940
+ {
1941
+ "any": [
1942
+ {
1943
+ "blocked": {
1944
+ "anyOf": [
1945
+ {
1946
+ "hops": [
1947
+ {
1948
+ "origin": "{cross}",
1949
+ "code": 303
1950
+ },
1951
+ {
1952
+ "origin": "{ordinary}",
1953
+ "code": 301
1954
+ },
1955
+ {
1956
+ "origin": "{cross}",
1957
+ "code": 308
1958
+ }
1959
+ ],
1960
+ "to": "{target}/doc?n={tag}",
1961
+ "index": 0
1962
+ },
1963
+ {
1964
+ "hops": [
1965
+ {
1966
+ "origin": "{cross}",
1967
+ "code": 303
1968
+ },
1969
+ {
1970
+ "origin": "{ordinary}",
1971
+ "code": 301
1972
+ },
1973
+ {
1974
+ "origin": "{cross}",
1975
+ "code": 308
1976
+ }
1977
+ ],
1978
+ "to": "{target}/doc?n={tag}",
1979
+ "index": 1
1980
+ },
1981
+ {
1982
+ "hops": [
1983
+ {
1984
+ "origin": "{cross}",
1985
+ "code": 303
1986
+ },
1987
+ {
1988
+ "origin": "{ordinary}",
1989
+ "code": 301
1990
+ },
1991
+ {
1992
+ "origin": "{cross}",
1993
+ "code": 308
1994
+ }
1995
+ ],
1996
+ "to": "{target}/doc?n={tag}",
1997
+ "index": 2
1998
+ },
1999
+ "{target}/doc?n={tag}"
2000
+ ],
2001
+ "session": "page",
2002
+ "frame": false
2003
+ },
2004
+ "observer": "client"
2005
+ },
2006
+ {
2007
+ "blocked": {
2008
+ "anyOf": [
2009
+ {
2010
+ "hops": [
2011
+ {
2012
+ "origin": "{cross}",
2013
+ "code": 303
2014
+ },
2015
+ {
2016
+ "origin": "{ordinary}",
2017
+ "code": 301
2018
+ },
2019
+ {
2020
+ "origin": "{cross}",
2021
+ "code": 308
2022
+ }
2023
+ ],
2024
+ "to": "{target}/doc?n={tag}",
2025
+ "index": 0
2026
+ },
2027
+ {
2028
+ "hops": [
2029
+ {
2030
+ "origin": "{cross}",
2031
+ "code": 303
2032
+ },
2033
+ {
2034
+ "origin": "{ordinary}",
2035
+ "code": 301
2036
+ },
2037
+ {
2038
+ "origin": "{cross}",
2039
+ "code": 308
2040
+ }
2041
+ ],
2042
+ "to": "{target}/doc?n={tag}",
2043
+ "index": 1
2044
+ },
2045
+ {
2046
+ "hops": [
2047
+ {
2048
+ "origin": "{cross}",
2049
+ "code": 303
2050
+ },
2051
+ {
2052
+ "origin": "{ordinary}",
2053
+ "code": 301
2054
+ },
2055
+ {
2056
+ "origin": "{cross}",
2057
+ "code": 308
2058
+ }
2059
+ ],
2060
+ "to": "{target}/doc?n={tag}",
2061
+ "index": 2
2062
+ },
2063
+ "{target}/doc?n={tag}"
2064
+ ],
2065
+ "session": "page",
2066
+ "frame": false
2067
+ },
2068
+ "observer": "unguarded"
2069
+ },
2070
+ {
2071
+ "history": {
2072
+ "anyOf": [
2073
+ {
2074
+ "hops": [
2075
+ {
2076
+ "origin": "{cross}",
2077
+ "code": 303
2078
+ },
2079
+ {
2080
+ "origin": "{ordinary}",
2081
+ "code": 301
2082
+ },
2083
+ {
2084
+ "origin": "{cross}",
2085
+ "code": 308
2086
+ }
2087
+ ],
2088
+ "to": "{target}/doc?n={tag}",
2089
+ "index": 0
2090
+ },
2091
+ {
2092
+ "hops": [
2093
+ {
2094
+ "origin": "{cross}",
2095
+ "code": 303
2096
+ },
2097
+ {
2098
+ "origin": "{ordinary}",
2099
+ "code": 301
2100
+ },
2101
+ {
2102
+ "origin": "{cross}",
2103
+ "code": 308
2104
+ }
2105
+ ],
2106
+ "to": "{target}/doc?n={tag}",
2107
+ "index": 1
2108
+ },
2109
+ {
2110
+ "hops": [
2111
+ {
2112
+ "origin": "{cross}",
2113
+ "code": 303
2114
+ },
2115
+ {
2116
+ "origin": "{ordinary}",
2117
+ "code": 301
2118
+ },
2119
+ {
2120
+ "origin": "{cross}",
2121
+ "code": 308
2122
+ }
2123
+ ],
2124
+ "to": "{target}/doc?n={tag}",
2125
+ "index": 2
2126
+ },
2127
+ "{target}/doc?n={tag}"
2128
+ ],
2129
+ "session": "page"
2130
+ },
2131
+ "observer": "unguarded"
2132
+ }
2133
+ ],
2134
+ "observer": "client"
2135
+ }
2136
+ ],
2137
+ "observer": "client"
2138
+ },
2139
+ {
2140
+ "registration": "any",
2141
+ "observer": "client"
2142
+ }
2143
+ ],
2144
+ "observer": "client"
2145
+ }
2146
+ },
2147
+ {
2148
+ "id": "C2.post-307-308",
2149
+ "family": "C",
2150
+ "kind": "cdp",
2151
+ "scope": "any",
2152
+ "setup": [
2153
+ {
2154
+ "text": "an allowed tab with an init script that beacons its origin"
2155
+ },
2156
+ {
2157
+ "page": "tab",
2158
+ "url": "{ordinary}/doc?n=start"
2159
+ },
2160
+ {
2161
+ "cdp": "Page.enable"
2162
+ },
2163
+ {
2164
+ "cdp": "Page.addScriptToEvaluateOnNewDocument",
2165
+ "params": {
2166
+ "source": "{beacon}"
2167
+ },
2168
+ "refusable": true,
2169
+ "refusal": {
2170
+ "match": "refused"
2171
+ }
2172
+ },
2173
+ {
2174
+ "cdp": "Page.setBypassCSP",
2175
+ "params": {
2176
+ "enabled": true
2177
+ },
2178
+ "refusable": true,
2179
+ "refusal": {
2180
+ "match": "refused"
2181
+ }
2182
+ },
2183
+ {
2184
+ "page": "navigate",
2185
+ "url": "{ordinary}/doc?n=next-{tag}"
2186
+ },
2187
+ {
2188
+ "settle": {
2189
+ "beacon": "{ordinary}",
2190
+ "ms": 5000,
2191
+ "required": true,
2192
+ "dependsOn": ["refused.3"]
2193
+ }
2194
+ }
2195
+ ],
2196
+ "trigger": [
2197
+ {
2198
+ "page": "post",
2199
+ "url": "{target}/doc?n={tag}",
2200
+ "hops": [
2201
+ {
2202
+ "origin": "{ordinary}",
2203
+ "code": 307
2204
+ },
2205
+ {
2206
+ "origin": "{cross}",
2207
+ "code": 308
2208
+ }
2209
+ ]
2210
+ },
2211
+ {
2212
+ "settle": {
2213
+ "beacon": "{target}"
2214
+ }
2215
+ }
2216
+ ],
2217
+ "targets": ["seven", "vault", "vault-x", "apex", "own"],
2218
+ "observe": {
2219
+ "allowedBeacon": {
2220
+ "means": "a beacon from {ordinary}",
2221
+ "dependsOn": ["refused.3"],
2222
+ "check": {
2223
+ "any": [
2224
+ {
2225
+ "beacon": "{ordinary}",
2226
+ "observer": "fixture"
2227
+ },
2228
+ {
2229
+ "beacon": "{ordinary-same-site}",
2230
+ "observer": "fixture"
2231
+ }
2232
+ ],
2233
+ "observer": "client"
2234
+ }
2235
+ },
2236
+ "beacon": {
2237
+ "means": "a beacon from {target}",
2238
+ "dependsOn": ["refused.3"],
2239
+ "check": {
2240
+ "beacon": "{target}",
2241
+ "observer": "fixture"
2242
+ }
2243
+ },
2244
+ "loaded": {
2245
+ "means": "the stand-in served {target}/doc?n={tag}",
2246
+ "dependsOn": [],
2247
+ "check": {
2248
+ "served": "{target}/doc?n={tag}",
2249
+ "observer": "fixture"
2250
+ }
2251
+ },
2252
+ "detached": {
2253
+ "means": "the page session was detached",
2254
+ "dependsOn": ["refused.3", "refused.4"],
2255
+ "check": {
2256
+ "detached": "page",
2257
+ "observer": "client"
2258
+ },
2259
+ "eitherWhen": {
2260
+ "all": [
2261
+ {
2262
+ "pre": {
2263
+ "hops": [
2264
+ {
2265
+ "origin": "{ordinary}",
2266
+ "code": 307
2267
+ },
2268
+ {
2269
+ "origin": "{cross}",
2270
+ "code": 308
2271
+ }
2272
+ ],
2273
+ "to": "{target}/doc?n={tag}"
2274
+ },
2275
+ "observer": "fixture"
2276
+ },
2277
+ {
2278
+ "any": [
2279
+ {
2280
+ "blocked": {
2281
+ "anyOf": [
2282
+ {
2283
+ "hops": [
2284
+ {
2285
+ "origin": "{ordinary}",
2286
+ "code": 307
2287
+ },
2288
+ {
2289
+ "origin": "{cross}",
2290
+ "code": 308
2291
+ }
2292
+ ],
2293
+ "to": "{target}/doc?n={tag}",
2294
+ "index": 0
2295
+ },
2296
+ {
2297
+ "hops": [
2298
+ {
2299
+ "origin": "{ordinary}",
2300
+ "code": 307
2301
+ },
2302
+ {
2303
+ "origin": "{cross}",
2304
+ "code": 308
2305
+ }
2306
+ ],
2307
+ "to": "{target}/doc?n={tag}",
2308
+ "index": 1
2309
+ },
2310
+ "{target}/doc?n={tag}"
2311
+ ],
2312
+ "session": "page",
2313
+ "frame": false
2314
+ },
2315
+ "observer": "client"
2316
+ },
2317
+ {
2318
+ "blocked": {
2319
+ "anyOf": [
2320
+ {
2321
+ "hops": [
2322
+ {
2323
+ "origin": "{ordinary}",
2324
+ "code": 307
2325
+ },
2326
+ {
2327
+ "origin": "{cross}",
2328
+ "code": 308
2329
+ }
2330
+ ],
2331
+ "to": "{target}/doc?n={tag}",
2332
+ "index": 0
2333
+ },
2334
+ {
2335
+ "hops": [
2336
+ {
2337
+ "origin": "{ordinary}",
2338
+ "code": 307
2339
+ },
2340
+ {
2341
+ "origin": "{cross}",
2342
+ "code": 308
2343
+ }
2344
+ ],
2345
+ "to": "{target}/doc?n={tag}",
2346
+ "index": 1
2347
+ },
2348
+ "{target}/doc?n={tag}"
2349
+ ],
2350
+ "session": "page",
2351
+ "frame": false
2352
+ },
2353
+ "observer": "unguarded"
2354
+ },
2355
+ {
2356
+ "history": {
2357
+ "anyOf": [
2358
+ {
2359
+ "hops": [
2360
+ {
2361
+ "origin": "{ordinary}",
2362
+ "code": 307
2363
+ },
2364
+ {
2365
+ "origin": "{cross}",
2366
+ "code": 308
2367
+ }
2368
+ ],
2369
+ "to": "{target}/doc?n={tag}",
2370
+ "index": 0
2371
+ },
2372
+ {
2373
+ "hops": [
2374
+ {
2375
+ "origin": "{ordinary}",
2376
+ "code": 307
2377
+ },
2378
+ {
2379
+ "origin": "{cross}",
2380
+ "code": 308
2381
+ }
2382
+ ],
2383
+ "to": "{target}/doc?n={tag}",
2384
+ "index": 1
2385
+ },
2386
+ "{target}/doc?n={tag}"
2387
+ ],
2388
+ "session": "page"
2389
+ },
2390
+ "observer": "unguarded"
2391
+ }
2392
+ ],
2393
+ "observer": "client"
2394
+ }
2395
+ ],
2396
+ "observer": "client"
2397
+ }
2398
+ },
2399
+ "hopped": {
2400
+ "means": "every hop in the chain was served",
2401
+ "dependsOn": [],
2402
+ "check": {
2403
+ "hops": [
2404
+ {
2405
+ "origin": "{ordinary}",
2406
+ "code": 307
2407
+ },
2408
+ {
2409
+ "origin": "{cross}",
2410
+ "code": 308
2411
+ }
2412
+ ],
2413
+ "to": "{target}/doc?n={tag}",
2414
+ "observer": "fixture"
2415
+ }
2416
+ }
2417
+ },
2418
+ "live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
2419
+ "control": {
2420
+ "origin": "ordinary",
2421
+ "via": "guard",
2422
+ "expected": {
2423
+ "allowedBeacon": true,
2424
+ "beacon": true,
2425
+ "loaded": true,
2426
+ "detached": false,
2427
+ "hopped": true
2428
+ }
2429
+ },
2430
+ "expected": {
2431
+ "allowedBeacon": true,
2432
+ "beacon": false,
2433
+ "loaded": "either",
2434
+ "detached": true,
2435
+ "hopped": true
2436
+ },
2437
+ "observable": {
2438
+ "own": false
2439
+ },
2440
+ "designDependent": ["loaded", "detached"],
2441
+ "liveCheck": {
2442
+ "any": [
2443
+ {
2444
+ "loaded": "{target}/doc?n={tag}",
2445
+ "observer": "fixture"
2446
+ },
2447
+ {
2448
+ "all": [
2449
+ {
2450
+ "pre": {
2451
+ "hops": [
2452
+ {
2453
+ "origin": "{ordinary}",
2454
+ "code": 307
2455
+ },
2456
+ {
2457
+ "origin": "{cross}",
2458
+ "code": 308
2459
+ }
2460
+ ],
2461
+ "to": "{target}/doc?n={tag}"
2462
+ },
2463
+ "observer": "fixture"
2464
+ },
2465
+ {
2466
+ "any": [
2467
+ {
2468
+ "blocked": {
2469
+ "anyOf": [
2470
+ {
2471
+ "hops": [
2472
+ {
2473
+ "origin": "{ordinary}",
2474
+ "code": 307
2475
+ },
2476
+ {
2477
+ "origin": "{cross}",
2478
+ "code": 308
2479
+ }
2480
+ ],
2481
+ "to": "{target}/doc?n={tag}",
2482
+ "index": 0
2483
+ },
2484
+ {
2485
+ "hops": [
2486
+ {
2487
+ "origin": "{ordinary}",
2488
+ "code": 307
2489
+ },
2490
+ {
2491
+ "origin": "{cross}",
2492
+ "code": 308
2493
+ }
2494
+ ],
2495
+ "to": "{target}/doc?n={tag}",
2496
+ "index": 1
2497
+ },
2498
+ "{target}/doc?n={tag}"
2499
+ ],
2500
+ "session": "page",
2501
+ "frame": false
2502
+ },
2503
+ "observer": "client"
2504
+ },
2505
+ {
2506
+ "blocked": {
2507
+ "anyOf": [
2508
+ {
2509
+ "hops": [
2510
+ {
2511
+ "origin": "{ordinary}",
2512
+ "code": 307
2513
+ },
2514
+ {
2515
+ "origin": "{cross}",
2516
+ "code": 308
2517
+ }
2518
+ ],
2519
+ "to": "{target}/doc?n={tag}",
2520
+ "index": 0
2521
+ },
2522
+ {
2523
+ "hops": [
2524
+ {
2525
+ "origin": "{ordinary}",
2526
+ "code": 307
2527
+ },
2528
+ {
2529
+ "origin": "{cross}",
2530
+ "code": 308
2531
+ }
2532
+ ],
2533
+ "to": "{target}/doc?n={tag}",
2534
+ "index": 1
2535
+ },
2536
+ "{target}/doc?n={tag}"
2537
+ ],
2538
+ "session": "page",
2539
+ "frame": false
2540
+ },
2541
+ "observer": "unguarded"
2542
+ },
2543
+ {
2544
+ "history": {
2545
+ "anyOf": [
2546
+ {
2547
+ "hops": [
2548
+ {
2549
+ "origin": "{ordinary}",
2550
+ "code": 307
2551
+ },
2552
+ {
2553
+ "origin": "{cross}",
2554
+ "code": 308
2555
+ }
2556
+ ],
2557
+ "to": "{target}/doc?n={tag}",
2558
+ "index": 0
2559
+ },
2560
+ {
2561
+ "hops": [
2562
+ {
2563
+ "origin": "{ordinary}",
2564
+ "code": 307
2565
+ },
2566
+ {
2567
+ "origin": "{cross}",
2568
+ "code": 308
2569
+ }
2570
+ ],
2571
+ "to": "{target}/doc?n={tag}",
2572
+ "index": 1
2573
+ },
2574
+ "{target}/doc?n={tag}"
2575
+ ],
2576
+ "session": "page"
2577
+ },
2578
+ "observer": "unguarded"
2579
+ }
2580
+ ],
2581
+ "observer": "client"
2582
+ }
2583
+ ],
2584
+ "observer": "client"
2585
+ },
2586
+ {
2587
+ "registration": "any",
2588
+ "observer": "client"
2589
+ }
2590
+ ],
2591
+ "observer": "client"
2592
+ }
2593
+ },
2594
+ {
2595
+ "id": "C2.post-308-307",
2596
+ "family": "C",
2597
+ "kind": "cdp",
2598
+ "scope": "any",
2599
+ "setup": [
2600
+ {
2601
+ "text": "an allowed tab with an init script that beacons its origin"
2602
+ },
2603
+ {
2604
+ "page": "tab",
2605
+ "url": "{ordinary}/doc?n=start"
2606
+ },
2607
+ {
2608
+ "cdp": "Page.enable"
2609
+ },
2610
+ {
2611
+ "cdp": "Page.addScriptToEvaluateOnNewDocument",
2612
+ "params": {
2613
+ "source": "{beacon}"
2614
+ },
2615
+ "refusable": true,
2616
+ "refusal": {
2617
+ "match": "refused"
2618
+ }
2619
+ },
2620
+ {
2621
+ "cdp": "Page.setBypassCSP",
2622
+ "params": {
2623
+ "enabled": true
2624
+ },
2625
+ "refusable": true,
2626
+ "refusal": {
2627
+ "match": "refused"
2628
+ }
2629
+ },
2630
+ {
2631
+ "page": "navigate",
2632
+ "url": "{ordinary}/doc?n=next-{tag}"
2633
+ },
2634
+ {
2635
+ "settle": {
2636
+ "beacon": "{ordinary}",
2637
+ "ms": 5000,
2638
+ "required": true,
2639
+ "dependsOn": ["refused.3"]
2640
+ }
2641
+ }
2642
+ ],
2643
+ "trigger": [
2644
+ {
2645
+ "page": "post",
2646
+ "url": "{target}/doc?n={tag}",
2647
+ "hops": [
2648
+ {
2649
+ "origin": "{cross}",
2650
+ "code": 308
2651
+ },
2652
+ {
2653
+ "origin": "{ordinary}",
2654
+ "code": 307
2655
+ }
2656
+ ]
2657
+ },
2658
+ {
2659
+ "settle": {
2660
+ "beacon": "{target}"
2661
+ }
2662
+ }
2663
+ ],
2664
+ "targets": ["seven", "vault", "vault-x", "apex", "own"],
2665
+ "observe": {
2666
+ "allowedBeacon": {
2667
+ "means": "a beacon from {ordinary}",
2668
+ "dependsOn": ["refused.3"],
2669
+ "check": {
2670
+ "any": [
2671
+ {
2672
+ "beacon": "{ordinary}",
2673
+ "observer": "fixture"
2674
+ },
2675
+ {
2676
+ "beacon": "{ordinary-same-site}",
2677
+ "observer": "fixture"
2678
+ }
2679
+ ],
2680
+ "observer": "client"
2681
+ }
2682
+ },
2683
+ "beacon": {
2684
+ "means": "a beacon from {target}",
2685
+ "dependsOn": ["refused.3"],
2686
+ "check": {
2687
+ "beacon": "{target}",
2688
+ "observer": "fixture"
2689
+ }
2690
+ },
2691
+ "loaded": {
2692
+ "means": "the stand-in served {target}/doc?n={tag}",
2693
+ "dependsOn": [],
2694
+ "check": {
2695
+ "served": "{target}/doc?n={tag}",
2696
+ "observer": "fixture"
2697
+ }
2698
+ },
2699
+ "detached": {
2700
+ "means": "the page session was detached",
2701
+ "dependsOn": ["refused.3", "refused.4"],
2702
+ "check": {
2703
+ "detached": "page",
2704
+ "observer": "client"
2705
+ },
2706
+ "eitherWhen": {
2707
+ "all": [
2708
+ {
2709
+ "pre": {
2710
+ "hops": [
2711
+ {
2712
+ "origin": "{cross}",
2713
+ "code": 308
2714
+ },
2715
+ {
2716
+ "origin": "{ordinary}",
2717
+ "code": 307
2718
+ }
2719
+ ],
2720
+ "to": "{target}/doc?n={tag}"
2721
+ },
2722
+ "observer": "fixture"
2723
+ },
2724
+ {
2725
+ "any": [
2726
+ {
2727
+ "blocked": {
2728
+ "anyOf": [
2729
+ {
2730
+ "hops": [
2731
+ {
2732
+ "origin": "{cross}",
2733
+ "code": 308
2734
+ },
2735
+ {
2736
+ "origin": "{ordinary}",
2737
+ "code": 307
2738
+ }
2739
+ ],
2740
+ "to": "{target}/doc?n={tag}",
2741
+ "index": 0
2742
+ },
2743
+ {
2744
+ "hops": [
2745
+ {
2746
+ "origin": "{cross}",
2747
+ "code": 308
2748
+ },
2749
+ {
2750
+ "origin": "{ordinary}",
2751
+ "code": 307
2752
+ }
2753
+ ],
2754
+ "to": "{target}/doc?n={tag}",
2755
+ "index": 1
2756
+ },
2757
+ "{target}/doc?n={tag}"
2758
+ ],
2759
+ "session": "page",
2760
+ "frame": false
2761
+ },
2762
+ "observer": "client"
2763
+ },
2764
+ {
2765
+ "blocked": {
2766
+ "anyOf": [
2767
+ {
2768
+ "hops": [
2769
+ {
2770
+ "origin": "{cross}",
2771
+ "code": 308
2772
+ },
2773
+ {
2774
+ "origin": "{ordinary}",
2775
+ "code": 307
2776
+ }
2777
+ ],
2778
+ "to": "{target}/doc?n={tag}",
2779
+ "index": 0
2780
+ },
2781
+ {
2782
+ "hops": [
2783
+ {
2784
+ "origin": "{cross}",
2785
+ "code": 308
2786
+ },
2787
+ {
2788
+ "origin": "{ordinary}",
2789
+ "code": 307
2790
+ }
2791
+ ],
2792
+ "to": "{target}/doc?n={tag}",
2793
+ "index": 1
2794
+ },
2795
+ "{target}/doc?n={tag}"
2796
+ ],
2797
+ "session": "page",
2798
+ "frame": false
2799
+ },
2800
+ "observer": "unguarded"
2801
+ },
2802
+ {
2803
+ "history": {
2804
+ "anyOf": [
2805
+ {
2806
+ "hops": [
2807
+ {
2808
+ "origin": "{cross}",
2809
+ "code": 308
2810
+ },
2811
+ {
2812
+ "origin": "{ordinary}",
2813
+ "code": 307
2814
+ }
2815
+ ],
2816
+ "to": "{target}/doc?n={tag}",
2817
+ "index": 0
2818
+ },
2819
+ {
2820
+ "hops": [
2821
+ {
2822
+ "origin": "{cross}",
2823
+ "code": 308
2824
+ },
2825
+ {
2826
+ "origin": "{ordinary}",
2827
+ "code": 307
2828
+ }
2829
+ ],
2830
+ "to": "{target}/doc?n={tag}",
2831
+ "index": 1
2832
+ },
2833
+ "{target}/doc?n={tag}"
2834
+ ],
2835
+ "session": "page"
2836
+ },
2837
+ "observer": "unguarded"
2838
+ }
2839
+ ],
2840
+ "observer": "client"
2841
+ }
2842
+ ],
2843
+ "observer": "client"
2844
+ }
2845
+ },
2846
+ "hopped": {
2847
+ "means": "every hop in the chain was served",
2848
+ "dependsOn": [],
2849
+ "check": {
2850
+ "hops": [
2851
+ {
2852
+ "origin": "{cross}",
2853
+ "code": 308
2854
+ },
2855
+ {
2856
+ "origin": "{ordinary}",
2857
+ "code": 307
2858
+ }
2859
+ ],
2860
+ "to": "{target}/doc?n={tag}",
2861
+ "observer": "fixture"
2862
+ }
2863
+ }
2864
+ },
2865
+ "live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
2866
+ "control": {
2867
+ "origin": "ordinary",
2868
+ "via": "guard",
2869
+ "expected": {
2870
+ "allowedBeacon": true,
2871
+ "beacon": true,
2872
+ "loaded": true,
2873
+ "detached": false,
2874
+ "hopped": true
2875
+ }
2876
+ },
2877
+ "expected": {
2878
+ "allowedBeacon": true,
2879
+ "beacon": false,
2880
+ "loaded": "either",
2881
+ "detached": true,
2882
+ "hopped": true
2883
+ },
2884
+ "observable": {
2885
+ "own": false
2886
+ },
2887
+ "designDependent": ["loaded", "detached"],
2888
+ "liveCheck": {
2889
+ "any": [
2890
+ {
2891
+ "loaded": "{target}/doc?n={tag}",
2892
+ "observer": "fixture"
2893
+ },
2894
+ {
2895
+ "all": [
2896
+ {
2897
+ "pre": {
2898
+ "hops": [
2899
+ {
2900
+ "origin": "{cross}",
2901
+ "code": 308
2902
+ },
2903
+ {
2904
+ "origin": "{ordinary}",
2905
+ "code": 307
2906
+ }
2907
+ ],
2908
+ "to": "{target}/doc?n={tag}"
2909
+ },
2910
+ "observer": "fixture"
2911
+ },
2912
+ {
2913
+ "any": [
2914
+ {
2915
+ "blocked": {
2916
+ "anyOf": [
2917
+ {
2918
+ "hops": [
2919
+ {
2920
+ "origin": "{cross}",
2921
+ "code": 308
2922
+ },
2923
+ {
2924
+ "origin": "{ordinary}",
2925
+ "code": 307
2926
+ }
2927
+ ],
2928
+ "to": "{target}/doc?n={tag}",
2929
+ "index": 0
2930
+ },
2931
+ {
2932
+ "hops": [
2933
+ {
2934
+ "origin": "{cross}",
2935
+ "code": 308
2936
+ },
2937
+ {
2938
+ "origin": "{ordinary}",
2939
+ "code": 307
2940
+ }
2941
+ ],
2942
+ "to": "{target}/doc?n={tag}",
2943
+ "index": 1
2944
+ },
2945
+ "{target}/doc?n={tag}"
2946
+ ],
2947
+ "session": "page",
2948
+ "frame": false
2949
+ },
2950
+ "observer": "client"
2951
+ },
2952
+ {
2953
+ "blocked": {
2954
+ "anyOf": [
2955
+ {
2956
+ "hops": [
2957
+ {
2958
+ "origin": "{cross}",
2959
+ "code": 308
2960
+ },
2961
+ {
2962
+ "origin": "{ordinary}",
2963
+ "code": 307
2964
+ }
2965
+ ],
2966
+ "to": "{target}/doc?n={tag}",
2967
+ "index": 0
2968
+ },
2969
+ {
2970
+ "hops": [
2971
+ {
2972
+ "origin": "{cross}",
2973
+ "code": 308
2974
+ },
2975
+ {
2976
+ "origin": "{ordinary}",
2977
+ "code": 307
2978
+ }
2979
+ ],
2980
+ "to": "{target}/doc?n={tag}",
2981
+ "index": 1
2982
+ },
2983
+ "{target}/doc?n={tag}"
2984
+ ],
2985
+ "session": "page",
2986
+ "frame": false
2987
+ },
2988
+ "observer": "unguarded"
2989
+ },
2990
+ {
2991
+ "history": {
2992
+ "anyOf": [
2993
+ {
2994
+ "hops": [
2995
+ {
2996
+ "origin": "{cross}",
2997
+ "code": 308
2998
+ },
2999
+ {
3000
+ "origin": "{ordinary}",
3001
+ "code": 307
3002
+ }
3003
+ ],
3004
+ "to": "{target}/doc?n={tag}",
3005
+ "index": 0
3006
+ },
3007
+ {
3008
+ "hops": [
3009
+ {
3010
+ "origin": "{cross}",
3011
+ "code": 308
3012
+ },
3013
+ {
3014
+ "origin": "{ordinary}",
3015
+ "code": 307
3016
+ }
3017
+ ],
3018
+ "to": "{target}/doc?n={tag}",
3019
+ "index": 1
3020
+ },
3021
+ "{target}/doc?n={tag}"
3022
+ ],
3023
+ "session": "page"
3024
+ },
3025
+ "observer": "unguarded"
3026
+ }
3027
+ ],
1469
3028
  "observer": "client"
1470
3029
  }
1471
3030
  ],
@@ -1480,7 +3039,7 @@
1480
3039
  }
1481
3040
  },
1482
3041
  {
1483
- "id": "C2.post-308-307",
3042
+ "id": "C2.through-302",
1484
3043
  "family": "C",
1485
3044
  "kind": "cdp",
1486
3045
  "scope": "any",
@@ -1518,26 +3077,34 @@
1518
3077
  {
1519
3078
  "page": "navigate",
1520
3079
  "url": "{ordinary}/doc?n=next-{tag}"
3080
+ },
3081
+ {
3082
+ "settle": {
3083
+ "beacon": "{ordinary}",
3084
+ "ms": 5000,
3085
+ "required": true,
3086
+ "dependsOn": ["refused.3"]
3087
+ }
1521
3088
  }
1522
3089
  ],
1523
3090
  "trigger": [
1524
3091
  {
1525
- "page": "post",
1526
- "url": "{target}/doc?n={tag}",
3092
+ "page": "href",
3093
+ "url": "{cross}/doc?n={tag}-after",
1527
3094
  "hops": [
1528
3095
  {
1529
- "origin": "{cross}",
1530
- "code": 308
3096
+ "origin": "{ordinary}",
3097
+ "code": 301
1531
3098
  },
1532
3099
  {
1533
- "origin": "{ordinary}",
1534
- "code": 307
3100
+ "origin": "{target}",
3101
+ "code": 302
1535
3102
  }
1536
3103
  ]
1537
3104
  },
1538
3105
  {
1539
3106
  "settle": {
1540
- "beacon": "{target}"
3107
+ "beacon": "{cross}"
1541
3108
  }
1542
3109
  }
1543
3110
  ],
@@ -1560,19 +3127,28 @@
1560
3127
  "observer": "client"
1561
3128
  }
1562
3129
  },
1563
- "beacon": {
1564
- "means": "a beacon from {target}",
1565
- "dependsOn": ["refused.3"],
3130
+ "protectedHop": {
3131
+ "means": "the stand-in served {target}/hop?code=302",
3132
+ "dependsOn": ["refused.3", "refused.4"],
1566
3133
  "check": {
1567
- "beacon": "{target}",
3134
+ "served": "/hop",
3135
+ "origin": "{target}",
1568
3136
  "observer": "fixture"
1569
3137
  }
1570
3138
  },
1571
- "loaded": {
1572
- "means": "the stand-in served {target}/doc?n={tag}",
1573
- "dependsOn": [],
3139
+ "landed": {
3140
+ "means": "the stand-in served {cross}/doc?n={tag}-after",
3141
+ "dependsOn": ["refused.3", "refused.4"],
1574
3142
  "check": {
1575
- "served": "{target}/doc?n={tag}",
3143
+ "served": "{cross}/doc?n={tag}-after",
3144
+ "observer": "fixture"
3145
+ }
3146
+ },
3147
+ "afterBeacon": {
3148
+ "means": "a beacon from {cross}",
3149
+ "dependsOn": ["refused.3"],
3150
+ "check": {
3151
+ "beacon": "{cross}",
1576
3152
  "observer": "fixture"
1577
3153
  }
1578
3154
  },
@@ -1582,24 +3158,145 @@
1582
3158
  "check": {
1583
3159
  "detached": "page",
1584
3160
  "observer": "client"
1585
- }
1586
- },
1587
- "hopped": {
1588
- "means": "every hop in the chain was served",
1589
- "dependsOn": [],
1590
- "check": {
1591
- "hops": [
3161
+ },
3162
+ "eitherWhen": {
3163
+ "all": [
1592
3164
  {
1593
- "origin": "{cross}",
1594
- "code": 308
3165
+ "pre": {
3166
+ "hops": [
3167
+ {
3168
+ "origin": "{ordinary}",
3169
+ "code": 301
3170
+ },
3171
+ {
3172
+ "origin": "{target}",
3173
+ "code": 302
3174
+ }
3175
+ ],
3176
+ "to": "{cross}/doc?n={tag}-after"
3177
+ },
3178
+ "observer": "fixture"
1595
3179
  },
1596
3180
  {
1597
- "origin": "{ordinary}",
1598
- "code": 307
3181
+ "any": [
3182
+ {
3183
+ "blocked": {
3184
+ "anyOf": [
3185
+ {
3186
+ "hops": [
3187
+ {
3188
+ "origin": "{ordinary}",
3189
+ "code": 301
3190
+ },
3191
+ {
3192
+ "origin": "{target}",
3193
+ "code": 302
3194
+ }
3195
+ ],
3196
+ "to": "{cross}/doc?n={tag}-after",
3197
+ "index": 0
3198
+ },
3199
+ {
3200
+ "hops": [
3201
+ {
3202
+ "origin": "{ordinary}",
3203
+ "code": 301
3204
+ },
3205
+ {
3206
+ "origin": "{target}",
3207
+ "code": 302
3208
+ }
3209
+ ],
3210
+ "to": "{cross}/doc?n={tag}-after",
3211
+ "index": 1
3212
+ },
3213
+ "{cross}/doc?n={tag}-after"
3214
+ ],
3215
+ "session": "page",
3216
+ "frame": false
3217
+ },
3218
+ "observer": "client"
3219
+ },
3220
+ {
3221
+ "blocked": {
3222
+ "anyOf": [
3223
+ {
3224
+ "hops": [
3225
+ {
3226
+ "origin": "{ordinary}",
3227
+ "code": 301
3228
+ },
3229
+ {
3230
+ "origin": "{target}",
3231
+ "code": 302
3232
+ }
3233
+ ],
3234
+ "to": "{cross}/doc?n={tag}-after",
3235
+ "index": 0
3236
+ },
3237
+ {
3238
+ "hops": [
3239
+ {
3240
+ "origin": "{ordinary}",
3241
+ "code": 301
3242
+ },
3243
+ {
3244
+ "origin": "{target}",
3245
+ "code": 302
3246
+ }
3247
+ ],
3248
+ "to": "{cross}/doc?n={tag}-after",
3249
+ "index": 1
3250
+ },
3251
+ "{cross}/doc?n={tag}-after"
3252
+ ],
3253
+ "session": "page",
3254
+ "frame": false
3255
+ },
3256
+ "observer": "unguarded"
3257
+ },
3258
+ {
3259
+ "history": {
3260
+ "anyOf": [
3261
+ {
3262
+ "hops": [
3263
+ {
3264
+ "origin": "{ordinary}",
3265
+ "code": 301
3266
+ },
3267
+ {
3268
+ "origin": "{target}",
3269
+ "code": 302
3270
+ }
3271
+ ],
3272
+ "to": "{cross}/doc?n={tag}-after",
3273
+ "index": 0
3274
+ },
3275
+ {
3276
+ "hops": [
3277
+ {
3278
+ "origin": "{ordinary}",
3279
+ "code": 301
3280
+ },
3281
+ {
3282
+ "origin": "{target}",
3283
+ "code": 302
3284
+ }
3285
+ ],
3286
+ "to": "{cross}/doc?n={tag}-after",
3287
+ "index": 1
3288
+ },
3289
+ "{cross}/doc?n={tag}-after"
3290
+ ],
3291
+ "session": "page"
3292
+ },
3293
+ "observer": "unguarded"
3294
+ }
3295
+ ],
3296
+ "observer": "client"
1599
3297
  }
1600
3298
  ],
1601
- "to": "{target}/doc?n={tag}",
1602
- "observer": "fixture"
3299
+ "observer": "client"
1603
3300
  }
1604
3301
  }
1605
3302
  },
@@ -1609,27 +3306,39 @@
1609
3306
  "via": "guard",
1610
3307
  "expected": {
1611
3308
  "allowedBeacon": true,
1612
- "beacon": true,
1613
- "loaded": true,
1614
- "detached": false,
1615
- "hopped": true
3309
+ "protectedHop": true,
3310
+ "landed": true,
3311
+ "afterBeacon": true,
3312
+ "detached": false
1616
3313
  }
1617
3314
  },
1618
3315
  "expected": {
1619
3316
  "allowedBeacon": true,
1620
- "beacon": false,
1621
- "loaded": "either",
1622
- "detached": true,
1623
- "hopped": true
3317
+ "protectedHop": false,
3318
+ "landed": false,
3319
+ "afterBeacon": false,
3320
+ "detached": true
1624
3321
  },
1625
3322
  "observable": {
1626
3323
  "own": false
1627
3324
  },
1628
- "designDependent": ["loaded"],
1629
3325
  "liveCheck": {
1630
3326
  "any": [
1631
3327
  {
1632
- "loaded": "{target}/doc?n={tag}",
3328
+ "loaded": {
3329
+ "hops": [
3330
+ {
3331
+ "origin": "{ordinary}",
3332
+ "code": 301
3333
+ },
3334
+ {
3335
+ "origin": "{target}",
3336
+ "code": 302
3337
+ }
3338
+ ],
3339
+ "to": "{cross}/doc?n={tag}-after",
3340
+ "index": 1
3341
+ },
1633
3342
  "observer": "fixture"
1634
3343
  },
1635
3344
  {
@@ -1638,15 +3347,15 @@
1638
3347
  "pre": {
1639
3348
  "hops": [
1640
3349
  {
1641
- "origin": "{cross}",
1642
- "code": 308
3350
+ "origin": "{ordinary}",
3351
+ "code": 301
1643
3352
  },
1644
3353
  {
1645
- "origin": "{ordinary}",
1646
- "code": 307
3354
+ "origin": "{target}",
3355
+ "code": 302
1647
3356
  }
1648
3357
  ],
1649
- "to": "{target}/doc?n={tag}"
3358
+ "to": "{cross}/doc?n={tag}-after"
1650
3359
  },
1651
3360
  "observer": "fixture"
1652
3361
  },
@@ -1658,32 +3367,32 @@
1658
3367
  {
1659
3368
  "hops": [
1660
3369
  {
1661
- "origin": "{cross}",
1662
- "code": 308
3370
+ "origin": "{ordinary}",
3371
+ "code": 301
1663
3372
  },
1664
3373
  {
1665
- "origin": "{ordinary}",
1666
- "code": 307
3374
+ "origin": "{target}",
3375
+ "code": 302
1667
3376
  }
1668
3377
  ],
1669
- "to": "{target}/doc?n={tag}",
3378
+ "to": "{cross}/doc?n={tag}-after",
1670
3379
  "index": 0
1671
3380
  },
1672
3381
  {
1673
3382
  "hops": [
1674
3383
  {
1675
- "origin": "{cross}",
1676
- "code": 308
3384
+ "origin": "{ordinary}",
3385
+ "code": 301
1677
3386
  },
1678
3387
  {
1679
- "origin": "{ordinary}",
1680
- "code": 307
3388
+ "origin": "{target}",
3389
+ "code": 302
1681
3390
  }
1682
3391
  ],
1683
- "to": "{target}/doc?n={tag}",
3392
+ "to": "{cross}/doc?n={tag}-after",
1684
3393
  "index": 1
1685
3394
  },
1686
- "{target}/doc?n={tag}"
3395
+ "{cross}/doc?n={tag}-after"
1687
3396
  ],
1688
3397
  "session": "page",
1689
3398
  "frame": false
@@ -1696,37 +3405,74 @@
1696
3405
  {
1697
3406
  "hops": [
1698
3407
  {
1699
- "origin": "{cross}",
1700
- "code": 308
3408
+ "origin": "{ordinary}",
3409
+ "code": 301
1701
3410
  },
1702
3411
  {
1703
- "origin": "{ordinary}",
1704
- "code": 307
3412
+ "origin": "{target}",
3413
+ "code": 302
1705
3414
  }
1706
3415
  ],
1707
- "to": "{target}/doc?n={tag}",
3416
+ "to": "{cross}/doc?n={tag}-after",
1708
3417
  "index": 0
1709
3418
  },
1710
3419
  {
1711
3420
  "hops": [
1712
3421
  {
1713
- "origin": "{cross}",
1714
- "code": 308
3422
+ "origin": "{ordinary}",
3423
+ "code": 301
1715
3424
  },
1716
3425
  {
1717
- "origin": "{ordinary}",
1718
- "code": 307
3426
+ "origin": "{target}",
3427
+ "code": 302
1719
3428
  }
1720
3429
  ],
1721
- "to": "{target}/doc?n={tag}",
3430
+ "to": "{cross}/doc?n={tag}-after",
1722
3431
  "index": 1
1723
3432
  },
1724
- "{target}/doc?n={tag}"
3433
+ "{cross}/doc?n={tag}-after"
1725
3434
  ],
1726
3435
  "session": "page",
1727
3436
  "frame": false
1728
3437
  },
1729
3438
  "observer": "unguarded"
3439
+ },
3440
+ {
3441
+ "history": {
3442
+ "anyOf": [
3443
+ {
3444
+ "hops": [
3445
+ {
3446
+ "origin": "{ordinary}",
3447
+ "code": 301
3448
+ },
3449
+ {
3450
+ "origin": "{target}",
3451
+ "code": 302
3452
+ }
3453
+ ],
3454
+ "to": "{cross}/doc?n={tag}-after",
3455
+ "index": 0
3456
+ },
3457
+ {
3458
+ "hops": [
3459
+ {
3460
+ "origin": "{ordinary}",
3461
+ "code": 301
3462
+ },
3463
+ {
3464
+ "origin": "{target}",
3465
+ "code": 302
3466
+ }
3467
+ ],
3468
+ "to": "{cross}/doc?n={tag}-after",
3469
+ "index": 1
3470
+ },
3471
+ "{cross}/doc?n={tag}-after"
3472
+ ],
3473
+ "session": "page"
3474
+ },
3475
+ "observer": "unguarded"
1730
3476
  }
1731
3477
  ],
1732
3478
  "observer": "client"
@@ -1740,10 +3486,11 @@
1740
3486
  }
1741
3487
  ],
1742
3488
  "observer": "client"
1743
- }
3489
+ },
3490
+ "designDependent": ["detached"]
1744
3491
  },
1745
3492
  {
1746
- "id": "C2.through-302",
3493
+ "id": "C2.through-307",
1747
3494
  "family": "C",
1748
3495
  "kind": "cdp",
1749
3496
  "scope": "any",
@@ -1781,6 +3528,14 @@
1781
3528
  {
1782
3529
  "page": "navigate",
1783
3530
  "url": "{ordinary}/doc?n=next-{tag}"
3531
+ },
3532
+ {
3533
+ "settle": {
3534
+ "beacon": "{ordinary}",
3535
+ "ms": 5000,
3536
+ "required": true,
3537
+ "dependsOn": ["refused.3"]
3538
+ }
1784
3539
  }
1785
3540
  ],
1786
3541
  "trigger": [
@@ -1794,7 +3549,7 @@
1794
3549
  },
1795
3550
  {
1796
3551
  "origin": "{target}",
1797
- "code": 302
3552
+ "code": 307
1798
3553
  }
1799
3554
  ]
1800
3555
  },
@@ -1824,7 +3579,7 @@
1824
3579
  }
1825
3580
  },
1826
3581
  "protectedHop": {
1827
- "means": "the stand-in served {target}/hop?code=302",
3582
+ "means": "the stand-in served {target}/hop?code=307",
1828
3583
  "dependsOn": ["refused.3", "refused.4"],
1829
3584
  "check": {
1830
3585
  "served": "/hop",
@@ -1854,51 +3609,8 @@
1854
3609
  "check": {
1855
3610
  "detached": "page",
1856
3611
  "observer": "client"
1857
- }
1858
- }
1859
- },
1860
- "live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
1861
- "control": {
1862
- "origin": "ordinary",
1863
- "via": "guard",
1864
- "expected": {
1865
- "allowedBeacon": true,
1866
- "protectedHop": true,
1867
- "landed": true,
1868
- "afterBeacon": true,
1869
- "detached": false
1870
- }
1871
- },
1872
- "expected": {
1873
- "allowedBeacon": true,
1874
- "protectedHop": false,
1875
- "landed": false,
1876
- "afterBeacon": false,
1877
- "detached": true
1878
- },
1879
- "observable": {
1880
- "own": false
1881
- },
1882
- "liveCheck": {
1883
- "any": [
1884
- {
1885
- "loaded": {
1886
- "hops": [
1887
- {
1888
- "origin": "{ordinary}",
1889
- "code": 301
1890
- },
1891
- {
1892
- "origin": "{target}",
1893
- "code": 302
1894
- }
1895
- ],
1896
- "to": "{cross}/doc?n={tag}-after",
1897
- "index": 1
1898
- },
1899
- "observer": "fixture"
1900
3612
  },
1901
- {
3613
+ "eitherWhen": {
1902
3614
  "all": [
1903
3615
  {
1904
3616
  "pre": {
@@ -1909,7 +3621,7 @@
1909
3621
  },
1910
3622
  {
1911
3623
  "origin": "{target}",
1912
- "code": 302
3624
+ "code": 307
1913
3625
  }
1914
3626
  ],
1915
3627
  "to": "{cross}/doc?n={tag}-after"
@@ -1929,7 +3641,7 @@
1929
3641
  },
1930
3642
  {
1931
3643
  "origin": "{target}",
1932
- "code": 302
3644
+ "code": 307
1933
3645
  }
1934
3646
  ],
1935
3647
  "to": "{cross}/doc?n={tag}-after",
@@ -1943,7 +3655,7 @@
1943
3655
  },
1944
3656
  {
1945
3657
  "origin": "{target}",
1946
- "code": 302
3658
+ "code": 307
1947
3659
  }
1948
3660
  ],
1949
3661
  "to": "{cross}/doc?n={tag}-after",
@@ -1967,7 +3679,7 @@
1967
3679
  },
1968
3680
  {
1969
3681
  "origin": "{target}",
1970
- "code": 302
3682
+ "code": 307
1971
3683
  }
1972
3684
  ],
1973
3685
  "to": "{cross}/doc?n={tag}-after",
@@ -1975,152 +3687,68 @@
1975
3687
  },
1976
3688
  {
1977
3689
  "hops": [
1978
- {
1979
- "origin": "{ordinary}",
1980
- "code": 301
1981
- },
1982
- {
1983
- "origin": "{target}",
1984
- "code": 302
1985
- }
1986
- ],
1987
- "to": "{cross}/doc?n={tag}-after",
1988
- "index": 1
1989
- },
1990
- "{cross}/doc?n={tag}-after"
1991
- ],
1992
- "session": "page",
1993
- "frame": false
1994
- },
1995
- "observer": "unguarded"
1996
- }
1997
- ],
1998
- "observer": "client"
1999
- }
2000
- ],
2001
- "observer": "client"
2002
- },
2003
- {
2004
- "registration": "any",
2005
- "observer": "client"
2006
- }
2007
- ],
2008
- "observer": "client"
2009
- }
2010
- },
2011
- {
2012
- "id": "C2.through-307",
2013
- "family": "C",
2014
- "kind": "cdp",
2015
- "scope": "any",
2016
- "setup": [
2017
- {
2018
- "text": "an allowed tab with an init script that beacons its origin"
2019
- },
2020
- {
2021
- "page": "tab",
2022
- "url": "{ordinary}/doc?n=start"
2023
- },
2024
- {
2025
- "cdp": "Page.enable"
2026
- },
2027
- {
2028
- "cdp": "Page.addScriptToEvaluateOnNewDocument",
2029
- "params": {
2030
- "source": "{beacon}"
2031
- },
2032
- "refusable": true,
2033
- "refusal": {
2034
- "match": "refused"
2035
- }
2036
- },
2037
- {
2038
- "cdp": "Page.setBypassCSP",
2039
- "params": {
2040
- "enabled": true
2041
- },
2042
- "refusable": true,
2043
- "refusal": {
2044
- "match": "refused"
2045
- }
2046
- },
2047
- {
2048
- "page": "navigate",
2049
- "url": "{ordinary}/doc?n=next-{tag}"
2050
- }
2051
- ],
2052
- "trigger": [
2053
- {
2054
- "page": "href",
2055
- "url": "{cross}/doc?n={tag}-after",
2056
- "hops": [
2057
- {
2058
- "origin": "{ordinary}",
2059
- "code": 301
2060
- },
2061
- {
2062
- "origin": "{target}",
2063
- "code": 307
2064
- }
2065
- ]
2066
- },
2067
- {
2068
- "settle": {
2069
- "beacon": "{cross}"
2070
- }
2071
- }
2072
- ],
2073
- "targets": ["seven", "vault", "vault-x", "apex", "own"],
2074
- "observe": {
2075
- "allowedBeacon": {
2076
- "means": "a beacon from {ordinary}",
2077
- "dependsOn": ["refused.3"],
2078
- "check": {
2079
- "any": [
2080
- {
2081
- "beacon": "{ordinary}",
2082
- "observer": "fixture"
2083
- },
2084
- {
2085
- "beacon": "{ordinary-same-site}",
2086
- "observer": "fixture"
3690
+ {
3691
+ "origin": "{ordinary}",
3692
+ "code": 301
3693
+ },
3694
+ {
3695
+ "origin": "{target}",
3696
+ "code": 307
3697
+ }
3698
+ ],
3699
+ "to": "{cross}/doc?n={tag}-after",
3700
+ "index": 1
3701
+ },
3702
+ "{cross}/doc?n={tag}-after"
3703
+ ],
3704
+ "session": "page",
3705
+ "frame": false
3706
+ },
3707
+ "observer": "unguarded"
3708
+ },
3709
+ {
3710
+ "history": {
3711
+ "anyOf": [
3712
+ {
3713
+ "hops": [
3714
+ {
3715
+ "origin": "{ordinary}",
3716
+ "code": 301
3717
+ },
3718
+ {
3719
+ "origin": "{target}",
3720
+ "code": 307
3721
+ }
3722
+ ],
3723
+ "to": "{cross}/doc?n={tag}-after",
3724
+ "index": 0
3725
+ },
3726
+ {
3727
+ "hops": [
3728
+ {
3729
+ "origin": "{ordinary}",
3730
+ "code": 301
3731
+ },
3732
+ {
3733
+ "origin": "{target}",
3734
+ "code": 307
3735
+ }
3736
+ ],
3737
+ "to": "{cross}/doc?n={tag}-after",
3738
+ "index": 1
3739
+ },
3740
+ "{cross}/doc?n={tag}-after"
3741
+ ],
3742
+ "session": "page"
3743
+ },
3744
+ "observer": "unguarded"
3745
+ }
3746
+ ],
3747
+ "observer": "client"
2087
3748
  }
2088
3749
  ],
2089
3750
  "observer": "client"
2090
3751
  }
2091
- },
2092
- "protectedHop": {
2093
- "means": "the stand-in served {target}/hop?code=307",
2094
- "dependsOn": ["refused.3", "refused.4"],
2095
- "check": {
2096
- "served": "/hop",
2097
- "origin": "{target}",
2098
- "observer": "fixture"
2099
- }
2100
- },
2101
- "landed": {
2102
- "means": "the stand-in served {cross}/doc?n={tag}-after",
2103
- "dependsOn": ["refused.3", "refused.4"],
2104
- "check": {
2105
- "served": "{cross}/doc?n={tag}-after",
2106
- "observer": "fixture"
2107
- }
2108
- },
2109
- "afterBeacon": {
2110
- "means": "a beacon from {cross}",
2111
- "dependsOn": ["refused.3"],
2112
- "check": {
2113
- "beacon": "{cross}",
2114
- "observer": "fixture"
2115
- }
2116
- },
2117
- "detached": {
2118
- "means": "the page session was detached",
2119
- "dependsOn": ["refused.3", "refused.4"],
2120
- "check": {
2121
- "detached": "page",
2122
- "observer": "client"
2123
- }
2124
3752
  }
2125
3753
  },
2126
3754
  "live": "the runner's own CDP sees {target}'s document load (title, marker or URL), or the guard returned its refusal for a refusable step",
@@ -2259,6 +3887,43 @@
2259
3887
  "frame": false
2260
3888
  },
2261
3889
  "observer": "unguarded"
3890
+ },
3891
+ {
3892
+ "history": {
3893
+ "anyOf": [
3894
+ {
3895
+ "hops": [
3896
+ {
3897
+ "origin": "{ordinary}",
3898
+ "code": 301
3899
+ },
3900
+ {
3901
+ "origin": "{target}",
3902
+ "code": 307
3903
+ }
3904
+ ],
3905
+ "to": "{cross}/doc?n={tag}-after",
3906
+ "index": 0
3907
+ },
3908
+ {
3909
+ "hops": [
3910
+ {
3911
+ "origin": "{ordinary}",
3912
+ "code": 301
3913
+ },
3914
+ {
3915
+ "origin": "{target}",
3916
+ "code": 307
3917
+ }
3918
+ ],
3919
+ "to": "{cross}/doc?n={tag}-after",
3920
+ "index": 1
3921
+ },
3922
+ "{cross}/doc?n={tag}-after"
3923
+ ],
3924
+ "session": "page"
3925
+ },
3926
+ "observer": "unguarded"
2262
3927
  }
2263
3928
  ],
2264
3929
  "observer": "client"
@@ -2272,7 +3937,8 @@
2272
3937
  }
2273
3938
  ],
2274
3939
  "observer": "client"
2275
- }
3940
+ },
3941
+ "designDependent": ["detached"]
2276
3942
  },
2277
3943
  {
2278
3944
  "id": "C3.popup-self-nav",
@@ -2327,6 +3993,9 @@
2327
3993
  }
2328
3994
  }
2329
3995
  ],
3996
+ "where": {
3997
+ "openerId": "page"
3998
+ },
2330
3999
  "requires": ["autoAttach"]
2331
4000
  },
2332
4001
  {
@@ -2338,6 +4007,16 @@
2338
4007
  "url": "{ordinary}/doc?n=popup-{tag}&again=1",
2339
4008
  "session": "child",
2340
4009
  "requires": ["autoAttach"]
4010
+ },
4011
+ {
4012
+ "settle": {
4013
+ "beacon": "{ordinary}",
4014
+ "session": "child",
4015
+ "ms": 5000,
4016
+ "required": true,
4017
+ "dependsOn": ["refused.2", "refused.5"]
4018
+ },
4019
+ "requires": ["autoAttach"]
2341
4020
  }
2342
4021
  ],
2343
4022
  "trigger": [
@@ -2413,6 +4092,43 @@
2413
4092
  "check": {
2414
4093
  "detached": "child",
2415
4094
  "observer": "client"
4095
+ },
4096
+ "eitherWhen": {
4097
+ "all": [
4098
+ {
4099
+ "pre": "{target}/doc?n={tag}",
4100
+ "observer": "fixture"
4101
+ },
4102
+ {
4103
+ "any": [
4104
+ {
4105
+ "blocked": {
4106
+ "url": "{target}/doc?n={tag}",
4107
+ "session": "child",
4108
+ "frame": false
4109
+ },
4110
+ "observer": "client"
4111
+ },
4112
+ {
4113
+ "blocked": {
4114
+ "url": "{target}/doc?n={tag}",
4115
+ "session": "child",
4116
+ "frame": false
4117
+ },
4118
+ "observer": "unguarded"
4119
+ },
4120
+ {
4121
+ "history": {
4122
+ "url": "{target}/doc?n={tag}",
4123
+ "session": "child"
4124
+ },
4125
+ "observer": "unguarded"
4126
+ }
4127
+ ],
4128
+ "observer": "client"
4129
+ }
4130
+ ],
4131
+ "observer": "client"
2416
4132
  }
2417
4133
  }
2418
4134
  },
@@ -2433,7 +4149,7 @@
2433
4149
  "loaded": "either",
2434
4150
  "detached": true
2435
4151
  },
2436
- "designDependent": ["loaded"],
4152
+ "designDependent": ["loaded", "detached"],
2437
4153
  "liveCheck": {
2438
4154
  "any": [
2439
4155
  {
@@ -2463,6 +4179,13 @@
2463
4179
  "frame": false
2464
4180
  },
2465
4181
  "observer": "unguarded"
4182
+ },
4183
+ {
4184
+ "history": {
4185
+ "url": "{target}/doc?n={tag}",
4186
+ "session": "child"
4187
+ },
4188
+ "observer": "unguarded"
2466
4189
  }
2467
4190
  ],
2468
4191
  "observer": "client"
@@ -2534,6 +4257,9 @@
2534
4257
  "cdp": "Page.reload"
2535
4258
  }
2536
4259
  ],
4260
+ "where": {
4261
+ "openerId": "page"
4262
+ },
2537
4263
  "requires": ["autoAttach"]
2538
4264
  }
2539
4265
  ],
@@ -2679,6 +4405,25 @@
2679
4405
  "frame": false
2680
4406
  },
2681
4407
  "observer": "unguarded"
4408
+ },
4409
+ {
4410
+ "history": {
4411
+ "anyOf": [
4412
+ {
4413
+ "hops": [
4414
+ {
4415
+ "origin": "{ordinary}",
4416
+ "code": 302
4417
+ }
4418
+ ],
4419
+ "to": "{target}/doc?n={tag}",
4420
+ "index": 0
4421
+ },
4422
+ "{target}/doc?n={tag}"
4423
+ ],
4424
+ "session": "child"
4425
+ },
4426
+ "observer": "unguarded"
2682
4427
  }
2683
4428
  ],
2684
4429
  "observer": "client"
@@ -2750,6 +4495,9 @@
2750
4495
  "cdp": "Page.reload"
2751
4496
  }
2752
4497
  ],
4498
+ "where": {
4499
+ "openerId": "page"
4500
+ },
2753
4501
  "requires": ["autoAttach"]
2754
4502
  }
2755
4503
  ],
@@ -2937,7 +4685,71 @@
2937
4685
  "observer": "client"
2938
4686
  },
2939
4687
  {
2940
- "blocked": {
4688
+ "blocked": {
4689
+ "anyOf": [
4690
+ {
4691
+ "hops": [
4692
+ {
4693
+ "origin": "{ordinary}",
4694
+ "code": 301
4695
+ },
4696
+ {
4697
+ "origin": "{cross}",
4698
+ "code": 307
4699
+ },
4700
+ {
4701
+ "origin": "{ordinary}",
4702
+ "code": 303
4703
+ }
4704
+ ],
4705
+ "to": "{target}/doc?n={tag}",
4706
+ "index": 0
4707
+ },
4708
+ {
4709
+ "hops": [
4710
+ {
4711
+ "origin": "{ordinary}",
4712
+ "code": 301
4713
+ },
4714
+ {
4715
+ "origin": "{cross}",
4716
+ "code": 307
4717
+ },
4718
+ {
4719
+ "origin": "{ordinary}",
4720
+ "code": 303
4721
+ }
4722
+ ],
4723
+ "to": "{target}/doc?n={tag}",
4724
+ "index": 1
4725
+ },
4726
+ {
4727
+ "hops": [
4728
+ {
4729
+ "origin": "{ordinary}",
4730
+ "code": 301
4731
+ },
4732
+ {
4733
+ "origin": "{cross}",
4734
+ "code": 307
4735
+ },
4736
+ {
4737
+ "origin": "{ordinary}",
4738
+ "code": 303
4739
+ }
4740
+ ],
4741
+ "to": "{target}/doc?n={tag}",
4742
+ "index": 2
4743
+ },
4744
+ "{target}/doc?n={tag}"
4745
+ ],
4746
+ "session": "child",
4747
+ "frame": false
4748
+ },
4749
+ "observer": "unguarded"
4750
+ },
4751
+ {
4752
+ "history": {
2941
4753
  "anyOf": [
2942
4754
  {
2943
4755
  "hops": [
@@ -2995,8 +4807,7 @@
2995
4807
  },
2996
4808
  "{target}/doc?n={tag}"
2997
4809
  ],
2998
- "session": "child",
2999
- "frame": false
4810
+ "session": "child"
3000
4811
  },
3001
4812
  "observer": "unguarded"
3002
4813
  }
@@ -3119,7 +4930,7 @@
3119
4930
  },
3120
4931
  "beacon": {
3121
4932
  "means": "a beacon from {target}",
3122
- "dependsOn": ["refused.7", "refused.8"],
4933
+ "dependsOn": ["refused.3", "refused.7", "refused.8"],
3123
4934
  "requires": ["autoAttach"],
3124
4935
  "check": {
3125
4936
  "beacon": "{target}",
@@ -3167,11 +4978,24 @@
3167
4978
  "means": "a child frame is a chrome-error page for {target}/doc?n={tag}",
3168
4979
  "dependsOn": ["refused.8"],
3169
4980
  "check": {
3170
- "result": "frameTree",
3171
- "path": "result",
3172
- "equals": {
3173
- "$regex": "chrome-error://"
3174
- },
4981
+ "any": [
4982
+ {
4983
+ "result": "frameTree",
4984
+ "path": "result",
4985
+ "equals": {
4986
+ "$regex": "chrome-error://"
4987
+ },
4988
+ "observer": "client"
4989
+ },
4990
+ {
4991
+ "frameBlocked": {
4992
+ "url": "{target}/doc?n={tag}",
4993
+ "session": "page",
4994
+ "frame": true
4995
+ },
4996
+ "observer": "unguarded"
4997
+ }
4998
+ ],
3175
4999
  "observer": "client"
3176
5000
  }
3177
5001
  }
@@ -3396,11 +5220,24 @@
3396
5220
  "means": "a child frame is a chrome-error page for {target}/doc?n={tag}",
3397
5221
  "dependsOn": ["refused.8"],
3398
5222
  "check": {
3399
- "result": "frameTree",
3400
- "path": "result",
3401
- "equals": {
3402
- "$regex": "chrome-error://"
3403
- },
5223
+ "any": [
5224
+ {
5225
+ "result": "frameTree",
5226
+ "path": "result",
5227
+ "equals": {
5228
+ "$regex": "chrome-error://"
5229
+ },
5230
+ "observer": "client"
5231
+ },
5232
+ {
5233
+ "frameBlocked": {
5234
+ "url": "{target}/doc?n={tag}",
5235
+ "session": "page",
5236
+ "frame": true
5237
+ },
5238
+ "observer": "unguarded"
5239
+ }
5240
+ ],
3404
5241
  "observer": "client"
3405
5242
  }
3406
5243
  }
@@ -4028,6 +5865,43 @@
4028
5865
  "check": {
4029
5866
  "detached": "page",
4030
5867
  "observer": "client"
5868
+ },
5869
+ "eitherWhen": {
5870
+ "all": [
5871
+ {
5872
+ "pre": "{target}/doc?n={tag}",
5873
+ "observer": "fixture"
5874
+ },
5875
+ {
5876
+ "any": [
5877
+ {
5878
+ "blocked": {
5879
+ "url": "{target}/doc?n={tag}",
5880
+ "session": "page",
5881
+ "frame": false
5882
+ },
5883
+ "observer": "client"
5884
+ },
5885
+ {
5886
+ "blocked": {
5887
+ "url": "{target}/doc?n={tag}",
5888
+ "session": "page",
5889
+ "frame": false
5890
+ },
5891
+ "observer": "unguarded"
5892
+ },
5893
+ {
5894
+ "history": {
5895
+ "url": "{target}/doc?n={tag}",
5896
+ "session": "page"
5897
+ },
5898
+ "observer": "unguarded"
5899
+ }
5900
+ ],
5901
+ "observer": "client"
5902
+ }
5903
+ ],
5904
+ "observer": "client"
4031
5905
  }
4032
5906
  }
4033
5907
  },
@@ -4075,6 +5949,13 @@
4075
5949
  "frame": false
4076
5950
  },
4077
5951
  "observer": "unguarded"
5952
+ },
5953
+ {
5954
+ "history": {
5955
+ "url": "{target}/doc?n={tag}",
5956
+ "session": "page"
5957
+ },
5958
+ "observer": "unguarded"
4078
5959
  }
4079
5960
  ],
4080
5961
  "observer": "client"
@@ -4084,7 +5965,8 @@
4084
5965
  }
4085
5966
  ],
4086
5967
  "observer": "client"
4087
- }
5968
+ },
5969
+ "designDependent": ["detached"]
4088
5970
  },
4089
5971
  {
4090
5972
  "id": "C5.continue-request",
@@ -4174,6 +6056,43 @@
4174
6056
  "check": {
4175
6057
  "detached": "page",
4176
6058
  "observer": "client"
6059
+ },
6060
+ "eitherWhen": {
6061
+ "all": [
6062
+ {
6063
+ "pre": "{target}/doc?n={tag}",
6064
+ "observer": "fixture"
6065
+ },
6066
+ {
6067
+ "any": [
6068
+ {
6069
+ "blocked": {
6070
+ "url": "{target}/doc?n={tag}",
6071
+ "session": "page",
6072
+ "frame": false
6073
+ },
6074
+ "observer": "client"
6075
+ },
6076
+ {
6077
+ "blocked": {
6078
+ "url": "{target}/doc?n={tag}",
6079
+ "session": "page",
6080
+ "frame": false
6081
+ },
6082
+ "observer": "unguarded"
6083
+ },
6084
+ {
6085
+ "history": {
6086
+ "url": "{target}/doc?n={tag}",
6087
+ "session": "page"
6088
+ },
6089
+ "observer": "unguarded"
6090
+ }
6091
+ ],
6092
+ "observer": "client"
6093
+ }
6094
+ ],
6095
+ "observer": "client"
4177
6096
  }
4178
6097
  }
4179
6098
  },
@@ -4221,6 +6140,13 @@
4221
6140
  "frame": false
4222
6141
  },
4223
6142
  "observer": "unguarded"
6143
+ },
6144
+ {
6145
+ "history": {
6146
+ "url": "{target}/doc?n={tag}",
6147
+ "session": "page"
6148
+ },
6149
+ "observer": "unguarded"
4224
6150
  }
4225
6151
  ],
4226
6152
  "observer": "client"
@@ -4230,7 +6156,8 @@
4230
6156
  }
4231
6157
  ],
4232
6158
  "observer": "client"
4233
- }
6159
+ },
6160
+ "designDependent": ["detached"]
4234
6161
  },
4235
6162
  {
4236
6163
  "id": "C5.continue-response",
@@ -6022,7 +7949,11 @@
6022
7949
  "trigger": [
6023
7950
  {
6024
7951
  "cdp": "Network.clearBrowserCookies",
6025
- "as": "network"
7952
+ "as": "network",
7953
+ "refusable": true,
7954
+ "refusal": {
7955
+ "match": "refused"
7956
+ }
6026
7957
  },
6027
7958
  {
6028
7959
  "cdp": "Storage.clearCookies",
@@ -6054,6 +7985,7 @@
6054
7985
  "observe": {
6055
7986
  "network": {
6056
7987
  "means": "network succeeded",
7988
+ "dependsOn": ["network"],
6057
7989
  "check": {
6058
7990
  "result": "network",
6059
7991
  "path": "ok",
@@ -6063,6 +7995,7 @@
6063
7995
  },
6064
7996
  "storage": {
6065
7997
  "means": "storage succeeded",
7998
+ "dependsOn": [],
6066
7999
  "check": {
6067
8000
  "result": "storage",
6068
8001
  "path": "ok",
@@ -6072,6 +8005,7 @@
6072
8005
  },
6073
8006
  "refused": {
6074
8007
  "means": "network and storage were both refused",
8008
+ "dependsOn": [],
6075
8009
  "check": {
6076
8010
  "refused": ["network", "storage"],
6077
8011
  "observer": "client"
@@ -6426,6 +8360,13 @@
6426
8360
  "frame": false
6427
8361
  },
6428
8362
  "observer": "unguarded"
8363
+ },
8364
+ {
8365
+ "history": {
8366
+ "url": "{target}/doc?n={tag}",
8367
+ "session": "page"
8368
+ },
8369
+ "observer": "unguarded"
6429
8370
  }
6430
8371
  ],
6431
8372
  "observer": "client"
@@ -6561,6 +8502,13 @@
6561
8502
  "frame": false
6562
8503
  },
6563
8504
  "observer": "unguarded"
8505
+ },
8506
+ {
8507
+ "history": {
8508
+ "url": "{target}/doc?n={tag}",
8509
+ "session": "page"
8510
+ },
8511
+ "observer": "unguarded"
6564
8512
  }
6565
8513
  ],
6566
8514
  "observer": "client"
@@ -6696,6 +8644,13 @@
6696
8644
  "frame": false
6697
8645
  },
6698
8646
  "observer": "unguarded"
8647
+ },
8648
+ {
8649
+ "history": {
8650
+ "url": "{target}/doc?n={tag}",
8651
+ "session": "page"
8652
+ },
8653
+ "observer": "unguarded"
6699
8654
  }
6700
8655
  ],
6701
8656
  "observer": "client"
@@ -6872,6 +8827,25 @@
6872
8827
  "frame": false
6873
8828
  },
6874
8829
  "observer": "unguarded"
8830
+ },
8831
+ {
8832
+ "history": {
8833
+ "anyOf": [
8834
+ {
8835
+ "hops": [
8836
+ {
8837
+ "origin": "{plain}",
8838
+ "code": 302
8839
+ }
8840
+ ],
8841
+ "to": "{target}/doc?n={tag}",
8842
+ "index": 0
8843
+ },
8844
+ "{target}/doc?n={tag}"
8845
+ ],
8846
+ "session": "page"
8847
+ },
8848
+ "observer": "unguarded"
6875
8849
  }
6876
8850
  ],
6877
8851
  "observer": "client"
@@ -7048,6 +9022,25 @@
7048
9022
  "frame": false
7049
9023
  },
7050
9024
  "observer": "unguarded"
9025
+ },
9026
+ {
9027
+ "history": {
9028
+ "anyOf": [
9029
+ {
9030
+ "hops": [
9031
+ {
9032
+ "origin": "{plain}",
9033
+ "code": 307
9034
+ }
9035
+ ],
9036
+ "to": "{target}/doc?n={tag}",
9037
+ "index": 0
9038
+ },
9039
+ "{target}/doc?n={tag}"
9040
+ ],
9041
+ "session": "page"
9042
+ },
9043
+ "observer": "unguarded"
7051
9044
  }
7052
9045
  ],
7053
9046
  "observer": "client"
@@ -7268,6 +9261,43 @@
7268
9261
  "frame": false
7269
9262
  },
7270
9263
  "observer": "unguarded"
9264
+ },
9265
+ {
9266
+ "history": {
9267
+ "anyOf": [
9268
+ {
9269
+ "hops": [
9270
+ {
9271
+ "origin": "{plain}",
9272
+ "code": 302
9273
+ },
9274
+ {
9275
+ "origin": "{plain}",
9276
+ "code": 302
9277
+ }
9278
+ ],
9279
+ "to": "{target}/doc?n={tag}",
9280
+ "index": 0
9281
+ },
9282
+ {
9283
+ "hops": [
9284
+ {
9285
+ "origin": "{plain}",
9286
+ "code": 302
9287
+ },
9288
+ {
9289
+ "origin": "{plain}",
9290
+ "code": 302
9291
+ }
9292
+ ],
9293
+ "to": "{target}/doc?n={tag}",
9294
+ "index": 1
9295
+ },
9296
+ "{target}/doc?n={tag}"
9297
+ ],
9298
+ "session": "page"
9299
+ },
9300
+ "observer": "unguarded"
7271
9301
  }
7272
9302
  ],
7273
9303
  "observer": "client"
@@ -7442,6 +9472,13 @@
7442
9472
  "frame": false
7443
9473
  },
7444
9474
  "observer": "unguarded"
9475
+ },
9476
+ {
9477
+ "history": {
9478
+ "url": "{target}/doc?n={tag}",
9479
+ "session": "child"
9480
+ },
9481
+ "observer": "unguarded"
7445
9482
  }
7446
9483
  ],
7447
9484
  "observer": "client"
@@ -7713,6 +9750,13 @@
7713
9750
  "frame": false
7714
9751
  },
7715
9752
  "observer": "unguarded"
9753
+ },
9754
+ {
9755
+ "history": {
9756
+ "url": "{target}/doc?n={tag}",
9757
+ "session": "page"
9758
+ },
9759
+ "observer": "unguarded"
7716
9760
  }
7717
9761
  ],
7718
9762
  "observer": "client"
@@ -7846,6 +9890,13 @@
7846
9890
  "frame": false
7847
9891
  },
7848
9892
  "observer": "unguarded"
9893
+ },
9894
+ {
9895
+ "history": {
9896
+ "url": "{target}/doc?n={tag}",
9897
+ "session": "page"
9898
+ },
9899
+ "observer": "unguarded"
7849
9900
  }
7850
9901
  ],
7851
9902
  "observer": "client"
@@ -7969,6 +10020,13 @@
7969
10020
  "frame": false
7970
10021
  },
7971
10022
  "observer": "unguarded"
10023
+ },
10024
+ {
10025
+ "history": {
10026
+ "url": "{target}/doc?n={tag}",
10027
+ "session": "page"
10028
+ },
10029
+ "observer": "unguarded"
7972
10030
  }
7973
10031
  ],
7974
10032
  "observer": "client"
@@ -8100,6 +10158,13 @@
8100
10158
  "frame": false
8101
10159
  },
8102
10160
  "observer": "unguarded"
10161
+ },
10162
+ {
10163
+ "history": {
10164
+ "url": "{target}/doc?n={tag}",
10165
+ "session": "page"
10166
+ },
10167
+ "observer": "unguarded"
8103
10168
  }
8104
10169
  ],
8105
10170
  "observer": "client"
@@ -8247,6 +10312,13 @@
8247
10312
  "frame": false
8248
10313
  },
8249
10314
  "observer": "unguarded"
10315
+ },
10316
+ {
10317
+ "history": {
10318
+ "url": "{target}/doc?n={tag}",
10319
+ "session": "page"
10320
+ },
10321
+ "observer": "unguarded"
8250
10322
  }
8251
10323
  ],
8252
10324
  "observer": "client"
@@ -8383,6 +10455,13 @@
8383
10455
  "frame": false
8384
10456
  },
8385
10457
  "observer": "unguarded"
10458
+ },
10459
+ {
10460
+ "history": {
10461
+ "url": "{target}/doc?n={tag}&csp=1",
10462
+ "session": "page"
10463
+ },
10464
+ "observer": "unguarded"
8386
10465
  }
8387
10466
  ],
8388
10467
  "observer": "client"
@@ -8525,6 +10604,13 @@
8525
10604
  "frame": false
8526
10605
  },
8527
10606
  "observer": "unguarded"
10607
+ },
10608
+ {
10609
+ "history": {
10610
+ "url": "{target}/doc?n={tag}",
10611
+ "session": "page"
10612
+ },
10613
+ "observer": "unguarded"
8528
10614
  }
8529
10615
  ],
8530
10616
  "observer": "client"
@@ -8651,6 +10737,13 @@
8651
10737
  "frame": false
8652
10738
  },
8653
10739
  "observer": "unguarded"
10740
+ },
10741
+ {
10742
+ "history": {
10743
+ "url": "{target}/doc?n={tag}",
10744
+ "session": "page"
10745
+ },
10746
+ "observer": "unguarded"
8654
10747
  }
8655
10748
  ],
8656
10749
  "observer": "client"