| 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 |