Bug 1924993 - [devtools] Debugger tests wait before typing in conditional panel r...
[gecko.git] / devtools / client / netmonitor / test / browser_net_save_response_as.js
blob638fb50794c739a8857e3349f4417779f4de21a7
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
4 "use strict";
6 var MockFilePicker = SpecialPowers.MockFilePicker;
7 MockFilePicker.init(window.browsingContext);
9 /**
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,
16 { requestCount: 1 }
18 info("Starting test... ");
20 const { document } = monitor.panelWin;
22 // Execute requests.
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();
27 let destFile;
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);
40 });
42 registerCleanupFunction(function () {
43 MockFilePicker.cleanup();
44 destDir.remove(true);
45 });
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))) {
75 return false;
77 const { size } = await IOUtils.stat(savedPath);
78 return size > 0;
79 });
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
85 // (the "gzip" case)
86 is(
87 savedFileContent,
88 new Array(1000).join("Hello gzip!"),
89 "Saved response has the correct text"
92 await teardown(monitor);
93 });
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);
101 return saveDir;