tenfourfox/toolkit/components/places/tests/unit/test_history_notifications.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

39 lines
1.5 KiB
JavaScript

const NS_PLACES_INIT_COMPLETE_TOPIC = "places-init-complete";
const NS_PLACES_DATABASE_LOCKED_TOPIC = "places-database-locked";
add_task(function* () {
// Create a dummy places.sqlite and open an unshared connection on it
let db = Services.dirsvc.get('ProfD', Ci.nsIFile);
db.append("places.sqlite");
let dbConn = Services.storage.openUnsharedDatabase(db);
Assert.ok(db.exists(), "The database should have been created");
// We need an exclusive lock on the db
dbConn.executeSimpleSQL("PRAGMA locking_mode = EXCLUSIVE");
// Exclusive locking is lazy applied, we need to make a write to activate it
dbConn.executeSimpleSQL("PRAGMA USER_VERSION = 1");
// Try to create history service while the db is locked
let promiseLocked = promiseTopicObserved(NS_PLACES_DATABASE_LOCKED_TOPIC);
Assert.throws(() => Cc["@mozilla.org/browser/nav-history-service;1"]
.getService(Ci.nsINavHistoryService),
/NS_ERROR_XPC_GS_RETURNED_FAILURE/);
yield promiseLocked;
// Close our connection and try to cleanup the file (could fail on Windows)
dbConn.close();
if (db.exists()) {
try {
db.remove(false);
} catch(e) {
do_print("Unable to remove dummy places.sqlite");
}
}
// Create history service correctly
let promiseComplete = promiseTopicObserved(NS_PLACES_INIT_COMPLETE_TOPIC);
Cc["@mozilla.org/browser/nav-history-service;1"]
.getService(Ci.nsINavHistoryService);
yield promiseComplete;
});