"use strict"; var { MigrationUtils, MigratorPrototype } = ChromeUtils.import( "resource:///modules/MigrationUtils.jsm" ); var { LoginHelper } = ChromeUtils.import( "resource://gre/modules/LoginHelper.jsm" ); var { NetUtil } = ChromeUtils.import("resource://gre/modules/NetUtil.jsm"); var { PlacesUtils } = ChromeUtils.import( "resource://gre/modules/PlacesUtils.jsm" ); var { Preferences } = ChromeUtils.import( "resource://gre/modules/Preferences.jsm" ); var { PromiseUtils } = ChromeUtils.import( "resource://gre/modules/PromiseUtils.jsm" ); var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); var { XPCOMUtils } = ChromeUtils.import( "resource://gre/modules/XPCOMUtils.jsm" ); var { TestUtils } = ChromeUtils.import( "resource://testing-common/TestUtils.jsm" ); var { PlacesTestUtils } = ChromeUtils.import( "resource://testing-common/PlacesTestUtils.jsm" ); XPCOMUtils.defineLazyGlobalGetters(this, ["URL"]); ChromeUtils.defineModuleGetter( this, "FileUtils", "resource://gre/modules/FileUtils.jsm" ); ChromeUtils.defineModuleGetter( this, "Sqlite", "resource://gre/modules/Sqlite.jsm" ); // Initialize profile. var gProfD = do_get_profile(); var { getAppInfo, newAppInfo, updateAppInfo } = ChromeUtils.import( "resource://testing-common/AppInfo.jsm" ); updateAppInfo(); /** * Migrates the requested resource and waits for the migration to be complete. */ async function promiseMigration( migrator, resourceType, aProfile = null, succeeds = null ) { // Ensure resource migration is available. let availableSources = await migrator.getMigrateData(aProfile); Assert.ok( (availableSources & resourceType) > 0, "Resource supported by migrator" ); let promises = [TestUtils.topicObserved("Migration:Ended")]; if (succeeds !== null) { // Check that the specific resource type succeeded promises.push( TestUtils.topicObserved( succeeds ? "Migration:ItemAfterMigrate" : "Migration:ItemError", (_, data) => data == resourceType ) ); } // Start the migration. migrator.migrate(resourceType, null, aProfile); return Promise.all(promises); } /** * Replaces a directory service entry with a given nsIFile. */ function registerFakePath(key, file) { let dirsvc = Services.dirsvc.QueryInterface(Ci.nsIProperties); let originalFile; try { // If a file is already provided save it and undefine, otherwise set will // throw for persistent entries (ones that are cached). originalFile = dirsvc.get(key, Ci.nsIFile); dirsvc.undefine(key); } catch (e) { // dirsvc.get will throw if nothing provides for the key and dirsvc.undefine // will throw if it's not a persistent entry, in either case we don't want // to set the original file in cleanup. originalFile = undefined; } dirsvc.set(key, file); registerCleanupFunction(() => { dirsvc.undefine(key); if (originalFile) { dirsvc.set(key, originalFile); } }); }