123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <!-- Any copyright is dedicated to the Public Domain.
- - http://creativecommons.org/publicdomain/zero/1.0/ -->
- <!DOCTYPE HTML>
- <html>
- <head>
- <title>Test Cache with QuotaManager Restart</title>
- <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <script type="text/javascript" src="large_url_list.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
- </head>
- <body>
- <script class="testbody" type="text/javascript">
- function setupTestIframe() {
- return new Promise(function(resolve) {
- var iframe = document.createElement("iframe");
- iframe.src = "empty.html";
- iframe.onload = function() {
- window.caches = iframe.contentWindow.caches;
- resolve();
- };
- document.body.appendChild(iframe);
- });
- }
- function clearStorage() {
- return new Promise(function(resolve, reject) {
- var qms = SpecialPowers.Services.qms;
- var principal = SpecialPowers.wrap(document).nodePrincipal;
- var request = qms.clearStoragesForPrincipal(principal);
- var cb = SpecialPowers.wrapCallback(resolve);
- request.callback = cb;
- });
- }
- function storageUsage() {
- return new Promise(function(resolve, reject) {
- var qms = SpecialPowers.Services.qms;
- var principal = SpecialPowers.wrap(document).nodePrincipal;
- var cb = SpecialPowers.wrapCallback(function(request) {
- var result = request.result;
- resolve(result.usage, result.fileUsage);
- });
- qms.getUsageForPrincipal(principal, cb);
- });
- }
- function resetStorage() {
- return new Promise(function(resolve, reject) {
- var qms = SpecialPowers.Services.qms;
- var request = qms.reset();
- var cb = SpecialPowers.wrapCallback(resolve);
- request.callback = cb;
- });
- }
- function gc() {
- return new Promise(function(resolve, reject) {
- SpecialPowers.exactGC(resolve);
- });
- }
- SimpleTest.waitForExplicitFinish();
- SpecialPowers.pushPrefEnv({
- "set": [["dom.caches.enabled", true],
- ["dom.caches.testing.enabled", true],
- ["dom.quotaManager.testing", true]],
- }, function() {
- var name = 'foo';
- var cache = null;
- var initialUsage = 0;
- var fullUsage = 0;
- var endUsage = 0;
- // start from a fresh origin directory so other tests do not influence our
- // results
- setupTestIframe().then(function() {
- return clearStorage();
- }).then(function() {
- return storageUsage();
- }).then(function(usage) {
- is(0, usage, 'disk usage should be zero to start');
- return caches.open(name);
- }).then(function(c) {
- cache = c;
- return storageUsage();
- }).then(function(usage) {
- initialUsage = usage;
- return Promise.all(largeUrlList.map(function(url) {
- return cache.put(new Request(url), new Response());
- }));
- }).then(function() {
- return cache.keys();
- }).then(function(keyList) {
- is(keyList.length, largeUrlList.length, 'Large URL list is stored in cache');
- cache = null;
- // Ensure the Cache DOM object is gone before proceeding. If its alive
- // it will keep the related entries on-disk as well.
- return gc();
- }).then(function() {
- // reset the quota manager storage to ensure the DB connection is flushed
- return resetStorage();
- }).then(function() {
- return storageUsage();
- }).then(function(usage) {
- fullUsage = usage;
- ok(fullUsage > initialUsage, 'disk usage should have grown');
- return caches.delete(name);
- }).then(function(result) {
- ok(result, 'cache should be deleted');
- // This is a bit superfluous, but its necessary to make sure the Cache is
- // fully deleted before we proceed. The deletion actually takes place in
- // two async steps. We don't want to resetStorage() until the second step
- // has taken place. This extra Cache operation ensure that all the
- // runnables have been flushed through the threads, etc.
- return caches.has(name);
- }).then(function(result) {
- ok(!result, 'cache should not exist in storage');
- // reset the quota manager storage to ensure the DB connection is flushed
- return resetStorage();
- }).then(function() {
- return storageUsage();
- }).then(function(usage) {
- endUsage = usage;
- dump("### ### initial:" + initialUsage + ", full:" + fullUsage +
- ", end:" + endUsage + "\n");
- ok(endUsage < (fullUsage / 2), 'disk usage should have shrank significantly');
- ok(endUsage > initialUsage, 'disk usage should not shrink back to orig size');
- SimpleTest.finish();
- });
- });
- </script>
- </body>
- </html>
|