tor-browser

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

test_sandbox.js (2006B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 function exerciseInterface() {
      5  function DB(name, store) {
      6    this.name = name;
      7    this.store = store;
      8    this._db = this._create();
      9  }
     10 
     11  DB.prototype = {
     12    _create() {
     13      var op = indexedDB.open(this.name);
     14      op.onupgradeneeded = e => {
     15        var db = e.target.result;
     16        db.createObjectStore(this.store);
     17      };
     18      return new Promise(resolve => {
     19        op.onsuccess = e => resolve(e.target.result);
     20      });
     21    },
     22 
     23    _result(tx, op) {
     24      return new Promise((resolve, reject) => {
     25        op.onsuccess = e => resolve(e.target.result);
     26        op.onerror = () => reject(op.error);
     27        tx.onabort = () => reject(tx.error);
     28      });
     29    },
     30 
     31    get(k) {
     32      return this._db.then(db => {
     33        var tx = db.transaction(this.store, "readonly");
     34        var store = tx.objectStore(this.store);
     35        return this._result(tx, store.get(k));
     36      });
     37    },
     38 
     39    add(k, v) {
     40      return this._db.then(db => {
     41        var tx = db.transaction(this.store, "readwrite");
     42        var store = tx.objectStore(this.store);
     43        return this._result(tx, store.add(v, k));
     44      });
     45    },
     46  };
     47 
     48  var db = new DB("data", "base");
     49  return db
     50    .add("x", [10, {}])
     51    .then(_ => db.get("x"))
     52    .then(x => {
     53      equal(x.length, 2);
     54      equal(x[0], 10);
     55      equal(typeof x[1], "object");
     56      equal(Object.keys(x[1]).length, 0);
     57    });
     58 }
     59 
     60 function run_test() {
     61  do_get_profile();
     62 
     63  let sb = new Cu.Sandbox("https://www.example.com", {
     64    wantGlobalProperties: ["indexedDB"],
     65  });
     66 
     67  sb.equal = equal;
     68  var innerPromise = new Promise((resolve, reject) => {
     69    sb.test_done = resolve;
     70    sb.test_error = reject;
     71  });
     72  Cu.evalInSandbox(
     73    "(" +
     74      exerciseInterface.toSource() +
     75      ")()" +
     76      ".then(test_done, test_error);",
     77    sb
     78  );
     79 
     80  do_test_pending();
     81  Promise.all([innerPromise, exerciseInterface()]).then(do_test_finished);
     82 }