Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 <!--
2 Any copyright is dedicated to the Public Domain.
3 http://creativecommons.org/publicdomain/zero/1.0/
4 -->
5 <html>
6 <head>
7 <title>Indexed Database Clear Browser Data Test</title>
9 <script type="text/javascript;version=1.7">
10 "use strict";
12 function ok(cond, message)
13 {
14 alert(JSON.stringify({ type: "ok",
15 args: [!!cond, "appFrame: " + message] }));
16 }
18 function info(message)
19 {
20 alert(JSON.stringify({ type: "info",
21 args: ["appFrame: " + message] }));
22 }
24 function finish()
25 {
26 alert(JSON.stringify({ type: "done" }));
27 }
29 window.onerror = ok.bind(window, false);
31 function testSteps()
32 {
33 const objectStoreName = "foo";
34 const testKey = 1;
35 const testValue = objectStoreName;
36 const dbName = location.pathname + location.search;
38 // Determine whether our parent iframe asked us to create a remote
39 // browser frame here.
40 let remote_browser;
41 if (location.search.indexOf("remote_browser=true") != -1) {
42 remote_browser = true;
43 }
44 else if (location.search.indexOf("remote_browser=false") != -1) {
45 remote_browser = false;
46 }
47 else {
48 ok(false, "Expected remote_browser={true,false} in query string.");
49 return;
50 }
52 let request = indexedDB.open(dbName, 1);
53 request.onerror = errorHandler;
54 request.onupgradeneeded = grabEventAndContinueHandler;
55 request.onsuccess = unexpectedSuccessHandler;
56 let event = yield undefined;
58 let db = event.target.result;
59 db.onerror = errorHandler;
60 db.onversionchange = function(event) {
61 event.target.close();
62 }
64 let objectStore = db.createObjectStore(objectStoreName);
65 objectStore.add(testValue, testKey);
67 request.onsuccess = grabEventAndContinueHandler;
68 event = yield undefined;
70 ok(db === event.target.result, "created database");
72 objectStore =
73 db.transaction(objectStoreName).objectStore(objectStoreName);
74 objectStore.get(testKey).onsuccess = grabEventAndContinueHandler;
75 event = yield undefined;
77 ok(testValue == event.target.result, "data exists");
79 let iframe = document.createElement("iframe");
80 iframe.setAttribute("mozbrowser", "");
81 // Send our querystring to the subframe because
82 // webapp_clearBrowserData_browserFrame uses its pathname + querystring to
83 // open a database which it assumes hasn't been touched by another test.
84 iframe.setAttribute("src", "webapp_clearBrowserData_browserFrame.html" + location.search);
85 iframe.setAttribute("remote", remote_browser);
86 iframe.addEventListener("mozbrowsershowmodalprompt", function(event) {
87 let message = JSON.parse(event.detail.message);
88 switch (message.type) {
89 case "block":
90 info("blocking browserFrame");
91 event.preventDefault();
93 let request = navigator.mozApps.getSelf();
94 request.onsuccess = function() {
95 let app = request.result;
96 ok(app, "got app");
98 info("clearing browser data");
99 app.clearBrowserData();
101 info("unblocking browserFrame");
102 event.detail.unblock();
103 }
104 break;
105 case "done":
106 continueToNextStepSync();
107 break;
108 default:
109 alert(event.detail.message);
110 }
111 });
113 info("loading browser frame");
115 document.body.appendChild(iframe);
116 yield undefined;
118 request = indexedDB.open(dbName, 1);
119 request.onerror = errorHandler;
120 request.onupgradeneeded = unexpectedSuccessHandler;
121 request.onsuccess = grabEventAndContinueHandler;
122 event = yield undefined;
124 db = event.target.result;
125 db.onerror = errorHandler;
127 objectStore =
128 db.transaction(objectStoreName).objectStore(objectStoreName);
129 objectStore.get(testKey).onsuccess = grabEventAndContinueHandler;
130 event = yield undefined;
132 ok(testValue == event.target.result, "data still exists");
134 finish();
135 yield undefined;
136 }
138 </script>
140 <script type="text/javascript;version=1.7" src="helpers.js"></script>
141 </head>
143 <body onload="testGenerator.next();"></body>
145 </html>