blob: 6622a61933cac05a8572a37787cf03ae82a952cb [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {assert} from 'chai';
import {
getPieChartLegendRows,
getQuotaUsage,
navigateToApplicationTab,
navigateToStorage,
waitForQuotaUsage,
} from '../helpers/application-helpers.js';
import type {DevToolsPage} from '../shared/frontend-helper.js';
import type {InspectedPage} from '../shared/target-helper.js';
// The parent suffix makes sure we wait for the Cookies item to have children before trying to click it.
const CLEAR_SITE_DATA_BUTTON_SELECTOR = '#storage-view-clear-button';
async function navigateToAppStorage(devToolsPage: DevToolsPage, inspectedPage: InspectedPage) {
await navigateToApplicationTab('storage-quota', devToolsPage, inspectedPage);
await navigateToStorage(devToolsPage);
}
describe('The Application Tab', () => {
describe('contains a Storage pane', function() {
// TODO (liviurau): Update navigateToApplicationTab helper to work in docked
// mode and remove the setup below.
setup({dockingMode: 'undocked'});
it('which clears storage correctly using the clear button', async ({devToolsPage, inspectedPage}) => {
await navigateToAppStorage(devToolsPage, inspectedPage);
await inspectedPage.bringToFront();
await inspectedPage.evaluate(async () => {
const array: number[] = [];
for (let i = 0; i < 20000; i++) {
array.push(i % 10);
}
// @ts-expect-error
await new Promise(resolve => createDatabase(resolve, 'Database1'));
// @ts-expect-error
await new Promise(resolve => createObjectStore(resolve, 'Database1', 'Store1', 'id', true));
// @ts-expect-error
await new Promise(resolve => addIDBValue(resolve, 'Database1', 'Store1', {key: 1, value: array}, ''));
});
await waitForQuotaUsage(quota => quota > 800, devToolsPage);
// We may click too early. If the total quota exceeds 2999, some remaining
// quota may show. Instead,
// try to click another time, if necessary.
await devToolsPage.waitForFunction(async () => {
await devToolsPage.click(CLEAR_SITE_DATA_BUTTON_SELECTOR, {clickOptions: {delay: 250}});
const quota = await getQuotaUsage(devToolsPage);
return quota === 0;
});
});
it('which reports storage correctly, including the pie chart legend', async ({devToolsPage, inspectedPage}) => {
await navigateToAppStorage(devToolsPage, inspectedPage);
await inspectedPage.evaluate(async () => {
const array: number[] = [];
for (let i = 0; i < 20000; i++) {
array.push(i % 10);
}
// @ts-expect-error
await new Promise(resolve => createDatabase(resolve, 'Database1'));
// @ts-expect-error
await new Promise(resolve => createObjectStore(resolve, 'Database1', 'Store1', 'id', true));
// @ts-expect-error
await new Promise(resolve => addIDBValue(resolve, 'Database1', 'Store1', {key: 1, value: array}, ''));
});
await waitForQuotaUsage(quota => quota > 800, devToolsPage);
const rows = await getPieChartLegendRows(devToolsPage);
// Only assert that the legend entries are correct.
assert.lengthOf(rows, 2);
assert.strictEqual(rows[0][2], 'IndexedDB');
assert.strictEqual(rows[1][2], 'Total');
});
});
});