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