summaryrefslogtreecommitdiffstats
path: root/devtools/client/storage/test/storage-listings.html
blob: 84ab005c50c51ef268f0e801a940653f4abd8ae8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<!DOCTYPE HTML>
<html>
<!--
Storage inspector front end - tests
-->
<head>
  <meta charset="utf-8">
  <title>Storage inspector test for listing hosts and storages</title>
</head>
<body>
<iframe src="http://sectest1.example.org/browser/devtools/client/storage/test/storage-unsecured-iframe.html"></iframe>
<iframe src="https://sectest1.example.org:443/browser/devtools/client/storage/test/storage-secured-iframe.html"></iframe>
<script type="application/javascript">
"use strict";
const partialHostname = location.hostname.match(/^[^.]+(\..*)$/)[1];
const cookieExpiresTime1 = 2000000000000;
const cookieExpiresTime2 = 2000000001000;
// Setting up some cookies to eat.
document.cookie = "c1=foobar; expires=" +
  new Date(cookieExpiresTime1).toGMTString() + "; path=/browser";
document.cookie = "cs2=sessionCookie; path=/; domain=" + partialHostname;
document.cookie = "c3=foobar-2; expires=" +
  new Date(cookieExpiresTime1).toGMTString() + "; path=/";
document.cookie = "c4=foobar-3; expires=" +
  new Date(cookieExpiresTime2).toGMTString() + "; path=/; domain=" +
  partialHostname;
// ... and some local storage items ..
localStorage.setItem("ls1", "foobar");
localStorage.setItem("ls2", "foobar-2");

// Because localStorage contains key() on the prototype and it can't be iterated
// using object.keys() we check the the value "key" exists.
// See bug 1451991 for details.
localStorage.setItem("key", "value1");

// ... and finally some session storage items too
sessionStorage.setItem("ss1", "foobar-3");

// Because sessionStorage contains key() on the prototype and it can't be
// iterated using object.keys() we check the the value "key" exists.
// See bug 1451991 for details.
sessionStorage.setItem("key", "value2");

dump("added cookies and storage from main page\n");

const idbGenerator = async function () {
  let request = indexedDB.open("idb1", 1);
  request.onerror = function() {
    throw new Error("error opening db connection");
  };
  const db = await new Promise(done => {
    request.onupgradeneeded = event => {
      const _db = event.target.result;
      const store1 = _db.createObjectStore("obj1", { keyPath: "id" });
      store1.createIndex("name", "name", { unique: false });
      store1.createIndex("email", "email", { unique: true });
      _db.createObjectStore("obj2", { keyPath: "id2" }); // eslint-disable-line no-unused-vars
      store1.transaction.oncomplete = () => {
        done(_db);
      };
    };
  });

  // Prevents AbortError
  await new Promise(done => {
    request.onsuccess = done;
  });

  const transaction = db.transaction(["obj1", "obj2"], "readwrite");
  const store1 = transaction.objectStore("obj1");
  const store2 = transaction.objectStore("obj2");
  store1.add({id: 1, name: "foo", email: "foo@bar.com"});
  store1.add({id: 2, name: "foo2", email: "foo2@bar.com"});
  store1.add({id: 3, name: "foo2", email: "foo3@bar.com"});
  store2.add({
    id2: 1,
    name: "foo",
    email: "foo@bar.com",
    extra: "baz"
  });
  // Prevents AbortError during close()
  await new Promise(success => {
    transaction.oncomplete = success;
  });

  db.close();

  request = indexedDB.open("idb2", 1);
  const db2 = await new Promise(done => {
    request.onupgradeneeded = event => {
      const _db2 = event.target.result;
      const store3 = _db2.createObjectStore("obj3", { keyPath: "id3" });
      store3.createIndex("name2", "name2", { unique: true });
      store3.transaction.oncomplete = () => {
        done(_db2);
      }
    };
  });
  // Prevents AbortError during close()
  await new Promise(done => {
    request.onsuccess = done;
  });
  db2.close();

  dump("added indexedDB from main page\n");
};

function deleteDB(dbName) {
  return new Promise(resolve => {
    dump("removing database " + dbName + " from " + document.location + "\n");
    indexedDB.deleteDatabase(dbName).onsuccess = resolve;
  });
}

async function fetchPut(cache, url) {
  const response = await fetch(url);
  await cache.put(url, response);
}

const cacheGenerator = async function () {
  const cache = await caches.open("plop");
  await fetchPut(cache, "404_cached_file.js");
  await fetchPut(cache, "browser_storage_basic.js");
};

window.setup = async function () {
  await idbGenerator();

  if (window.caches) {
    await cacheGenerator();
  }
};

window.clear = async function () {
  await deleteDB("idb1");
  await deleteDB("idb2");

  if (window.caches) {
    await caches.delete("plop");
  }
  dump("removed indexedDB and cache data from " + document.location + "\n");
};
</script>
</body>
</html>