1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
"use strict";
const { HttpServer } = ChromeUtils.import("resource://testing-common/httpd.js");
const TEST_DOMAIN = "www.example.com";
XPCOMUtils.defineLazyGetter(this, "URL", function() {
return (
"http://" + TEST_DOMAIN + ":" + httpserv.identity.primaryPort + "/path"
);
});
const responseBody1 = "response";
function requestHandler(metadata, response) {
response.setHeader("Content-Type", "text/plain");
response.setHeader("Set-Cookie", "tom=cool; Max-Age=10", true);
response.bodyOutputStream.write(responseBody1, responseBody1.length);
}
let httpserv = null;
function run_test() {
httpserv = new HttpServer();
httpserv.registerPathHandler("/path", requestHandler);
httpserv.start(-1);
httpserv.identity.add("http", TEST_DOMAIN, httpserv.identity.primaryPort);
registerCleanupFunction(() => {
Services.cookies.removeCookiesWithOriginAttributes("{}", TEST_DOMAIN);
Services.prefs.clearUserPref("network.dns.localDomains");
Services.prefs.clearUserPref("network.cookie.cookieBehavior");
Services.prefs.clearUserPref(
"network.cookieJarSettings.unblocked_for_testing"
);
httpserv.stop();
httpserv = null;
});
Services.prefs.setBoolPref(
"network.cookieJarSettings.unblocked_for_testing",
true
);
Services.prefs.setCharPref("network.dns.localDomains", TEST_DOMAIN);
Services.prefs.setIntPref("network.cookie.cookieBehavior", 0);
Services.cookies.removeCookiesWithOriginAttributes("{}", TEST_DOMAIN);
// Sends back the URL to the child script
do_await_remote_message("start-test").then(() => {
do_send_remote_message("start-test-done", URL);
});
// Sends back the cookie count for the domain
// Should only be one - from Set-Cookie
do_await_remote_message("check-cookie-count").then(() => {
do_send_remote_message(
"check-cookie-count-done",
Services.cookies.countCookiesFromHost(TEST_DOMAIN)
);
});
// Sends back the cookie count for the domain
// There should be 2 cookies. One from the Set-Cookie header, the other set
// manually.
do_await_remote_message("second-check-cookie-count").then(() => {
do_send_remote_message(
"second-check-cookie-count-done",
Services.cookies.countCookiesFromHost(TEST_DOMAIN)
);
});
// Sets a cookie for the test domain
do_await_remote_message("set-cookie").then(() => {
const expiry = Date.now() + 24 * 60 * 60;
Services.cookies.add(
TEST_DOMAIN,
"/",
"cookieName",
"cookieValue",
false,
false,
false,
expiry,
{},
Ci.nsICookie.SAMESITE_NONE,
Ci.nsICookie.SCHEME_HTTPS
);
do_send_remote_message("set-cookie-done");
});
// Run the actual test logic
run_test_in_child("child_cookie_header.js");
}
|