local-storage.https.html (1785B)
1 <!DOCTYPE html> 2 <title>Same-origin prerendering can access localStorage</title> 3 <meta name="variant" content="?target_hint=_self"> 4 <meta name="variant" content="?target_hint=_blank"> 5 <meta name="timeout" content="long"> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="/common/utils.js"></script> 9 <script src="/common/dispatcher/dispatcher.js"></script> 10 <script src="../resources/utils.js"></script> 11 <script src="resources/utils.js"></script> 12 13 <body> 14 <script> 15 setup(() => assertSpeculationRulesIsSupported()); 16 17 promise_test(async t => { 18 const uid1 = token(); 19 const uid2 = token(); 20 21 // A promise to wait until a prerendered page writes data with the "prerender" 22 // key in the local storage. 23 const write_promise = new Promise((resolve, reject) => { 24 window.addEventListener("storage", event => { 25 if (event.key !== 'prerender') { 26 reject("wrong key"); 27 } else { 28 resolve(); 29 } 30 }, { once: true }); 31 }); 32 33 const rule_extras = {'target_hint': getTargetHint()}; 34 35 window.localStorage.setItem('initial', uid1); 36 const {exec} = await create_prerendered_page( 37 t, undefined, undefined, rule_extras); 38 const result = await exec(uid2 => { 39 window.localStorage.setItem('prerender', uid2); 40 return window.localStorage.getItem('initial'); 41 }, [uid2]) 42 43 // Start prerendering a page that attempts to access localStorage API. 44 assert_equals( 45 result, uid1, 46 'prerendering page should be able to read from local storage'); 47 48 await write_promise; 49 assert_equals( 50 window.localStorage.getItem('prerender'), uid2, 51 'prerendering page should be able to write to local storage'); 52 }, 'prerendering page should be able to access local storage'); 53 </script>