| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2013 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 /** | |
| 6 * Test whether the given domain is valid for a cookie. | |
| 7 * | |
| 8 * @param {string} domain Domain for a cookie. | |
| 9 * @return {boolean} True if the domain is valid, otherwise false. | |
| 10 */ | |
| 11 function isDomainValid(domain) { | |
| 12 var dummyCookie = 'ChromeDriverwjers908fljsdf37459fsdfgdfwru='; | |
| 13 | |
| 14 document.cookie = dummyCookie + '; domain=' + domain; | |
| 15 if (document.cookie.indexOf(dummyCookie) != -1) { | |
| 16 // Expire the dummy cookie if it is added successfully. | |
| 17 document.cookie = dummyCookie + '; Max-Age=0; domain=' + domain; | |
| 18 return true; | |
| 19 } | |
| 20 return false; | |
| 21 } | |
| 22 | |
| 23 /** | |
| 24 * Add the given cookie to the current web page. | |
| 25 * | |
| 26 * If path is not specified, default to '/'. | |
| 27 * If domain is not specified, default to document.domain, otherwise remove its | |
| 28 * port number. | |
| 29 * | |
| 30 * Validate name, value, domain and path of the cookie in the same way as the | |
| 31 * method CanonicalCookie::Create in src/net/cookies/canonical_cookie.cc. Besides | |
| 32 * the following requirements, name, value, domain and path of the cookie should | |
| 33 * not start or end with ' ' or '\t', and should not contain '\n', '\r', or '\0'. | |
| 34 * <ul> | |
| 35 * <li>name: no ';' or '=' | |
| 36 * <li>value: no ';' | |
| 37 * <li>path: starts with '/', no ';' | |
| 38 * </ul> | |
| 39 * | |
| 40 * @param {!Object} cookie An object representing a Cookie JSON Object as | |
| 41 * specified in https://code.google.com/p/selenium/wiki/JsonWireProtocol. | |
| 42 */ | |
| 43 function addCookie(cookie) { | |
| 44 function isNameInvalid(value) { | |
| 45 return /(^[ \t])|([;=\n\r\0])|([ \t]$)/.test(value); | |
| 46 } | |
| 47 function isValueInvalid(value) { | |
| 48 return /(^[ \t])|([;\n\r\0])|([ \t]$)/.test(value); | |
| 49 } | |
| 50 function isPathInvalid(path) { | |
| 51 return path[0] != '/' || /([;\n\r\0])|([ \t]$)/.test(path); | |
| 52 } | |
| 53 | |
| 54 var name = cookie['name']; | |
| 55 if (!name || isNameInvalid(name)) | |
| 56 throw new Error('name of cookie is missing or invalid:"' + name + '"'); | |
| 57 | |
| 58 var value = cookie['value'] || ''; | |
| 59 if (isValueInvalid(value)) | |
| 60 throw new Error('value of cookie is invalid:"' + value + '"'); | |
| 61 | |
| 62 var domain = cookie['domain']; | |
| 63 // Remove the port number from domain. | |
| 64 if (domain) { | |
| 65 var domain_parts = domain.split(':'); | |
| 66 if (domain_parts.length > 2) | |
| 67 throw new Error('domain of cookie has too many colons'); | |
| 68 else if (domain_parts.length == 2) | |
| 69 domain = domain_parts[0]; | |
| 70 } | |
| 71 // Validate domain. | |
| 72 if (domain && (isValueInvalid(domain) || !isDomainValid(domain))) { | |
| 73 var error = new Error(); | |
| 74 error.code = 24; // Error code for InvalidCookieDomain. | |
| 75 error.message = 'invalid domain:"' + domain + '"'; | |
| 76 throw error; | |
| 77 } | |
| 78 | |
| 79 var path = cookie['path']; | |
| 80 if (path && isPathInvalid(path)) | |
| 81 throw new Error('path of cookie is invalid:"' + path + '"'); | |
| 82 | |
| 83 var newCookie = name + '=' + value; | |
| 84 newCookie += '; path=' + (path || '/'); | |
| 85 if (domain) | |
| 86 newCookie += '; domain=' + domain; | |
| 87 if (cookie['expiry']) { | |
| 88 var expiredDate = new Date(cookie['expiry'] * 1000); | |
| 89 newCookie += '; expires=' + expiredDate.toUTCString(); | |
| 90 } | |
| 91 if (cookie['secure']) | |
| 92 newCookie += '; secure'; | |
| 93 | |
| 94 document.cookie = newCookie; | |
| 95 } | |
| OLD | NEW |