diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 94c3d402f7dd..5cd3e74f8570 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -293,6 +293,10 @@ pref("browser.tabs.selectOwnerOnClose", true); pref("browser.bookmarks.sort.direction", "descending"); pref("browser.bookmarks.sort.resource", "rdf:http://home.netscape.com/NC-rdf#Name"); +// By default, do not overwrite bookmarks.html in the profile directory +// See bug #381216 for details +pref("browser.bookmarks.overwrite", false); + // Scripts & Windows prefs pref("dom.disable_open_during_load", true); #ifdef DEBUG diff --git a/browser/components/nsBrowserGlue.js b/browser/components/nsBrowserGlue.js index 40eeddd74327..c015fbe80c52 100644 --- a/browser/components/nsBrowserGlue.js +++ b/browser/components/nsBrowserGlue.js @@ -359,17 +359,20 @@ BrowserGlue.prototype = { prefBranch.setBoolPref("browser.places.importBookmarksHTML", false); } - // backup pre-places bookmarks.html - // XXXtodo remove this before betas, after import/export is solid - var profDir = dirService.get("ProfD", Ci.nsILocalFile); - var bookmarksBackup = profDir.clone(); - bookmarksBackup.append("bookmarks.preplaces.html"); - if (!bookmarksBackup.exists()) { - // save old bookmarks.html file as bookmarks.preplaces.html - try { - bookmarksFile.copyTo(profDir, "bookmarks.preplaces.html"); - } catch(ex) { - dump("nsBrowserGlue::_initPlaces(): copy of bookmarks.html to bookmarks.preplaces.html failed: " + ex + "\n"); + // only back up pre-places bookmarks.html if we plan on overwriting it + if (prefBranch.getBoolPref("browser.bookmarks.overwrite")) { + // backup pre-places bookmarks.html + // XXXtodo remove this before betas, after import/export is solid + var profDir = dirService.get("ProfD", Ci.nsILocalFile); + var bookmarksBackup = profDir.clone(); + bookmarksBackup.append("bookmarks.preplaces.html"); + if (!bookmarksBackup.exists()) { + // save old bookmarks.html file as bookmarks.preplaces.html + try { + bookmarksFile.copyTo(profDir, "bookmarks.preplaces.html"); + } catch(ex) { + dump("nsBrowserGlue::_initPlaces(): copy of bookmarks.html to bookmarks.preplaces.html failed: " + ex + "\n"); + } } } } diff --git a/browser/components/places/src/nsPlacesImportExportService.cpp b/browser/components/places/src/nsPlacesImportExportService.cpp index 7c805f12d1cb..b01b44e44722 100644 --- a/browser/components/places/src/nsPlacesImportExportService.cpp +++ b/browser/components/places/src/nsPlacesImportExportService.cpp @@ -2475,17 +2475,33 @@ nsPlacesImportExportService::ExportHTMLToFile(nsILocalFile* aBookmarksFile) return rv; } +#define BROWSER_BOOKMARKS_OVERWRITE_PREF "browser.bookmarks.overwrite" +#define BROWSER_BOOKMARKS_MAX_BACKUPS_PREF "browser.bookmarks.max_backups" +#define POSTPLACES_BOOKMARKS_FILE "bookmarks.postplaces.html" + NS_IMETHODIMP nsPlacesImportExportService::BackupBookmarksFile() { nsresult rv = EnsureServiceState(); NS_ENSURE_SUCCESS(rv, rv); + nsCOMPtr prefs(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); + NS_ENSURE_SUCCESS(rv, rv); + // get bookmarks file nsCOMPtr bookmarksFileDir; rv = NS_GetSpecialDirectory(NS_APP_BOOKMARKS_50_FILE, getter_AddRefs(bookmarksFileDir)); + PRBool overwriteBookmarks; + rv = prefs->GetBoolPref(BROWSER_BOOKMARKS_OVERWRITE_PREF, &overwriteBookmarks); + NS_ENSURE_SUCCESS(rv, rv); + + if (!overwriteBookmarks) { + rv = bookmarksFileDir->SetLeafName(NS_LITERAL_STRING(POSTPLACES_BOOKMARKS_FILE)); + NS_ENSURE_SUCCESS(rv, rv); + } + NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr bookmarksFile(do_QueryInterface(bookmarksFileDir)); @@ -2503,14 +2519,8 @@ nsPlacesImportExportService::BackupBookmarksFile() NS_ENSURE_SUCCESS(rv, rv); // archive if needed - nsCOMPtr prefServ(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); - NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr bookmarksPrefs; - rv = prefServ->GetBranch("browser.bookmarks.", getter_AddRefs(bookmarksPrefs)); - NS_ENSURE_SUCCESS(rv, rv); - PRInt32 numberOfBackups; - rv = bookmarksPrefs->GetIntPref("max_backups", &numberOfBackups); + rv = prefs->GetIntPref(BROWSER_BOOKMARKS_MAX_BACKUPS_PREF, &numberOfBackups); if (NS_FAILED(rv)) numberOfBackups = 5; @@ -2633,6 +2643,18 @@ nsPlacesImportExportService::ArchiveBookmarksFile(PRInt32 numberOfBackups, rv = NS_GetSpecialDirectory(NS_APP_BOOKMARKS_50_FILE, getter_AddRefs(bookmarksFile)); NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr prefs(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); + NS_ENSURE_SUCCESS(rv, rv); + + PRBool overwriteBookmarks; + rv = prefs->GetBoolPref(BROWSER_BOOKMARKS_OVERWRITE_PREF, &overwriteBookmarks); + NS_ENSURE_SUCCESS(rv, rv); + + if (!overwriteBookmarks) { + rv = bookmarksFile->SetLeafName(NS_LITERAL_STRING(POSTPLACES_BOOKMARKS_FILE)); + NS_ENSURE_SUCCESS(rv, rv); + } rv = bookmarksFile->CopyTo(bookmarksBackupDir, backupFilenameString); // at least dump something out in case this fails in a debug build