2 testRunner.waitUntilDone();
6 var g_baseURLWhenFetchingCookies = "";
7 var g_baseDocumentWhenFetchingDOMCookies;
9 function createCookie(name, value, additionalProperties)
11 let cookie = `${name}=${value}`;
12 for (let propertyName in additionalProperties) {
13 cookie += `; ${propertyName}`;
14 let propertyValue = additionalProperties[propertyName];
15 if (propertyValue != undefined)
16 cookie += "=" + propertyValue;
21 function setBaseDocumentWhenFetchingDOMCookies(aDocument)
23 g_baseDocumentWhenFetchingDOMCookies = aDocument;
26 function setDOMCookie(name, value, additionalProperties={})
28 g_baseDocumentWhenFetchingDOMCookies.cookie = createCookie(name, value, additionalProperties);
31 function getDOMCookies()
33 if (!g_baseDocumentWhenFetchingDOMCookies)
34 g_baseDocumentWhenFetchingDOMCookies = document;
35 if (!g_baseDocumentWhenFetchingDOMCookies.cookie)
37 let cookies = g_baseDocumentWhenFetchingDOMCookies.cookie.split("; ");
39 for (let keyAndValuePair of cookies) {
40 let [key, value] = keyAndValuePair.split("=");
46 async function setCookie(name, value, additionalProperties={})
48 invalidateCachedCookies();
50 let cookie = createCookie(name, value, additionalProperties);
51 let promise = new Promise((resolved, rejected) => {
52 let xhr = new XMLHttpRequest;
53 xhr.open("GET", "/cookies/resources/setCookies.cgi");
54 xhr.setRequestHeader("SET-COOKIE", cookie);
55 xhr.onload = () => resolved(xhr.responseText);
56 xhr.onerror = rejected;
62 function disableSetAlwaysAcceptCookies() {
63 if (window.testRunner)
64 testRunner.setAlwaysAcceptCookies(false);
67 async function resetCookies(urls)
70 "http://127.0.0.1:8000",
71 "http://localhost:8000",
74 urls = urls || testingURLs;
75 console.assert(urls.length);
78 return new Promise((resolve) => {
79 if (window.testRunner) {
80 testRunner.setCanOpenWindows(true);
81 testRunner.setAlwaysAcceptCookies(true);
82 testRunner.setPopupBlockingEnabled(false);
89 return new Promise((resolve) => {
90 disableSetAlwaysAcceptCookies();
91 g_childWindow.close();
97 let promise = setUp();
98 for (let url of urls) {
99 promise = promise.then(() => {
100 return new Promise((resolve, reject) => {
101 // FIXME: For some reason we get a SecurityError when passing childWindow to resolve() in Safari Version 11.0.3 (13604.5.6)
102 // and not in Chrome Canary 67.0.3390.0 (why?). As a workaround, store the child window reference in a global variable.
103 window.addEventListener("message", (messageEvent) => resolve(messageEvent), {capture: true, once: true});
104 g_childWindow = window.open(url + "/cookies/resources/cookie-utility.php?queryfunction=deleteCookiesAndPostMessage", "reset");
110 return promise.then(cleanUp);
113 async function resetCookiesForCurrentOrigin()
115 invalidateCachedCookies();
117 let promise = new Promise((resolved, rejected) => {
118 let xhr = new XMLHttpRequest;
119 xhr.open("GET", "/cookies/resources/cookie-utility.php?queryfunction=deleteCookies");
120 xhr.onload = (progressEvent) => {
121 disableSetAlwaysAcceptCookies();
122 resolved(progressEvent);
124 xhr.onerror = (progressEvent) => {
125 disableSetAlwaysAcceptCookies();
126 rejected(progressEvent);
129 if (window.testRunner)
130 testRunner.setAlwaysAcceptCookies(true);
137 function setBaseURLWhenFetchingCookies(baseURLWhenFetchingCookies)
139 g_baseURLWhenFetchingCookies = baseURLWhenFetchingCookies;
142 function invalidateCachedCookies()
144 g_cachedCookies = null;
147 function _setCachedCookiesJSON(cookies)
149 g_cachedCookies = JSON.parse(cookies);
152 async function getCookies()
155 return g_cachedCookies;
157 let promise = new Promise((resolved, rejected) => {
158 let xhr = new XMLHttpRequest;
159 xhr.open("GET", `${g_baseURLWhenFetchingCookies}/cookies/resources/echo-json.php`);
160 xhr.onload = () => resolved(xhr.responseText ? JSON.parse(xhr.responseText) : {});
161 xhr.onerror = () => rejected({});
164 g_cachedCookies = await promise;
165 return g_cachedCookies;
168 async function shouldNotHaveCookie(name)
170 let cookies = await getCookies();
171 let value = cookies[name];
172 if (value == undefined)
173 testPassed(`Do not have cookie "${name}".`);
175 testFailed(`Should not have cookie "${name}". But do with value ${value}.`);
178 async function shouldHaveCookie(name)
180 let cookies = await getCookies();
181 let value = cookies[name];
182 if (value == undefined)
183 testFailed(`Should have cookie "${name}". But do not.`);
185 testPassed(`Has cookie "${name}".`);
188 async function shouldHaveCookieWithValue(name, expectedValue)
190 console.assert(expectedValue !== undefined);
191 let cookies = await getCookies();
192 let value = cookies[name];
193 if (value == undefined)
194 testFailed(`Should have cookie "${name}". But do not.`);
195 else if (value === expectedValue)
196 testPassed(`Has cookie "${name}" with value ${value}.`);
198 testFailed(`Cookie "${name}" should have value ${expectedValue}. Was ${value}.`);
201 function shouldNotHaveDOMCookie(name)
203 let cookies = getDOMCookies();
204 let value = cookies[name];
205 if (value == undefined)
206 testPassed(`Do not have DOM cookie "${name}".`);
208 testFailed(`Should not have DOM cookie "${name}". But do with value ${value}.`);
211 function shouldHaveDOMCookie(name)
213 let cookies = getDOMCookies();
214 let value = cookies[name];
215 if (value == undefined)
216 testFailed(`Should have DOM cookie "${name}". But do not.`);
218 testPassed(`Has DOM cookie "${name}".`);
221 function shouldHaveDOMCookieWithValue(name, expectedValue)
223 console.assert(expectedValue !== undefined);
224 let cookies = getDOMCookies();
225 let value = cookies[name];
226 if (value == undefined)
227 testFailed(`Should have DOM cookie "${name}". But do not.`);
228 else if (value === expectedValue)
229 testPassed(`Has DOM cookie "${name}" with value ${value}.`);
231 testFailed(`DOM cookie "${name}" should have value ${expectedValue}. Was ${value}.`);
234 function setCookieUsingWebSocketFromHost(host)
236 var promise = new Promise(resolve => {
237 var websocket = new WebSocket(`ws://${host}:8880/websocket/tests/hybi/cookie?set`);
238 websocket.onclose = () => resolve();
243 function createExpiresDateFromMaxAge(maxAgeInSeconds)
245 let date = new Date();
246 date.setTime(date.getTime() + (maxAgeInSeconds * 1000));
247 return date.toUTCString();