navigate.tentative.https.window.js (5686B)
1 // META: script=/common/subset-tests-by-key.js 2 // META: script=/common/dispatcher/dispatcher.js 3 // META: script=/common/utils.js 4 // META: script=resources/support.sub.js 5 // META: timeout=long 6 // META: variant=?include=from-loopback 7 // META: variant=?include=from-local 8 // META: variant=?include=from-public 9 // META: variant=?include=from-treat-as-public 10 // 11 // These tests verify that secure contexts can make top-level navigations 12 // to less-public address spaces. These are not restricted under LNA. 13 14 setup(() => { 15 assert_true(window.isSecureContext); 16 }); 17 18 // Source: secure loopback context. 19 // 20 // All top-level navigations unaffected by Local Network Access. 21 22 subsetTestByKey( 23 'from-loopback', promise_test, t => navigateTest(t, { 24 source: Server.HTTPS_LOOPBACK, 25 target: Server.HTTPS_LOOPBACK, 26 expected: NavigationTestResult.SUCCESS, 27 }), 28 'loopback to loopback: no permission required.'); 29 30 subsetTestByKey( 31 'from-loopback', promise_test, t => navigateTest(t, { 32 source: Server.HTTPS_LOOPBACK, 33 target: Server.HTTPS_LOCAL, 34 expected: NavigationTestResult.SUCCESS, 35 }), 36 'loopback to local: no permission required.'); 37 38 subsetTestByKey( 39 'from-loopback', promise_test, t => navigateTest(t, { 40 source: Server.HTTPS_LOOPBACK, 41 target: Server.HTTPS_PUBLIC, 42 expected: NavigationTestResult.SUCCESS, 43 }), 44 'loopback to public: no preflight required.'); 45 46 // Source: secure local context. 47 // 48 // All top-level navigations unaffected by Local Network Access. 49 50 subsetTestByKey( 51 'from-local', promise_test, t => navigateTest(t, { 52 source: Server.HTTPS_LOCAL, 53 target: Server.HTTPS_LOOPBACK, 54 expected: NavigationTestResult.SUCCESS, 55 }), 56 'local to loopback: no permission required.'); 57 58 subsetTestByKey( 59 'from-local', promise_test, t => navigateTest(t, { 60 source: Server.HTTPS_LOCAL, 61 target: Server.HTTPS_LOCAL, 62 expected: NavigationTestResult.SUCCESS, 63 }), 64 'local to local: no permission required.'); 65 66 subsetTestByKey( 67 'from-local', promise_test, t => navigateTest(t, { 68 source: Server.HTTPS_LOCAL, 69 target: Server.HTTPS_PUBLIC, 70 expected: NavigationTestResult.SUCCESS, 71 }), 72 'local to public: no permission required.'); 73 74 // Source: secure public context. 75 // 76 // All top-level navigations unaffected by Local Network Access 77 78 subsetTestByKey( 79 'from-public', promise_test, t => navigateTest(t, { 80 source: Server.HTTPS_PUBLIC, 81 target: Server.HTTPS_LOOPBACK, 82 expected: NavigationTestResult.SUCCESS, 83 }), 84 'public to loopback: no permission required.'); 85 86 subsetTestByKey( 87 'from-public', promise_test, t => navigateTest(t, { 88 source: Server.HTTPS_PUBLIC, 89 target: Server.HTTPS_LOCAL, 90 expected: NavigationTestResult.SUCCESS, 91 }), 92 'public to local: no permission required.'); 93 94 subsetTestByKey( 95 'from-public', promise_test, t => navigateTest(t, { 96 source: Server.HTTPS_PUBLIC, 97 target: Server.HTTPS_PUBLIC, 98 expected: NavigationTestResult.SUCCESS, 99 }), 100 'public to public: no permission required.'); 101 102 // The following tests verify that `CSP: treat-as-public-address` makes 103 // documents behave as if they had been served from a public IP address. 104 105 subsetTestByKey( 106 'from-treat-as-public', promise_test, 107 t => navigateTest(t, { 108 source: { 109 server: Server.HTTPS_LOOPBACK, 110 treatAsPublic: true, 111 }, 112 target: Server.OTHER_HTTPS_LOOPBACK, 113 expected: NavigationTestResult.SUCCESS, 114 }), 115 'treat-as-public-address to loopback: no permission required.'); 116 117 subsetTestByKey( 118 'from-treat-as-public', promise_test, 119 t => navigateTest(t, { 120 source: { 121 server: Server.HTTPS_LOOPBACK, 122 treatAsPublic: true, 123 }, 124 target: Server.HTTPS_LOOPBACK, 125 expected: NavigationTestResult.SUCCESS, 126 }), 127 'treat-as-public-address to loopback (same-origin): no permission required.'); 128 129 subsetTestByKey( 130 'from-treat-as-public', promise_test, 131 t => navigateTest(t, { 132 source: { 133 server: Server.HTTPS_LOOPBACK, 134 treatAsPublic: true, 135 }, 136 target: Server.HTTPS_LOCAL, 137 expected: NavigationTestResult.SUCCESS, 138 }), 139 'treat-as-public-address to local: no permission required.'); 140 141 subsetTestByKey( 142 'from-treat-as-public', promise_test, 143 t => navigateTest(t, { 144 source: { 145 server: Server.HTTPS_LOOPBACK, 146 treatAsPublic: true, 147 }, 148 target: Server.HTTPS_PUBLIC, 149 expected: NavigationTestResult.SUCCESS, 150 }), 151 'treat-as-public-address to public: no permission required.');