| <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> |