Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: condprof
- Manifest: dom/quota/test/xpcshell/xpcshell.toml
/**
* Any copyright is dedicated to the Public Domain.
*/
/**
* This test is mainly to verify that the storage pressure event is fired when
* the eviction process is not able to free some space when a quota client
* attempts to write over the global limit or when the global limit is reduced
* below the global usage.
*/
const { TestUtils } = ChromeUtils.importESModule(
);
loadScript("dom/quota/test/common/file.js");
async function awaitStoragePressure() {
const [subject] = await TestUtils.topicObserved(
"QuotaManager::StoragePressure"
);
const usage = subject.QueryInterface(Ci.nsISupportsPRUint64).data;
return usage;
}
async function testSteps() {
const globalLimitKB = 2;
info("Setting limits");
setGlobalLimit(globalLimitKB);
info("Initializing");
let request = init();
await requestFinished(request);
info("Initializing temporary storage");
request = initTemporaryStorage();
await requestFinished(request);
info("Persisting and filling an origin");
// We need to persist the origin first to omit the group limit checks.
// Otherwise, we would have to fill five separate origins.
request = persist(principal);
await requestFinished(request);
let database = getSimpleDatabase(principal);
request = database.open("data");
await requestFinished(request);
try {
request = database.write(getBuffer(globalLimitKB * 1024));
await requestFinished(request);
ok(true, "Should not have thrown");
} catch (ex) {
ok(false, "Should not have thrown");
}
info("Testing storage pressure by writing over the global limit");
info("Storing one more byte to get the storage pressure event while writing");
let promiseStoragePressure = awaitStoragePressure();
try {
request = database.write(getBuffer(1));
await requestFinished(request);
ok(false, "Should have thrown");
} catch (e) {
ok(true, "Should have thrown");
Assert.strictEqual(
e.resultCode,
NS_ERROR_FILE_NO_DEVICE_SPACE,
"Threw right result code"
);
}
info("Checking the storage pressure event");
let usage = await promiseStoragePressure;
Assert.equal(usage, globalLimitKB * 1024, "Got correct usage");
info("Testing storage pressure by reducing the global limit");
info(
"Reducing the global limit to get the storage pressuse event while the" +
" temporary storage is being initialized"
);
setGlobalLimit(globalLimitKB - 1);
request = reset();
await requestFinished(request);
info("Initializing");
request = init();
await requestFinished(request);
promiseStoragePressure = awaitStoragePressure();
info("Initializing temporary storage");
request = initTemporaryStorage();
await requestFinished(request);
info("Checking the storage pressure event");
usage = await promiseStoragePressure;
Assert.equal(usage, globalLimitKB * 1024, "Got correct usage");
info("Resetting limits");
resetGlobalLimit();
request = reset();
await requestFinished(request);
}