same-site-cookies.html (4236B)
1 <!doctype html> 2 <!-- This Source Code Form is subject to the terms of the Mozilla Public 3 - License, v. 2.0. If a copy of the MPL was not distributed with this 4 - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> 5 <html lang="en-US" dir="ltr"> 6 <head> 7 <meta name="viewport" content="width=device-width" /> 8 <script src="https://cdn.jsdelivr.net/npm/idb-keyval@3/dist/idb-keyval-iife.min.js"></script> 9 </head> 10 <body> 11 <button onclick="setAllStorageLocations();">Rerun Tests</button> 12 <br /> 13 <h4>cookies</h4> 14 <pre id="cookie_message"></pre> 15 16 <h4>localStorage</h4> 17 <pre id="ls_message"></pre> 18 19 <!-- 20 <h4>sessionStorage</h4> 21 <pre id="ss_message"></pre> 22 <h4>Indexed DB</h4> 23 <pre id="idb_message"></pre> 24 --> 25 26 <!-- Storage access API --> 27 <br /> 28 <h4>Storage Access API</h4> 29 <button onclick="requestSA()">requestStorageAccess()</button><br /> 30 <p>Return value of requestStorageAccess():</p> 31 <pre id="request_storage_access">not yet called</pre> 32 <br /> 33 <button onclick="hasSA()">hasStorageAccess()</button><br /> 34 <p>Return value of hasStorageAccess():</p> 35 <pre id="has_storage_access">not yet called</pre> 36 <br /> 37 38 <script> 39 var newRandVal = Math.random(); 40 41 function outputResult(value, output_id) { 42 var msg = document.getElementById(output_id); 43 document.hasStorageAccess().then( 44 hasStorageAccess => { 45 if (hasStorageAccess === false) { 46 msg.innerHTML = "BLOCKED"; 47 } else if ((value === "") & (hasStorageAccess === true)) { 48 msg.innerHTML = 49 "UNEXPECTED. We have storage access but value is empty..."; 50 } else if (hasStorageAccess === true) { 51 msg.innerHTML = "UNRESTRICTED"; 52 } 53 }, 54 reason => { 55 msg.innerHTML = "promise rejected for reason" + reason; 56 } 57 ); 58 } 59 60 function setCookies() { 61 var cookies = document.cookie; 62 if (cookies === "") { 63 document.cookie = "foo=" + newRandVal + "; SameSite=None; Secure"; 64 cookies = document.cookie; 65 } 66 outputResult(cookies, "cookie_message"); 67 } 68 function setLocalStorage() { 69 try { 70 var foo = window.localStorage.getItem("foo"); 71 if (foo === null) { 72 window.localStorage.setItem("foo", newRandVal); 73 foo = window.localStorage.getItem("foo"); 74 } 75 } catch (error) { 76 foo = ""; 77 } 78 outputResult(foo, "ls_message"); 79 } 80 function setSessionStorage() { 81 try { 82 var foo = window.sessionStorage.getItem("foo"); 83 if (foo === null) { 84 window.sessionStorage.setItem("foo", newRandVal); 85 foo = window.sessionStorage.getItem("foo"); 86 } 87 } catch (error) { 88 foo = ""; 89 } 90 outputResult(foo, "ss_message"); 91 } 92 async function setIndexedDB() { 93 try { 94 var foo = await idbKeyval.get("foo"); 95 if (foo === undefined) { 96 await idbKeyval.set("foo", newRandVal); 97 foo = await idbKeyval.get("foo"); 98 } 99 } catch (error) { 100 foo = ""; 101 } 102 outputResult(foo, "idb_message"); 103 } 104 function setAllStorageLocations() { 105 setCookies(); 106 setLocalStorage(); 107 //setSessionStorage(); 108 //setIndexedDB(); 109 } 110 setAllStorageLocations(); 111 112 // Storage Access API 113 function requestSA() { 114 var result = document.getElementById("request_storage_access"); 115 document.requestStorageAccess().then( 116 () => { 117 result.innerHTML = "access granted"; 118 }, 119 () => { 120 result.innerHTML = "access denied"; 121 } 122 ); 123 } 124 125 function hasSA() { 126 var result = document.getElementById("has_storage_access"); 127 document.hasStorageAccess().then( 128 hasAccess => { 129 result.innerHTML = hasAccess; 130 }, 131 reason => { 132 result.innerHTML = "promise rejected for reason" + reason; 133 } 134 ); 135 } 136 hasSA(); 137 </script> 138 </body> 139 </html>