dom/indexedDB/test/webapp_clearBrowserData.js

changeset 2
7e26c7da4463
equal deleted inserted replaced
-1:000000000000 0:fce99b671850
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 "use strict";
5
6 const appDomain = "example.org";
7 const manifestURL =
8 location.protocol + "//" + appDomain + "/manifest.webapp";
9
10 function testSteps()
11 {
12 const objectStoreName = "foo";
13 const testKey = 1;
14 const testValue = objectStoreName;
15
16 // Determine whether the app and browser frames should be in or
17 // out-of-process.
18 let remote_app, remote_browser;
19 if (window.location.href.indexOf("inproc_oop") != -1) {
20 remote_app = false;
21 remote_browser = true;
22 }
23 else if (window.location.href.indexOf("oop_inproc") != -1) {
24 remote_app = true;
25 remote_browser = false;
26 }
27 else if (window.location.href.indexOf("inproc_inproc") != -1) {
28 remote_app = false;
29 remote_browser = false;
30 }
31 else {
32 ok(false, "Bad test filename!");
33 return;
34 }
35
36 let request = indexedDB.open(window.location.pathname, 1);
37 request.onerror = errorHandler;
38 request.onupgradeneeded = grabEventAndContinueHandler;
39 request.onsuccess = unexpectedSuccessHandler;
40 let event = yield undefined;
41
42 let db = event.target.result;
43 db.onerror = errorHandler;
44 db.onversionchange = function(event) {
45 event.target.close();
46 }
47
48 let objectStore = db.createObjectStore(objectStoreName);
49 objectStore.add(testValue, testKey);
50
51 request.onsuccess = grabEventAndContinueHandler;
52 event = yield undefined;
53
54 // We need to send both remote_browser and remote_app in the querystring
55 // because webapp_clearBrowserData_appFrame uses the path + querystring to
56 // create and open a database which it checks no other test has touched. If
57 // we sent only remote_browser, then we wouldn't be able to test both
58 // (remote_app==false, remote_browser==false) and (remote_app==true,
59 // remote_browser==false).
60 let srcURL = location.protocol + "//" + appDomain +
61 location.pathname.substring(0, location.pathname.lastIndexOf('/')) +
62 "/webapp_clearBrowserData_appFrame.html?" +
63 "remote_browser=" + remote_browser + "&" +
64 "remote_app=" + remote_app;
65
66 let iframe = document.createElement("iframe");
67 iframe.setAttribute("mozbrowser", "");
68 iframe.setAttribute("mozapp", manifestURL);
69 iframe.setAttribute("src", srcURL);
70 iframe.setAttribute("remote", remote_app);
71 iframe.addEventListener("mozbrowsershowmodalprompt", function(event) {
72 let message = JSON.parse(event.detail.message);
73 switch (message.type) {
74 case "info":
75 case "ok":
76 window[message.type].apply(window, message.args);
77 break;
78 case "done":
79 continueToNextStepSync();
80 break;
81 default:
82 throw "unknown message";
83 }
84 });
85
86 info("loading app frame");
87
88 document.body.appendChild(iframe);
89 yield undefined;
90
91 request = indexedDB.open(window.location.pathname, 1);
92 request.onerror = errorHandler;
93 request.onupgradeneeded = unexpectedSuccessHandler;
94 request.onsuccess = grabEventAndContinueHandler;
95 event = yield undefined;
96
97 db = event.target.result;
98 db.onerror = errorHandler;
99
100 objectStore =
101 db.transaction(objectStoreName).objectStore(objectStoreName);
102 objectStore.get(testKey).onsuccess = grabEventAndContinueHandler;
103 event = yield undefined;
104
105 ok(testValue == event.target.result, "data still exists");
106
107 finishTest();
108 yield undefined;
109 }
110
111 function start()
112 {
113 if (!SpecialPowers.isMainProcess()) {
114 todo(false, "Test disabled in child processes, for now");
115 SimpleTest.finish();
116 return;
117 }
118
119 SpecialPowers.addPermission("browser", true, document);
120 SpecialPowers.addPermission("browser", true, { manifestURL: manifestURL,
121 isInBrowserElement: false });
122 SpecialPowers.addPermission("embed-apps", true, document);
123
124 SpecialPowers.setAllAppsLaunchable(true);
125
126 window.addEventListener("unload", function cleanup(event) {
127 if (event.target == document) {
128 window.removeEventListener("unload", cleanup, false);
129
130 SpecialPowers.removePermission("browser", location.href);
131 SpecialPowers.removePermission("browser",
132 location.protocol + "//" + appDomain);
133 SpecialPowers.removePermission("embed-apps", location.href);
134 }
135 }, false);
136
137 SpecialPowers.pushPrefEnv({
138 "set": [["dom.mozBrowserFramesEnabled", true]]
139 }, runTest);
140 }

mercurial