Bug 1415828 - Accept cookie domains with leading dot character r?ato
Domain cookies retrieved from Marionette have leading dot characters in
them. This change will ensure that adding cookies with leading dot
characters works as expected.
MozReview-Commit-ID: IriHVCcVcP3
--- a/testing/marionette/cookie.js
+++ b/testing/marionette/cookie.js
@@ -104,16 +104,19 @@ cookie.add = function(newCookie, {restri
}
let hostOnly = false;
if (typeof newCookie.domain == "undefined") {
hostOnly = true;
newCookie.domain = restrictToHost;
}
assert.string(newCookie.domain, "Cookie domain must be string");
+ if (newCookie.domain.substring(0, 1) === ".") {
+ newCookie.domain = newCookie.domain.substring(1);
+ }
if (typeof newCookie.secure == "undefined") {
newCookie.secure = false;
}
if (typeof newCookie.httpOnly == "undefined") {
newCookie.httpOnly = false;
}
if (typeof newCookie.expiry == "undefined") {
--- a/testing/marionette/test_cookie.js
+++ b/testing/marionette/test_cookie.js
@@ -207,16 +207,23 @@ add_test(function test_add() {
cookie.add({
name: "name5",
value: "value5",
domain: "domain5",
path: "/foo/bar",
});
equal("/foo/bar", cookie.manager.cookies[3].path);
+ cookie.add({
+ name: "name6",
+ value: "value",
+ domain: ".domain"
+ });
+ equal(".domain", cookie.manager.cookies[4].host);
+
Assert.throws(() => {
cookie.add({name: "fail", value: "value6", domain: "domain6"})
}, /UnableToSetCookieError/);
run_next_test();
});
add_test(function test_remove() {
--- a/testing/web-platform/tests/webdriver/tests/cookies/add_cookie.py
+++ b/testing/web-platform/tests/webdriver/tests/cookies/add_cookie.py
@@ -1,20 +1,19 @@
from tests.support.fixtures import clear_all_cookies
-from tests.support.fixtures import server_config
from datetime import datetime, timedelta
-def test_add_domain_cookie(session, url):
+def test_add_domain_cookie(session, url, server_config):
session.url = url("/common/blank.html")
clear_all_cookies(session)
create_cookie_request = {
"cookie": {
"name": "hello",
"value": "world",
- "domain": "web-platform.test",
+ "domain": server_config["domains"][""],
"path": "/",
"httpOnly": False,
"secure": False
}
}
result = session.transport.send("POST", "session/%s/cookie" % session.session_id, create_cookie_request)
assert result.status == 200
assert "value" in result.body
@@ -32,26 +31,26 @@ def test_add_domain_cookie(session, url)
assert isinstance(cookie["name"], basestring)
assert "value" in cookie
assert isinstance(cookie["value"], basestring)
assert "domain" in cookie
assert isinstance(cookie["domain"], basestring)
assert cookie["name"] == "hello"
assert cookie["value"] == "world"
- assert cookie["domain"] == ".web-platform.test"
+ assert cookie["domain"] == ".%s" % server_config["domains"][""]
-def test_add_cookie_for_ip(session, url, server_config):
+def test_add_cookie_for_ip(session, url, server_config, configuration):
session.url = "http://127.0.0.1:%s/404" % (server_config["ports"]["http"][0])
clear_all_cookies(session)
create_cookie_request = {
"cookie": {
"name": "hello",
"value": "world",
- "domain": "127.0.0.1",
+ "domain": configuration["host"],
"path": "/",
"httpOnly": False,
"secure": False
}
}
result = session.transport.send("POST", "session/%s/cookie" % session.session_id, create_cookie_request)
assert result.status == 200
assert "value" in result.body
@@ -137,8 +136,42 @@ def test_add_session_cookie(session, url
assert isinstance(cookie["name"], basestring)
assert "value" in cookie
assert isinstance(cookie["value"], basestring)
assert "expiry" in cookie
assert cookie.get("expiry") is None
assert cookie["name"] == "hello"
assert cookie["value"] == "world"
+
+def test_add_session_cookie_with_leading_dot_character_in_domain(session, url, server_config):
+ session.url = url("/common/blank.html")
+ clear_all_cookies(session)
+ create_cookie_request = {
+ "cookie": {
+ "name": "hello",
+ "value": "world",
+ "domain": ".%s" % server_config["domains"][""]
+ }
+ }
+ result = session.transport.send("POST", "session/%s/cookie" % session.session_id, create_cookie_request)
+ assert result.status == 200
+ assert "value" in result.body
+ assert isinstance(result.body["value"], dict)
+
+ result = session.transport.send("GET", "session/%s/cookie" % session.session_id)
+ assert result.status == 200
+ assert "value" in result.body
+ assert isinstance(result.body["value"], list)
+ assert len(result.body["value"]) == 1
+ assert isinstance(result.body["value"][0], dict)
+
+ cookie = result.body["value"][0]
+ assert "name" in cookie
+ assert isinstance(cookie["name"], basestring)
+ assert "value" in cookie
+ assert isinstance(cookie["value"], basestring)
+ assert "domain" in cookie
+ assert isinstance(cookie["domain"], basestring)
+
+ assert cookie["name"] == "hello"
+ assert cookie["value"] == "world"
+ assert cookie["domain"] == ".%s" % server_config["domains"][""]
--- a/testing/web-platform/tests/webdriver/tests/cookies/get_named_cookie.py
+++ b/testing/web-platform/tests/webdriver/tests/cookies/get_named_cookie.py
@@ -56,35 +56,35 @@ def test_get_named_cookie(session, url):
assert "expiry" in cookie
assert isinstance(cookie["expiry"], (int, long))
assert cookie["name"] == "foo"
assert cookie["value"] == "bar"
# convert from seconds since epoch
assert datetime.utcfromtimestamp(cookie["expiry"]).strftime(utc_string_format) == a_year_from_now
-def test_duplicated_cookie(session, url):
+def test_duplicated_cookie(session, url, server_config):
session.url = url("/common/blank.html")
clear_all_cookies(session)
create_cookie_request = {
"cookie": {
"name": "hello",
"value": "world",
- "domain": "web-platform.test",
+ "domain": server_config["domains"][""],
"path": "/",
"httpOnly": False,
"secure": False
}
}
result = session.transport.send("POST", "session/%s/cookie" % session.session_id, create_cookie_request)
assert result.status == 200
assert "value" in result.body
assert isinstance(result.body["value"], dict)
- session.url = inline("<script>document.cookie = 'hello=newworld; domain=web-platform.test; path=/';</script>")
+ session.url = inline("<script>document.cookie = 'hello=newworld; domain=%s; path=/';</script>" % server_config["domains"][""])
result = session.transport.send("GET", "session/%s/cookie" % session.session_id)
assert result.status == 200
assert "value" in result.body
assert isinstance(result.body["value"], list)
assert len(result.body["value"]) == 1
assert isinstance(result.body["value"][0], dict)
cookie = result.body["value"][0]