tor-browser

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

event_no_duplicates.html (3678B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <title>WebStorage Test: StorageEvent - only if something changes</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <body>
      7 <script>
      8 const iframe = document.createElement('iframe');
      9 
     10 function tests(storageName) {
     11  test(t => assert_true(storageName in window), storageName + ' exists');
     12 
     13  const storage = window[storageName];
     14  const iframeStorage = iframe.contentWindow[storageName];
     15 
     16  add_completion_callback(() => {
     17    storage.clear();
     18  });
     19 
     20  promise_test(t => {
     21    const w = new EventWatcher(t, iframe.contentWindow, 'storage');
     22 
     23    // Random key to make sure we don't conflict with any cruft leftover from
     24    // earlier runs. Any synchronization would be really hard with localStorage
     25    // limited guarantees.
     26    const testKey = Math.random().toString(36).slice(2);
     27 
     28    storage.setItem(testKey, 'foo');
     29    storage.setItem(testKey, 'foo');
     30    storage.setItem(testKey, 'bar');
     31    return w.wait_for('storage')
     32      .then(e => {
     33          assert_equals(e.storageArea, iframeStorage);
     34          assert_equals(e.key, testKey);
     35          assert_equals(e.newValue, 'foo');
     36          return w.wait_for('storage');
     37        })
     38      .then(e => {
     39          assert_equals(e.storageArea, iframeStorage);
     40          assert_equals(e.key, testKey);
     41          assert_equals(e.oldValue, 'foo');
     42          assert_equals(e.newValue, 'bar');
     43        });
     44  }, 'Setting to same value does not trigger event for ' + storageName);
     45 
     46  promise_test(t => {
     47    const w = new EventWatcher(t, iframe.contentWindow, 'storage');
     48 
     49    // Random key to make sure we don't conflict with any cruft leftover from
     50    // earlier runs. Any synchronization would be really hard with localStorage
     51    // limited guarantees.
     52    const testKey1 = Math.random().toString(36).slice(2);
     53    const testKey2 = Math.random().toString(36).slice(2);
     54 
     55    storage.removeItem(testKey1);
     56    storage.setItem(testKey2, 'foo');
     57    return w.wait_for('storage')
     58      .then(e => {
     59          assert_equals(e.storageArea, iframeStorage);
     60          assert_equals(e.key, testKey2);
     61          assert_equals(e.newValue, 'foo');
     62        });
     63  }, 'Deleting non-existent key does not trigger event for ' + storageName);
     64 
     65 
     66  promise_test(t => {
     67    const w = new EventWatcher(t, iframe.contentWindow, 'storage');
     68 
     69    // Random key to make sure we don't conflict with any cruft leftover from
     70    // earlier runs. Any synchronization would be really hard with localStorage
     71    // limited guarantees.
     72    const testKey = Math.random().toString(36).slice(2);
     73 
     74    storage.setItem(testKey, 'foo');
     75    storage.clear();
     76    storage.clear();
     77    storage.setItem(testKey, 'bar');
     78    return w.wait_for('storage')
     79      .then(e => {
     80          assert_equals(e.storageArea, iframeStorage);
     81          assert_equals(e.key, testKey);
     82          assert_equals(e.newValue, 'foo');
     83          return w.wait_for('storage');
     84        })
     85      .then(e => {
     86          assert_equals(e.storageArea, iframeStorage);
     87          assert_equals(e.key, null);
     88          assert_equals(e.oldValue, null);
     89          assert_equals(e.newValue, null);
     90          return w.wait_for('storage');
     91        })
     92      .then(e => {
     93          assert_equals(e.storageArea, iframeStorage);
     94          assert_equals(e.key, testKey);
     95          assert_equals(e.oldValue, null);
     96          assert_equals(e.newValue, 'bar');
     97        });
     98  }, 'Clearing empty storage does not trigger event for ' + storageName);
     99 
    100 }
    101 
    102 iframe.src = "resources/event_basic.html";
    103 iframe.onload = () => {
    104  tests('sessionStorage');
    105  tests('localStorage');
    106 };
    107 document.body.appendChild(iframe);
    108 </script>
    109 </body>
    110 </html>