diff -r 000000000000 -r 6474c204b198 browser/components/places/tests/unit/test_browserGlue_restore.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/components/places/tests/unit/test_browserGlue_restore.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,82 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Tests that nsBrowserGlue correctly restores bookmarks from a JSON backup if + * database has been created and one backup is available. + */ + +Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); + +XPCOMUtils.defineLazyServiceGetter(this, "bs", + "@mozilla.org/browser/nav-bookmarks-service;1", + "nsINavBookmarksService"); +XPCOMUtils.defineLazyServiceGetter(this, "anno", + "@mozilla.org/browser/annotation-service;1", + "nsIAnnotationService"); + +let bookmarksObserver = { + onBeginUpdateBatch: function() {}, + onEndUpdateBatch: function() { + let itemId = bs.getIdForItemAt(bs.toolbarFolder, 0); + do_check_neq(itemId, -1); + if (anno.itemHasAnnotation(itemId, "Places/SmartBookmark")) + continue_test(); + }, + onItemAdded: function() {}, + onItemRemoved: function(id, folder, index, itemType) {}, + onItemChanged: function() {}, + onItemVisited: function(id, visitID, time) {}, + onItemMoved: function() {}, + QueryInterface: XPCOMUtils.generateQI([Ci.nsINavBookmarkObserver]) +}; + +function run_test() { + do_test_pending(); + + // Create our bookmarks.html copying bookmarks.glue.html to the profile + // folder. It will be ignored. + create_bookmarks_html("bookmarks.glue.html"); + + // Create our JSON backup copying bookmarks.glue.json to the profile + // folder. It will be ignored. + remove_all_JSON_backups(); + create_JSON_backup("bookmarks.glue.json"); + + // Remove current database file. + let db = gProfD.clone(); + db.append("places.sqlite"); + if (db.exists()) { + db.remove(false); + do_check_false(db.exists()); + } + + // Initialize nsBrowserGlue before Places. + Cc["@mozilla.org/browser/browserglue;1"].getService(Ci.nsIBrowserGlue); + + // Initialize Places through the History Service. + let hs = Cc["@mozilla.org/browser/nav-history-service;1"]. + getService(Ci.nsINavHistoryService); + // Check a new database has been created. + // nsBrowserGlue uses databaseStatus to manage initialization. + do_check_eq(hs.databaseStatus, hs.DATABASE_STATUS_CREATE); + + // The test will continue once restore has finished and smart bookmarks + // have been created. + bs.addObserver(bookmarksObserver, false); +} + +function continue_test() { + // Check that JSON backup has been restored. + // Notice restore from JSON notification is fired before smart bookmarks creation. + let itemId = bs.getIdForItemAt(bs.toolbarFolder, SMART_BOOKMARKS_ON_TOOLBAR); + do_check_eq(bs.getItemTitle(itemId), "examplejson"); + + remove_bookmarks_html(); + remove_all_JSON_backups(); + + do_test_finished(); +}