tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>