Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: http3 OR http2
- Manifest: devtools/client/storage/test/browser.toml
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
// Test endless scrolling when a lot of items are present in the storage
// inspector table.
"use strict";
const ITEMS_PER_PAGE = 50;
add_task(async function () {
await openTabAndSetupStorage(MAIN_DOMAIN_SECURED + "storage-overflow.html");
info("Run the tests with short DevTools");
await runTests();
info("Close Toolbox");
await gDevTools.closeToolboxForTab(gBrowser.selectedTab);
info("Set a toolbox height of 1000px");
await pushPref("devtools.toolbox.footer.height", 1000);
info("Open storage panel again");
await openStoragePanel();
info("Run the tests with tall DevTools");
await runTests(true);
});
async function runTests(tall) {
if (tall) {
// We need to zoom out and a tall storage panel in order to fit more than 50
// items in the table. We do this to ensure that we load enough content to
// show a scrollbar so that we can still use infinite scrolling.
zoom(0.5);
}
gUI.tree.expandAll();
if (tall) {
if (getCellLength() === ITEMS_PER_PAGE) {
await scrollToAddItems();
await waitForStorageData("item-100", "value-100");
}
if (getCellLength() === ITEMS_PER_PAGE * 2) {
await scrollToAddItems();
await waitForStorageData("item-150", "value-150");
}
if (getCellLength() === ITEMS_PER_PAGE * 3) {
await scrollToAddItems();
await waitForStorageData("item-151", "value-151");
}
} else {
checkCellLength(ITEMS_PER_PAGE);
await scrollToAddItems();
await waitForStorageData("item-100", "value-100");
checkCellLength(ITEMS_PER_PAGE * 2);
await scrollToAddItems();
await waitForStorageData("item-150", "value-150");
checkCellLength(ITEMS_PER_PAGE * 3);
await scrollToAddItems();
await waitForStorageData("item-151", "value-151");
}
is(getCellLength(), 151, "Storage table contains 151 items");
// Check that the columns are sorted in a human readable way (ascending).
checkCellValues("ASC");
// Sort descending.
clickColumnHeader("name");
// Check that the columns are sorted in a human readable way (descending).
checkCellValues("DEC");
if (tall) {
zoom(1);
}
}
function checkCellValues(order) {
const cells = [
...gPanelWindow.document.querySelectorAll("#name .table-widget-cell"),
];
cells.forEach(function (cell, index, arr) {
const i = order === "ASC" ? index + 1 : arr.length - index;
is(cell.value, `item-${i}`, `Cell value is "item-${i}" (${order}).`);
});
}
async function scrollToAddItems() {
info(`Scrolling to add ${ITEMS_PER_PAGE} items`);
await scroll();
}
function zoom(zoomValue) {
const bc = BrowsingContext.getFromWindow(gPanelWindow);
bc.fullZoom = zoomValue;
}