summaryrefslogtreecommitdiffstats
path: root/dom/indexedDB/test/unit/test_marker_file.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/indexedDB/test/unit/test_marker_file.js')
-rw-r--r--dom/indexedDB/test/unit/test_marker_file.js91
1 files changed, 91 insertions, 0 deletions
diff --git a/dom/indexedDB/test/unit/test_marker_file.js b/dom/indexedDB/test/unit/test_marker_file.js
new file mode 100644
index 0000000000..342f78f34d
--- /dev/null
+++ b/dom/indexedDB/test/unit/test_marker_file.js
@@ -0,0 +1,91 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+function getTestingFiles() {
+ const filenameBase = "3128029391StpsleeTn+ddi";
+ let baseDir = getRelativeFile("storage/permanent/chrome/idb");
+
+ let dbFile = baseDir.clone();
+ dbFile.append(filenameBase + ".sqlite");
+
+ let dir = baseDir.clone();
+ dir.append(filenameBase + ".files");
+
+ let markerFile = baseDir.clone();
+ markerFile.append("idb-deleting-" + filenameBase);
+
+ return { dbFile, dir, markerFile };
+}
+
+function createTestingEnvironment(markerFileOnly = false) {
+ let testingFiles = getTestingFiles();
+
+ if (!markerFileOnly) {
+ testingFiles.dbFile.create(
+ Ci.nsIFile.NORMAL_FILE_TYPE,
+ parseInt("0644", 8)
+ );
+
+ testingFiles.dir.create(Ci.nsIFile.DIRECTORY_TYPE, parseInt("0755", 8));
+ }
+
+ testingFiles.markerFile.create(
+ Ci.nsIFile.NORMAL_FILE_TYPE,
+ parseInt("0644", 8)
+ );
+}
+
+/**
+ * This test verifies the initialization, indexedDB.open(), and
+ * indexedDB.deleteDatabase() aren't blocked when there are unexpected files
+ * which haven't been deleted due to some reasons. Normally, we expect every
+ * delete operation works fine. Hoever, it's reported that there is only a
+ * directory without a corresponding database. It's probably because the delete
+ * operation fails for some reasons. P1 introduces the mark-file to let the
+ * future operation understand whether there might be unexpected files in idb
+ * directory. And, this test verifies these three things work fine if a
+ * marker-file, a databse file, and a directory exist in current idb directory.
+ */
+
+/* exported testSteps */
+async function testSteps() {
+ SpecialPowers.setBoolPref("dom.quotaManager.testing", true);
+
+ const name = this.window ? window.location.pathname : "Splendid Test";
+
+ info("Verifying initialization");
+
+ let request = initStorage();
+ await requestFinished(request);
+
+ createTestingEnvironment();
+
+ request = initPersistentOrigin(getSystemPrincipal());
+ await requestFinished(request);
+
+ let testingFiles = getTestingFiles();
+ ok(!testingFiles.dbFile.exists(), "The obsolete database file doesn't exist");
+ ok(!testingFiles.dir.exists(), "The obsolete directory doesn't exist");
+ ok(!testingFiles.markerFile.exists(), "The marker file doesn't exist");
+
+ info("Verifying open shouldn't be blocked by unexpected files");
+
+ createTestingEnvironment();
+
+ request = indexedDB.open(name);
+ await expectingUpgrade(request);
+ let event = await expectingSuccess(request);
+ ok(true, "The database was opened successfully");
+ let db = event.target.result;
+ db.close();
+
+ info("Verifying deleteDatabase isn't blocked by unexpected files");
+
+ createTestingEnvironment(true);
+
+ request = indexedDB.deleteDatabase(name);
+ await expectingSuccess(request);
+ ok(true, "The database was deleted successfully");
+}