summaryrefslogtreecommitdiffstats
path: root/dom/quota/test/xpcshell/test_unaccessedOrigins.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/quota/test/xpcshell/test_unaccessedOrigins.js')
-rw-r--r--dom/quota/test/xpcshell/test_unaccessedOrigins.js168
1 files changed, 168 insertions, 0 deletions
diff --git a/dom/quota/test/xpcshell/test_unaccessedOrigins.js b/dom/quota/test/xpcshell/test_unaccessedOrigins.js
new file mode 100644
index 0000000000..93b38501f4
--- /dev/null
+++ b/dom/quota/test/xpcshell/test_unaccessedOrigins.js
@@ -0,0 +1,168 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+const SEC_PER_MONTH = 60 * 60 * 24 * 30;
+
+async function testSteps() {
+ function getHostname(index) {
+ return "www.example" + index + ".com";
+ }
+
+ function getOrigin(index) {
+ return "https://" + getHostname(index);
+ }
+
+ function getOriginDir(index) {
+ return getRelativeFile("storage/default/https+++" + getHostname(index));
+ }
+
+ function updateOriginLastAccessTime(index, deltaSec) {
+ let originDir = getOriginDir(index);
+
+ let metadataFile = originDir.clone();
+ metadataFile.append(".metadata-v2");
+
+ let fileRandomAccessStream = Cc[
+ "@mozilla.org/network/file-random-access-stream;1"
+ ].createInstance(Ci.nsIFileRandomAccessStream);
+ fileRandomAccessStream.init(metadataFile, -1, -1, 0);
+
+ let binaryInputStream = Cc[
+ "@mozilla.org/binaryinputstream;1"
+ ].createInstance(Ci.nsIBinaryInputStream);
+ binaryInputStream.setInputStream(fileRandomAccessStream);
+
+ let lastAccessTime = binaryInputStream.read64();
+
+ let seekableStream = fileRandomAccessStream.QueryInterface(
+ Ci.nsISeekableStream
+ );
+ seekableStream.seek(Ci.nsISeekableStream.NS_SEEK_SET, 0);
+
+ binaryOutputStream = Cc["@mozilla.org/binaryoutputstream;1"].createInstance(
+ Ci.nsIBinaryOutputStream
+ );
+ binaryOutputStream.setOutputStream(fileRandomAccessStream);
+
+ binaryOutputStream.write64(lastAccessTime + deltaSec * PR_USEC_PER_SEC);
+
+ binaryOutputStream.close();
+
+ binaryInputStream.close();
+ }
+
+ function verifyOriginDir(index, shouldExist) {
+ let originDir = getOriginDir(index);
+ let exists = originDir.exists();
+ if (shouldExist) {
+ ok(exists, "Origin directory does exist");
+ } else {
+ ok(!exists, "Origin directory doesn't exist");
+ }
+ }
+
+ info("Setting prefs");
+
+ Services.prefs.setBoolPref("dom.quotaManager.loadQuotaFromCache", false);
+ Services.prefs.setBoolPref("dom.quotaManager.checkQuotaInfoLoadTime", true);
+ Services.prefs.setIntPref(
+ "dom.quotaManager.longQuotaInfoLoadTimeThresholdMs",
+ 0
+ );
+
+ info("Initializing");
+
+ request = init();
+ await requestFinished(request);
+
+ info("Initializing temporary storage");
+
+ request = initTemporaryStorage();
+ await requestFinished(request);
+
+ info("Initializing origins");
+
+ for (let index = 0; index < 30; index++) {
+ request = initTemporaryOrigin("default", getPrincipal(getOrigin(index)));
+ await requestFinished(request);
+ }
+
+ info("Updating last access time of selected origins");
+
+ for (let index = 0; index < 10; index++) {
+ updateOriginLastAccessTime(index, -14 * SEC_PER_MONTH);
+ }
+
+ for (let index = 10; index < 20; index++) {
+ updateOriginLastAccessTime(index, -7 * SEC_PER_MONTH);
+ }
+
+ info("Resetting");
+
+ request = reset();
+ await requestFinished(request);
+
+ info("Setting pref");
+
+ Services.prefs.setIntPref(
+ "dom.quotaManager.unaccessedForLongTimeThresholdSec",
+ 13 * SEC_PER_MONTH
+ );
+
+ info("Initializing");
+
+ request = init();
+ await requestFinished(request);
+
+ info("Initializing temporary storage");
+
+ request = initTemporaryStorage();
+ await requestFinished(request);
+
+ info("Verifying origin directories");
+
+ for (let index = 0; index < 10; index++) {
+ verifyOriginDir(index, false);
+ }
+ for (let index = 10; index < 30; index++) {
+ verifyOriginDir(index, true);
+ }
+
+ info("Resetting");
+
+ request = reset();
+ await requestFinished(request);
+
+ info("Setting pref");
+
+ Services.prefs.setIntPref(
+ "dom.quotaManager.unaccessedForLongTimeThresholdSec",
+ 6 * SEC_PER_MONTH
+ );
+
+ info("Initializing");
+
+ request = init();
+ await requestFinished(request);
+
+ info("Initializing temporary storage");
+
+ request = initTemporaryStorage();
+ await requestFinished(request);
+
+ info("Verifying origin directories");
+
+ for (let index = 0; index < 20; index++) {
+ verifyOriginDir(index, false);
+ }
+ for (let index = 20; index < 30; index++) {
+ verifyOriginDir(index, true);
+ }
+
+ info("Resetting");
+
+ request = reset();
+ await requestFinished(request);
+}