1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
6 const TEST_PATH
= getRootDirectory(gTestPath
).replace(
7 "chrome://mochitests/content",
10 const TEST_PATH2
= getRootDirectory(gTestPath
).replace(
11 "chrome://mochitests/content",
15 var MockFilePicker
= SpecialPowers
.MockFilePicker
;
16 MockFilePicker
.init(window
.browsingContext
);
18 registerCleanupFunction(async
function () {
19 info("Running the cleanup code");
20 MockFilePicker
.cleanup();
21 Services
.obs
.removeObserver(checkRequest
, "http-on-modify-request");
22 SpecialPowers
.clearUserPref("network.cookie.sameSite.laxByDefault");
23 if (gTestDir
&& gTestDir
.exists()) {
24 // On Windows, sometimes nsIFile.remove() throws, probably because we're
25 // still writing to the directory we're trying to remove, despite
26 // waiting for the download to complete. Just retry a bit later...
27 let succeeded
= false;
30 gTestDir
.remove(true);
33 await
new Promise(requestAnimationFrame
);
41 function checkRequest(subject
) {
42 let httpChannel
= subject
.QueryInterface(Ci
.nsIHttpChannel
);
43 let spec
= httpChannel
.URI
.spec
;
44 // Ignore initial requests for page that sets cookies and its favicon, which may not have
47 httpChannel
.URI
.host
== "example.org" &&
48 !spec
.endsWith("favicon.ico") &&
49 !spec
.includes("redirect.sjs")
51 let cookie
= httpChannel
.getRequestHeader("cookie");
55 "Should have correct cookie in request for " + spec
60 function createTemporarySaveDirectory() {
61 var saveDir
= Services
.dirsvc
.get("TmpD", Ci
.nsIFile
);
62 saveDir
.append("testsavedir");
63 if (!saveDir
.exists()) {
64 info("create testsavedir!");
65 saveDir
.create(Ci
.nsIFile
.DIRECTORY_TYPE
, 0o755);
67 info("return from createTempSaveDir: " + saveDir
.path
);
71 add_task(async
function () {
72 // Use nsICookieService.BEHAVIOR_REJECT_TRACKER to avoid cookie partitioning.
73 // In this test case, if the cookie is partitioned, there will be no cookie
74 // nsICookieServicebeing sent to compare.
75 await SpecialPowers
.pushPrefEnv({
77 ["network.cookie.cookieBehavior", 4],
78 // Bug 1617611: Fix all the tests broken by "cookies SameSite=lax by default"
79 ["network.cookie.sameSite.laxByDefault", false],
83 await BrowserTestUtils
.withNewTab("about:blank", async
function (browser
) {
84 Services
.obs
.addObserver(checkRequest
, "http-on-modify-request");
85 BrowserTestUtils
.startLoadingURIString(
87 TEST_PATH
+ "set-samesite-cookies-and-redirect.sjs"
89 // Test that the original document load doesn't send same-site cookies.
90 await BrowserTestUtils
.browserLoaded(
93 TEST_PATH2
+ "set-samesite-cookies-and-redirect.sjs"
95 // Now check the saved page.
96 // Create the folder the link will be saved into.
97 gTestDir
= createTemporarySaveDirectory();
98 let destFile
= gTestDir
.clone();
100 MockFilePicker
.displayDirectory
= gTestDir
;
102 MockFilePicker
.showCallback = function (fp
) {
103 info("showCallback");
104 fileName
= fp
.defaultString
;
105 info("fileName: " + fileName
);
106 destFile
.append(fileName
);
107 info("path: " + destFile
.path
);
108 MockFilePicker
.setFiles([destFile
]);
109 MockFilePicker
.filterIndex
= 0; // kSaveAsType_Complete
110 info("done showCallback");
112 saveBrowser(browser
);
113 let dls
= await Downloads
.getList(Downloads
.PUBLIC
);
114 await
new Promise((resolve
, reject
) => {
116 onDownloadChanged(download
) {
117 if (download
.succeeded
) {
118 dls
.removeView(this);
119 dls
.removeFinished();
121 } else if (download
.error
) {
122 reject("Download failed");