Source code

Revision control

Copy as Markdown

Other Tools

/* Any copyright is dedicated to the Public Domain.
"use strict";
/* eslint no-unused-vars: [2, {"vars": "local", "args": "none"}] */
/* import-globals-from ../../../test/head.js */
// Load the NetMonitor head.js file to share its API.
var netMonitorHead =
Services.scriptloader.loadSubScript(netMonitorHead, this);
// Directory with HAR related test files.
const HAR_EXAMPLE_URL =
/**
* Trigger a "copy all as har" from the context menu of the requests list.
* @param {Object} monitor
* The network monitor object
*/
async function copyAllAsHARWithContextMenu(monitor, { asString = false } = {}) {
const { HarMenuUtils } = monitor.panelWin.windowRequire(
"devtools/client/netmonitor/src/har/har-menu-utils"
);
info("Open the context menu on the first visible request.");
const firstRequest =
monitor.panelWin.document.querySelectorAll(".request-list-item")[0];
EventUtils.sendMouseEvent({ type: "mousedown" }, firstRequest);
EventUtils.sendMouseEvent({ type: "contextmenu" }, firstRequest);
info("Trigger Copy All As HAR from the context menu");
const onHarCopyDone = HarMenuUtils.once("copy-all-as-har-done");
await selectContextMenuItem(monitor, "request-list-context-copy-all-as-har");
const jsonString = await onHarCopyDone;
if (asString) {
return jsonString;
}
return JSON.parse(jsonString);
}
/**
* Trigger a "save as har" from the context menu of the requests list.
* @param {Object} monitor
* The network monitor object
*/
async function saveAsHARWithContextMenu(monitor, { asString = false } = {}) {
info("Open the context menu on the first visible request.");
const firstRequest =
monitor.panelWin.document.querySelectorAll(".request-list-item")[0];
EventUtils.sendMouseEvent({ type: "mousedown" }, firstRequest);
EventUtils.sendMouseEvent({ type: "contextmenu" }, firstRequest);
info("Trigger Save As HAR from the context menu");
await selectContextMenuItem(monitor, "request-list-context-save-as-har");
info("Mock the file picker dialog to save the HAR file to disk");
const MockFilePicker = SpecialPowers.MockFilePicker;
MockFilePicker.init(window.browsingContext);
const nsiFile = new FileUtils.File(
PathUtils.join(PathUtils.tempDir, `save_as_har-${Date.now()}.har`)
);
MockFilePicker.setFiles([nsiFile]);
const path = nsiFile.path;
info("Wait for the downloaded file to be fully saved to disk");
await BrowserTestUtils.waitForCondition(() => IOUtils.exists(path));
await BrowserTestUtils.waitForCondition(async () => {
const { size } = await IOUtils.stat(path);
return size > 0;
});
const buffer = await IOUtils.read(path);
const savedFileContent = new TextDecoder().decode(buffer);
if (asString) {
return savedFileContent;
}
return JSON.parse(savedFileContent);
}