Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: http3 OR http2
- Manifest: devtools/client/netmonitor/test/browser.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
const CACHE_TEST_URL = EXAMPLE_URL + "html_cache-test-page.html";
// Test the cache details panel.
add_task(async function () {
const { monitor } = await initNetMonitor(CACHE_TEST_URL, {
enableCache: true,
requestCount: 1,
});
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
info("Create a 200 request");
let waitForRequest = waitForNetworkEvents(monitor, 1);
await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
content.wrappedJSObject.sendRequestWithStatus("200");
});
await waitForRequest;
info("Select the request and wait until the headers panel is displayed");
store.dispatch(Actions.selectRequestByIndex(0));
await waitFor(() => document.querySelector(".headers-overview"));
ok(
!document.querySelector("#cache-tab"),
"No cache panel is available for the 200 request"
);
info("Create a 304 request");
waitForRequest = waitForNetworkEvents(monitor, 1);
await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
content.wrappedJSObject.sendRequestWithStatus("304");
});
await waitForRequest;
info("Select the request and wait until the headers panel is displayed");
store.dispatch(Actions.selectRequestByIndex(1));
await waitFor(() => document.querySelector(".headers-overview"));
ok(
document.querySelector("#cache-tab"),
"A cache panel is available for the 304 request"
);
document.querySelector("#cache-tab").click();
info("Wait until the Cache panel content is displayed");
await waitFor(() => !!document.getElementById("/Cache"));
const device = getCacheDetailsValue(document, "Device");
is(device, "Not Available", "device information is `Not Available`");
// We cannot precisely assert the dates rendered by the cache panel because
// they are formatted using toLocaleDateString/toLocaleTimeString, and
// For "last modified" should be the same day as the test, and we could assert
// that. However the cache panel is intermittently fully "Not available",
// except for the "Expires" field, which seems to always have a value.
const lastModified = getCacheDetailsValue(document, "Last Modified");
info("Retrieved lastModified value: " + lastModified);
ok(!!lastModified, "Last Modified was found in the cache panel");
// For "expires" we will only check that this is not set to `Not Available`.
const expires = getCacheDetailsValue(document, "Expires");
info("Retrieved expires value: " + expires);
ok(
!expires.includes("Not Available"),
"Expires is set to a value other than unavailable"
);
});
/**
* Helper to retrieve individual values from the Cache details panel.
* Eg, for `Expires: "11/9/2022 6:54:33 PM"`, this should return
* "11/9/2022 6:54:33 PM".
*
* @param {Document} doc
* The netmonitor document.
* @param {string} cacheItemId
* The id of the cache element to retrieve. See netmonitor.cache.* localized
* strings.
*
* @returns {string}
* The value corresponding to the provided id.
*/
function getCacheDetailsValue(doc, cacheItemId) {
const container = doc.getElementById("/Cache/" + cacheItemId);
ok(!!container, `Found the cache panel container for id ${cacheItemId}`);
const valueContainer = container.querySelector(".treeValueCell span");
ok(
!!valueContainer,
`Found the cache panel value container for id ${cacheItemId}`
);
// The values have opening and closing quotes, remove them using substring.
// `"some value"` -> `some value`
const quotedValue = valueContainer.textContent;
return quotedValue.substring(1, quotedValue.length - 1);
}