/* 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=

Test page for content data uri request

`; 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; // Wait for the image to load. await once(imageNode, "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"); is( dimensions.textContent, "1" + " \u00D7 " + "1", "The image dimensions are correct" ); await teardown(monitor); });