background-sync.https.html (7580B)
1 <!DOCTYPE html> 2 <title>Test fenced frame does not allow to register background sync</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="resources/utils.js"></script> 6 <script src="/common/get-host-info.sub.js"></script> 7 <script src="/common/utils.js"></script> 8 <body> 9 <script> 10 const background_sync_register_key = token(); 11 const fenced_frame_url = 'resources/background-sync-inner.https.html'; 12 const fenced_frame_url_for_service_worker_test = 13 'resources/background-sync-sw-inner.https.html'; 14 15 const generateFencedFrameUrl = (params, is_worker_test = false) => { 16 const searchParams = new URLSearchParams(params); 17 const frame_url = is_worker_test ? 18 fenced_frame_url_for_service_worker_test : fenced_frame_url; 19 20 return generateURL(`${frame_url}?${searchParams.toString()}`, 21 [background_sync_register_key]); 22 }; 23 24 async function background_sync_test(url, expected_text, message) { 25 attachFencedFrame(url) 26 27 // Get the result for the top-level fenced frame. 28 const fenced_frame_result = 29 await nextValueFromServer(background_sync_register_key); 30 assert_equals(fenced_frame_result, expected_text, message); 31 }; 32 33 const background_sync_message = 34 "Background Sync is not allowed in fenced frames."; 35 const periodic_background_sync_message = 36 "Periodic Background Sync is not allowed in fenced frames."; 37 38 promise_test(async (t) => { 39 const method = 'register'; 40 const frame_url = generateFencedFrameUrl({method}); 41 const expected_message = "Failed to execute 'register' on 'SyncManager': " + 42 background_sync_message; 43 await background_sync_test( 44 frame_url, 45 expected_message, 46 'register() is disallowed inside a same-origin fenced frame'); 47 48 const cross_origin_frame_url = getRemoteOriginURL(frame_url); 49 await background_sync_test( 50 cross_origin_frame_url, 51 expected_message, 52 'register() is disallowed inside a cross-origin fenced frame'); 53 }, 'background sync register'); 54 55 promise_test(async (t) => { 56 const method = 'getTags'; 57 const frame_url = generateFencedFrameUrl({method}); 58 const expected_message = background_sync_message; 59 await background_sync_test( 60 frame_url, 61 expected_message, 62 'getTags() is disallowed inside a same-origin fenced frame'); 63 64 const cross_origin_frame_url = getRemoteOriginURL(frame_url); 65 await background_sync_test( 66 cross_origin_frame_url, 67 expected_message, 68 'getTags() is disallowed inside a cross-origin fenced frame'); 69 }, 'background sync getTags'); 70 71 promise_test(async (t) => { 72 const method = 'register'; 73 const frame_url = generateFencedFrameUrl({method}, true); 74 const expected_message = "Failed to execute 'register' on 'SyncManager': " + 75 background_sync_message; 76 await background_sync_test( 77 frame_url, 78 expected_message, 79 'register() is disallowed inside a same-origin fenced frame'); 80 const cross_origin_frame_url = getRemoteOriginURL(frame_url); 81 await background_sync_test( 82 cross_origin_frame_url, 83 expected_message, 84 'register() is disallowed inside a cross-origin fenced frame'); 85 }, 'background sync register in service worker'); 86 87 promise_test(async (t) => { 88 const method = 'getTags'; 89 const frame_url = generateFencedFrameUrl({method}, true); 90 const expected_message = background_sync_message; 91 await background_sync_test( 92 frame_url, 93 expected_message, 94 'getTags() is disallowed inside a same-origin fenced frame'); 95 const cross_origin_frame_url = getRemoteOriginURL(frame_url); 96 await background_sync_test( 97 cross_origin_frame_url, 98 expected_message, 99 'getTags() is disallowed inside a cross-origin fenced frame'); 100 }, 'background sync getTags in service worker'); 101 102 promise_test(async (t) => { 103 const params = { 104 method: 'register', 105 periodic: true 106 }; 107 const frame_url = generateFencedFrameUrl(params) 108 const expected_message = "Failed to execute 'register' on " + 109 "'PeriodicSyncManager': " + periodic_background_sync_message; 110 await background_sync_test( 111 frame_url, 112 expected_message, 113 'register() is disallowed inside a same-origin fenced frame'); 114 115 const cross_origin_frame_url = getRemoteOriginURL(frame_url); 116 await background_sync_test( 117 cross_origin_frame_url, 118 expected_message, 119 'register() is disallowed inside a cross-origin fenced frame'); 120 }, 'periodic sync register'); 121 122 promise_test(async (t) => { 123 const params = { 124 method: 'getTags', 125 periodic: true 126 }; 127 const frame_url = generateFencedFrameUrl(params) 128 const expected_message = periodic_background_sync_message; 129 await background_sync_test( 130 frame_url, 131 expected_message, 132 'getTags() is disallowed inside a same-origin fenced frame'); 133 134 const cross_origin_frame_url = getRemoteOriginURL(frame_url); 135 await background_sync_test( 136 cross_origin_frame_url, 137 expected_message, 138 'getTags() is disallowed inside a cross-origin fenced frame'); 139 }, 'periodic sync getTags'); 140 141 promise_test(async (t) => { 142 const params = { 143 method: 'unregister', 144 periodic: true 145 }; 146 const frame_url = generateFencedFrameUrl(params) 147 const expected_message = periodic_background_sync_message; 148 await background_sync_test( 149 frame_url, 150 expected_message, 151 'unregister() is disallowed inside a same-origin fenced frame'); 152 153 const cross_origin_frame_url = getRemoteOriginURL(frame_url); 154 await background_sync_test( 155 cross_origin_frame_url, 156 expected_message, 157 'unregister() is disallowed inside a cross-origin fenced frame'); 158 }, 'periodic sync unregister'); 159 160 promise_test(async (t) => { 161 const params = { 162 method: 'register', 163 periodic: true 164 }; 165 const frame_url = generateFencedFrameUrl(params, true) 166 const expected_message = "Failed to execute 'register' on " + 167 "'PeriodicSyncManager': " + periodic_background_sync_message; 168 await background_sync_test( 169 frame_url, 170 expected_message, 171 'register() is disallowed inside a same-origin fenced frame'); 172 173 const cross_origin_frame_url = getRemoteOriginURL(frame_url); 174 await background_sync_test( 175 cross_origin_frame_url, 176 expected_message, 177 'register() is disallowed inside a cross-origin fenced frame'); 178 }, 'periodic sync register in service worker'); 179 180 promise_test(async (t) => { 181 const params = { 182 method: 'getTags', 183 periodic: true 184 }; 185 const frame_url = generateFencedFrameUrl(params, true) 186 const expected_message = periodic_background_sync_message; 187 await background_sync_test( 188 frame_url, 189 expected_message, 190 'getTags() is disallowed inside a same-origin fenced frame'); 191 192 const cross_origin_frame_url = getRemoteOriginURL(frame_url); 193 await background_sync_test( 194 cross_origin_frame_url, 195 expected_message, 196 'getTags() is disallowed inside a cross-origin fenced frame'); 197 }, 'periodic sync getTags in service worker'); 198 199 promise_test(async (t) => { 200 const params = { 201 method: 'unregister', 202 periodic: true 203 }; 204 const frame_url = generateFencedFrameUrl(params, true) 205 const expected_message = periodic_background_sync_message; 206 await background_sync_test( 207 frame_url, 208 expected_message, 209 'unregister() is disallowed inside a same-origin fenced frame'); 210 211 const cross_origin_frame_url = getRemoteOriginURL(frame_url); 212 await background_sync_test( 213 cross_origin_frame_url, 214 expected_message, 215 'unregister() is disallowed inside a cross-origin fenced frame'); 216 }, 'periodic sync unregister in service worker'); 217 </script> 218 </body>