From: Mike Hommey <mh@glandium.org> Date: Tue, 5 Jun 2012 08:57:06 +0200 Subject: Bug 756390 - Make the "Reset Firefox" feature more generic diff --git a/browser/components/migration/content/migration.js b/browser/components/migration/content/migration.js index 0e8ccf5..fa46c08 100644 --- a/browser/components/migration/content/migration.js +++ b/browser/components/migration/content/migration.js @@ -249,7 +249,7 @@ var MigrationWizard = { } var brandBundle = document.getElementById("brandBundle"); - // These strings don't exist when not using official branding. If that's + // These strings may not exist when not using official branding. If that's // the case, just skip this page. try { var pageTitle = brandBundle.getString("homePageMigrationPageTitle"); @@ -281,8 +281,8 @@ var MigrationWizard = { case "chrome": source = "sourceNameChrome"; break; - case "firefox": - source = "sourceNameFirefox"; + case "self": + source = "brand"; break; } @@ -292,7 +292,12 @@ var MigrationWizard = { var oldHomePageURL = this._migrator.sourceHomePageURL; if (oldHomePageURL && source) { - var appName = MigrationUtils.getLocalizedString(source); + var appName; + if (source == "brand") { + appName = brandBundle.GetStringFromName("brandFullName"); + } else { + appName = MigrationUtils.getLocalizedString(source); + } var oldHomePageLabel = brandBundle.getFormattedString("homePageImport", [appName]); var oldHomePage = document.getElementById("oldHomePage"); diff --git a/browser/components/migration/content/migration.xul b/browser/components/migration/content/migration.xul index f030756..23e37ff 100644 --- a/browser/components/migration/content/migration.xul +++ b/browser/components/migration/content/migration.xul @@ -42,7 +42,7 @@ #elifdef XP_UNIX <radio id="chrome" label="&importFromChrome.label;" accesskey="&importFromChrome.accesskey;"/> #endif - <radio id="firefox" label="&importFromFirefox.label;" accesskey="&importFromFirefox.accesskey;"/> + <radio id="self" hidden="true"/> <radio id="nothing" label="&importFromNothing.label;" accesskey="&importFromNothing.accesskey;" hidden="true"/> </radiogroup> <label id="noSources" hidden="true">&noMigrationSources.label;</label> diff --git a/browser/components/migration/src/BrowserProfileMigrators.manifest b/browser/components/migration/src/BrowserProfileMigrators.manifest index d7fec75..d531b83 100644 --- a/browser/components/migration/src/BrowserProfileMigrators.manifest +++ b/browser/components/migration/src/BrowserProfileMigrators.manifest @@ -3,7 +3,7 @@ contract @mozilla.org/toolkit/profile-migrator;1 {6F8BB968-C14F-4D6F-9733-6C6737 component {4cec1de4-1671-4fc3-a53e-6c539dc77a26} ChromeProfileMigrator.js contract @mozilla.org/profile/migrator;1?app=browser&type=chrome {4cec1de4-1671-4fc3-a53e-6c539dc77a26} component {91185366-ba97-4438-acba-48deaca63386} FirefoxProfileMigrator.js -contract @mozilla.org/profile/migrator;1?app=browser&type=firefox {91185366-ba97-4438-acba-48deaca63386} +contract @mozilla.org/profile/migrator;1?app=browser&type=self {91185366-ba97-4438-acba-48deaca63386} #ifdef HAS_IE_MIGRATOR component {3d2532e3-4932-4774-b7ba-968f5899d3a4} IEProfileMigrator.js contract @mozilla.org/profile/migrator;1?app=browser&type=ie {3d2532e3-4932-4774-b7ba-968f5899d3a4} diff --git a/browser/components/migration/src/FirefoxProfileMigrator.js b/browser/components/migration/src/FirefoxProfileMigrator.js index a6598fe..8f83da8 100644 --- a/browser/components/migration/src/FirefoxProfileMigrator.js +++ b/browser/components/migration/src/FirefoxProfileMigrator.js @@ -88,7 +88,7 @@ Object.defineProperty(FirefoxProfileMigrator.prototype, "startupOnlyMigrator", { FirefoxProfileMigrator.prototype.classDescription = "Firefox Profile Migrator"; -FirefoxProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=firefox"; +FirefoxProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=self"; FirefoxProfileMigrator.prototype.classID = Components.ID("{91185366-ba97-4438-acba-48deaca63386}"); const NSGetFactory = XPCOMUtils.generateNSGetFactory([FirefoxProfileMigrator]); diff --git a/browser/components/migration/src/MigrationUtils.jsm b/browser/components/migration/src/MigrationUtils.jsm index 0669aa8..19552e3 100644 --- a/browser/components/migration/src/MigrationUtils.jsm +++ b/browser/components/migration/src/MigrationUtils.jsm @@ -403,11 +403,6 @@ let MigrationUtils = Object.freeze({ * @see nsIStringBundle */ getLocalizedString: function MU_getLocalizedString(aKey, aReplacements) { - const OVERRIDES = { - "4_firefox": "4_firefox_history_and_bookmarks" - }; - aKey = OVERRIDES[aKey] || aKey; - if (aReplacements === undefined) return getMigrationBundle().GetStringFromName(aKey); return getMigrationBundle().formatStringFromName( @@ -622,6 +617,17 @@ let MigrationUtils = Object.freeze({ }, /** + * Returns whether a given migration type is supported. + * + * @param aKey Migrator key + * @returns whether the migrator key is supported. + */ + canMigrate: + function MU_canMigrate(aMigratorKey) { + return "@mozilla.org/profile/migrator;1?app=browser&type=" + aMigratorKey in Cc; + }, + + /** * Cleans up references to migrators and nsIProfileInstance instances. */ finishMigration: function MU_finishMigration() { diff --git a/browser/components/migration/src/ProfileMigrator.js b/browser/components/migration/src/ProfileMigrator.js index 744f117..59e5a4c 100644 --- a/browser/components/migration/src/ProfileMigrator.js +++ b/browser/components/migration/src/ProfileMigrator.js @@ -12,6 +12,7 @@ function ProfileMigrator() { ProfileMigrator.prototype = { migrate: MigrationUtils.startupMigration.bind(MigrationUtils), + canMigrate: MigrationUtils.canMigrate.bind(MigrationUtils), QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIProfileMigrator]), classDescription: "Profile Migrator", contractID: "@mozilla.org/toolkit/profile-migrator;1", diff --git a/browser/locales/en-US/chrome/browser/migration/migration.dtd b/browser/locales/en-US/chrome/browser/migration/migration.dtd index 21cf405..f3c1a6b 100644 --- a/browser/locales/en-US/chrome/browser/migration/migration.dtd +++ b/browser/locales/en-US/chrome/browser/migration/migration.dtd @@ -17,8 +17,6 @@ <!ENTITY importFromSafari.accesskey "S"> <!ENTITY importFromChrome.label "Chrome"> <!ENTITY importFromChrome.accesskey "C"> -<!ENTITY importFromFirefox.label "Firefox"> -<!ENTITY importFromFirefox.accesskey "X"> <!ENTITY noMigrationSources.label "No programs that contain bookmarks, history or password data could be found."> diff --git a/browser/locales/en-US/chrome/browser/migration/migration.properties b/browser/locales/en-US/chrome/browser/migration/migration.properties index 260bc29..52b32cc 100644 --- a/browser/locales/en-US/chrome/browser/migration/migration.properties +++ b/browser/locales/en-US/chrome/browser/migration/migration.properties @@ -8,7 +8,6 @@ profileName_format=%S %S sourceNameIE=Internet Explorer sourceNameSafari=Safari sourceNameChrome=Google Chrome -sourceNameFirefox=Mozilla Firefox importedBookmarksFolder=From %S @@ -24,22 +23,22 @@ importedSafariReadingList=Reading List (From Safari) 2_ie=Cookies 2_safari=Cookies 2_chrome=Cookies -2_firefox=Cookies +2_self=Cookies 4_ie=Browsing History 4_safari=Browsing History 4_chrome=Browsing History -4_firefox_history_and_bookmarks=Browsing History and Bookmarks +4_self=Browsing History and Bookmarks 8_ie=Saved Form History 8_safari=Saved Form History 8_chrome=Saved Form History -8_firefox=Saved Form History +8_self=Saved Form History 16_ie=Saved Passwords 16_safari=Saved Passwords 16_chrome=Saved Passwords -16_firefox=Saved Passwords +16_self=Saved Passwords 32_ie=Favorites 32_safari=Bookmarks @@ -48,4 +47,4 @@ importedSafariReadingList=Reading List (From Safari) 64_ie=Other Data 64_safari=Other Data 64_chrome=Other Data -64_firefox=Bookmarks Backups +64_self=Bookmarks Backups diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn index 339ffda..6999b26 100644 --- a/toolkit/content/jar.mn +++ b/toolkit/content/jar.mn @@ -38,7 +38,7 @@ toolkit.jar: + content/global/mozilla.xhtml (mozilla.xhtml) content/global/nsDragAndDrop.js (nsDragAndDrop.js) content/global/resetProfile.css (resetProfile.css) -* content/global/resetProfile.js (resetProfile.js) + content/global/resetProfile.js (resetProfile.js) content/global/resetProfile.xul (resetProfile.xul) content/global/resetProfileProgress.xul (resetProfileProgress.xul) content/global/treeUtils.js (treeUtils.js) diff --git a/toolkit/content/resetProfile.js b/toolkit/content/resetProfile.js index dcb4065..09c1146 100644 --- a/toolkit/content/resetProfile.js +++ b/toolkit/content/resetProfile.js @@ -36,13 +36,13 @@ function resetSupported() { getService(Ci.nsIToolkitProfileService); let currentProfileDir = Services.dirsvc.get("ProfD", Ci.nsIFile); -#expand const MOZ_APP_NAME = "__MOZ_APP_NAME__"; -#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__"; - // Reset is only supported for the default profile if the self-migrator used for reset exists. try { - return currentProfileDir.equals(profileService.selectedProfile.rootDir) && - ("@mozilla.org/profile/migrator;1?app=" + MOZ_BUILD_APP + "&type=" + MOZ_APP_NAME in Cc); + if (currentProfileDir.equals(profileService.selectedProfile.rootDir) && + "@mozilla.org/toolkit/profile-migrator;1" in Cc) { + let pm = Cc["@mozilla.org/toolkit/profile-migrator;1"].createInstance(Ci.nsIProfileMigrator); + return ("canMigrate" in pm) && pm.canMigrate("self"); + } } catch (e) { // Catch exception when there is no selected profile. Cu.reportError(e); @@ -53,9 +53,6 @@ function resetSupported() { function getMigratedData() { Components.utils.import("resource:///modules/MigrationUtils.jsm"); -#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__"; -#expand const MOZ_APP_NAME = "__MOZ_APP_NAME__"; - // From migration.properties const MIGRATED_TYPES = [ 4, // History and Bookmarks @@ -68,7 +65,7 @@ function getMigratedData() { let dataTypes = []; for (let itemID of MIGRATED_TYPES) { try { - let typeName = MigrationUtils.getLocalizedString(itemID + "_" + MOZ_APP_NAME); + let typeName = MigrationUtils.getLocalizedString(itemID + "_self"); dataTypes.push(typeName); } catch (x) { // Catch exceptions when the string for a data type doesn't exist. diff --git a/toolkit/profile/nsIProfileMigrator.idl b/toolkit/profile/nsIProfileMigrator.idl index f35c227..7062886 100644 --- a/toolkit/profile/nsIProfileMigrator.idl +++ b/toolkit/profile/nsIProfileMigrator.idl @@ -37,7 +37,7 @@ interface nsIProfileStartup : nsISupports * @client Toolkit (Startup code) * @obtainable service, contractid("@mozilla.org/toolkit/profile-migrator;1") */ -[scriptable, uuid(3df284a5-2258-4d46-a664-761ecdc04c22)] +[scriptable, uuid(96d9ab66-082c-4a9e-82ad-f8c21b391342)] interface nsIProfileMigrator : nsISupports { /** @@ -60,6 +60,14 @@ interface nsIProfileMigrator : nsISupports * @note The startup code ignores COM exceptions thrown from this method. */ void migrate(in nsIProfileStartup aStartup, in ACString aKey); + + /** + * Returns whether a given migration type is supported. + * + * @param aKey Migrator key + * @returns whether the migrator key is supported. + */ + bool canMigrate(in ACString aKey); }; %{C++ diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp index 68a52e6..02bb30e 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -3669,7 +3669,7 @@ XREMain::XRE_mainRun() if (gDoProfileReset) { // Automatically migrate from the current application if we just // reset the profile. - aKey = MOZ_APP_NAME; + aKey = "self"; } pm->Migrate(&mDirProvider, aKey); }