OLD | NEW |
1 <script> | 1 <!-- |
2 var TEST_DOMAIN = 'cookies.com'; | 2 * Copyright (c) 2011 The Chromium Authors. All rights reserved. Use of this |
3 var TEST_PATH = '/auth'; | 3 * source code is governed by a BSD-style license that can be found in the |
4 var TEST_HOST = 'www.chrome_extensions.' + TEST_DOMAIN; | 4 * LICENSE file. |
5 var TEST_URL = 'http://' + TEST_HOST + '/foobar.html?arg=toolbar¶m=true'; | 5 --> |
6 var TEST_URL2 = 'http://chromium.' + TEST_DOMAIN + '/index.html'; | 6 <script src="tab.js"></script> |
7 var TEST_URL3 = 'https://' + TEST_HOST + '/content.html'; | |
8 var TEST_URL4 = 'https://' + TEST_HOST + TEST_PATH + '/content.html'; | |
9 var TEST_URL5 = 'http://' + TEST_HOST + TEST_PATH + '/content.html'; | |
10 var TEST_EXPIRATION_DATE = 12345678900; | |
11 var TEST_ODD_DOMAIN = '.strange stuff!!.com'; | |
12 var TEST_ODD_PATH = '/hello = world'; | |
13 var TEST_ODD_URL = 'http://' + TEST_ODD_DOMAIN + TEST_ODD_PATH + '/index.html'; | |
14 var TEST_UNPERMITTED_URL = 'http://illegal.' + TEST_DOMAIN + '/'; | |
15 | |
16 var TEST_BASIC_COOKIE = { | |
17 url: TEST_URL, | |
18 name: 'api_test_cookie', | |
19 value: 'helloworld' | |
20 }; | |
21 var TEST_DOMAIN_COOKIE = { | |
22 url: TEST_URL, | |
23 name: 'TEST_domain', | |
24 value: '32849395FFDSAA**##@@@', | |
25 domain: TEST_DOMAIN, | |
26 expirationDate: TEST_EXPIRATION_DATE | |
27 }; | |
28 var TEST_SECURE_COOKIE = { | |
29 url: TEST_URL5, | |
30 name: 'SECRETCOOKIE', | |
31 value: 'foobar_password', | |
32 secure: true, | |
33 httpOnly: true | |
34 }; | |
35 var TEST_BASIC_EXPIRED_COOKIE = { | |
36 url: TEST_BASIC_COOKIE.url, | |
37 name: TEST_BASIC_COOKIE.name, | |
38 value: TEST_BASIC_COOKIE.value, | |
39 expirationDate: 0 | |
40 }; | |
41 | |
42 function readCookie(name) { | |
43 var nameEQ = name + '='; | |
44 var cookies = document.cookie.split(';'); | |
45 for(var i=0; i < cookies.length; i++) { | |
46 var c = cookies[i]; | |
47 while (c.charAt(0)==' ') { | |
48 c = c.substring(1); | |
49 } | |
50 if (c.indexOf(nameEQ) == 0) { | |
51 return c.substring(nameEQ.length); | |
52 } | |
53 } | |
54 return null; | |
55 } | |
56 | |
57 function expectValidCookie(cookie) { | |
58 chrome.test.assertTrue(cookie != null, 'Expected cookie not set.'); | |
59 } | |
60 | |
61 function expectNullCookie(cookie) { | |
62 chrome.test.assertEq(null, cookie); | |
63 } | |
64 | |
65 function expectUndefinedCookie(cookie) { | |
66 chrome.test.assertEq(undefined, cookie); | |
67 } | |
68 | |
69 function removeTestCookies() { | |
70 chrome.cookies.remove( | |
71 {url: TEST_URL, name: TEST_BASIC_COOKIE.name}); | |
72 chrome.cookies.remove( | |
73 {url: TEST_URL, name: TEST_DOMAIN_COOKIE.name}); | |
74 chrome.cookies.remove( | |
75 {url: TEST_URL4, name: TEST_SECURE_COOKIE.name}); | |
76 chrome.cookies.remove({url: TEST_URL, name: 'abcd'}); | |
77 chrome.cookies.remove({url: TEST_ODD_URL, name: 'abcd'}); | |
78 } | |
79 | |
80 var pass = chrome.test.callbackPass; | |
81 var fail = chrome.test.callbackFail; | |
82 | |
83 chrome.test.runTests([ | |
84 function readCookies() { | |
85 chrome.test.assertEq('1', readCookie('a')); | |
86 chrome.test.assertEq('2', readCookie('b')); | |
87 chrome.test.assertEq('3', readCookie('c')); | |
88 chrome.test.assertEq(null, readCookie('nonexistent')); | |
89 // Invalid schemes don't work with the cookie API. | |
90 chrome.cookies.get( | |
91 {url: document.location.href, name: 'a'}, | |
92 fail('No host permissions for cookies at url: "' + | |
93 document.location.href + '".')); | |
94 }, | |
95 function getBasicCookie() { | |
96 removeTestCookies(); | |
97 chrome.cookies.set(TEST_BASIC_COOKIE); | |
98 // Domain doesn't match. | |
99 chrome.cookies.get( | |
100 {url: TEST_URL2, name: TEST_BASIC_COOKIE.name}, | |
101 pass(expectNullCookie)); | |
102 // URL invalid. | |
103 chrome.cookies.get( | |
104 {url: 'invalid url', name: TEST_BASIC_COOKIE.name}, | |
105 fail('Invalid url: "invalid url".')); | |
106 // URL lacking permissions. | |
107 chrome.cookies.get( | |
108 {url: TEST_UNPERMITTED_URL, name: TEST_BASIC_COOKIE.name}, | |
109 fail('No host permissions for cookies at url: "' + | |
110 TEST_UNPERMITTED_URL + '".')); | |
111 // Store ID invalid. | |
112 chrome.cookies.get({ | |
113 url: TEST_BASIC_COOKIE.url, | |
114 name: TEST_BASIC_COOKIE.name, | |
115 storeId: 'invalid' | |
116 }, fail('Invalid cookie store id: "invalid".')); | |
117 chrome.cookies.get( | |
118 {url: TEST_BASIC_COOKIE.url, name: TEST_BASIC_COOKIE.name}, | |
119 pass(function(cookie) { | |
120 expectValidCookie(cookie); | |
121 chrome.test.assertEq(TEST_BASIC_COOKIE.name, cookie.name); | |
122 chrome.test.assertEq(TEST_BASIC_COOKIE.value, cookie.value); | |
123 chrome.test.assertEq(TEST_HOST, cookie.domain); | |
124 chrome.test.assertEq(true, cookie.hostOnly); | |
125 chrome.test.assertEq('/', cookie.path); | |
126 chrome.test.assertEq(false, cookie.secure); | |
127 chrome.test.assertEq(false, cookie.httpOnly); | |
128 chrome.test.assertEq(true, cookie.session); | |
129 chrome.test.assertTrue(typeof cookie.expirationDate === 'undefined', | |
130 'Session cookie should not have expirationDate property.'); | |
131 chrome.test.assertTrue(typeof cookie.storeId !== 'undefined', | |
132 'Cookie store ID not provided.'); | |
133 })); | |
134 }, | |
135 function getDomainCookie() { | |
136 removeTestCookies(); | |
137 chrome.cookies.set(TEST_DOMAIN_COOKIE); | |
138 chrome.cookies.get( | |
139 {url: TEST_URL2, name: TEST_DOMAIN_COOKIE.name}, | |
140 pass(function(cookie) { | |
141 expectValidCookie(cookie); | |
142 chrome.test.assertEq(TEST_DOMAIN_COOKIE.name, cookie.name); | |
143 chrome.test.assertEq(TEST_DOMAIN_COOKIE.value, cookie.value); | |
144 chrome.test.assertEq('.' + TEST_DOMAIN, cookie.domain); | |
145 chrome.test.assertEq(false, cookie.hostOnly); | |
146 chrome.test.assertEq('/', cookie.path); | |
147 chrome.test.assertEq(false, cookie.secure); | |
148 chrome.test.assertEq(false, cookie.httpOnly); | |
149 chrome.test.assertEq(false, cookie.session); | |
150 chrome.test.assertEq(TEST_EXPIRATION_DATE, cookie.expirationDate); | |
151 })); | |
152 }, | |
153 function getSecureCookie() { | |
154 removeTestCookies(); | |
155 chrome.cookies.set(TEST_SECURE_COOKIE); | |
156 // Original URL doesn't work because scheme isn't secure. | |
157 chrome.cookies.get( | |
158 {url: TEST_SECURE_COOKIE.url, name: TEST_SECURE_COOKIE.name}, | |
159 pass(expectNullCookie)); | |
160 // Path doesn't match. | |
161 chrome.cookies.get( | |
162 {url: TEST_URL3, name: TEST_SECURE_COOKIE.name}, | |
163 pass(expectNullCookie)); | |
164 chrome.cookies.get( | |
165 {url: TEST_URL4, name: TEST_SECURE_COOKIE.name}, | |
166 pass(function(cookie) { | |
167 expectValidCookie(cookie); | |
168 chrome.test.assertEq(TEST_SECURE_COOKIE.name, cookie.name); | |
169 chrome.test.assertEq(TEST_SECURE_COOKIE.value, cookie.value); | |
170 chrome.test.assertEq(TEST_HOST, cookie.domain); | |
171 chrome.test.assertEq(true, cookie.hostOnly); | |
172 chrome.test.assertEq(TEST_PATH, cookie.path); | |
173 chrome.test.assertEq(true, cookie.secure); | |
174 chrome.test.assertEq(true, cookie.httpOnly); | |
175 chrome.test.assertEq(true, cookie.session); | |
176 })); | |
177 }, | |
178 function setOddCookies() { | |
179 removeTestCookies(); | |
180 // URL lacking permissions. | |
181 chrome.cookies.set( | |
182 {url: TEST_UNPERMITTED_URL, name: 'abcd', domain: TEST_DOMAIN}); | |
183 chrome.cookies.get({url: TEST_URL, name: 'abcd'}, | |
184 pass(expectNullCookie)); | |
185 // Attribute values containing invalid characters are disallowed. | |
186 chrome.cookies.set({url: TEST_URL, name: 'abcd=efg'}); | |
187 chrome.cookies.get({url: TEST_URL, name: 'abcd'}, | |
188 pass(expectNullCookie)); | |
189 chrome.cookies.set( | |
190 {url: TEST_URL, name: 'abcd', value: 'HI;LO'}); | |
191 chrome.cookies.get({url: TEST_URL, name: 'abcd'}, | |
192 pass(expectNullCookie)); | |
193 chrome.cookies.set( | |
194 {url: TEST_URL, name: 'abcd', domain: 'cookies.com\r'}); | |
195 chrome.cookies.get({url: TEST_URL, name: 'abcd'}, | |
196 pass(expectNullCookie)); | |
197 chrome.cookies.set( | |
198 {url: TEST_URL, name: 'abcd', domain: 'somedomain.com'}); | |
199 chrome.cookies.get({url: TEST_URL, name: 'abcd'}, | |
200 pass(expectNullCookie)); | |
201 chrome.cookies.set({ | |
202 url: TEST_ODD_URL, | |
203 name: 'abcd', | |
204 domain: TEST_ODD_DOMAIN, | |
205 path: TEST_ODD_PATH | |
206 }); | |
207 chrome.cookies.get({url: TEST_ODD_URL, name: 'abcd'}, | |
208 pass(function(cookie) { | |
209 expectValidCookie(cookie); | |
210 chrome.test.assertEq(TEST_ODD_DOMAIN, unescape(cookie.domain)); | |
211 chrome.test.assertEq(TEST_ODD_PATH, unescape(cookie.path)); | |
212 })); | |
213 }, | |
214 function setCookiesWithCallbacks() { | |
215 removeTestCookies(); | |
216 // Basics. | |
217 chrome.cookies.set( | |
218 TEST_BASIC_COOKIE, | |
219 pass(function(cookie) { | |
220 expectValidCookie(cookie); | |
221 chrome.test.assertEq(TEST_BASIC_COOKIE.name, cookie.name); | |
222 chrome.test.assertEq(TEST_BASIC_COOKIE.value, cookie.value); | |
223 chrome.test.assertEq(TEST_HOST, cookie.domain); | |
224 chrome.test.assertEq(true, cookie.hostOnly); | |
225 chrome.test.assertEq('/', cookie.path); | |
226 chrome.test.assertEq(false, cookie.secure); | |
227 chrome.test.assertEq(false, cookie.httpOnly); | |
228 chrome.test.assertEq(true, cookie.session); | |
229 chrome.test.assertTrue(typeof cookie.expirationDate === 'undefined', | |
230 'Session cookie should not have expirationDate property.'); | |
231 chrome.test.assertTrue(typeof cookie.storeId !== 'undefined', | |
232 'Cookie store ID not provided.'); | |
233 })); | |
234 // Invalid values generate callback with no arguments, and error messages | |
235 chrome.cookies.set( | |
236 {url: TEST_UNPERMITTED_URL, name: 'abcd', domain: TEST_DOMAIN}, | |
237 fail( | |
238 'No host permissions for cookies at url: "' | |
239 + TEST_UNPERMITTED_URL + '".', | |
240 expectUndefinedCookie)); | |
241 chrome.cookies.set( | |
242 {url: TEST_URL, name: 'abcd=efg'}, | |
243 fail('Failed to parse or set cookie named "abcd=efg".', | |
244 expectUndefinedCookie)); | |
245 chrome.cookies.set( | |
246 {url: TEST_URL, name: 'abcd', value: 'HI;LO'}, | |
247 fail('Failed to parse or set cookie named "abcd".', | |
248 expectUndefinedCookie)); | |
249 chrome.cookies.set( | |
250 {url: TEST_URL, name: 'abcd', domain: 'cookies.com\r'}, | |
251 fail('Failed to parse or set cookie named "abcd".', | |
252 expectUndefinedCookie)); | |
253 chrome.cookies.set( | |
254 {url: TEST_URL, name: 'abcd', domain: 'somedomain.com'}, | |
255 fail('Failed to parse or set cookie named "abcd".', | |
256 expectUndefinedCookie)); | |
257 // Expired cookies generate callback with "null" cookie | |
258 chrome.cookies.set(TEST_BASIC_EXPIRED_COOKIE, pass(expectUndefinedCookie)); | |
259 // Odd (but valid!) URLs get callbacks too! | |
260 chrome.cookies.set({ | |
261 url: TEST_ODD_URL, | |
262 name: 'abcd', | |
263 domain: TEST_ODD_DOMAIN, | |
264 path: TEST_ODD_PATH | |
265 }, pass(function(cookie) { | |
266 expectValidCookie(cookie); | |
267 chrome.test.assertEq(TEST_ODD_DOMAIN, unescape(cookie.domain)); | |
268 chrome.test.assertEq(TEST_ODD_PATH, unescape(cookie.path)); | |
269 })); | |
270 }, | |
271 function removeCookie() { | |
272 removeTestCookies(); | |
273 chrome.cookies.set(TEST_BASIC_COOKIE); | |
274 chrome.cookies.get( | |
275 {url: TEST_URL, name: TEST_BASIC_COOKIE.name}, | |
276 pass(expectValidCookie)); | |
277 // Removal with any domain-matching URL will do. | |
278 chrome.cookies.remove( | |
279 {url: TEST_URL4, name: TEST_BASIC_COOKIE.name}); | |
280 chrome.cookies.get( | |
281 {url: TEST_URL, name: TEST_BASIC_COOKIE.name}, | |
282 pass(expectNullCookie)); | |
283 // Set with an expired date should also remove the cookie. | |
284 chrome.cookies.set(TEST_BASIC_COOKIE); | |
285 chrome.cookies.get( | |
286 {url: TEST_URL, name: TEST_BASIC_COOKIE.name}, | |
287 pass(expectValidCookie)); | |
288 chrome.cookies.set(TEST_BASIC_EXPIRED_COOKIE); | |
289 chrome.cookies.get( | |
290 {url: TEST_URL, name: TEST_BASIC_COOKIE.name}, | |
291 pass(expectNullCookie)); | |
292 // Removal with a disallowed URL shouldn't do anything. | |
293 chrome.cookies.set(TEST_DOMAIN_COOKIE); | |
294 chrome.cookies.get( | |
295 {url: TEST_URL2, name: TEST_DOMAIN_COOKIE.name}, | |
296 pass(expectValidCookie)); | |
297 chrome.cookies.remove( | |
298 {url: TEST_UNPERMITTED_URL, name: TEST_DOMAIN_COOKIE.name}); | |
299 chrome.cookies.get( | |
300 {url: TEST_URL2, name: TEST_DOMAIN_COOKIE.name}, | |
301 pass(expectValidCookie)); | |
302 }, | |
303 function removeCookiesWithCallbacks() { | |
304 removeTestCookies(); | |
305 chrome.cookies.set(TEST_BASIC_COOKIE); | |
306 chrome.cookies.get( | |
307 {url: TEST_URL, name: TEST_BASIC_COOKIE.name}, | |
308 pass(expectValidCookie)); | |
309 // Removal with any domain-matching URL will trigger callback with the | |
310 // removed cookie's "url" and "name" fields. | |
311 chrome.cookies.remove( | |
312 {url: TEST_URL4, name: TEST_BASIC_COOKIE.name}, pass(function(data) { | |
313 chrome.test.assertEq(TEST_URL4, data.url); | |
314 chrome.test.assertEq(TEST_BASIC_COOKIE.name, data.name); | |
315 chrome.test.assertTrue(typeof data.storeId !== 'undefined', | |
316 'Cookie store ID not provided.'); | |
317 })); | |
318 // Removal with a disallowed URL should trigger the callback with no | |
319 // arguments, and a set error message. | |
320 chrome.cookies.set(TEST_DOMAIN_COOKIE); | |
321 chrome.cookies.remove( | |
322 {url: TEST_UNPERMITTED_URL, name: TEST_DOMAIN_COOKIE.name}, | |
323 fail( | |
324 'No host permissions for cookies at url: "' | |
325 + TEST_UNPERMITTED_URL + '".', | |
326 expectUndefinedCookie)); | |
327 }, | |
328 function getAllCookies() { | |
329 removeTestCookies(); | |
330 chrome.cookies.getAll({}, pass(function(cookies) { | |
331 chrome.test.assertEq(0, cookies.length); | |
332 })); | |
333 chrome.cookies.set(TEST_BASIC_COOKIE); | |
334 chrome.cookies.set(TEST_SECURE_COOKIE); | |
335 chrome.cookies.getAll( | |
336 {domain: TEST_DOMAIN}, pass(function(cookies) { | |
337 chrome.test.assertEq(2, cookies.length); | |
338 chrome.test.assertEq(TEST_SECURE_COOKIE.name, cookies[0].name); | |
339 chrome.test.assertEq(TEST_BASIC_COOKIE.name, cookies[1].name); | |
340 })); | |
341 chrome.cookies.getAll({ | |
342 name: TEST_BASIC_COOKIE.name | |
343 }, pass(function(cookies) { | |
344 chrome.test.assertEq(1, cookies.length); | |
345 chrome.test.assertEq(TEST_BASIC_COOKIE.name, cookies[0].name); | |
346 })); | |
347 chrome.cookies.getAll({ | |
348 secure: true | |
349 }, pass(function(cookies) { | |
350 chrome.test.assertEq(1, cookies.length); | |
351 chrome.test.assertEq(TEST_SECURE_COOKIE.name, cookies[0].name); | |
352 })); | |
353 chrome.cookies.getAll({ | |
354 url: 'invalid url' | |
355 }, fail('Invalid url: "invalid url".')); | |
356 chrome.cookies.getAll({ | |
357 url: TEST_URL, | |
358 }, pass(function(cookies) { | |
359 chrome.test.assertEq(1, cookies.length); | |
360 chrome.test.assertEq(TEST_BASIC_COOKIE.name, cookies[0].name); | |
361 })); | |
362 }, | |
363 function getAllCookieStores() { | |
364 removeTestCookies(); | |
365 chrome.cookies.getAllCookieStores( | |
366 pass(function(cookieStores) { | |
367 chrome.test.assertEq(1, cookieStores.length); | |
368 chrome.cookies.set(TEST_BASIC_COOKIE); | |
369 chrome.cookies.get( | |
370 {url: TEST_URL, name: TEST_BASIC_COOKIE.name}, | |
371 pass(function(cookie) { | |
372 chrome.test.assertEq(cookieStores[0].id, cookie.storeId); | |
373 })); | |
374 chrome.cookies.getAll( | |
375 {storeId: cookieStores[0].id}, | |
376 pass(function(cookies) { | |
377 chrome.test.assertEq(1, cookies.length); | |
378 chrome.test.assertEq(TEST_BASIC_COOKIE.name, cookies[0].name); | |
379 })); | |
380 })); | |
381 } | |
382 ]); | |
383 </script> | |
OLD | NEW |