diff --git a/mozilla/browser/base/Makefile.in b/mozilla/browser/base/Makefile.in index ee7a72ef35c..29a578e2420 100644 --- a/mozilla/browser/base/Makefile.in +++ b/mozilla/browser/base/Makefile.in @@ -62,10 +62,12 @@ endif ifndef MOZ_BRANDING_DIRECTORY libs locale:: - $(INSTALL) $(srcdir)/content/browserconfig.properties $(DIST)/bin + $(SYSINSTALL) $(IFLAGS1) $(srcdir)/content/browserconfig.properties $(DIST)/bin + $(SYSINSTALL) $(IFLAGS1) $(srcdir)/content/old-homepage-default.properties $(DIST)/bin install:: - $(SYSINSTALL) $(srcdir)/content/browserconfig.properties $(DESTDIR)$(mozappdir) + $(SYSINSTALL) $(IFLAGS1) $(srcdir)/content/browserconfig.properties $(DESTDIR)$(mozappdir) + $(SYSINSTALL) $(IFLAGS1) $(srcdir)/content/old-homepage-default.properties $(DESTDIR)$(mozappdir) endif ifneq (,$(filter windows mac cocoa, $(MOZ_WIDGET_TOOLKIT))) diff --git a/mozilla/browser/base/content/old-homepage-default.properties b/mozilla/browser/base/content/old-homepage-default.properties new file mode 100644 index 00000000000..e9e47c85a48 --- /dev/null +++ b/mozilla/browser/base/content/old-homepage-default.properties @@ -0,0 +1,2 @@ +# Do NOT localize or otherwise change these values +browser.startup.homepage=http://www.mozilla.org/projects/bonecho/ diff --git a/mozilla/browser/base/content/safeMode.js b/mozilla/browser/base/content/safeMode.js index 16d5b6b716c..7b2d2c7313f 100644 --- a/mozilla/browser/base/content/safeMode.js +++ b/mozilla/browser/base/content/safeMode.js @@ -47,6 +47,18 @@ function clearAllPrefs() { var prefService = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefService); prefService.resetUserPrefs(); + + // Remove the pref-overrides dir, if it exists + try { + var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"] + .getService(Components.interfaces.nsIProperties); + const NS_APP_PREFS_OVERRIDE_DIR = "PrefDOverride"; + var prefOverridesDir = fileLocator.get(NS_APP_PREFS_OVERRIDE_DIR, + Components.interfaces.nsIFile); + prefOverridesDir.remove(true); + } catch (ex) { + Components.utils.reportError(ex); + } } function restoreDefaultBookmarks() { diff --git a/mozilla/browser/components/dirprovider/nsBrowserDirectoryProvider.cpp b/mozilla/browser/components/dirprovider/nsBrowserDirectoryProvider.cpp index f03f518fa92..d3a3a80014e 100755 --- a/mozilla/browser/components/dirprovider/nsBrowserDirectoryProvider.cpp +++ b/mozilla/browser/components/dirprovider/nsBrowserDirectoryProvider.cpp @@ -126,10 +126,19 @@ nsBrowserDirectoryProvider::GetFile(const char *aKey, PRBool *aPersist, nsCString path; rv = prefs->GetCharPref("browser.bookmarks.file", getter_Copies(path)); if (NS_SUCCEEDED(rv)) { - NS_NewNativeLocalFile(path, PR_TRUE, (nsILocalFile**)(nsIFile**) getter_AddRefs(file)); + NS_NewNativeLocalFile(path, PR_TRUE, (nsILocalFile**)(nsIFile**) getter_AddRefs(file)); } } } + else if (!strcmp(aKey, NS_APP_EXISTING_PREF_OVERRIDE)) { + rv = NS_GetSpecialDirectory(NS_APP_DEFAULTS_50_DIR, + getter_AddRefs(file)); + NS_ENSURE_SUCCESS(rv, rv); + + file->AppendNative(NS_LITERAL_CSTRING("existing-profile-defaults.js")); + file.swap(*aResult); + return NS_OK; + } else if (!strcmp(aKey, NS_APP_MICROSUMMARY_DIR)) { rv = NS_GetSpecialDirectory(NS_XPCOM_CURRENT_PROCESS_DIR, getter_AddRefs(file)); diff --git a/mozilla/browser/components/dirprovider/nsBrowserDirectoryServiceDefs.h b/mozilla/browser/components/dirprovider/nsBrowserDirectoryServiceDefs.h index d6999f7106c..ef045c38248 100644 --- a/mozilla/browser/components/dirprovider/nsBrowserDirectoryServiceDefs.h +++ b/mozilla/browser/components/dirprovider/nsBrowserDirectoryServiceDefs.h @@ -53,6 +53,7 @@ // ---------------------------------------------------------------------------- #define NS_APP_MICROSUMMARY_DIR "MicsumGens" +#define NS_APP_EXISTING_PREF_OVERRIDE "ExistingPrefOverride" // ---------------------------------------------------------------------------- // Files and directories that exist on a per-profile basis. diff --git a/mozilla/browser/components/nsBrowserContentHandler.js b/mozilla/browser/components/nsBrowserContentHandler.js index b930f8135e6..bc0fdf622b8 100644 --- a/mozilla/browser/components/nsBrowserContentHandler.js +++ b/mozilla/browser/components/nsBrowserContentHandler.js @@ -137,6 +137,40 @@ function needHomepageOverride(prefb) { return OVERRIDE_NONE; } +// Copies a pref override file into the user's profile pref-override folder, +// and then tells the pref service to reload it's default prefs. +function copyPrefOverride() { + try { + var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"] + .getService(Components.interfaces.nsIProperties); + const NS_APP_EXISTING_PREF_OVERRIDE = "ExistingPrefOverride"; + var prefOverride = fileLocator.get(NS_APP_EXISTING_PREF_OVERRIDE, + Components.interfaces.nsIFile); + if (!prefOverride.exists()) + return; // nothing to do + + const NS_APP_PREFS_OVERRIDE_DIR = "PrefDOverride"; + var prefOverridesDir = fileLocator.get(NS_APP_PREFS_OVERRIDE_DIR, + Components.interfaces.nsIFile); + + // Check for any existing pref overrides, and remove them if present + var existingPrefOverridesFile = prefOverridesDir.clone(); + existingPrefOverridesFile.append(prefOverride.leafName); + if (existingPrefOverridesFile.exists()) + existingPrefOverridesFile.remove(false); + + prefOverride.copyTo(prefOverridesDir, null); + + // Now that we've installed the new-profile pref override file, + // re-read the default prefs. + var prefSvcObs = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIObserver); + prefSvcObs.observe(null, "reload-default-prefs", null); + } catch (ex) { + Components.utils.reportError(ex); + } +} + function openWindow(parent, url, target, features, args) { var wwatch = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] .getService(nsIWindowWatcher); @@ -444,9 +478,13 @@ var nsBrowserContentHandler = { try { switch (needHomepageOverride(prefb)) { case OVERRIDE_NEW_PROFILE: + // New profile overridePage = formatter.formatURLPref("startup.homepage_welcome_url"); break; case OVERRIDE_NEW_MSTONE: + // Existing profile, new build + copyPrefOverride(); + // Check whether we have a session to restore. If we do, we assume // that this is an "update" session. var ss = Components.classes["@mozilla.org/browser/sessionstartup;1"] diff --git a/mozilla/browser/installer/unix/packages-static b/mozilla/browser/installer/unix/packages-static index a06f279df61..47adb84679c 100644 --- a/mozilla/browser/installer/unix/packages-static +++ b/mozilla/browser/installer/unix/packages-static @@ -16,8 +16,10 @@ bin/.autoreg bin/chrome/@AB_CD@.jar bin/chrome/@AB_CD@.manifest bin/defaults/pref/firefox-l10n.js +bin/defaults/existing-profile-defaults.js ; If you add a new directory you must explicitly call addDirectory in ab-CD.jst bin/browserconfig.properties +bin/old-homepage-default.properties bin/searchplugins/* bin/defaults/profile/bookmarks.html bin/defaults/profile/localstore.rdf diff --git a/mozilla/browser/installer/windows/packages-static b/mozilla/browser/installer/windows/packages-static index 55c966c2441..cf49b45afd7 100644 --- a/mozilla/browser/installer/windows/packages-static +++ b/mozilla/browser/installer/windows/packages-static @@ -16,7 +16,9 @@ bin/.autoreg bin\chrome\@AB_CD@.jar bin\chrome\@AB_CD@.manifest bin\defaults\pref\firefox-l10n.js +bin\defaults\existing-profile-defaults.js bin\browserconfig.properties +bin\old-homepage-default.properties bin\searchplugins\* bin\defaults\profile\bookmarks.html bin\defaults\profile\localstore.rdf diff --git a/mozilla/browser/locales/Makefile.in b/mozilla/browser/locales/Makefile.in index 1d4fca6ddf3..ba79cabf160 100644 --- a/mozilla/browser/locales/Makefile.in +++ b/mozilla/browser/locales/Makefile.in @@ -88,6 +88,17 @@ PREF_JS_EXPORTS = $(LOCALE_SRCDIR)/firefox-l10n.js include $(topsrcdir)/config/rules.mk +libs:: + @if test -f "$(LOCALE_SRCDIR)/existing-profile-defaults.js"; then \ + $(PERL) $(topsrcdir)/config/preprocessor.pl $(PREF_PPFLAGS) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) \ + $(LOCALE_SRCDIR)/existing-profile-defaults.js > $(FINAL_TARGET)/defaults/existing-profile-defaults.js; \ + fi +install:: + @if test -f "$(LOCALE_SRCDIR)/existing-profile-defaults.js"; then \ + $(PERL) $(topsrcdir)/config/preprocessor.pl $(PREF_PPFLAGS) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) \ + $(LOCALE_SRCDIR)/existing-profile-defaults.js > $(DESTDIR)$(mozappdir)/defaults/existing-profile-defaults.js; \ + fi + ifeq ($(OS_ARCH),OS2) README_FILES = \ os2/README.txt \ diff --git a/mozilla/modules/libpref/src/nsPrefService.cpp b/mozilla/modules/libpref/src/nsPrefService.cpp index e5ce946f707..490fdd9fd0a 100644 --- a/mozilla/modules/libpref/src/nsPrefService.cpp +++ b/mozilla/modules/libpref/src/nsPrefService.cpp @@ -199,6 +199,9 @@ NS_IMETHODIMP nsPrefService::Observe(nsISupports *aSubject, const char *aTopic, ResetUserPrefs(); rv = ReadUserPrefs(nsnull); } + } else if (!nsCRT::strcmp(aTopic, "reload-default-prefs")) { + // Reload the default prefs from file. + pref_InitInitialObjects(); } return rv; } diff --git a/mozilla/other-licenses/branding/firefox/locales/Makefile.in b/mozilla/other-licenses/branding/firefox/locales/Makefile.in index c46996f7f6d..42fa96fb78d 100755 --- a/mozilla/other-licenses/branding/firefox/locales/Makefile.in +++ b/mozilla/other-licenses/branding/firefox/locales/Makefile.in @@ -49,7 +49,11 @@ include $(topsrcdir)/config/rules.mk libs:: @$(PYTHON) $(topsrcdir)/config/Preprocessor.py $(DEFINES) $(ACDEFINES) \ $(srcdir)/browserconfig.properties > $(FINAL_TARGET)/browserconfig.properties + @$(PERL) $(topsrcdir)/config/preprocessor.pl $(DEFINES) $(ACDEFINES) \ + $(srcdir)/old-homepage-default.properties > $(FINAL_TARGET)/old-homepage-default.properties install:: @$(PYTHON) $(topsrcdir)/config/Preprocessor.py $(DEFINES) $(ACDEFINES) \ $(srcdir)/browserconfig.properties > $(DESTDIR)$(mozappdir)/browserconfig.properties + @$(PERL) $(topsrcdir)/config/preprocessor.pl $(DEFINES) $(ACDEFINES) \ + $(srcdir)/old-homepage-default.properties > $(DESTDIR)$(mozappdir)/old-homepage-default.properties diff --git a/mozilla/other-licenses/branding/firefox/locales/browserconfig.properties b/mozilla/other-licenses/branding/firefox/locales/browserconfig.properties index d11da93e5f4..fe11e018acf 100755 --- a/mozilla/other-licenses/branding/firefox/locales/browserconfig.properties +++ b/mozilla/other-licenses/branding/firefox/locales/browserconfig.properties @@ -1,3 +1,3 @@ # Do NOT localize or otherwise change these values -#expand browser.startup.homepage=http://__AB_CD__.start.mozilla.com/firefox?client=firefox-a&rls=__MOZ_DISTRIBUTION_ID_UNQUOTED__:__AB_CD__:official -#expand browser.startup.homepage_reset=http://__AB_CD__.start.mozilla.com/firefox?client=firefox-a&rls=__MOZ_DISTRIBUTION_ID_UNQUOTED__:__AB_CD__:official +#expand browser.startup.homepage=http://__AB_CD__.start2.mozilla.com/firefox?client=firefox-a&rls=__MOZ_DISTRIBUTION_ID_UNQUOTED__:__AB_CD__:official +#expand browser.startup.homepage_reset=http://__AB_CD__.start2.mozilla.com/firefox?client=firefox-a&rls=__MOZ_DISTRIBUTION_ID_UNQUOTED__:__AB_CD__:official diff --git a/mozilla/other-licenses/branding/firefox/locales/old-homepage-default.properties b/mozilla/other-licenses/branding/firefox/locales/old-homepage-default.properties new file mode 100644 index 00000000000..43093e71227 --- /dev/null +++ b/mozilla/other-licenses/branding/firefox/locales/old-homepage-default.properties @@ -0,0 +1,2 @@ +# Do NOT localize or otherwise change these values +#expand browser.startup.homepage=http://__AB_CD__.start.mozilla.com/firefox?client=firefox-a&rls=__MOZ_DISTRIBUTION_ID_UNQUOTED__:__AB_CD__:official diff --git a/mozilla/toolkit/xre/nsXREDirProvider.cpp b/mozilla/toolkit/xre/nsXREDirProvider.cpp index 5822c223a70..babb00837e5 100644 --- a/mozilla/toolkit/xre/nsXREDirProvider.cpp +++ b/mozilla/toolkit/xre/nsXREDirProvider.cpp @@ -95,6 +95,8 @@ #define APP_REGISTRY_NAME "appreg" #endif +#define PREF_OVERRIDE_DIRNAME "preferences" + nsXREDirProvider* gDirServiceProvider = nsnull; nsXREDirProvider::nsXREDirProvider() : @@ -349,6 +351,11 @@ nsXREDirProvider::GetFile(const char* aProperty, PRBool* aPersistent, else if (!strcmp(aProperty, NS_APP_DOWNLOADS_50_FILE)) { rv = file->AppendNative(NS_LITERAL_CSTRING("downloads.rdf")); } + else if (!strcmp(aProperty, NS_APP_PREFS_OVERRIDE_DIR)) { + rv = mProfileDir->Clone(getter_AddRefs(file)); + rv |= file->AppendNative(NS_LITERAL_CSTRING(PREF_OVERRIDE_DIRNAME)); + rv |= EnsureDirectoryExists(file); + } // XXXbsmedberg move these defines into application-specific providers. else if (!strcmp(aProperty, NS_APP_MAIL_50_DIR)) { rv = file->AppendNative(NS_LITERAL_CSTRING("Mail")); @@ -555,22 +562,30 @@ nsXREDirProvider::GetFilesInternal(const char* aProperty, } else if (!strcmp(aProperty, NS_APP_PREFS_DEFAULTS_DIR_LIST)) { nsCOMArray directories; + PRBool exists; if (mXULAppDir) { nsCOMPtr file; mXULAppDir->Clone(getter_AddRefs(file)); file->AppendNative(NS_LITERAL_CSTRING("defaults")); file->AppendNative(NS_LITERAL_CSTRING("preferences")); - PRBool exists; if (NS_SUCCEEDED(file->Exists(&exists)) && exists) directories.AppendObject(file); } + + if (mProfileDir) { + nsCOMPtr overrideFile; + mProfileDir->Clone(getter_AddRefs(overrideFile)); + overrideFile->AppendNative(NS_LITERAL_CSTRING(PREF_OVERRIDE_DIRNAME)); + if (NS_SUCCEEDED(overrideFile->Exists(&exists)) && exists) + directories.AppendObject(overrideFile); - if (mProfileDir && !gSafeMode) { - static const char *const kAppendPrefDir[] = { "defaults", "preferences", nsnull }; + if (!gSafeMode) { + static const char *const kAppendPrefDir[] = { "defaults", "preferences", nsnull }; - LoadDirsIntoArray(profileFile, "ExtensionDirs", - kAppendPrefDir, directories); + LoadDirsIntoArray(profileFile, "ExtensionDirs", + kAppendPrefDir, directories); + } } rv = NS_NewArrayEnumerator(aResult, directories); diff --git a/mozilla/xpcom/io/nsAppDirectoryServiceDefs.h b/mozilla/xpcom/io/nsAppDirectoryServiceDefs.h index c056083ded8..8f5f06b4881 100755 --- a/mozilla/xpcom/io/nsAppDirectoryServiceDefs.h +++ b/mozilla/xpcom/io/nsAppDirectoryServiceDefs.h @@ -96,6 +96,7 @@ #define NS_APP_PREFS_50_DIR "PrefD" // Directory which contains user prefs #define NS_APP_PREFS_50_FILE "PrefF" #define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL" +#define NS_APP_PREFS_OVERRIDE_DIR "PrefDOverride" // Directory for per-profile defaults #define NS_APP_USER_PROFILE_50_DIR "ProfD" #define NS_APP_USER_PROFILE_LOCAL_50_DIR "ProfLD"