Update the implementation of `waitForDOM` to use `waitFor` instead of mutations. Remove `waitForDOMIfNeeded` in netmonitor, which becomes the standard behavior for `waitForDOM` now. Add meaningful logs when starting to wait and when resolving or rejecting. Differential Revision: https://phabricator.services.mozilla.com/D294427
131 lines
4.0 KiB
JavaScript
131 lines
4.0 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* Tests that navigation request to a data uri is correctly logged in the
|
|
* network monitor.
|
|
*/
|
|
add_task(async function test_navigation_to_data_uri() {
|
|
const URL = "data:text/html,Hello from data-url!";
|
|
const { monitor } = await initNetMonitor(URL, {
|
|
requestCount: 1,
|
|
waitForLoad: false,
|
|
});
|
|
info("Starting 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);
|
|
reloadSelectedTab({ waitForLoad: false });
|
|
await wait;
|
|
|
|
const firstItem = document.querySelectorAll(".request-list-item")[0];
|
|
|
|
is(
|
|
firstItem.querySelector(".requests-list-url").innerText,
|
|
URL,
|
|
"The url in the displayed request is correct"
|
|
);
|
|
is(
|
|
firstItem.querySelector(".requests-list-scheme").innerText,
|
|
"data",
|
|
"The scheme in the displayed request is correct"
|
|
);
|
|
is(
|
|
firstItem.querySelector(".requests-list-file").innerText,
|
|
URL,
|
|
"The file in the displayed request is correct"
|
|
);
|
|
ok(hasValidSize(firstItem), "The request shows a valid size");
|
|
|
|
await teardown(monitor);
|
|
});
|
|
|
|
/**
|
|
* Tests that requests to data URIs made from a content page are logged in the
|
|
* network monitor.
|
|
*/
|
|
add_task(async function test_content_request_to_data_uri() {
|
|
const IMAGE_URL =
|
|
"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
|
|
const URL = `https://example.com/document-builder.sjs?html=
|
|
<h1>Test page for content data uri request</h1>`;
|
|
|
|
const { monitor, tab } = await initNetMonitor(URL, {
|
|
requestCount: 1,
|
|
waitForLoad: false,
|
|
});
|
|
info("Starting test... ");
|
|
|
|
const { document, store, windowRequire } = monitor.panelWin;
|
|
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
|
|
|
|
store.dispatch(Actions.batchEnable(false));
|
|
|
|
let onNetworkEvents = waitForNetworkEvents(monitor, 1);
|
|
reloadSelectedTab({ waitForLoad: false });
|
|
await onNetworkEvents;
|
|
|
|
info("Load an image in content with a data URI");
|
|
onNetworkEvents = waitForNetworkEvents(monitor, 1);
|
|
await SpecialPowers.spawn(tab.linkedBrowser, [IMAGE_URL], imageURL => {
|
|
const img = content.document.createElement("img");
|
|
img.src = imageURL;
|
|
content.document.body.appendChild(img);
|
|
});
|
|
await onNetworkEvents;
|
|
|
|
const firstItem = document.querySelectorAll(".request-list-item")[1];
|
|
|
|
is(
|
|
firstItem.querySelector(".requests-list-url").innerText,
|
|
IMAGE_URL,
|
|
"The url in the displayed request is correct"
|
|
);
|
|
is(
|
|
firstItem.querySelector(".requests-list-scheme").innerText,
|
|
"data",
|
|
"The scheme in the displayed request is correct"
|
|
);
|
|
is(
|
|
firstItem.querySelector(".requests-list-file").innerText,
|
|
IMAGE_URL,
|
|
"The file in the displayed request is correct"
|
|
);
|
|
ok(hasValidSize(firstItem), "The request shows a valid size");
|
|
|
|
info("Check that image details are properly displayed in the response panel");
|
|
const waitDOM = waitForDOM(document, "#response-panel .response-image");
|
|
store.dispatch(Actions.selectRequestByIndex(1));
|
|
document.querySelector("#response-tab").click();
|
|
const [imageNode] = await waitDOM;
|
|
|
|
await waitFor(
|
|
() => imageNode.complete === true && imageNode.naturalWidth > 0,
|
|
"Wait for the image to load"
|
|
);
|
|
|
|
const [name, dimensions, mime] = document.querySelectorAll(
|
|
".response-image-box .tabpanel-summary-value"
|
|
);
|
|
|
|
// Bug 1975453: Name is truncated to yH5BAEAAAAALAAAAAABAAEAAAIBRAA7.
|
|
todo_is(
|
|
name.textContent,
|
|
"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
|
|
"The image name matches the base 64 string"
|
|
);
|
|
is(mime.textContent, "image/gif", "The image mime info is image/gif");
|
|
await waitFor(
|
|
() => dimensions.textContent === "1" + " \u00D7 " + "1",
|
|
"The image dimensions are correct"
|
|
);
|
|
|
|
await teardown(monitor);
|
|
});
|