1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/ */
4 function exerciseInterface() {
5 function DB(name, store) {
8 this._db = this._create();
13 var op = indexedDB.open(this.name);
14 op.onupgradeneeded = e => {
15 var db = e.target.result;
16 db.createObjectStore(this.store);
18 return new Promise(resolve => {
19 op.onsuccess = e => resolve(e.target.result);
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);
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));
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));
48 var db = new DB("data", "base");
51 .then(_ => db.get("x"))
55 equal(typeof x[1], "object");
56 equal(Object.keys(x[1]).length, 0);
63 let sb = new Cu.Sandbox("https://www.example.com", {
64 wantGlobalProperties: ["indexedDB"],
68 var innerPromise = new Promise((resolve, reject) => {
69 sb.test_done = resolve;
70 sb.test_error = reject;
74 exerciseInterface.toSource() +
76 ".then(test_done, test_error);",
80 Cu.importGlobalProperties(["indexedDB"]);
82 Promise.all([innerPromise, exerciseInterface()]).then(do_test_finished);