Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Tests if Open in new tab works by ContextMenu.
*/
add_task(async function () {
const { tab, monitor } = await initNetMonitor(OPEN_REQUEST_IN_TAB_URL, {
requestCount: 1,
});
info("Starting test...");
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
let newTab;
store.dispatch(Actions.batchEnable(false));
// Post data may be fetched by the Header panel,
// so set the Timings panel as the new default.
store.getState().ui.detailsPanelSelectedTab = "timings";
// Open GET request in new tab
await performRequest(monitor, tab, "GET");
newTab = await openLastRequestInTab();
await checkTabResponse(newTab, "GET");
gBrowser.removeCurrentTab();
// Open POST request in new tab
await performRequest(
monitor,
tab,
"POST",
"application/x-www-form-urlencoded",
"foo=bar&baz=42"
);
newTab = await openLastRequestInTab();
await checkTabResponse(
newTab,
"POST",
"application/x-www-form-urlencoded",
"foo=bar&baz=42"
);
gBrowser.removeCurrentTab();
// Open POST application/json request in new tab
await performRequest(
monitor,
tab,
"POST",
"application/json",
'{"foo":"bar"}'
);
newTab = await openLastRequestInTab();
await checkTabResponse(newTab, "POST", "application/json", '{"foo":"bar"}');
gBrowser.removeCurrentTab();
await teardown(monitor);
// OpenLastRequestInTab by ContextMenu
async function openLastRequestInTab() {
const requestItems = document.querySelectorAll(".request-list-item");
const lastRequest = requestItems[requestItems.length - 1];
EventUtils.sendMouseEvent({ type: "mousedown" }, lastRequest);
EventUtils.sendMouseEvent({ type: "contextmenu" }, lastRequest);
const onTabOpen = once(gBrowser.tabContainer, "TabOpen", false);
await selectContextMenuItem(monitor, "request-list-context-newtab");
await onTabOpen;
info("A new tab has been opened");
const awaitedTab = gBrowser.selectedTab;
await BrowserTestUtils.browserLoaded(awaitedTab.linkedBrowser);
info("The tab load completed");
return awaitedTab;
}
});
/**
* Tests if Open in new tab works by DoubleClick RequestItem.
*/
add_task(async function () {
const { tab, monitor } = await initNetMonitor(OPEN_REQUEST_IN_TAB_URL, {
requestCount: 1,
});
info("Starting test...");
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
let newTab;
store.dispatch(Actions.batchEnable(false));
// Post data may be fetched by the Header panel,
// so set the Timings panel as the new default.
store.getState().ui.detailsPanelSelectedTab = "timings";
// Open GET request in new tab
await performRequest(monitor, tab, "GET");
newTab = await openLastRequestInTab();
await checkTabResponse(newTab, "GET");
gBrowser.removeCurrentTab();
// Open POST request in new tab
await performRequest(
monitor,
tab,
"POST",
"application/x-www-form-urlencoded",
"foo=bar&baz=42"
);
newTab = await openLastRequestInTab();
await checkTabResponse(
newTab,
"POST",
"application/x-www-form-urlencoded",
"foo=bar&baz=42"
);
gBrowser.removeCurrentTab();
// Open POST application/json request in new tab
await performRequest(
monitor,
tab,
"POST",
"application/json",
'{"foo":"bar"}'
);
newTab = await openLastRequestInTab();
await checkTabResponse(newTab, "POST", "application/json", '{"foo":"bar"}');
gBrowser.removeCurrentTab();
await teardown(monitor);
// OpenLastRequestInTab by DoubleClick
async function openLastRequestInTab() {
const requestItems = document.querySelectorAll(".request-list-item");
const lastRequest = requestItems[requestItems.length - 1];
const onTabOpen = once(gBrowser.tabContainer, "TabOpen", false);
EventUtils.sendMouseEvent({ type: "dblclick" }, lastRequest);
await onTabOpen;
info("A new tab has been opened");
const awaitedTab = gBrowser.selectedTab;
await BrowserTestUtils.browserLoaded(awaitedTab.linkedBrowser);
info("The tab load completed");
return awaitedTab;
}
});
/**
* Tests if Open in new tab works by middle click RequestItem.
*/
add_task(async function () {
const { tab, monitor } = await initNetMonitor(OPEN_REQUEST_IN_TAB_URL, {
requestCount: 1,
});
const MIDDLE_MOUSE_BUTTON = 1;
info("Starting test...");
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
let newTab;
store.dispatch(Actions.batchEnable(false));
// Post data may be fetched by the Header panel,
// so set the Timings panel as the new default.
store.getState().ui.detailsPanelSelectedTab = "timings";
// Open GET request in new tab
await performRequest(monitor, tab, "GET");
newTab = await openLastRequestInTab();
await checkTabResponse(newTab, "GET");
gBrowser.removeCurrentTab();
// Open POST request in new tab
await performRequest(
monitor,
tab,
"POST",
"application/x-www-form-urlencoded",
"foo=bar&baz=42"
);
newTab = await openLastRequestInTab();
await checkTabResponse(
newTab,
"POST",
"application/x-www-form-urlencoded",
"foo=bar&baz=42"
);
gBrowser.removeCurrentTab();
// Open POST application/json request in new tab
await performRequest(
monitor,
tab,
"POST",
"application/json",
'{"foo":"bar"}'
);
newTab = await openLastRequestInTab();
await checkTabResponse(newTab, "POST", "application/json", '{"foo":"bar"}');
gBrowser.removeCurrentTab();
await teardown(monitor);
// OpenLastRequestInTab by middle click
async function openLastRequestInTab() {
const requestItems = document.querySelectorAll(".request-list-item");
const lastRequest = requestItems[requestItems.length - 1];
const onTabOpen = once(gBrowser.tabContainer, "TabOpen", false);
EventUtils.sendMouseEvent(
{ type: "mousedown", button: MIDDLE_MOUSE_BUTTON },
lastRequest
);
await onTabOpen;
info("A new tab has been opened");
const awaitedTab = gBrowser.selectedTab;
await BrowserTestUtils.browserLoaded(awaitedTab.linkedBrowser);
info("The tab load completed");
return awaitedTab;
}
});
async function performRequest(monitor, tab, method, contentType, payload) {
const wait = waitForNetworkEvents(monitor, 1);
await SpecialPowers.spawn(
tab.linkedBrowser,
[[method, contentType, payload]],
async function ([method_, contentType_, payload_]) {
content.wrappedJSObject.performRequest(method_, contentType_, payload_);
}
);
await wait;
info("Performed request to test server");
}
async function checkTabResponse(checkedTab, method, contentType, payload) {
await SpecialPowers.spawn(
checkedTab.linkedBrowser,
[[method, contentType, payload]],
async function ([method_, contentType_, payload_]) {
const { body } = content.wrappedJSObject.document;
const expected = [method_, contentType_, payload_].join("\n");
info("Response from the server:" + body.innerHTML.replace(/\n/g, "\\n"));
ok(
body.innerHTML.includes(expected),
"Tab method and data match original request"
);
}
);
}