1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
6 var MockFilePicker
= SpecialPowers
.MockFilePicker
;
7 MockFilePicker
.init(window
.browsingContext
);
10 * Tests if saving a response to a file works..
13 add_task(async
function () {
14 const { tab
, monitor
} = await
initNetMonitor(
15 CONTENT_TYPE_WITHOUT_CACHE_URL
,
18 info("Starting test... ");
20 const { document
} = monitor
.panelWin
;
23 await
performRequests(monitor
, tab
, CONTENT_TYPE_WITHOUT_CACHE_REQUESTS
);
25 // Create the folder the gzip file will be saved into
26 const destDir
= createTemporarySaveDirectory();
29 MockFilePicker
.displayDirectory
= destDir
;
30 const saveDialogClosedPromise
= new Promise(resolve
=> {
31 MockFilePicker
.showCallback = function (fp
) {
32 info("MockFilePicker showCallback");
33 const fileName
= fp
.defaultString
;
34 destFile
= destDir
.clone();
35 destFile
.append(fileName
);
36 MockFilePicker
.setFiles([destFile
]);
38 resolve(destFile
.path
);
42 registerCleanupFunction(function () {
43 MockFilePicker
.cleanup();
47 // Select gzip request.
49 info("Open the context menu");
51 EventUtils
.sendMouseEvent(
52 { type
: "mousedown" },
53 document
.querySelectorAll(".request-list-item")[6]
56 EventUtils
.sendMouseEvent(
57 { type
: "contextmenu" },
58 document
.querySelectorAll(".request-list-item")[6]
61 info("Open the save dialog");
62 await
selectContextMenuItem(monitor
, "request-list-context-save-response-as");
64 info("Wait for the save dialog to close");
65 const savedPath
= await saveDialogClosedPromise
;
67 const expectedFile
= destDir
.clone();
68 expectedFile
.append("sjs_content-type-test-server.sjs");
70 is(savedPath
, expectedFile
.path
, "Response was saved to correct path");
72 info("Wait for the downloaded file to be fully saved to disk: " + savedPath
);
73 await TestUtils
.waitForCondition(async () => {
74 if (!(await IOUtils
.exists(savedPath
))) {
77 const { size
} = await IOUtils
.stat(savedPath
);
81 const buffer
= await IOUtils
.read(savedPath
);
82 const savedFileContent
= new TextDecoder().decode(buffer
);
84 // The content is set by https://searchfox.org/mozilla-central/source/devtools/client/netmonitor/test/sjs_content-type-test-server.sjs#360
88 new Array(1000).join("Hello gzip!"),
89 "Saved response has the correct text"
92 await
teardown(monitor
);
95 function createTemporarySaveDirectory() {
96 const saveDir
= Services
.dirsvc
.get("TmpD", Ci
.nsIFile
);
97 saveDir
.append("testsavedir");
98 if (!saveDir
.exists()) {
99 saveDir
.create(Ci
.nsIFile
.DIRECTORY_TYPE
, 0o755);