Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Test that the URL Preview can be copied
*/
add_task(async function () {
const { monitor } = await initNetMonitor(SIMPLE_URL, {
requestCount: 1,
});
info("Starting the url preview copy test... ");
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
store.dispatch(Actions.batchEnable(false));
const wait = waitForNetworkEvents(monitor, 1);
await reloadBrowser();
await wait;
store.dispatch(Actions.toggleNetworkDetails());
await waitForDOM(document, "#headers-panel .url-preview", 1);
const urlPreview = document.querySelector("#headers-panel .url-preview");
const urlRow = urlPreview.querySelector(".objectRow");
/* Test for copy value on the url */
EventUtils.sendMouseEvent({ type: "contextmenu" }, urlRow);
await waitForClipboardPromise(async function setup() {
await selectContextMenuItem(
monitor,
"properties-view-context-menu-copyvalue"
);
ok(true, "The copy value action put expected url string into clipboard");
/* Test for copy all */
EventUtils.sendMouseEvent({ type: "contextmenu" }, urlRow);
const expected = JSON.stringify(
{
GET: {
scheme: "http",
host: "example.com",
filename:
"/browser/devtools/client/netmonitor/test/html_simple-test-page.html",
remote: {
Address: "127.0.0.1:8888",
},
},
},
null,
"\t"
);
await waitForClipboardPromise(async function setup() {
await selectContextMenuItem(
monitor,
"properties-view-context-menu-copyall"
);
}, expected);
ok(true, "The copy all action put expected json data into clipboard");
await teardown(monitor);
});
/**
* Test that the Headers summary can be copied
*/
add_task(async function () {
const { monitor } = await initNetMonitor(SIMPLE_URL, {
requestCount: 1,
});
info("Starting the headers summary copy test... ");
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
store.dispatch(Actions.batchEnable(false));
const wait = waitForNetworkEvents(monitor, 1);
await reloadBrowser();
await wait;
store.dispatch(Actions.toggleNetworkDetails());
await waitForDOM(document, "#headers-panel .summary", 1);
const headersSummary = document.querySelector("#headers-panel .summary");
const httpSummaryValue = headersSummary.querySelectorAll(
".tabpanel-summary-value"
)[1];
/* Test for copy value */
EventUtils.sendMouseEvent({ type: "contextmenu" }, httpSummaryValue);
await waitForClipboardPromise(async function setup() {
await selectContextMenuItem(
monitor,
"headers-panel-context-menu-copyvalue"
);
}, "HTTP/1.1");
ok(true, "The copy value action put expected text into clipboard");
/* Test for copy all */
EventUtils.sendMouseEvent({ type: "contextmenu" }, httpSummaryValue);
const expected = JSON.stringify(
{
Status: "200OK",
Version: "HTTP/1.1",
Transferred: "650 B (465 B size)",
"Request Priority": "Highest",
"DNS Resolution": "System",
},
null,
"\t"
);
await waitForClipboardPromise(async function setup() {
await selectContextMenuItem(monitor, "headers-panel-context-menu-copyall");
}, expected);
ok(true, "The copy all action put expected json into clipboard");
await teardown(monitor);
});
/**
* Test if response JSON in PropertiesView can be copied
*/
add_task(async function () {
const { tab, monitor } = await initNetMonitor(
JSON_BASIC_URL + "?name=nogrip",
{ requestCount: 1 }
);
info("Starting the json in properties view copy test... ");
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
store.dispatch(Actions.batchEnable(false));
await performRequests(monitor, tab, 1);
const onResponsePanelReady = waitForDOM(
document,
"#response-panel .treeTable"
);
store.dispatch(Actions.toggleNetworkDetails());
clickOnSidebarTab(document, "response");
await onResponsePanelReady;
const responsePanel = document.querySelector("#response-panel");
const objectRow = responsePanel.querySelectorAll(".objectRow")[0];
// Open the node to get the string
const waitOpenNode = waitForDOM(document, ".stringRow");
const toggleButton = objectRow.querySelector("td span.treeIcon");
toggleButton.click();
await waitOpenNode;
const stringRow = responsePanel.querySelectorAll(".stringRow")[0];
/* Test for copy value on an object */
EventUtils.sendMouseEvent({ type: "contextmenu" }, objectRow);
const expected = JSON.stringify({ obj: { type: "string" } }, null, "\t");
await waitForClipboardPromise(async function setup() {
await selectContextMenuItem(
monitor,
"properties-view-context-menu-copyvalue"
);
}, expected);
ok(true, "The copy value action put expected json into clipboard");
/* Test for copy all */
EventUtils.sendMouseEvent({ type: "contextmenu" }, objectRow);
await waitForClipboardPromise(async function setup() {
await selectContextMenuItem(
monitor,
"properties-view-context-menu-copyall"
);
}, expected);
ok(true, "The copy all action put expected json into clipboard");
/* Test for copy value of a single row */
EventUtils.sendMouseEvent({ type: "contextmenu" }, stringRow);
await waitForClipboardPromise(async function setup() {
await selectContextMenuItem(
monitor,
"properties-view-context-menu-copyvalue"
);
}, "string");
ok(true, "The copy value action put expected text into clipboard");
await teardown(monitor);
});
/**
* Test if response/request Cookies in PropertiesView can be copied
*/
add_task(async function () {
const { monitor } = await initNetMonitor(SIMPLE_UNSORTED_COOKIES_SJS, {
requestCount: 1,
});
info(
"Starting the request/response cookies in properties view copy test... "
);
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
store.dispatch(Actions.batchEnable(false));
let wait = waitForNetworkEvents(monitor, 1);
await reloadBrowser();
await wait;
wait = waitForDOM(document, ".headers-overview");
EventUtils.sendMouseEvent(
{ type: "mousedown" },
document.querySelectorAll(".request-list-item")[0]
);
await wait;
EventUtils.sendMouseEvent(
{ type: "mousedown" },
document.querySelectorAll(".request-list-item")[0]
);
clickOnSidebarTab(document, "cookies");
const cookiesPanel = document.querySelector("#cookies-panel");
const objectRows = cookiesPanel.querySelectorAll(".objectRow");
const stringRows = cookiesPanel.querySelectorAll(".stringRow");
const expectedResponseCookies = [
`{
"__proto__": {
"httpOnly": true,
"value": "2"
}
}`,
`{
"bob": {
"httpOnly": true,
"value": "true"
}
}`,
`{
"foo": {
"httpOnly": true,
"value": "bar"
}
}`,
`{
"tom": {
"httpOnly": true,
"value": "cool"
}
}`,
];
for (let i = 0; i < objectRows.length; i++) {
const cur = objectRows[i];
EventUtils.sendMouseEvent({ type: "contextmenu" }, cur);
await waitForClipboardPromise(async function setup() {
await selectContextMenuItem(
monitor,
"properties-view-context-menu-copyvalue"
);
}, expectedResponseCookies[i]);
}
const expectedRequestCookies = ["2", "true", "bar", "cool"];
for (let i = 0; i < expectedRequestCookies.length; i++) {
const cur = stringRows[objectRows.length + i];
EventUtils.sendMouseEvent({ type: "contextmenu" }, cur);
await waitForClipboardPromise(async function setup() {
await selectContextMenuItem(
monitor,
"properties-view-context-menu-copyvalue"
);
}, expectedRequestCookies[i]);
}
await teardown(monitor);
});