blob: 3d26aec492c0a7f28c1ab93d086c4550c5e6ff2b [file] [log] [blame]
<!-- webkit-test-runner [ useEphemeralSession=true ] -->
<!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>
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>