diff options
Diffstat (limited to 'dom/indexedDB/test/unit/test_marker_file.js')
-rw-r--r-- | dom/indexedDB/test/unit/test_marker_file.js | 91 |
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"); +} |