Cache API and IDB space usages should be initialized on first quota check
[WebKit-https.git] / LayoutTests / http / tests / IndexedDB / storage-limit-2.https.html
1 <html>
2 <head>
3 <script src="/js-test-resources/js-test.js"></script>
4 <script src="resources/shared.js"></script>
5 </head>
6 <body>
7 <script>
8 if (window.testRunner)
9     testRunner.setAllowStorageQuotaIncrease(false);
10
11 description("This test makes sure that storage of indexedDB and Cache API do not grow unboundedly.");
12
13 indexedDBTest(prepareDatabase, onOpenSuccess, {'suffix': '-1'});
14
15 function prepareDatabase(event)
16 {
17     evalAndLog("db = event.target.result");
18     evalAndLog("store = db.createObjectStore('store')");
19 }
20
21 // Quota for test is 400ko, but IDB is eating some of it when initializing files.
22 // Let's make sure that 200ko is fine but 200ko after 200ko is not fine.
23 async function onOpenSuccess(event)
24 {
25     evalAndLog("db = event.target.result");
26     evalAndLog("store = db.transaction('store', 'readwrite').objectStore('store')");
27     evalAndLog("request = store.add(new Uint8Array(204800), 'key')");
28     request.onerror = function(event) {
29         testFailed("Add operation should fail because storage limit is reached, but succeeded.");
30         finishJSTest();
31     }
32
33     request.onsuccess = async (event) => {
34         debug("finished idb processing");
35         // Let's terminate the network process so that all the opened quota users are gone for Cache API quota check.
36         if (window.testRunner)
37             testRunner.terminateNetworkProcess();
38         while (true) {
39             try {
40                 await fetch(".");
41                 break;
42             } catch (e) { }
43         }
44         cacheTest();
45     }
46 }
47
48 function cacheTest()
49 {
50     window.caches.open("test").then(cache => {
51         return cache.put(new Request("/test"), new Response(new Uint8Array(304800)));
52     }).then(() => {
53         testFailed("Cache API store operation succeeded");
54         finishJSTest();
55     }).catch(e => {
56         debug("Cache API store operation failed: " + e);
57         finishJSTest();
58     });
59 }
60 </script>
61 </body>
62 </html>