| <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."); |
| |
| indexedDBTest(prepareDatabase, onOpenSuccess, {'suffix': '-1'}); |
| |
| 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 200ko 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(204800), 'key')"); |
| request.onerror = function(event) { |
| testFailed("Add operation should fail because storage limit is reached, but succeeded."); |
| finishJSTest(); |
| } |
| |
| request.onsuccess = async (event) => { |
| debug("finished idb processing"); |
| // Let's terminate the network process so that all the opened quota users are gone for Cache API quota check. |
| if (window.testRunner) |
| testRunner.terminateNetworkProcess(); |
| while (true) { |
| try { |
| await fetch("."); |
| break; |
| } catch (e) { } |
| } |
| cacheTest(); |
| } |
| } |
| |
| function cacheTest() |
| { |
| window.caches.open("test").then(cache => { |
| return cache.put(new Request("/test"), new Response(new Uint8Array(304800))); |
| }).then(() => { |
| testFailed("Cache API store operation succeeded"); |
| finishJSTest(); |
| }).catch(e => { |
| debug("Cache API store operation failed: " + e); |
| finishJSTest(); |
| }); |
| } |
| </script> |
| </body> |
| </html> |