Thu, 15 Jan 2015 15:59:08 +0100
Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 "use strict";
7 let xulApp = require("sdk/system/xul-app");
8 if (xulApp.versionInRange(xulApp.platformVersion, "16.0a1", "*")) {
9 new function tests() {
11 const { indexedDB, IDBKeyRange, DOMException
12 } = require("sdk/indexed-db");
14 exports["test indexedDB is frozen"] = function(assert){
15 let original = indexedDB.open;
16 let f = function(){};
17 assert.throws(function(){indexedDB.open = f});
18 assert.equal(indexedDB.open,original);
19 assert.notEqual(indexedDB.open,f);
21 };
23 exports["test db variables"] = function(assert) {
24 [ indexedDB, IDBKeyRange, DOMException
25 ].forEach(function(value) {
26 assert.notEqual(typeof(value), "undefined", "variable is defined");
27 });
28 }
30 exports["test open"] = function(assert, done) {
31 let request = indexedDB.open("MyTestDatabase");
32 request.onerror = function(event) {
33 assert.fail("Failed to open indexedDB")
34 done();
35 };
36 request.onsuccess = function(event) {
37 assert.pass("IndexedDB was open");
38 done();
39 };
40 };
42 exports["test dbname is unprefixed"] = function(assert, done) {
43 // verify fixes in https://bugzilla.mozilla.org/show_bug.cgi?id=786688
44 let dbName = "dbname-unprefixed";
45 let request = indexedDB.open(dbName);
46 request.onerror = function(event) {
47 assert.fail("Failed to open db");
48 done();
49 };
50 request.onsuccess = function(event) {
51 assert.equal(request.result.name, dbName);
52 done();
53 };
54 };
56 exports["test structuring the database"] = function(assert, done) {
57 // This is what our customer data looks like.
58 let customerData = [
59 { ssn: "444-44-4444", name: "Bill", age: 35, email: "bill@company.com" },
60 { ssn: "555-55-5555", name: "Donna", age: 32, email: "donna@home.org" }
61 ];
62 let dbName = "the_name";
63 let request = indexedDB.open(dbName, 2);
64 request.onerror = function(event) {
65 assert.fail("Failed to open db");
66 done();
67 };
68 request.onsuccess = function(event) {
69 assert.pass("transaction is complete");
70 testRead(assert, done);
71 }
72 request.onupgradeneeded = function(event) {
73 assert.pass("data base upgrade")
75 var db = event.target.result;
77 // Create an objectStore to hold information about our customers. We"re
78 // going to use "ssn" as our key path because it"s guaranteed to be
79 // unique.
80 var objectStore = db.createObjectStore("customers", { keyPath: "ssn" });
82 // Create an index to search customers by name. We may have duplicates
83 // so we can"t use a unique index.
84 objectStore.createIndex("name", "name", { unique: false });
86 // Create an index to search customers by email. We want to ensure that
87 // no two customers have the same email, so use a unique index.
88 objectStore.createIndex("email", "email", { unique: true });
90 // Store values in the newly created objectStore.
91 customerData.forEach(function(data) {
92 objectStore.add(data);
93 });
94 assert.pass("data added to object store");
95 };
96 };
98 function testRead(assert, done) {
99 let dbName = "the_name";
100 let request = indexedDB.open(dbName, 2);
101 request.onsuccess = function(event) {
102 assert.pass("data opened")
103 var db = event.target.result;
104 let transaction = db.transaction(["customers"]);
105 var objectStore = transaction.objectStore("customers");
106 var request = objectStore.get("444-44-4444");
107 request.onerror = function(event) {
108 assert.fail("Failed to retrive data")
109 };
110 request.onsuccess = function(event) {
111 // Do something with the request.result!
112 assert.equal(request.result.name, "Bill", "Name is correct");
113 done();
114 };
115 };
116 request.onerror = function() {
117 assert.fail("failed to open db");
118 };
119 };
121 }
122 } else {
123 exports.testDB = function(assert) {
124 assert.pass("IndexedDB is not implemented")
125 }
126 }
128 require("test").run(exports);