@ai-ecoverse/slicc-browsers 1.22.1 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/close-protected-shape.mjs +563 -0
- package/fixture-server.mjs +64 -0
- package/guard-runner.mjs +80 -8
- package/guard-vectors.json +606 -1
- package/package.json +6 -4
- package/protected-parent-iframes.mjs +567 -0
- package/schema/guard-vectors.schema.json +32 -0
package/guard-vectors.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"setVersion": "1.
|
|
3
|
+
"setVersion": "1.24.0",
|
|
4
4
|
"sources": [
|
|
5
5
|
{
|
|
6
6
|
"repo": "ai-ecoverse/slicc-cli",
|
|
@@ -2406,6 +2406,410 @@
|
|
|
2406
2406
|
"fullURL": false
|
|
2407
2407
|
}
|
|
2408
2408
|
},
|
|
2409
|
+
{
|
|
2410
|
+
"id": "C8.close-protected.view-source",
|
|
2411
|
+
"family": "C",
|
|
2412
|
+
"kind": "cdp",
|
|
2413
|
+
"scope": "any",
|
|
2414
|
+
"defaultContext": true,
|
|
2415
|
+
"requires": ["closeProtected"],
|
|
2416
|
+
"setup": [
|
|
2417
|
+
{
|
|
2418
|
+
"page": "tab",
|
|
2419
|
+
"url": "{ordinary}/blank"
|
|
2420
|
+
}
|
|
2421
|
+
],
|
|
2422
|
+
"trigger": [
|
|
2423
|
+
{
|
|
2424
|
+
"closeProtectedShape": "view-source",
|
|
2425
|
+
"as": "shape",
|
|
2426
|
+
"requires": ["closeProtected"]
|
|
2427
|
+
}
|
|
2428
|
+
],
|
|
2429
|
+
"targets": ["vault"],
|
|
2430
|
+
"observe": {
|
|
2431
|
+
"shaped": {
|
|
2432
|
+
"means": "closeProtected view-source vault: the unguarded observer opened the shaped tab",
|
|
2433
|
+
"check": {
|
|
2434
|
+
"result": "shape",
|
|
2435
|
+
"path": "result.shaped",
|
|
2436
|
+
"equals": true,
|
|
2437
|
+
"observer": "client"
|
|
2438
|
+
}
|
|
2439
|
+
},
|
|
2440
|
+
"attachRefused": {
|
|
2441
|
+
"means": "closeProtected view-source vault: Target.attachToTarget through the client is refused",
|
|
2442
|
+
"check": {
|
|
2443
|
+
"result": "shape",
|
|
2444
|
+
"path": "result.attachRefused",
|
|
2445
|
+
"equals": true,
|
|
2446
|
+
"observer": "client"
|
|
2447
|
+
}
|
|
2448
|
+
},
|
|
2449
|
+
"closeRefused": {
|
|
2450
|
+
"means": "closeProtected view-source vault: Target.closeTarget through the client is refused",
|
|
2451
|
+
"check": {
|
|
2452
|
+
"result": "shape",
|
|
2453
|
+
"path": "result.closeRefused",
|
|
2454
|
+
"equals": true,
|
|
2455
|
+
"observer": "client"
|
|
2456
|
+
}
|
|
2457
|
+
},
|
|
2458
|
+
"closed": {
|
|
2459
|
+
"means": "closeProtected view-source vault: Target.closeTarget on the locked tab is answered with success and the tab is gone",
|
|
2460
|
+
"check": {
|
|
2461
|
+
"result": "shape",
|
|
2462
|
+
"path": "result.closed",
|
|
2463
|
+
"equals": true,
|
|
2464
|
+
"observer": "client"
|
|
2465
|
+
}
|
|
2466
|
+
}
|
|
2467
|
+
},
|
|
2468
|
+
"live": "the unguarded observer opened the shaped tab",
|
|
2469
|
+
"liveCheck": {
|
|
2470
|
+
"result": "shape",
|
|
2471
|
+
"path": "result.live",
|
|
2472
|
+
"equals": true,
|
|
2473
|
+
"observer": "client"
|
|
2474
|
+
},
|
|
2475
|
+
"control": {
|
|
2476
|
+
"origin": "ordinary",
|
|
2477
|
+
"via": "unguarded",
|
|
2478
|
+
"expected": {
|
|
2479
|
+
"shaped": true,
|
|
2480
|
+
"attachRefused": false,
|
|
2481
|
+
"closeRefused": false,
|
|
2482
|
+
"closed": true
|
|
2483
|
+
}
|
|
2484
|
+
},
|
|
2485
|
+
"expected": {
|
|
2486
|
+
"shaped": true,
|
|
2487
|
+
"attachRefused": true,
|
|
2488
|
+
"closeRefused": true,
|
|
2489
|
+
"closed": false
|
|
2490
|
+
}
|
|
2491
|
+
},
|
|
2492
|
+
{
|
|
2493
|
+
"id": "C8.close-protected.blob",
|
|
2494
|
+
"family": "C",
|
|
2495
|
+
"kind": "cdp",
|
|
2496
|
+
"scope": "any",
|
|
2497
|
+
"defaultContext": true,
|
|
2498
|
+
"requires": ["closeProtected"],
|
|
2499
|
+
"setup": [
|
|
2500
|
+
{
|
|
2501
|
+
"page": "tab",
|
|
2502
|
+
"url": "{ordinary}/blank"
|
|
2503
|
+
}
|
|
2504
|
+
],
|
|
2505
|
+
"trigger": [
|
|
2506
|
+
{
|
|
2507
|
+
"closeProtectedShape": "blob",
|
|
2508
|
+
"as": "shape",
|
|
2509
|
+
"requires": ["closeProtected"]
|
|
2510
|
+
}
|
|
2511
|
+
],
|
|
2512
|
+
"targets": ["vault"],
|
|
2513
|
+
"observe": {
|
|
2514
|
+
"shaped": {
|
|
2515
|
+
"means": "closeProtected blob vault: the unguarded observer opened the shaped tab",
|
|
2516
|
+
"check": {
|
|
2517
|
+
"result": "shape",
|
|
2518
|
+
"path": "result.shaped",
|
|
2519
|
+
"equals": true,
|
|
2520
|
+
"observer": "client"
|
|
2521
|
+
}
|
|
2522
|
+
},
|
|
2523
|
+
"attachRefused": {
|
|
2524
|
+
"means": "closeProtected blob vault: Target.attachToTarget through the client is refused",
|
|
2525
|
+
"check": {
|
|
2526
|
+
"result": "shape",
|
|
2527
|
+
"path": "result.attachRefused",
|
|
2528
|
+
"equals": true,
|
|
2529
|
+
"observer": "client"
|
|
2530
|
+
}
|
|
2531
|
+
},
|
|
2532
|
+
"closeRefused": {
|
|
2533
|
+
"means": "closeProtected blob vault: Target.closeTarget through the client is refused",
|
|
2534
|
+
"check": {
|
|
2535
|
+
"result": "shape",
|
|
2536
|
+
"path": "result.closeRefused",
|
|
2537
|
+
"equals": true,
|
|
2538
|
+
"observer": "client"
|
|
2539
|
+
}
|
|
2540
|
+
},
|
|
2541
|
+
"closed": {
|
|
2542
|
+
"means": "closeProtected blob vault: Target.closeTarget on the locked tab is answered with success and the tab is gone",
|
|
2543
|
+
"check": {
|
|
2544
|
+
"result": "shape",
|
|
2545
|
+
"path": "result.closed",
|
|
2546
|
+
"equals": true,
|
|
2547
|
+
"observer": "client"
|
|
2548
|
+
}
|
|
2549
|
+
}
|
|
2550
|
+
},
|
|
2551
|
+
"live": "the unguarded observer opened the shaped tab",
|
|
2552
|
+
"liveCheck": {
|
|
2553
|
+
"result": "shape",
|
|
2554
|
+
"path": "result.live",
|
|
2555
|
+
"equals": true,
|
|
2556
|
+
"observer": "client"
|
|
2557
|
+
},
|
|
2558
|
+
"control": {
|
|
2559
|
+
"origin": "ordinary",
|
|
2560
|
+
"via": "unguarded",
|
|
2561
|
+
"expected": {
|
|
2562
|
+
"shaped": true,
|
|
2563
|
+
"attachRefused": false,
|
|
2564
|
+
"closeRefused": false,
|
|
2565
|
+
"closed": true
|
|
2566
|
+
}
|
|
2567
|
+
},
|
|
2568
|
+
"expected": {
|
|
2569
|
+
"shaped": true,
|
|
2570
|
+
"attachRefused": true,
|
|
2571
|
+
"closeRefused": true,
|
|
2572
|
+
"closed": false
|
|
2573
|
+
}
|
|
2574
|
+
},
|
|
2575
|
+
{
|
|
2576
|
+
"id": "C8.close-protected.userinfo",
|
|
2577
|
+
"family": "C",
|
|
2578
|
+
"kind": "cdp",
|
|
2579
|
+
"scope": "any",
|
|
2580
|
+
"defaultContext": true,
|
|
2581
|
+
"requires": ["closeProtected"],
|
|
2582
|
+
"setup": [
|
|
2583
|
+
{
|
|
2584
|
+
"page": "tab",
|
|
2585
|
+
"url": "{ordinary}/blank"
|
|
2586
|
+
}
|
|
2587
|
+
],
|
|
2588
|
+
"trigger": [
|
|
2589
|
+
{
|
|
2590
|
+
"closeProtectedShape": "userinfo",
|
|
2591
|
+
"as": "shape",
|
|
2592
|
+
"requires": ["closeProtected"]
|
|
2593
|
+
}
|
|
2594
|
+
],
|
|
2595
|
+
"targets": ["seven"],
|
|
2596
|
+
"observe": {
|
|
2597
|
+
"shaped": {
|
|
2598
|
+
"means": "closeProtected userinfo seven UI: top-level tab URL still contains userinfo (@) and /os/ as seen by the unguarded reader",
|
|
2599
|
+
"check": {
|
|
2600
|
+
"result": "shape",
|
|
2601
|
+
"path": "result.shaped",
|
|
2602
|
+
"equals": true,
|
|
2603
|
+
"observer": "client"
|
|
2604
|
+
}
|
|
2605
|
+
},
|
|
2606
|
+
"attachRefused": {
|
|
2607
|
+
"means": "closeProtected userinfo seven UI: Target.attachToTarget through the client is refused",
|
|
2608
|
+
"check": {
|
|
2609
|
+
"result": "shape",
|
|
2610
|
+
"path": "result.attachRefused",
|
|
2611
|
+
"equals": true,
|
|
2612
|
+
"observer": "client"
|
|
2613
|
+
}
|
|
2614
|
+
},
|
|
2615
|
+
"closeRefused": {
|
|
2616
|
+
"means": "closeProtected userinfo seven UI: Target.closeTarget through the client is refused",
|
|
2617
|
+
"check": {
|
|
2618
|
+
"result": "shape",
|
|
2619
|
+
"path": "result.closeRefused",
|
|
2620
|
+
"equals": true,
|
|
2621
|
+
"observer": "client"
|
|
2622
|
+
}
|
|
2623
|
+
},
|
|
2624
|
+
"closed": {
|
|
2625
|
+
"means": "closeProtected userinfo seven UI: Target.closeTarget on the locked tab is answered with success and the tab is gone",
|
|
2626
|
+
"check": {
|
|
2627
|
+
"result": "shape",
|
|
2628
|
+
"path": "result.closed",
|
|
2629
|
+
"equals": true,
|
|
2630
|
+
"observer": "client"
|
|
2631
|
+
}
|
|
2632
|
+
}
|
|
2633
|
+
},
|
|
2634
|
+
"live": "the unguarded observer opened the shaped tab",
|
|
2635
|
+
"liveCheck": {
|
|
2636
|
+
"result": "shape",
|
|
2637
|
+
"path": "result.live",
|
|
2638
|
+
"equals": true,
|
|
2639
|
+
"observer": "client"
|
|
2640
|
+
},
|
|
2641
|
+
"control": {
|
|
2642
|
+
"origin": "ordinary",
|
|
2643
|
+
"via": "unguarded",
|
|
2644
|
+
"expected": {
|
|
2645
|
+
"shaped": true,
|
|
2646
|
+
"attachRefused": false,
|
|
2647
|
+
"closeRefused": false,
|
|
2648
|
+
"closed": true
|
|
2649
|
+
}
|
|
2650
|
+
},
|
|
2651
|
+
"expected": {
|
|
2652
|
+
"shaped": true,
|
|
2653
|
+
"attachRefused": true,
|
|
2654
|
+
"closeRefused": true,
|
|
2655
|
+
"closed": false
|
|
2656
|
+
}
|
|
2657
|
+
},
|
|
2658
|
+
{
|
|
2659
|
+
"id": "C8.close-protected.navigating",
|
|
2660
|
+
"family": "C",
|
|
2661
|
+
"kind": "cdp",
|
|
2662
|
+
"scope": "any",
|
|
2663
|
+
"defaultContext": true,
|
|
2664
|
+
"requires": ["closeProtected"],
|
|
2665
|
+
"setup": [
|
|
2666
|
+
{
|
|
2667
|
+
"page": "tab",
|
|
2668
|
+
"url": "{ordinary}/blank"
|
|
2669
|
+
}
|
|
2670
|
+
],
|
|
2671
|
+
"trigger": [
|
|
2672
|
+
{
|
|
2673
|
+
"closeProtectedShape": "navigating",
|
|
2674
|
+
"as": "shape",
|
|
2675
|
+
"requires": ["closeProtected"]
|
|
2676
|
+
}
|
|
2677
|
+
],
|
|
2678
|
+
"targets": ["vault"],
|
|
2679
|
+
"observe": {
|
|
2680
|
+
"shaped": {
|
|
2681
|
+
"means": "closeProtected navigating vault: fixture /slow holds the vault Document response while Page.frameStartedNavigating (or target URL) shows the pending navigation; released after the close attempt",
|
|
2682
|
+
"check": {
|
|
2683
|
+
"result": "shape",
|
|
2684
|
+
"path": "result.shaped",
|
|
2685
|
+
"equals": true,
|
|
2686
|
+
"observer": "client"
|
|
2687
|
+
}
|
|
2688
|
+
},
|
|
2689
|
+
"closeRefused": {
|
|
2690
|
+
"means": "closeProtected navigating vault: Target.closeTarget through the client is refused while the vault Document is pending",
|
|
2691
|
+
"check": {
|
|
2692
|
+
"result": "shape",
|
|
2693
|
+
"path": "result.closeRefused",
|
|
2694
|
+
"equals": true,
|
|
2695
|
+
"observer": "client"
|
|
2696
|
+
}
|
|
2697
|
+
},
|
|
2698
|
+
"closed": {
|
|
2699
|
+
"means": "closeProtected navigating vault: Target.closeTarget on the locked tab is answered with success and the tab is gone",
|
|
2700
|
+
"check": {
|
|
2701
|
+
"result": "shape",
|
|
2702
|
+
"path": "result.closed",
|
|
2703
|
+
"equals": true,
|
|
2704
|
+
"observer": "client"
|
|
2705
|
+
}
|
|
2706
|
+
}
|
|
2707
|
+
},
|
|
2708
|
+
"live": "the unguarded observer opened the shaped tab",
|
|
2709
|
+
"liveCheck": {
|
|
2710
|
+
"result": "shape",
|
|
2711
|
+
"path": "result.live",
|
|
2712
|
+
"equals": true,
|
|
2713
|
+
"observer": "client"
|
|
2714
|
+
},
|
|
2715
|
+
"control": {
|
|
2716
|
+
"origin": "ordinary",
|
|
2717
|
+
"via": "unguarded",
|
|
2718
|
+
"expected": {
|
|
2719
|
+
"shaped": true,
|
|
2720
|
+
"closeRefused": false,
|
|
2721
|
+
"closed": true
|
|
2722
|
+
}
|
|
2723
|
+
},
|
|
2724
|
+
"expected": {
|
|
2725
|
+
"shaped": true,
|
|
2726
|
+
"closeRefused": true,
|
|
2727
|
+
"closed": false
|
|
2728
|
+
}
|
|
2729
|
+
},
|
|
2730
|
+
{
|
|
2731
|
+
"id": "C8.close-protected.blank-inherited",
|
|
2732
|
+
"family": "C",
|
|
2733
|
+
"kind": "cdp",
|
|
2734
|
+
"scope": "any",
|
|
2735
|
+
"defaultContext": true,
|
|
2736
|
+
"requires": ["closeProtected"],
|
|
2737
|
+
"setup": [
|
|
2738
|
+
{
|
|
2739
|
+
"page": "tab",
|
|
2740
|
+
"url": "{ordinary}/blank"
|
|
2741
|
+
}
|
|
2742
|
+
],
|
|
2743
|
+
"trigger": [
|
|
2744
|
+
{
|
|
2745
|
+
"closeProtectedShape": "blank-inherited",
|
|
2746
|
+
"as": "shape",
|
|
2747
|
+
"requires": ["closeProtected"]
|
|
2748
|
+
}
|
|
2749
|
+
],
|
|
2750
|
+
"targets": ["vault"],
|
|
2751
|
+
"observe": {
|
|
2752
|
+
"shaped": {
|
|
2753
|
+
"means": "closeProtected blank-inherited vault: an about:blank popup whose opener is a vault tab",
|
|
2754
|
+
"check": {
|
|
2755
|
+
"result": "shape",
|
|
2756
|
+
"path": "result.shaped",
|
|
2757
|
+
"equals": true,
|
|
2758
|
+
"observer": "client"
|
|
2759
|
+
}
|
|
2760
|
+
},
|
|
2761
|
+
"attachRefused": {
|
|
2762
|
+
"means": "closeProtected blank-inherited vault: Target.attachToTarget through the client is refused",
|
|
2763
|
+
"check": {
|
|
2764
|
+
"result": "shape",
|
|
2765
|
+
"path": "result.attachRefused",
|
|
2766
|
+
"equals": true,
|
|
2767
|
+
"observer": "client"
|
|
2768
|
+
}
|
|
2769
|
+
},
|
|
2770
|
+
"closeRefused": {
|
|
2771
|
+
"means": "closeProtected blank-inherited vault: Target.closeTarget through the client is refused",
|
|
2772
|
+
"check": {
|
|
2773
|
+
"result": "shape",
|
|
2774
|
+
"path": "result.closeRefused",
|
|
2775
|
+
"equals": true,
|
|
2776
|
+
"observer": "client"
|
|
2777
|
+
}
|
|
2778
|
+
},
|
|
2779
|
+
"closed": {
|
|
2780
|
+
"means": "closeProtected blank-inherited vault: Target.closeTarget on the locked tab is answered with success and the tab is gone",
|
|
2781
|
+
"check": {
|
|
2782
|
+
"result": "shape",
|
|
2783
|
+
"path": "result.closed",
|
|
2784
|
+
"equals": true,
|
|
2785
|
+
"observer": "client"
|
|
2786
|
+
}
|
|
2787
|
+
}
|
|
2788
|
+
},
|
|
2789
|
+
"live": "the unguarded observer opened the shaped tab",
|
|
2790
|
+
"liveCheck": {
|
|
2791
|
+
"result": "shape",
|
|
2792
|
+
"path": "result.live",
|
|
2793
|
+
"equals": true,
|
|
2794
|
+
"observer": "client"
|
|
2795
|
+
},
|
|
2796
|
+
"control": {
|
|
2797
|
+
"origin": "ordinary",
|
|
2798
|
+
"via": "unguarded",
|
|
2799
|
+
"expected": {
|
|
2800
|
+
"shaped": true,
|
|
2801
|
+
"attachRefused": false,
|
|
2802
|
+
"closeRefused": false,
|
|
2803
|
+
"closed": true
|
|
2804
|
+
}
|
|
2805
|
+
},
|
|
2806
|
+
"expected": {
|
|
2807
|
+
"shaped": true,
|
|
2808
|
+
"attachRefused": true,
|
|
2809
|
+
"closeRefused": true,
|
|
2810
|
+
"closed": false
|
|
2811
|
+
}
|
|
2812
|
+
},
|
|
2409
2813
|
{
|
|
2410
2814
|
"id": "C8.unparseable",
|
|
2411
2815
|
"family": "C",
|
|
@@ -31158,6 +31562,207 @@
|
|
|
31158
31562
|
"workerReachable": false
|
|
31159
31563
|
},
|
|
31160
31564
|
"designDependent": ["attachRefused", "workerAttached"]
|
|
31565
|
+
},
|
|
31566
|
+
|
|
31567
|
+
{
|
|
31568
|
+
"id": "C3.protected-parent-iframes",
|
|
31569
|
+
"family": "C",
|
|
31570
|
+
"kind": "cdp",
|
|
31571
|
+
"scope": "any",
|
|
31572
|
+
"setup": [
|
|
31573
|
+
{
|
|
31574
|
+
"text": "a protected page frames a cross-site ordinary iframe that frames a further ordinary iframe; the guarded client must not list, discover, or attach to either ordinary iframe target"
|
|
31575
|
+
},
|
|
31576
|
+
{
|
|
31577
|
+
"page": "tab",
|
|
31578
|
+
"url": "{ordinary}/blank"
|
|
31579
|
+
}
|
|
31580
|
+
],
|
|
31581
|
+
"trigger": [
|
|
31582
|
+
{
|
|
31583
|
+
"protectedParentIframes": "nested-cross",
|
|
31584
|
+
"as": "probe",
|
|
31585
|
+
"requires": ["browserSession"]
|
|
31586
|
+
}
|
|
31587
|
+
],
|
|
31588
|
+
"targets": ["seven", "vault"],
|
|
31589
|
+
"requires": ["browserSession"],
|
|
31590
|
+
"observe": {
|
|
31591
|
+
"iframeListed": {
|
|
31592
|
+
"means": "C3.protected-parent-iframes: Target.getTargets through the client shows an ordinary iframe under the protected parent by id, URL, or parentId chain",
|
|
31593
|
+
"check": {
|
|
31594
|
+
"result": "probe",
|
|
31595
|
+
"path": "result.iframeListed",
|
|
31596
|
+
"equals": true,
|
|
31597
|
+
"observer": "client"
|
|
31598
|
+
},
|
|
31599
|
+
"absencePoll": true
|
|
31600
|
+
},
|
|
31601
|
+
"infoRead": {
|
|
31602
|
+
"means": "C3.protected-parent-iframes: Target.getTargetInfo through the client returns either ordinary iframe under the protected parent",
|
|
31603
|
+
"check": {
|
|
31604
|
+
"result": "probe",
|
|
31605
|
+
"path": "result.infoRead",
|
|
31606
|
+
"equals": true,
|
|
31607
|
+
"observer": "client"
|
|
31608
|
+
},
|
|
31609
|
+
"absencePoll": true
|
|
31610
|
+
},
|
|
31611
|
+
"eventsSeen": {
|
|
31612
|
+
"means": "C3.protected-parent-iframes: a discovery event carries either ordinary iframe under the protected parent",
|
|
31613
|
+
"requires": ["discovery"],
|
|
31614
|
+
"check": {
|
|
31615
|
+
"result": "probe",
|
|
31616
|
+
"path": "result.eventsSeen",
|
|
31617
|
+
"equals": true,
|
|
31618
|
+
"observer": "client"
|
|
31619
|
+
},
|
|
31620
|
+
"absencePoll": true
|
|
31621
|
+
},
|
|
31622
|
+
"attachSession": {
|
|
31623
|
+
"means": "C3.protected-parent-iframes: Target.attachToTarget on a raw ordinary iframe id returned a session",
|
|
31624
|
+
"check": {
|
|
31625
|
+
"result": "probe",
|
|
31626
|
+
"path": "result.attachSession",
|
|
31627
|
+
"equals": true,
|
|
31628
|
+
"observer": "client"
|
|
31629
|
+
}
|
|
31630
|
+
},
|
|
31631
|
+
"attachRefused": {
|
|
31632
|
+
"means": "C3.protected-parent-iframes: Target.attachToTarget on a raw ordinary iframe id was refused",
|
|
31633
|
+
"check": {
|
|
31634
|
+
"result": "probe",
|
|
31635
|
+
"path": "result.attachRefused",
|
|
31636
|
+
"equals": true,
|
|
31637
|
+
"observer": "client"
|
|
31638
|
+
}
|
|
31639
|
+
}
|
|
31640
|
+
},
|
|
31641
|
+
"live": "the unguarded reader opened the protected host page",
|
|
31642
|
+
"liveCheck": {
|
|
31643
|
+
"result": "probe",
|
|
31644
|
+
"path": "result.live",
|
|
31645
|
+
"equals": true,
|
|
31646
|
+
"observer": "client"
|
|
31647
|
+
},
|
|
31648
|
+
"control": {
|
|
31649
|
+
"origin": "ordinary",
|
|
31650
|
+
"via": "unguarded",
|
|
31651
|
+
"expected": {
|
|
31652
|
+
"iframeListed": true,
|
|
31653
|
+
"infoRead": true,
|
|
31654
|
+
"eventsSeen": true,
|
|
31655
|
+
"attachSession": true,
|
|
31656
|
+
"attachRefused": false
|
|
31657
|
+
}
|
|
31658
|
+
},
|
|
31659
|
+
"expected": {
|
|
31660
|
+
"iframeListed": false,
|
|
31661
|
+
"infoRead": false,
|
|
31662
|
+
"eventsSeen": false,
|
|
31663
|
+
"attachSession": false,
|
|
31664
|
+
"attachRefused": true
|
|
31665
|
+
}
|
|
31666
|
+
},
|
|
31667
|
+
{
|
|
31668
|
+
"id": "C3.protected-parent-srcdoc",
|
|
31669
|
+
"family": "C",
|
|
31670
|
+
"kind": "cdp",
|
|
31671
|
+
"scope": "any",
|
|
31672
|
+
"setup": [
|
|
31673
|
+
{
|
|
31674
|
+
"text": "a seven page frames a sandboxed srcdoc iframe without allow-same-origin; when Chrome gives it its own target the guarded client must hide it, otherwise the row is incomplete with that evidence"
|
|
31675
|
+
},
|
|
31676
|
+
{
|
|
31677
|
+
"page": "tab",
|
|
31678
|
+
"url": "{ordinary}/blank"
|
|
31679
|
+
}
|
|
31680
|
+
],
|
|
31681
|
+
"trigger": [
|
|
31682
|
+
{
|
|
31683
|
+
"protectedParentIframes": "sandboxed-srcdoc",
|
|
31684
|
+
"as": "probe",
|
|
31685
|
+
"requires": ["browserSession"]
|
|
31686
|
+
}
|
|
31687
|
+
],
|
|
31688
|
+
"targets": ["seven"],
|
|
31689
|
+
"requires": ["browserSession"],
|
|
31690
|
+
"observe": {
|
|
31691
|
+
"iframeListed": {
|
|
31692
|
+
"means": "C3.protected-parent-srcdoc: Target.getTargets through the client shows the sandboxed srcdoc iframe under seven by id, URL, or parentId chain",
|
|
31693
|
+
"check": {
|
|
31694
|
+
"result": "probe",
|
|
31695
|
+
"path": "result.iframeListed",
|
|
31696
|
+
"equals": true,
|
|
31697
|
+
"observer": "client"
|
|
31698
|
+
},
|
|
31699
|
+
"absencePoll": true
|
|
31700
|
+
},
|
|
31701
|
+
"infoRead": {
|
|
31702
|
+
"means": "C3.protected-parent-srcdoc: Target.getTargetInfo through the client returns the sandboxed srcdoc iframe under seven",
|
|
31703
|
+
"check": {
|
|
31704
|
+
"result": "probe",
|
|
31705
|
+
"path": "result.infoRead",
|
|
31706
|
+
"equals": true,
|
|
31707
|
+
"observer": "client"
|
|
31708
|
+
},
|
|
31709
|
+
"absencePoll": true
|
|
31710
|
+
},
|
|
31711
|
+
"eventsSeen": {
|
|
31712
|
+
"means": "C3.protected-parent-srcdoc: a discovery event carries the sandboxed srcdoc iframe under seven",
|
|
31713
|
+
"requires": ["discovery"],
|
|
31714
|
+
"check": {
|
|
31715
|
+
"result": "probe",
|
|
31716
|
+
"path": "result.eventsSeen",
|
|
31717
|
+
"equals": true,
|
|
31718
|
+
"observer": "client"
|
|
31719
|
+
},
|
|
31720
|
+
"absencePoll": true
|
|
31721
|
+
},
|
|
31722
|
+
"attachSession": {
|
|
31723
|
+
"means": "C3.protected-parent-srcdoc: Target.attachToTarget on the raw srcdoc iframe id returned a session",
|
|
31724
|
+
"check": {
|
|
31725
|
+
"result": "probe",
|
|
31726
|
+
"path": "result.attachSession",
|
|
31727
|
+
"equals": true,
|
|
31728
|
+
"observer": "client"
|
|
31729
|
+
}
|
|
31730
|
+
},
|
|
31731
|
+
"attachRefused": {
|
|
31732
|
+
"means": "C3.protected-parent-srcdoc: Target.attachToTarget on the raw srcdoc iframe id was refused",
|
|
31733
|
+
"check": {
|
|
31734
|
+
"result": "probe",
|
|
31735
|
+
"path": "result.attachRefused",
|
|
31736
|
+
"equals": true,
|
|
31737
|
+
"observer": "client"
|
|
31738
|
+
}
|
|
31739
|
+
}
|
|
31740
|
+
},
|
|
31741
|
+
"live": "the unguarded reader opened the protected host page",
|
|
31742
|
+
"liveCheck": {
|
|
31743
|
+
"result": "probe",
|
|
31744
|
+
"path": "result.live",
|
|
31745
|
+
"equals": true,
|
|
31746
|
+
"observer": "client"
|
|
31747
|
+
},
|
|
31748
|
+
"control": {
|
|
31749
|
+
"origin": "ordinary",
|
|
31750
|
+
"via": "unguarded",
|
|
31751
|
+
"expected": {
|
|
31752
|
+
"iframeListed": true,
|
|
31753
|
+
"infoRead": true,
|
|
31754
|
+
"eventsSeen": true,
|
|
31755
|
+
"attachSession": true,
|
|
31756
|
+
"attachRefused": false
|
|
31757
|
+
}
|
|
31758
|
+
},
|
|
31759
|
+
"expected": {
|
|
31760
|
+
"iframeListed": false,
|
|
31761
|
+
"infoRead": false,
|
|
31762
|
+
"eventsSeen": false,
|
|
31763
|
+
"attachSession": false,
|
|
31764
|
+
"attachRefused": true
|
|
31765
|
+
}
|
|
31161
31766
|
}
|
|
31162
31767
|
]
|
|
31163
31768
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/slicc-browsers",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.24.0",
|
|
4
4
|
"description": "SLICC's shared browser catalog, JSON schemas and discovery conformance corpus",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"observer-target.mjs",
|
|
66
66
|
"frame-read.mjs",
|
|
67
67
|
"bfcache-restore.mjs",
|
|
68
|
+
"close-protected-shape.mjs",
|
|
68
69
|
"protected-worker.mjs",
|
|
70
|
+
"protected-parent-iframes.mjs",
|
|
69
71
|
"fixture-client.mjs"
|
|
70
72
|
],
|
|
71
73
|
"scripts": {
|
|
@@ -74,7 +76,7 @@
|
|
|
74
76
|
"validate": "node scripts/validate.mjs",
|
|
75
77
|
"lint": "slicc-lint && test -z \"$(gofmt -l .)\" && go mod tidy -diff && go vet ./... && GOOS=darwin go vet ./... && GOOS=windows go vet ./... && golangci-lint run && cargo fmt --check && cargo clippy --all-features --all-targets -- -D warnings && cargo check --target wasm32-wasip1 --no-default-features && cargo check --target wasm32-wasip1 --features serde && cargo check --target wasm32-wasip1 --all-features",
|
|
76
78
|
"format": "biome check --write . && gofmt -w . && cargo fmt",
|
|
77
|
-
"test": "export PATH=\"$HOME/.cargo/bin:$PATH\" && node --test --test-concurrency=1 test/integration/debugger-stage1-packaging.test.mjs test/integration/debugger-raw-control.test.mjs test/integration/debugger-cleanup.test.mjs test/integration/debugger-stage1-install-vectors.test.mjs test/integration/protected-premise.test.mjs test/integration/debugger-stage1-vectors.test.mjs test/integration/self-contained.test.mjs test/integration/seven-corpus.test.mjs test/integration/browser-runner.test.mjs test/integration/fixture-client.test.mjs test/integration/guard-redirect-carrier.test.mjs test/integration/guard-redirect-session-end.test.mjs test/integration/guard-redirect-history.test.mjs test/integration/guard-redirect-iframe.test.mjs test/integration/guard-incomplete.test.mjs test/integration/guard-unparseable-wipe.test.mjs test/integration/guard-browser-ui.test.mjs test/integration/guard-snapshot-settle.test.mjs test/integration/guard-stall.test.mjs test/integration/guard-forged.test.mjs test/integration/guard-trusted-emulation.test.mjs test/integration/guard-exit-steps.test.mjs test/integration/guard-exit-refusal.test.mjs test/integration/guard-frame-read.test.mjs test/integration/guard-bfcache.test.mjs test/integration/guard-bfcache-marker.test.mjs test/integration/guard-bfcache-history.test.mjs test/integration/guard-bfcache-review.test.mjs test/integration/guard-bfcache-quarantine.test.mjs test/integration/guard-error-page-navigation.test.mjs test/integration/guard-error-page-events.test.mjs test/integration/guard-error-page-reload.test.mjs test/integration/guard-close-protected.test.mjs test/integration/guard-world-paint.test.mjs test/integration/gates.test.mjs test/integration/validate.test.mjs test/integration/validate-guard-stock-setup.test.mjs test/integration/go.test.mjs test/integration/cargo.test.mjs test/integration/workflows.test.mjs test/integration/guard-refusable-nav.test.mjs test/integration/guard-protected-worker.test.mjs test/integration/guard-protected-worker-chrome-narrow.test.mjs test/integration/guard-protected-worker-chrome-hide.test.mjs test/integration/guard-protected-worker-chrome-hide-cut.test.mjs test/integration/guard-protected-worker-chrome-admit.test.mjs test/integration/guard-protected-worker-chrome-late.test.mjs test/integration/guard-protected-worker-chrome-rewrite.test.mjs test/integration/guard-protected-worker-chrome-rewrite-late.test.mjs test/integration/guard-sweep-union.test.mjs && node --test --test-concurrency=2 test/integration/guard-lifecycle.test.mjs test/integration/chromium-launch.test.mjs test/integration/guard-fit.test.mjs test/integration/guard-chain.test.mjs test/integration/guard-validation.test.mjs test/integration/guard-liveness.test.mjs test/integration/guard-observations.test.mjs test/integration/guard-child-latency.test.mjs test/integration/guard-adoption.test.mjs test/integration/guard-scoping.test.mjs test/integration/guard-late-pause.test.mjs test/integration/guard-legs.test.mjs test/integration/guard-fetch-enable.test.mjs test/integration/guard-diagnostics.test.mjs test/integration/guard-chrome.test.mjs test/integration/guard-worlds.test.mjs test/integration/guard-world-discovery.test.mjs test/integration/guard-world-guesses.test.mjs test/integration/guard-unparseable.test.mjs test/integration/guard-redirect-secret.test.mjs test/integration/guard-error-page.test.mjs test/integration/guard-discovery.test.mjs test/integration/guard-bfcache-chrome.test.mjs test/integration/guard-browser-page.test.mjs test/integration/guard-scales.test.mjs test/integration/guard-shared-log.test.mjs test/integration/guard-pre-beacon.test.mjs test/integration/guard-world-pause.test.mjs test/integration/guard-reveal-overlap.test.mjs test/integration/guard-extension-frame-mouse.test.mjs test/integration/guard-extension-frames.test.mjs test/integration/guard-stock-setup.test.mjs test/integration/guard-stock-attack.test.mjs test/integration/guard-parallel.test.mjs test/integration/guard-client-exit.test.mjs test/integration/guard-runner.test.mjs test/integration/guard-sweep-ordinary.test.mjs test/integration/guard-sweep-seven.test.mjs test/integration/guard-sweep-vault.test.mjs test/integration/guard-sweep-vault-x.test.mjs test/integration/guard-sweep-apex.test.mjs test/integration/guard-sweep-others.test.mjs",
|
|
79
|
+
"test": "export PATH=\"$HOME/.cargo/bin:$PATH\" && node --test --test-concurrency=1 test/integration/debugger-stage1-packaging.test.mjs test/integration/debugger-raw-control.test.mjs test/integration/debugger-cleanup.test.mjs test/integration/debugger-stage1-install-vectors.test.mjs test/integration/protected-premise.test.mjs test/integration/debugger-stage1-vectors.test.mjs test/integration/self-contained.test.mjs test/integration/seven-corpus.test.mjs test/integration/browser-runner.test.mjs test/integration/fixture-client.test.mjs test/integration/guard-redirect-carrier.test.mjs test/integration/guard-redirect-session-end.test.mjs test/integration/guard-redirect-history.test.mjs test/integration/guard-redirect-iframe.test.mjs test/integration/guard-incomplete.test.mjs test/integration/guard-unparseable-wipe.test.mjs test/integration/guard-browser-ui.test.mjs test/integration/guard-snapshot-settle.test.mjs test/integration/guard-stall.test.mjs test/integration/guard-forged.test.mjs test/integration/guard-trusted-emulation.test.mjs test/integration/guard-exit-steps.test.mjs test/integration/guard-exit-refusal.test.mjs test/integration/guard-frame-read.test.mjs test/integration/guard-bfcache.test.mjs test/integration/guard-bfcache-marker.test.mjs test/integration/guard-bfcache-history.test.mjs test/integration/guard-bfcache-review.test.mjs test/integration/guard-bfcache-quarantine.test.mjs test/integration/guard-error-page-navigation.test.mjs test/integration/guard-error-page-events.test.mjs test/integration/guard-error-page-reload.test.mjs test/integration/guard-close-protected.test.mjs test/integration/guard-close-protected-shapes.test.mjs test/integration/guard-close-protected-shapes-chrome.test.mjs test/integration/guard-protected-parent-iframes.test.mjs test/integration/guard-protected-parent-iframes-chrome.test.mjs test/integration/guard-world-paint.test.mjs test/integration/gates.test.mjs test/integration/validate.test.mjs test/integration/validate-guard-stock-setup.test.mjs test/integration/go.test.mjs test/integration/cargo.test.mjs test/integration/workflows.test.mjs test/integration/guard-refusable-nav.test.mjs test/integration/guard-protected-worker.test.mjs test/integration/guard-protected-worker-chrome-narrow.test.mjs test/integration/guard-protected-worker-chrome-hide.test.mjs test/integration/guard-protected-worker-chrome-hide-cut.test.mjs test/integration/guard-protected-worker-chrome-admit.test.mjs test/integration/guard-protected-worker-chrome-late.test.mjs test/integration/guard-protected-worker-chrome-rewrite.test.mjs test/integration/guard-protected-worker-chrome-rewrite-late.test.mjs test/integration/guard-sweep-union.test.mjs && node --test --test-concurrency=2 test/integration/guard-lifecycle.test.mjs test/integration/chromium-launch.test.mjs test/integration/guard-fit.test.mjs test/integration/guard-chain.test.mjs test/integration/guard-validation.test.mjs test/integration/guard-liveness.test.mjs test/integration/guard-observations.test.mjs test/integration/guard-child-latency.test.mjs test/integration/guard-adoption.test.mjs test/integration/guard-scoping.test.mjs test/integration/guard-late-pause.test.mjs test/integration/guard-legs.test.mjs test/integration/guard-fetch-enable.test.mjs test/integration/guard-diagnostics.test.mjs test/integration/guard-chrome.test.mjs test/integration/guard-worlds.test.mjs test/integration/guard-world-discovery.test.mjs test/integration/guard-world-guesses.test.mjs test/integration/guard-unparseable.test.mjs test/integration/guard-redirect-secret.test.mjs test/integration/guard-error-page.test.mjs test/integration/guard-discovery.test.mjs test/integration/guard-bfcache-chrome.test.mjs test/integration/guard-browser-page.test.mjs test/integration/guard-scales.test.mjs test/integration/guard-shared-log.test.mjs test/integration/guard-pre-beacon.test.mjs test/integration/guard-world-pause.test.mjs test/integration/guard-reveal-overlap.test.mjs test/integration/guard-extension-frame-mouse.test.mjs test/integration/guard-extension-frames.test.mjs test/integration/guard-stock-setup.test.mjs test/integration/guard-stock-attack.test.mjs test/integration/guard-parallel.test.mjs test/integration/guard-client-exit.test.mjs test/integration/guard-runner.test.mjs test/integration/guard-sweep-ordinary.test.mjs test/integration/guard-sweep-seven.test.mjs test/integration/guard-sweep-vault.test.mjs test/integration/guard-sweep-vault-x.test.mjs test/integration/guard-sweep-apex.test.mjs test/integration/guard-sweep-others.test.mjs",
|
|
78
80
|
"test:unit": "mkdir -p coverage/unit && node --experimental-test-coverage --test --test-concurrency=1 --test-reporter=lcov --test-reporter-destination=coverage/unit/lcov.info test/unit/*.test.mjs && go test -race -cover ./...",
|
|
79
81
|
"build": "go build ./... && cargo build --all-features && cargo build --target wasm32-wasip1 --all-features && npm pack --dry-run",
|
|
80
82
|
"prepublishOnly": "node scripts/set-crate-version.mjs \"$npm_package_version\"",
|
|
@@ -82,10 +84,10 @@
|
|
|
82
84
|
"trust:dry": "npx fledgling sync --dry-run -y --skip-publish",
|
|
83
85
|
"release": "semantic-release",
|
|
84
86
|
"test:unit:redirect": "mkdir -p coverage/unit && node --experimental-test-coverage --test --test-concurrency=1 --test-coverage-include=redirect-secret.mjs --test-coverage-include=redirect-fragments.mjs --test-reporter=lcov --test-reporter-destination=coverage/unit/redirect.lcov test/unit/guard-redirect-*.test.mjs && slicc-diff-cover coverage/unit/redirect.lcov",
|
|
85
|
-
"test:unit:guard": "mkdir -p coverage/unit && node --experimental-vm-modules --no-warnings --experimental-test-coverage --test --test-concurrency=1 --test-coverage-include=guard-runner.mjs --test-coverage-include=guard-driver.mjs --test-coverage-include=extension-frame.mjs --test-coverage-include=fixture-server.mjs --test-coverage-include=fixture-client.mjs --test-coverage-include=observer-target.mjs --test-coverage-include=frame-read.mjs --test-coverage-include=bfcache-restore.mjs --test-coverage-include=protected-error-page.mjs --test-coverage-include=unparseable-url.mjs --test-coverage-include=scripts/browser-runner.mjs --test-coverage-include=scripts/validate.mjs --test-reporter=lcov --test-reporter-destination=coverage/unit/guard.lcov test/unit/guard-*.test.mjs && slicc-diff-cover coverage/unit/guard.lcov"
|
|
87
|
+
"test:unit:guard": "mkdir -p coverage/unit && node --experimental-vm-modules --no-warnings --experimental-test-coverage --test --test-concurrency=1 --test-coverage-include=guard-runner.mjs --test-coverage-include=guard-driver.mjs --test-coverage-include=extension-frame.mjs --test-coverage-include=fixture-server.mjs --test-coverage-include=fixture-client.mjs --test-coverage-include=observer-target.mjs --test-coverage-include=frame-read.mjs --test-coverage-include=bfcache-restore.mjs --test-coverage-include=protected-error-page.mjs --test-coverage-include=protected-parent-iframes.mjs --test-coverage-include=unparseable-url.mjs --test-coverage-include=scripts/browser-runner.mjs --test-coverage-include=scripts/validate.mjs --test-reporter=lcov --test-reporter-destination=coverage/unit/guard.lcov test/unit/guard-*.test.mjs && slicc-diff-cover coverage/unit/guard.lcov"
|
|
86
88
|
},
|
|
87
89
|
"devDependencies": {
|
|
88
|
-
"@ai-ecoverse/slicc-cdp": "1.48.
|
|
90
|
+
"@ai-ecoverse/slicc-cdp": "1.48.10",
|
|
89
91
|
"@ai-ecoverse/slicc-shared-web": "2.14.2",
|
|
90
92
|
"@biomejs/biome": "2.6.5",
|
|
91
93
|
"ajv": "8.20.0",
|