forked from mirrors/gecko-dev
102 lines
3.8 KiB
JavaScript
102 lines
3.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"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
|
|
// `new Date` might be unable to parse them. See Bug 1800448.
|
|
|
|
// 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);
|
|
}
|