/* 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 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // 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(); await selectTreeItem(["localStorage", "https://test1.example.org"]); 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; }