blob: 3ed92c1817964d1e42120847161fc90f643fb3ea [file] [log] [blame]
<html>
<head>
<script src="/js-test-resources/js-test.js"></script>
<script src="resources/shared.js"></script>
</head>
<body>
<script>
if (window.testRunner)
testRunner.setAllowStorageQuotaIncrease(false);
description("This test makes sure that storage of indexedDB and Cache API do not grow unboundedly.");
window.caches.open("test").then(cache => {
return cache.put(new Request("/test"), new Response(new Uint8Array(200 * 1024)));
}).then(async() => {
// Let's terminate the network process so that all the opened quota users are gone for IDB quota check.
if (window.testRunner)
testRunner.terminateNetworkProcess();
while (true) {
try {
await fetch(".");
break;
} catch (e) { }
}
indexedDBTest(prepareDatabase, onOpenSuccess, {'suffix': '-1'});
}).catch(e => {
testFailed("Cache API store operation failed: " + e);
finishJSTest();
});
function prepareDatabase(event)
{
evalAndLog("db = event.target.result");
evalAndLog("store = db.createObjectStore('store')");
}
// Quota for test is 400ko, but IDB is eating some of it when initializing files.
// Let's make sure that 200ko is fine but 300ko after 200ko is not fine.
async function onOpenSuccess(event)
{
evalAndLog("db = event.target.result");
evalAndLog("store = db.transaction('store', 'readwrite').objectStore('store')");
evalAndLog("request = store.add(new Uint8Array(300 * 1024), 'key')");
request.onerror = function(event) {
shouldBeTrue("'error' in request");
shouldBe("request.error.code", "DOMException.QUOTA_EXCEEDED_ERR");
shouldBeEqualToString("request.error.name", "QuotaExceededError");
finishJSTest();
}
request.onsuccess = function(event) {
testFailed("Add operation should fail because storage limit is reached, but succeeded.");
finishJSTest();
}
}
</script>
</body>
</html>