| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Cache Storage: testing persistency</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/js-test-resources/gc.js"></script> |
| </head> |
| <body> |
| <div id="check"></div> |
| <script> |
| if (window.testRunner) |
| testRunner.setPrivateBrowsingEnabled(true); |
| |
| function checkCaches(hasPersistent, hasRemoved, name, value) { |
| test(() => { |
| var results = JSON.parse(value).origins; |
| assert_equals(results.length, 1); |
| var caches = results[0].caches; |
| assert_equals(!!caches["persistent"].length, hasPersistent, "persistent"); |
| assert_equals(!!caches["removed"].length, hasRemoved, "removed"); |
| |
| if (!hasPersistent) |
| assert_equals(testRunner.domCacheSize(results.origin), 0, "non persistent cache storage size is zero"); |
| |
| }, name); |
| } |
| |
| promise_test(test => { |
| return self.caches.keys().then(keys => { |
| var pending = []; |
| for (key of keys) |
| pending.push(self.caches.delete(keys[0])); |
| return Promise.all(pending); |
| }); |
| }, "Cleaning existing caches"); |
| |
| promise_test(test => { |
| if (!window.internals) |
| return Promise.reject("Test requires internals"); |
| |
| return new Promise((resolve, reject) => { |
| window.addEventListener("message", test.step_func((event) => { |
| return internals.cacheStorageEngineRepresentation().then(value => { |
| checkCaches(true, false, "A cache is created", value); |
| resolve(); |
| }); |
| })); |
| check.innerHTML = "<iframe src='resources/cache-persistency-iframe.html'></iframe>"; |
| }) |
| }, "Create a cache storage and look at the representation"); |
| |
| promise_test(test => { |
| if (!window.internals) |
| return Promise.reject("Test requires internals"); |
| |
| return new Promise((resolve, reject) => { |
| window.addEventListener("message", test.step_func((event) => { |
| return internals.cacheStorageEngineRepresentation().then(value => { |
| checkCaches(true, false, "A cache is persisting", value); |
| resolve(); |
| }); |
| })); |
| check.innerHTML = "<iframe src='resources/cache-persistency-iframe.html#check'></iframe>"; |
| }) |
| }, "Look at the representation a second time after removing the iframe"); |
| |
| promise_test(test => { |
| if (!window.internals) |
| return Promise.reject("Test requires internals"); |
| |
| return new Promise((resolve, reject) => { |
| window.addEventListener("message", test.step_func((event) => { |
| return internals.cacheStorageEngineRepresentation().then(value => { |
| checkCaches(false, true, "A cache is going in remove bucket", value); |
| resolve(); |
| }); |
| })); |
| check.innerHTML = "<iframe src='resources/cache-persistency-iframe.html#remove'></iframe>"; |
| }) |
| }, "Remove a cache and look at the representation a second time"); |
| |
| promise_test(test => { |
| if (!window.internals) |
| return Promise.reject("Test requires internals"); |
| |
| return new Promise((resolve, reject) => { |
| window.addEventListener("message", test.step_func((event) => { |
| gc(); |
| setTimeout(() => { |
| return internals.cacheStorageEngineRepresentation().then(value => { |
| checkCaches(false, false, "A removed cache gets collected", value); |
| resolve(); |
| }); |
| }, 0); |
| })); |
| check.innerHTML = "<iframe src='resources/cache-persistency-iframe.html#check'></iframe>"; |
| }); |
| }, "Look at the representation a second time after reloading the iframe"); |
| |
| </script> |
| </body> |
| </html> |
| |