tor-browser

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

indexeddb.https.html (2459B)


      1 <!DOCTYPE html>
      2 <title>Service Worker: Indexed DB</title>
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script src="resources/test-helpers.sub.js"></script>
      6 <script>
      7 function readDB() {
      8  return new Promise(function(resolve, reject) {
      9      var openRequest = indexedDB.open('db');
     10 
     11      openRequest.onerror = reject;
     12      openRequest.onsuccess = function() {
     13          var db = openRequest.result;
     14          var tx = db.transaction('store');
     15          var store = tx.objectStore('store');
     16          var getRequest = store.get('key');
     17 
     18          getRequest.onerror = function() {
     19              db.close();
     20              reject(getRequest.error);
     21            };
     22          getRequest.onsuccess = function() {
     23              db.close();
     24              resolve(getRequest.result);
     25            };
     26        };
     27    });
     28 }
     29 
     30 function send(worker, action) {
     31  return new Promise(function(resolve, reject) {
     32      var messageChannel = new MessageChannel();
     33      messageChannel.port1.onmessage = function(event) {
     34          if (event.data.type === 'error') {
     35            reject(event.data.reason);
     36          }
     37 
     38          resolve();
     39        };
     40 
     41      worker.postMessage(
     42        {action: action, port: messageChannel.port2},
     43        [messageChannel.port2]);
     44    });
     45 }
     46 
     47 promise_test(function(t) {
     48    var scope = 'resources/blank.html';
     49 
     50    return service_worker_unregister_and_register(
     51        t, 'resources/indexeddb-worker.js', scope)
     52      .then(function(registration) {
     53          var worker = registration.installing;
     54 
     55          promise_test(function() {
     56              return registration.unregister();
     57            }, 'clean up: registration');
     58 
     59          return send(worker, 'create')
     60            .then(function() {
     61                promise_test(function() {
     62                  return new Promise(function(resolve, reject) {
     63                        var delete_request = indexedDB.deleteDatabase('db');
     64 
     65                        delete_request.onsuccess = resolve;
     66                        delete_request.onerror = reject;
     67                      });
     68                    }, 'clean up: database');
     69              })
     70            .then(readDB)
     71            .then(function(value) {
     72                assert_equals(
     73                  value, 'value',
     74                  'The get() result should match what the worker put().');
     75              });
     76        });
     77  }, 'Verify Indexed DB operation in a Service Worker');
     78 </script>