backing out bug 384370, caused 25ms Ts regression on linux, and leaks on linux and mac

This commit is contained in:
dietrich@mozilla.com 2008-02-27 11:05:52 -08:00
parent 79bc38bb61
commit a15fbe3750
34 changed files with 1389 additions and 556 deletions

View File

@ -320,10 +320,9 @@ pref("browser.tabs.selectOwnerOnClose", true);
pref("browser.bookmarks.sort.direction", "descending"); pref("browser.bookmarks.sort.direction", "descending");
pref("browser.bookmarks.sort.resource", "rdf:http://home.netscape.com/NC-rdf#Name"); pref("browser.bookmarks.sort.resource", "rdf:http://home.netscape.com/NC-rdf#Name");
// By default, do not export HTML at shutdown. // By default, do not overwrite bookmarks.html in the profile directory
// If true, at shutdown the bookmarks in your menu and toolbar will // See bug #381216 for details
// be exported as HTML to the bookmarks.html file. pref("browser.bookmarks.overwrite", false);
pref("browser.bookmarks.autoExportHTML", false);
// Scripts & Windows prefs // Scripts & Windows prefs
pref("dom.disable_open_during_load", true); pref("dom.disable_open_during_load", true);

View File

@ -329,7 +329,7 @@
</menu> </menu>
<menu id="history-menu" <menu id="history-menu"
oncommand="var url = event.target.getAttribute('statustext'); if (url) { PlacesUIUtils.markPageAsTyped(url); openUILink(url, event, false, true); }" oncommand="var url = event.target.getAttribute('statustext'); if (url) { PlacesUtils.markPageAsTyped(url); openUILink(url, event, false, true); }"
onclick="checkForMiddleClick(this, event);" onclick="checkForMiddleClick(this, event);"
label="&historyMenu.label;" label="&historyMenu.label;"
accesskey="&historyMenu.accesskey;"> accesskey="&historyMenu.accesskey;">

View File

@ -105,7 +105,7 @@ var StarUI = {
this._itemId = -1; this._itemId = -1;
this._uri = null; this._uri = null;
if (this._batching) { if (this._batching) {
PlacesUIUtils.ptm.endBatch(); PlacesUtils.ptm.endBatch();
this._batching = false; this._batching = false;
} }
} }
@ -188,11 +188,11 @@ var StarUI = {
// Otherwise, if no changes were done in the edit-item panel, the last // Otherwise, if no changes were done in the edit-item panel, the last
// transaction on the undo stack may be the initial createItem transaction, // transaction on the undo stack may be the initial createItem transaction,
// or worse, the batched editing of some other item. // or worse, the batched editing of some other item.
PlacesUIUtils.ptm.doTransaction({ doTransaction: function() { }, PlacesUtils.ptm.doTransaction({ doTransaction: function() { },
undoTransaction: function() { }, undoTransaction: function() { },
redoTransaction: function() { }, redoTransaction: function() { },
isTransient: false, isTransient: false,
merge: function() { return false; } }); merge: function() { return false; } });
if (this.panel.state == "closed") { if (this.panel.state == "closed") {
// Consume dismiss clicks, see bug 400924 // Consume dismiss clicks, see bug 400924
@ -271,7 +271,7 @@ var StarUI = {
cancelButtonOnCommand: function SU_cancelButtonOnCommand() { cancelButtonOnCommand: function SU_cancelButtonOnCommand() {
this.endBatch(); this.endBatch();
PlacesUIUtils.ptm.undoTransaction(); PlacesUtils.ptm.undoTransaction();
this.panel.hidePopup(); this.panel.hidePopup();
}, },
@ -282,8 +282,8 @@ var StarUI = {
// a "Bookmark Removed" notification along with an Undo button is // a "Bookmark Removed" notification along with an Undo button is
// shown // shown
if (this._batching) { if (this._batching) {
PlacesUIUtils.ptm.endBatch(); PlacesUtils.ptm.endBatch();
PlacesUIUtils.ptm.beginBatch(); // allow undo from within the notification PlacesUtils.ptm.beginBatch(); // allow undo from within the notification
var bundle = this._element("bundle_browser"); var bundle = this._element("bundle_browser");
// "Bookmark Removed" title (the description field is already empty in // "Bookmark Removed" title (the description field is already empty in
@ -308,8 +308,8 @@ var StarUI = {
// the tags for the url // the tags for the url
var itemIds = PlacesUtils.getBookmarksForURI(this._uri); var itemIds = PlacesUtils.getBookmarksForURI(this._uri);
for (var i=0; i < itemIds.length; i++) { for (var i=0; i < itemIds.length; i++) {
var txn = PlacesUIUtils.ptm.removeItem(itemIds[i]); var txn = PlacesUtils.ptm.removeItem(itemIds[i]);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
} }
#ifdef ADVANCED_STARRING_UI #ifdef ADVANCED_STARRING_UI
@ -324,21 +324,21 @@ var StarUI = {
// restore the bookmark by undoing the last transaction and go back // restore the bookmark by undoing the last transaction and go back
// to the edit state // to the edit state
this.endBatch(); this.endBatch();
PlacesUIUtils.ptm.undoTransaction(); PlacesUtils.ptm.undoTransaction();
this._itemId = PlacesUtils.getMostRecentBookmarkForURI(this._uri); this._itemId = PlacesUtils.getMostRecentBookmarkForURI(this._uri);
this.showEditBookmarkPopup(); this.showEditBookmarkPopup();
}, },
beginBatch: function SU_beginBatch() { beginBatch: function SU_beginBatch() {
if (!this._batching) { if (!this._batching) {
PlacesUIUtils.ptm.beginBatch(); PlacesUtils.ptm.beginBatch();
this._batching = true; this._batching = true;
} }
}, },
endBatch: function SU_endBatch() { endBatch: function SU_endBatch() {
if (this._batching) { if (this._batching) {
PlacesUIUtils.ptm.endBatch(); PlacesUtils.ptm.endBatch();
this._batching = false; this._batching = false;
} }
} }
@ -372,7 +372,7 @@ var PlacesCommandHook = {
var description; var description;
try { try {
title = webNav.document.title || url.spec; title = webNav.document.title || url.spec;
description = PlacesUIUtils.getDescriptionFromDocument(webNav.document); description = PlacesUtils.getDescriptionFromDocument(webNav.document);
} }
catch (e) { } catch (e) { }
@ -386,9 +386,9 @@ var PlacesCommandHook = {
var parent = aParent != undefined ? var parent = aParent != undefined ?
aParent : PlacesUtils.unfiledBookmarksFolderId; aParent : PlacesUtils.unfiledBookmarksFolderId;
var descAnno = { name: DESCRIPTION_ANNO, value: description }; var descAnno = { name: DESCRIPTION_ANNO, value: description };
var txn = PlacesUIUtils.ptm.createItem(uri, parent, -1, var txn = PlacesUtils.ptm.createItem(uri, parent, -1,
title, null, [descAnno]); title, null, [descAnno]);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
itemId = PlacesUtils.getMostRecentBookmarkForURI(uri); itemId = PlacesUtils.getMostRecentBookmarkForURI(uri);
} }
@ -432,8 +432,8 @@ var PlacesCommandHook = {
var itemId = PlacesUtils.getMostRecentBookmarkForURI(linkURI); var itemId = PlacesUtils.getMostRecentBookmarkForURI(linkURI);
if (itemId == -1) { if (itemId == -1) {
StarUI.beginBatch(); StarUI.beginBatch();
var txn = PlacesUIUtils.ptm.createItem(linkURI, aParent, -1, aTitle); var txn = PlacesUtils.ptm.createItem(linkURI, aParent, -1, aTitle);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
itemId = PlacesUtils.getMostRecentBookmarkForURI(linkURI); itemId = PlacesUtils.getMostRecentBookmarkForURI(linkURI);
} }
@ -474,7 +474,7 @@ var PlacesCommandHook = {
*/ */
bookmarkCurrentPages: function PCH_bookmarkCurrentPages() { bookmarkCurrentPages: function PCH_bookmarkCurrentPages() {
var tabURIs = this._getUniqueTabInfo(); var tabURIs = this._getUniqueTabInfo();
PlacesUIUtils.showMinimalAddMultiBookmarkUI(tabURIs); PlacesUtils.showMinimalAddMultiBookmarkUI(tabURIs);
}, },
@ -500,12 +500,12 @@ var PlacesCommandHook = {
if (arguments.length > 2) if (arguments.length > 2)
description = feedSubtitle; description = feedSubtitle;
else else
description = PlacesUIUtils.getDescriptionFromDocument(doc); description = PlacesUtils.getDescriptionFromDocument(doc);
var toolbarIP = var toolbarIP =
new InsertionPoint(PlacesUtils.bookmarks.toolbarFolder, -1); new InsertionPoint(PlacesUtils.bookmarks.toolbarFolder, -1);
PlacesUIUtils.showMinimalAddLivemarkUI(feedURI, gBrowser.currentURI, PlacesUtils.showMinimalAddLivemarkUI(feedURI, gBrowser.currentURI,
title, description, toolbarIP, true); title, description, toolbarIP, true);
}, },
/** /**
@ -581,7 +581,7 @@ var BookmarksEventHandler = {
return; return;
var target = aEvent.originalTarget; var target = aEvent.originalTarget;
var view = PlacesUIUtils.getViewForNode(target); var view = PlacesUtils.getViewForNode(target);
if (target.node && PlacesUtils.nodeIsFolder(target.node)) { if (target.node && PlacesUtils.nodeIsFolder(target.node)) {
// Don't open the root folder in tabs when the empty area on the toolbar // Don't open the root folder in tabs when the empty area on the toolbar
// is middle-clicked or when a non-bookmark item except for Open in Tabs) // is middle-clicked or when a non-bookmark item except for Open in Tabs)
@ -625,7 +625,7 @@ var BookmarksEventHandler = {
onCommand: function BM_onCommand(aEvent) { onCommand: function BM_onCommand(aEvent) {
var target = aEvent.originalTarget; var target = aEvent.originalTarget;
if (target.node) if (target.node)
PlacesUIUtils.openNodeWithEvent(target.node, aEvent); PlacesUtils.openNodeWithEvent(target.node, aEvent);
}, },
/** /**
@ -685,7 +685,7 @@ var BookmarksEventHandler = {
openHomePage.setAttribute("onclick", openHomePage.setAttribute("onclick",
"checkForMiddleClick(this, event); event.stopPropagation();"); "checkForMiddleClick(this, event); event.stopPropagation();");
openHomePage.setAttribute("label", openHomePage.setAttribute("label",
PlacesUIUtils.getFormattedString("menuOpenLivemarkOrigin.label", PlacesUtils.getFormattedString("menuOpenLivemarkOrigin.label",
[target.parentNode.getAttribute("label")])); [target.parentNode.getAttribute("label")]));
target.appendChild(openHomePage); target.appendChild(openHomePage);
} }
@ -694,7 +694,7 @@ var BookmarksEventHandler = {
var openInTabs = document.createElement("menuitem"); var openInTabs = document.createElement("menuitem");
openInTabs.setAttribute("openInTabs", "true"); openInTabs.setAttribute("openInTabs", "true");
openInTabs.setAttribute("oncommand", openInTabs.setAttribute("oncommand",
"PlacesUIUtils.openContainerNodeInTabs(this.parentNode._resultNode, event);"); "PlacesUtils.openContainerNodeInTabs(this.parentNode._resultNode, event);");
openInTabs.setAttribute("label", openInTabs.setAttribute("label",
gNavigatorBundle.getString("menuOpenAllInTabs.label")); gNavigatorBundle.getString("menuOpenAllInTabs.label"));
target.appendChild(openInTabs); target.appendChild(openInTabs);
@ -755,7 +755,7 @@ var BookmarksMenuDropHandler = {
getSupportedFlavours: function BMDH_getSupportedFlavours() { getSupportedFlavours: function BMDH_getSupportedFlavours() {
var flavorSet = new FlavourSet(); var flavorSet = new FlavourSet();
var view = document.getElementById("bookmarksMenuPopup"); var view = document.getElementById("bookmarksMenuPopup");
var types = PlacesUIUtils.GENERIC_VIEW_DROP_TYPES var types = PlacesUtils.GENERIC_VIEW_DROP_TYPES
for (var i = 0; i < types.length; ++i) for (var i = 0; i < types.length; ++i)
flavorSet.appendFlavour(types[i]); flavorSet.appendFlavour(types[i]);
return flavorSet; return flavorSet;

View File

@ -2543,7 +2543,7 @@ var bookmarksButtonObserver = {
var split = aXferData.data.split("\n"); var split = aXferData.data.split("\n");
var url = split[0]; var url = split[0];
if (url != aXferData.data) // do nothing if it's not a valid URL if (url != aXferData.data) // do nothing if it's not a valid URL
PlacesUIUtils.showMinimalAddBookmarkUI(makeURI(url), split[1]); PlacesUtils.showMinimalAddBookmarkUI(makeURI(url), split[1]);
}, },
onDragOver: function (aEvent, aFlavour, aDragSession) onDragOver: function (aEvent, aFlavour, aDragSession)
@ -3013,7 +3013,7 @@ function addToUrlbarHistory(aUrlToAdd)
try { try {
if (aUrlToAdd.indexOf(" ") == -1) { if (aUrlToAdd.indexOf(" ") == -1) {
PlacesUIUtils.markPageAsTyped(aUrlToAdd); PlacesUtils.markPageAsTyped(aUrlToAdd);
} }
} }
catch(ex) { catch(ex) {
@ -4424,9 +4424,9 @@ function asyncOpenWebPanel(event)
// This is the Opera convention for a special link that - when clicked - allows // This is the Opera convention for a special link that - when clicked - allows
// you to add a sidebar panel. We support the Opera convention here. The link's // you to add a sidebar panel. We support the Opera convention here. The link's
// title attribute contains the title that should be used for the sidebar panel. // title attribute contains the title that should be used for the sidebar panel.
PlacesUIUtils.showMinimalAddBookmarkUI(makeURI(wrapper.href), PlacesUtils.showMinimalAddBookmarkUI(makeURI(wrapper.href),
wrapper.getAttribute("title"), wrapper.getAttribute("title"),
null, null, true, true); null, null, true, true);
event.preventDefault(); event.preventDefault();
return false; return false;
} }
@ -5390,9 +5390,9 @@ function AddKeywordForSearchField()
else else
spec += "?" + formData.join("&"); spec += "?" + formData.join("&");
var description = PlacesUIUtils.getDescriptionFromDocument(node.ownerDocument); var description = PlacesUtils.getDescriptionFromDocument(node.ownerDocument);
PlacesUIUtils.showMinimalAddBookmarkUI(makeURI(spec), "", description, null, PlacesUtils.showMinimalAddBookmarkUI(makeURI(spec), "", description, null,
null, null, "", postData); null, null, "", postData);
} }
function SwitchDocumentDirection(aWindow) { function SwitchDocumentDirection(aWindow) {

View File

@ -1191,13 +1191,13 @@ nsContextMenu.prototype = {
var itemId = PlacesUtils.getMostRecentBookmarkForURI(uri); var itemId = PlacesUtils.getMostRecentBookmarkForURI(uri);
if (itemId == -1) { if (itemId == -1) {
var title = doc.title; var title = doc.title;
var description = PlacesUIUtils.getDescriptionFromDocument(doc); var description = PlacesUtils.getDescriptionFromDocument(doc);
var descAnno = { name: DESCRIPTION_ANNO, value: description }; var descAnno = { name: DESCRIPTION_ANNO, value: description };
var txn = PlacesUIUtils.ptm.createItem(uri, var txn = PlacesUtils.ptm.createItem(uri,
PlacesUtils.bookmarksMenuFolderId, PlacesUtils.bookmarksMenuFolderId,
-1, title, null, [descAnno]); -1, title, null, [descAnno]);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
itemId = PlacesUtils.getMostRecentBookmarkForURI(uri); itemId = PlacesUtils.getMostRecentBookmarkForURI(uri);
StarUI.beginBatch(); StarUI.beginBatch();
} }

View File

@ -45,13 +45,6 @@ const Cu = Components.utils;
Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource:///modules/distribution.js"); Cu.import("resource:///modules/distribution.js");
// Check to see if bookmarks need backing up once per
// day on 1 hour idle.
const BOOKMARKS_ARCHIVE_IDLE_TIME = 60 * 60;
// Backup bookmarks once every 24 hours.
const BOOKMARKS_ARCHIVE_INTERVAL = 86400 * 1000;
// Factory object // Factory object
const BrowserGlueServiceFactory = { const BrowserGlueServiceFactory = {
_instance: null, _instance: null,
@ -110,22 +103,15 @@ BrowserGlue.prototype = {
if (this._saveSession) { if (this._saveSession) {
this._setPrefToSaveSession(); this._setPrefToSaveSession();
} }
this._shutdownPlaces();
break; break;
case "session-save": case "session-save":
this._setPrefToSaveSession(); this._setPrefToSaveSession();
subject.QueryInterface(Ci.nsISupportsPRBool); subject.QueryInterface(Ci.nsISupportsPRBool);
subject.data = true; subject.data = true;
break; break;
case "idle":
if (this.idleService.idleTime > BOOKMARKS_ARCHIVE_IDLE_TIME * 1000) {
// Back up bookmarks.
this._archiveBookmarks();
}
break;
} }
}, }
,
// initialization (called on application startup) // initialization (called on application startup)
_init: function() _init: function()
{ {
@ -338,14 +324,6 @@ BrowserGlue.prototype = {
return Sanitizer; return Sanitizer;
}, },
_idleService: null,
get idleService() {
if (!this._idleService)
this._idleService = Cc["@mozilla.org/widget/idleservice;1"].
getService(Ci.nsIIdleService);
return this._idleService;
},
/** /**
* Initialize Places * Initialize Places
* - imports the bookmarks html file if bookmarks datastore is empty * - imports the bookmarks html file if bookmarks datastore is empty
@ -358,11 +336,10 @@ BrowserGlue.prototype = {
var histsvc = Cc["@mozilla.org/browser/nav-history-service;1"]. var histsvc = Cc["@mozilla.org/browser/nav-history-service;1"].
getService(Ci.nsINavHistoryService); getService(Ci.nsINavHistoryService);
var prefBranch = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefBranch);
var importBookmarks = false; var importBookmarks = false;
try { try {
var prefBranch = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefBranch);
importBookmarks = prefBranch.getBoolPref("browser.places.importBookmarksHTML"); importBookmarks = prefBranch.getBoolPref("browser.places.importBookmarksHTML");
} catch(ex) {} } catch(ex) {}
@ -370,95 +347,55 @@ BrowserGlue.prototype = {
// Call it here for Fx3 profiles created before the Places folder // Call it here for Fx3 profiles created before the Places folder
// has been added, otherwise it's called during import. // has been added, otherwise it's called during import.
this.ensurePlacesDefaultQueriesInitialized(); this.ensurePlacesDefaultQueriesInitialized();
return;
} }
else {
// get latest backup
Cu.import("resource://gre/modules/utils.js");
var bookmarksFile = PlacesUtils.getMostRecentBackup();
if (bookmarksFile && bookmarksFile.leafName.match("\.json$")) { var dirService = Cc["@mozilla.org/file/directory_service;1"].
// restore a JSON backup getService(Ci.nsIProperties);
PlacesUtils.restoreBookmarksFromJSONFile(bookmarksFile);
var bookmarksFile = dirService.get("BMarks", Ci.nsILocalFile);
if (bookmarksFile.exists()) {
// import the file
try {
var importer =
Cc["@mozilla.org/browser/places/import-export-service;1"].
getService(Ci.nsIPlacesImportExportService);
importer.importHTMLFromFile(bookmarksFile, true);
} catch(ex) {
} finally {
prefBranch.setBoolPref("browser.places.importBookmarksHTML", false);
} }
else {
// if there's no json backup...
// - use bookmarks.postplaces.html if it exists
// - otherwise use bookmarks.html
var dirService = Cc["@mozilla.org/file/directory_service;1"]. // only back up pre-places bookmarks.html if we plan on overwriting it
getService(Ci.nsIProperties); if (prefBranch.getBoolPref("browser.bookmarks.overwrite")) {
var bookmarksFile = dirService.get("BMarks", Ci.nsILocalFile); // backup pre-places bookmarks.html
// XXXtodo remove this before betas, after import/export is solid
// bookmarks.postplaces.html var profDir = dirService.get("ProfD", Ci.nsILocalFile);
const POSTPLACES_BOOKMARKS_FILE = "bookmarks.postplaces.html"; var bookmarksBackup = profDir.clone();
var bookmarksPostPlacesFile = bookmarksFile.clone(); bookmarksBackup.append("bookmarks.preplaces.html");
bookmarksPostPlacesFile.leafName = POSTPLACES_BOOKMARKS_FILE; if (!bookmarksBackup.exists()) {
if (bookmarksPostPlacesFile.exists()) // save old bookmarks.html file as bookmarks.preplaces.html
bookmarksFile = bookmarksPostPlacesFile; try {
bookmarksFile.copyTo(profDir, "bookmarks.preplaces.html");
// import the file } catch(ex) {
try { dump("nsBrowserGlue::_initPlaces(): copy of bookmarks.html to bookmarks.preplaces.html failed: " + ex + "\n");
var importer = Cc["@mozilla.org/browser/places/import-export-service;1"]. }
getService(Ci.nsIPlacesImportExportService);
importer.importHTMLFromFile(bookmarksFile, true /* overwrite existing */);
} finally {
prefBranch.setBoolPref("browser.places.importBookmarksHTML", false);
} }
} }
} }
// Initialize bookmark archiving on idle.
// Once a day, either on idle or shutdown, bookmarks are backed up.
this.idleService.addIdleObserver(this, BOOKMARKS_ARCHIVE_IDLE_TIME);
}, },
/** /**
* Places shut-down tasks * Places shut-down tasks
* - back up and archive bookmarks * - back up and archive bookmarks
* - export bookmarks as HTML, if so configured
*
* Note: quit-application-granted notification is received twice
* so replace this method with a no-op when first called.
*/ */
_shutdownPlaces: function bg__shutdownPlaces() { _shutdownPlaces: function bg__shutdownPlaces() {
// Backup and archive Places bookmarks. // backup bookmarks to bookmarks.html
this._archiveBookmarks(); var importer =
// Backup bookmarks to bookmarks.html to support apps that depend
// on the legacy format.
var autoExportHTML = false;
try {
autoExportHTML = prefs.getIntPref("browser.bookmarks.autoExportHTML");
} catch(ex) {}
if (autoExportHTML) {
Cc["@mozilla.org/browser/places/import-export-service;1"]. Cc["@mozilla.org/browser/places/import-export-service;1"].
getService(Ci.nsIPlacesImportExportService). getService(Ci.nsIPlacesImportExportService);
backupBookmarksFile(); importer.backupBookmarksFile();
}
},
/**
* Back up and archive bookmarks
*/
_archiveBookmarks: function nsBrowserGlue__archiveBookmarks() {
Cu.import("resource://gre/modules/utils.js");
var lastBackup = PlacesUtils.getMostRecentBackup();
// Backup bookmarks if there aren't any backups or
// they haven't been backed up in the last 24 hrs.
if (!lastBackup ||
Date.now() - lastBackup.lastModifiedTime > BOOKMARKS_ARCHIVE_INTERVAL) {
var maxBackups = 5;
var prefs = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefBranch);
try {
maxBackups = prefs.getIntPref("browser.bookmarks.max_backups");
} catch(ex) {}
PlacesUtils.archiveBookmarksFile(maxBackups, false /* don't force */);
}
}, },
_migrateUI: function bg__migrateUI() { _migrateUI: function bg__migrateUI() {

View File

@ -567,8 +567,8 @@ var BookmarkPropertiesPanel = {
var itemToSelect = userEnteredNameField; var itemToSelect = userEnteredNameField;
try { try {
this._microsummaries = this._microsummaries =
PlacesUIUtils.microsummaries.getMicrosummaries(this._bookmarkURI, PlacesUtils.microsummaries.getMicrosummaries(this._bookmarkURI,
this._bookmarkId); this._bookmarkId);
} }
catch(ex) { catch(ex) {
// getMicrosummaries will throw an exception if the page to which the URI // getMicrosummaries will throw an exception if the page to which the URI
@ -590,8 +590,8 @@ var BookmarkPropertiesPanel = {
var menuItem = this._createMicrosummaryMenuItem(microsummary); var menuItem = this._createMicrosummaryMenuItem(microsummary);
if (this._action == ACTION_EDIT && if (this._action == ACTION_EDIT &&
PlacesUIUtils.microsummaries PlacesUtils.microsummaries
.isMicrosummary(this._bookmarkId, microsummary)) .isMicrosummary(this._bookmarkId, microsummary))
itemToSelect = menuItem; itemToSelect = menuItem;
menupopup.appendChild(menuItem); menupopup.appendChild(menuItem);
@ -713,7 +713,7 @@ var BookmarkPropertiesPanel = {
try { try {
var value = this._element(aTextboxID).value; var value = this._element(aTextboxID).value;
if (value) { if (value) {
var uri = PlacesUIUtils.createFixedURI(value); var uri = PlacesUtils.createFixedURI(value);
return true; return true;
} }
} catch (e) { } } catch (e) { }
@ -725,7 +725,7 @@ var BookmarkPropertiesPanel = {
*/ */
_getEditTitleTransaction: _getEditTitleTransaction:
function BPP__getEditTitleTransaction(aItemId, aNewTitle) { function BPP__getEditTitleTransaction(aItemId, aNewTitle) {
return PlacesUIUtils.ptm.editItemTitle(aItemId, aNewTitle); return PlacesUtils.ptm.editItemTitle(aItemId, aNewTitle);
}, },
/** /**
@ -813,21 +813,21 @@ var BookmarkPropertiesPanel = {
// description // description
var description = this._element("descriptionTextfield").value; var description = this._element("descriptionTextfield").value;
if (description != this._itemDescription) { if (description != this._itemDescription) {
transactions.push(PlacesUIUtils.ptm. transactions.push(PlacesUtils.ptm.
editItemDescription(itemId, description, editItemDescription(itemId, description,
this._itemType != BOOKMARK_ITEM)); this._itemType != BOOKMARK_ITEM));
} }
if (this._itemType == BOOKMARK_ITEM) { if (this._itemType == BOOKMARK_ITEM) {
// location // location
var url = PlacesUIUtils.createFixedURI(this._element("editURLBar").value); var url = PlacesUtils.createFixedURI(this._element("editURLBar").value);
if (!this._bookmarkURI.equals(url)) if (!this._bookmarkURI.equals(url))
transactions.push(PlacesUIUtils.ptm.editBookmarkURI(itemId, url)); transactions.push(PlacesUtils.ptm.editBookmarkURI(itemId, url));
// keyword transactions // keyword transactions
var newKeyword = this._element("keywordTextfield").value; var newKeyword = this._element("keywordTextfield").value;
if (newKeyword != this._bookmarkKeyword) { if (newKeyword != this._bookmarkKeyword) {
transactions.push(PlacesUIUtils.ptm. transactions.push(PlacesUtils.ptm.
editBookmarkKeyword(itemId, newKeyword)); editBookmarkKeyword(itemId, newKeyword));
} }
@ -841,39 +841,39 @@ var BookmarkPropertiesPanel = {
// selected a microsummary which is not the one the bookmark previously // selected a microsummary which is not the one the bookmark previously
// had. // had.
if ((newMicrosummary == null && if ((newMicrosummary == null &&
PlacesUIUtils.microsummaries.hasMicrosummary(itemId)) || PlacesUtils.microsummaries.hasMicrosummary(itemId)) ||
(newMicrosummary != null && (newMicrosummary != null &&
!PlacesUIUtils.microsummaries !PlacesUtils.microsummaries
.isMicrosummary(itemId, newMicrosummary))) { .isMicrosummary(itemId, newMicrosummary))) {
transactions.push( transactions.push(
PlacesUIUtils.ptm.editBookmarkMicrosummary(itemId, newMicrosummary)); PlacesUtils.ptm.editBookmarkMicrosummary(itemId, newMicrosummary));
} }
// load in sidebar // load in sidebar
var loadInSidebarChecked = this._element("loadInSidebarCheckbox").checked; var loadInSidebarChecked = this._element("loadInSidebarCheckbox").checked;
if (loadInSidebarChecked != this._loadBookmarkInSidebar) { if (loadInSidebarChecked != this._loadBookmarkInSidebar) {
transactions.push( transactions.push(
PlacesUIUtils.ptm.setLoadInSidebar(itemId, loadInSidebarChecked)); PlacesUtils.ptm.setLoadInSidebar(itemId, loadInSidebarChecked));
} }
} }
else if (this._itemType == LIVEMARK_CONTAINER) { else if (this._itemType == LIVEMARK_CONTAINER) {
var feedURIString = this._element("feedLocationTextfield").value; var feedURIString = this._element("feedLocationTextfield").value;
var feedURI = PlacesUIUtils.createFixedURI(feedURIString); var feedURI = PlacesUtils.createFixedURI(feedURIString);
if (!this._feedURI.equals(feedURI)) { if (!this._feedURI.equals(feedURI)) {
transactions.push( transactions.push(
PlacesUIUtils.ptm.editLivemarkFeedURI(this._folderId, feedURI)); PlacesUtils.ptm.editLivemarkFeedURI(this._folderId, feedURI));
} }
// Site Location is empty, we can set its URI to null // Site Location is empty, we can set its URI to null
var newSiteURIString = this._element("feedSiteLocationTextfield").value; var newSiteURIString = this._element("feedSiteLocationTextfield").value;
var newSiteURI = null; var newSiteURI = null;
if (newSiteURIString) if (newSiteURIString)
newSiteURI = PlacesUIUtils.createFixedURI(newSiteURIString); newSiteURI = PlacesUtils.createFixedURI(newSiteURIString);
if ((!newSiteURI && this._siteURI) || if ((!newSiteURI && this._siteURI) ||
(newSiteURI && (!this._siteURI || !this._siteURI.equals(newSiteURI)))) { (newSiteURI && (!this._siteURI || !this._siteURI.equals(newSiteURI)))) {
transactions.push( transactions.push(
PlacesUIUtils.ptm.editLivemarkSiteURI(this._folderId, newSiteURI)); PlacesUtils.ptm.editLivemarkSiteURI(this._folderId, newSiteURI));
} }
} }
@ -882,8 +882,8 @@ var BookmarkPropertiesPanel = {
if (transactions.length > 0) { if (transactions.length > 0) {
window.arguments[0].performed = true; window.arguments[0].performed = true;
var aggregate = var aggregate =
PlacesUIUtils.ptm.aggregateTransactions(this._getDialogTitle(), transactions); PlacesUtils.ptm.aggregateTransactions(this._getDialogTitle(), transactions);
PlacesUIUtils.ptm.doTransaction(aggregate); PlacesUtils.ptm.doTransaction(aggregate);
} }
}, },
@ -912,7 +912,7 @@ var BookmarkPropertiesPanel = {
*/ */
_getCreateNewBookmarkTransaction: _getCreateNewBookmarkTransaction:
function BPP__getCreateNewBookmarkTransaction(aContainer, aIndex) { function BPP__getCreateNewBookmarkTransaction(aContainer, aIndex) {
var uri = PlacesUIUtils.createFixedURI(this._element("editURLBar").value); var uri = PlacesUtils.createFixedURI(this._element("editURLBar").value);
var title = this._element("userEnteredName").label; var title = this._element("userEnteredName").label;
var keyword = this._element("keywordTextfield").value; var keyword = this._element("keywordTextfield").value;
var annotations = []; var annotations = [];
@ -928,20 +928,20 @@ var BookmarkPropertiesPanel = {
var microsummary = this._element("namePicker").selectedItem.microsummary; var microsummary = this._element("namePicker").selectedItem.microsummary;
if (microsummary) { if (microsummary) {
childTransactions.push( childTransactions.push(
PlacesUIUtils.ptm.editBookmarkMicrosummary(-1, microsummary)); PlacesUtils.ptm.editBookmarkMicrosummary(-1, microsummary));
} }
if (this._postData) { if (this._postData) {
childTransactions.push( childTransactions.push(
PlacesUIUtils.ptm.editBookmarkPostData(-1, this._postData)); PlacesUtils.ptm.editBookmarkPostData(-1, this._postData));
} }
var transactions = [PlacesUIUtils.ptm.createItem(uri, aContainer, aIndex, var transactions = [PlacesUtils.ptm.createItem(uri, aContainer, aIndex,
title, keyword, title, keyword,
annotations, annotations,
childTransactions)]; childTransactions)];
return PlacesUIUtils.ptm.aggregateTransactions(this._getDialogTitle(), transactions); return PlacesUtils.ptm.aggregateTransactions(this._getDialogTitle(), transactions);
}, },
/** /**
@ -953,7 +953,7 @@ var BookmarkPropertiesPanel = {
for (var i = 0; i < this._URIList.length; ++i) { for (var i = 0; i < this._URIList.length; ++i) {
var uri = this._URIList[i]; var uri = this._URIList[i];
var title = this._getURITitleFromHistory(uri); var title = this._getURITitleFromHistory(uri);
transactions.push(PlacesUIUtils.ptm.createItem(uri, -1, -1, title)); transactions.push(PlacesUtils.ptm.createItem(uri, -1, -1, title));
} }
return transactions; return transactions;
}, },
@ -973,8 +973,8 @@ var BookmarkPropertiesPanel = {
if (description) if (description)
annotations.push(this._getDescriptionAnnotation(description)); annotations.push(this._getDescriptionAnnotation(description));
return PlacesUIUtils.ptm.createFolder(folderName, aContainer, aIndex, return PlacesUtils.ptm.createFolder(folderName, aContainer, aIndex,
annotations, childItemsTransactions); annotations, childItemsTransactions);
}, },
/** /**
@ -984,16 +984,16 @@ var BookmarkPropertiesPanel = {
_getCreateNewLivemarkTransaction: _getCreateNewLivemarkTransaction:
function BPP__getCreateNewLivemarkTransaction(aContainer, aIndex) { function BPP__getCreateNewLivemarkTransaction(aContainer, aIndex) {
var feedURIString = this._element("feedLocationTextfield").value; var feedURIString = this._element("feedLocationTextfield").value;
var feedURI = PlacesUIUtils.createFixedURI(feedURIString); var feedURI = PlacesUtils.createFixedURI(feedURIString);
var siteURIString = this._element("feedSiteLocationTextfield").value; var siteURIString = this._element("feedSiteLocationTextfield").value;
var siteURI = null; var siteURI = null;
if (siteURIString) if (siteURIString)
siteURI = PlacesUIUtils.createFixedURI(siteURIString); siteURI = PlacesUtils.createFixedURI(siteURIString);
var name = this._element("namePicker").value; var name = this._element("namePicker").value;
return PlacesUIUtils.ptm.createLivemark(feedURI, siteURI, name, return PlacesUtils.ptm.createLivemark(feedURI, siteURI, name,
aContainer, aIndex); aContainer, aIndex);
}, },
/** /**
@ -1018,7 +1018,7 @@ var BookmarkPropertiesPanel = {
// perfrom our transaction do via the transaction manager passed by the // perfrom our transaction do via the transaction manager passed by the
// opener so it can be undone. // opener so it can be undone.
window.arguments[0].performed = true; window.arguments[0].performed = true;
PlacesUIUtils.ptm.doTransaction(createTxn); PlacesUtils.ptm.doTransaction(createTxn);
}, },
onNamePickerInput: function BPP_onNamePickerInput() { onNamePickerInput: function BPP_onNamePickerInput() {
@ -1049,7 +1049,7 @@ var BookmarkPropertiesPanel = {
if (!this._folderTree.place) { if (!this._folderTree.place) {
const FOLDER_TREE_PLACE_URI = const FOLDER_TREE_PLACE_URI =
"place:excludeItems=1&excludeQueries=1&excludeReadOnlyFolders=1&folder=" + "place:excludeItems=1&excludeQueries=1&excludeReadOnlyFolders=1&folder=" +
PlacesUIUtils.allBookmarksFolderId; PlacesUtils.allBookmarksFolderId;
this._folderTree.place = FOLDER_TREE_PLACE_URI; this._folderTree.place = FOLDER_TREE_PLACE_URI;
} }

View File

@ -37,7 +37,7 @@
function init() { function init() {
document.getElementById("bookmarks-view").place = document.getElementById("bookmarks-view").place =
"place:queryType=1&folder=" + window.top.PlacesUIUtils.allBookmarksFolderId; "place:queryType=1&folder=" + window.top.PlacesUtils.allBookmarksFolderId;
document.getElementById("search-box").focus(); document.getElementById("search-box").focus();
} }

View File

@ -103,9 +103,9 @@ PlacesController.prototype = {
isCommandEnabled: function PC_isCommandEnabled(aCommand) { isCommandEnabled: function PC_isCommandEnabled(aCommand) {
switch (aCommand) { switch (aCommand) {
case "cmd_undo": case "cmd_undo":
return PlacesUIUtils.ptm.numberOfUndoItems > 0; return PlacesUtils.ptm.numberOfUndoItems > 0;
case "cmd_redo": case "cmd_redo":
return PlacesUIUtils.ptm.numberOfRedoItems > 0; return PlacesUtils.ptm.numberOfRedoItems > 0;
case "cmd_cut": case "cmd_cut":
case "cmd_delete": case "cmd_delete":
return this._hasRemovableSelection(false); return this._hasRemovableSelection(false);
@ -152,7 +152,7 @@ PlacesController.prototype = {
case "placesCmd_reloadMicrosummary": case "placesCmd_reloadMicrosummary":
var selectedNode = this._view.selectedNode; var selectedNode = this._view.selectedNode;
return selectedNode && PlacesUtils.nodeIsBookmark(selectedNode) && return selectedNode && PlacesUtils.nodeIsBookmark(selectedNode) &&
PlacesUIUtils.microsummaries.hasMicrosummary(selectedNode.itemId); PlacesUtils.microsummaries.hasMicrosummary(selectedNode.itemId);
case "placesCmd_reload": case "placesCmd_reload":
// Livemark containers // Livemark containers
var selectedNode = this._view.selectedNode; var selectedNode = this._view.selectedNode;
@ -192,10 +192,10 @@ PlacesController.prototype = {
doCommand: function PC_doCommand(aCommand) { doCommand: function PC_doCommand(aCommand) {
switch (aCommand) { switch (aCommand) {
case "cmd_undo": case "cmd_undo":
PlacesUIUtils.ptm.undoTransaction(); PlacesUtils.ptm.undoTransaction();
break; break;
case "cmd_redo": case "cmd_redo":
PlacesUIUtils.ptm.redoTransaction(); PlacesUtils.ptm.redoTransaction();
break; break;
case "cmd_cut": case "cmd_cut":
this.cut(); this.cut();
@ -213,13 +213,13 @@ PlacesController.prototype = {
this.selectAll(); this.selectAll();
break; break;
case "placesCmd_open": case "placesCmd_open":
PlacesUIUtils.openNodeIn(this._view.selectedNode, "current"); PlacesUtils.openNodeIn(this._view.selectedNode, "current");
break; break;
case "placesCmd_open:window": case "placesCmd_open:window":
PlacesUIUtils.openNodeIn(this._view.selectedNode, "window"); PlacesUtils.openNodeIn(this._view.selectedNode, "window");
break; break;
case "placesCmd_open:tab": case "placesCmd_open:tab":
PlacesUIUtils.openNodeIn(this._view.selectedNode, "tab"); PlacesUtils.openNodeIn(this._view.selectedNode, "tab");
break; break;
case "placesCmd_new:folder": case "placesCmd_new:folder":
this.newItem("folder"); this.newItem("folder");
@ -337,8 +337,8 @@ PlacesController.prototype = {
// if the clipboard contains TYPE_X_MOZ_PLACE_* data, it is definitely // if the clipboard contains TYPE_X_MOZ_PLACE_* data, it is definitely
// pasteable, with no need to unwrap all the nodes. // pasteable, with no need to unwrap all the nodes.
var flavors = PlacesUIUtils.placesFlavors; var flavors = PlacesUtils.placesFlavors;
var clipboard = PlacesUIUtils.clipboard; var clipboard = PlacesUtils.clipboard;
var hasPlacesData = var hasPlacesData =
clipboard.hasDataMatchingFlavors(flavors, flavors.length, clipboard.hasDataMatchingFlavors(flavors, flavors.length,
Ci.nsIClipboard.kGlobalClipboard); Ci.nsIClipboard.kGlobalClipboard);
@ -442,7 +442,7 @@ PlacesController.prototype = {
uri = PlacesUtils._uri(node.uri); uri = PlacesUtils._uri(node.uri);
if (PlacesUtils.nodeIsBookmark(node)) { if (PlacesUtils.nodeIsBookmark(node)) {
nodeData["bookmark"] = true; nodeData["bookmark"] = true;
var mss = PlacesUIUtils.microsummaries; var mss = PlacesUtils.microsummaries;
if (mss.hasMicrosummary(node.itemId)) if (mss.hasMicrosummary(node.itemId))
nodeData["microsummary"] = true; nodeData["microsummary"] = true;
else if (node.parent && else if (node.parent &&
@ -628,9 +628,9 @@ PlacesController.prototype = {
return; return;
if (PlacesUtils.nodeIsFolder(node)) if (PlacesUtils.nodeIsFolder(node))
PlacesUIUtils.showFolderProperties(node.itemId); PlacesUtils.showFolderProperties(node.itemId);
else if (PlacesUtils.nodeIsBookmark(node)) else if (PlacesUtils.nodeIsBookmark(node))
PlacesUIUtils.showBookmarkProperties(node.itemId); PlacesUtils.showBookmarkProperties(node.itemId);
}, },
/** /**
@ -656,7 +656,7 @@ PlacesController.prototype = {
*/ */
reloadSelectedMicrosummary: function PC_reloadSelectedMicrosummary() { reloadSelectedMicrosummary: function PC_reloadSelectedMicrosummary() {
var selectedNode = this._view.selectedNode; var selectedNode = this._view.selectedNode;
var mss = PlacesUIUtils.microsummaries; var mss = PlacesUtils.microsummaries;
if (mss.hasMicrosummary(selectedNode.itemId)) if (mss.hasMicrosummary(selectedNode.itemId))
mss.refreshMicrosummary(selectedNode.itemId); mss.refreshMicrosummary(selectedNode.itemId);
}, },
@ -688,14 +688,14 @@ PlacesController.prototype = {
GetStringFromName("brandShortName"); GetStringFromName("brandShortName");
var buttonPressed = promptService.confirmEx(window, var buttonPressed = promptService.confirmEx(window,
PlacesUIUtils.getString("tabs.openWarningTitle"), PlacesUtils.getString("tabs.openWarningTitle"),
PlacesUIUtils.getFormattedString(messageKey, PlacesUtils.getFormattedString(messageKey,
[numTabsToOpen, brandShortName]), [numTabsToOpen, brandShortName]),
(promptService.BUTTON_TITLE_IS_STRING * promptService.BUTTON_POS_0) (promptService.BUTTON_TITLE_IS_STRING * promptService.BUTTON_POS_0)
+ (promptService.BUTTON_TITLE_CANCEL * promptService.BUTTON_POS_1), + (promptService.BUTTON_TITLE_CANCEL * promptService.BUTTON_POS_1),
PlacesUIUtils.getString(openKey), PlacesUtils.getString(openKey),
null, null, null, null,
PlacesUIUtils.getFormattedString("tabs.openWarningPromptMeBranded", PlacesUtils.getFormattedString("tabs.openWarningPromptMeBranded",
[brandShortName]), [brandShortName]),
warnOnOpen); warnOnOpen);
@ -714,9 +714,9 @@ PlacesController.prototype = {
openSelectionInTabs: function PC_openLinksInTabs(aEvent) { openSelectionInTabs: function PC_openLinksInTabs(aEvent) {
var node = this._view.selectedNode; var node = this._view.selectedNode;
if (node && PlacesUtils.nodeIsContainer(node)) if (node && PlacesUtils.nodeIsContainer(node))
PlacesUIUtils.openContainerNodeInTabs(this._view.selectedNode, aEvent); PlacesUtils.openContainerNodeInTabs(this._view.selectedNode, aEvent);
else else
PlacesUIUtils.openURINodesInTabs(this._view.getSelectionNodes(), aEvent); PlacesUtils.openURINodesInTabs(this._view.getSelectionNodes(), aEvent);
}, },
/** /**
@ -732,11 +732,11 @@ PlacesController.prototype = {
var performed = false; var performed = false;
if (aType == "bookmark") if (aType == "bookmark")
performed = PlacesUIUtils.showAddBookmarkUI(null, null, null, ip); performed = PlacesUtils.showAddBookmarkUI(null, null, null, ip);
else if (aType == "livemark") else if (aType == "livemark")
performed = PlacesUIUtils.showAddLivemarkUI(null, null, null, null, ip); performed = PlacesUtils.showAddLivemarkUI(null, null, null, null, ip);
else // folder else // folder
performed = PlacesUIUtils.showAddFolderUI(null, ip); performed = PlacesUtils.showAddFolderUI(null, ip);
if (performed) { if (performed) {
// select the new item // select the new item
@ -757,7 +757,7 @@ PlacesController.prototype = {
throw Cr.NS_ERROR_NOT_AVAILABLE; throw Cr.NS_ERROR_NOT_AVAILABLE;
var performed = false; var performed = false;
performed = PlacesUIUtils.showAddFolderUI(null, ip); performed = PlacesUtils.showAddFolderUI(null, ip);
if (performed) { if (performed) {
// select the new item // select the new item
var insertedNodeId = PlacesUtils.bookmarks var insertedNodeId = PlacesUtils.bookmarks
@ -773,8 +773,8 @@ PlacesController.prototype = {
var ip = this._view.insertionPoint; var ip = this._view.insertionPoint;
if (!ip) if (!ip)
throw Cr.NS_ERROR_NOT_AVAILABLE; throw Cr.NS_ERROR_NOT_AVAILABLE;
var txn = PlacesUIUtils.ptm.createSeparator(ip.itemId, ip.index); var txn = PlacesUtils.ptm.createSeparator(ip.itemId, ip.index);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
// select the new item // select the new item
var insertedNodeId = PlacesUtils.bookmarks var insertedNodeId = PlacesUtils.bookmarks
.getIdForItemAt(ip.itemId, ip.index); .getIdForItemAt(ip.itemId, ip.index);
@ -795,8 +795,8 @@ PlacesController.prototype = {
*/ */
sortFolderByName: function PC_sortFolderByName() { sortFolderByName: function PC_sortFolderByName() {
var itemId = PlacesUtils.getConcreteItemId(this._view.selectedNode); var itemId = PlacesUtils.getConcreteItemId(this._view.selectedNode);
var txn = PlacesUIUtils.ptm.sortFolderByName(itemId); var txn = PlacesUtils.ptm.sortFolderByName(itemId);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
}, },
/** /**
@ -856,7 +856,7 @@ PlacesController.prototype = {
if (PlacesUtils.nodeIsFolder(node)) if (PlacesUtils.nodeIsFolder(node))
removedFolders.push(node); removedFolders.push(node);
transactions.push(PlacesUIUtils.ptm.removeItem(node.itemId)); transactions.push(PlacesUtils.ptm.removeItem(node.itemId));
} }
}, },
@ -873,8 +873,8 @@ PlacesController.prototype = {
for (var i = ranges.length - 1; i >= 0 ; --i) for (var i = ranges.length - 1; i >= 0 ; --i)
this._removeRange(ranges[i], transactions); this._removeRange(ranges[i], transactions);
if (transactions.length > 0) { if (transactions.length > 0) {
var txn = PlacesUIUtils.ptm.aggregateTransactions(txnName, transactions); var txn = PlacesUtils.ptm.aggregateTransactions(txnName, transactions);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
} }
}, },
@ -997,7 +997,7 @@ PlacesController.prototype = {
var data = new TransferData(); var data = new TransferData();
function addData(type, overrideURI) { function addData(type, overrideURI) {
data.addDataForFlavour(type, PlacesUIUtils._wrapString( data.addDataForFlavour(type, PlacesUtils._wrapString(
PlacesUtils.wrapNode(node, type, overrideURI))); PlacesUtils.wrapNode(node, type, overrideURI)));
} }
@ -1075,7 +1075,7 @@ PlacesController.prototype = {
function addData(type, data) { function addData(type, data) {
xferable.addDataFlavor(type); xferable.addDataFlavor(type);
xferable.setTransferData(type, PlacesUIUtils._wrapString(data), data.length * 2); xferable.setTransferData(type, PlacesUtils._wrapString(data), data.length * 2);
} }
// This order is _important_! It controls how this and other applications // This order is _important_! It controls how this and other applications
// select data to be inserted based on type. // select data to be inserted based on type.
@ -1089,7 +1089,7 @@ PlacesController.prototype = {
addData(PlacesUtils.TYPE_HTML, htmlString); addData(PlacesUtils.TYPE_HTML, htmlString);
if (placeString || unicodeString || htmlString || mozURLString) { if (placeString || unicodeString || htmlString || mozURLString) {
PlacesUIUtils.clipboard.setData(xferable, null, Ci.nsIClipboard.kGlobalClipboard); PlacesUtils.clipboard.setData(xferable, null, Ci.nsIClipboard.kGlobalClipboard);
} }
} }
finally { finally {
@ -1116,7 +1116,6 @@ PlacesController.prototype = {
// clipboard. We need to get all of that data and build edit transactions // clipboard. We need to get all of that data and build edit transactions
// for them. This means asking the clipboard once for each type and // for them. This means asking the clipboard once for each type and
// aggregating the results. // aggregating the results.
dump("PASTING\n");
/** /**
* Constructs a transferable that can receive data of specific types. * Constructs a transferable that can receive data of specific types.
@ -1134,7 +1133,7 @@ PlacesController.prototype = {
return xferable; return xferable;
} }
var clipboard = PlacesUIUtils.clipboard; var clipboard = PlacesUtils.clipboard;
var ip = this._view.insertionPoint; var ip = this._view.insertionPoint;
if (!ip) if (!ip)
@ -1162,9 +1161,9 @@ PlacesController.prototype = {
// transactions insert differently if index == -1 // transactions insert differently if index == -1
if (ip.index > -1) if (ip.index > -1)
index = ip.index + i; index = ip.index + i;
transactions.push(PlacesUIUtils.makeTransaction(items[i], type.value, transactions.push(PlacesUtils.makeTransaction(items[i], type.value,
ip.itemId, index, ip.itemId, index,
true)); true));
} }
return transactions; return transactions;
} }
@ -1183,8 +1182,8 @@ PlacesController.prototype = {
var transactions = getTransactions([PlacesUtils.TYPE_X_MOZ_PLACE, var transactions = getTransactions([PlacesUtils.TYPE_X_MOZ_PLACE,
PlacesUtils.TYPE_X_MOZ_URL, PlacesUtils.TYPE_X_MOZ_URL,
PlacesUtils.TYPE_UNICODE]); PlacesUtils.TYPE_UNICODE]);
var txn = PlacesUIUtils.ptm.aggregateTransactions("Paste", transactions); var txn = PlacesUtils.ptm.aggregateTransactions("Paste", transactions);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
// select the pasted items, they should be consecutive // select the pasted items, they should be consecutive
var insertedNodeIds = []; var insertedNodeIds = [];
@ -1244,7 +1243,7 @@ var PlacesControllerDragHelper = {
canDrop: function PCDH_canDrop() { canDrop: function PCDH_canDrop() {
var session = this.getSession(); var session = this.getSession();
if (session) { if (session) {
var types = PlacesUIUtils.GENERIC_VIEW_DROP_TYPES; var types = PlacesUtils.GENERIC_VIEW_DROP_TYPES;
for (var i = 0; i < types.length; ++i) { for (var i = 0; i < types.length; ++i) {
if (session.isDataFlavorSupported(types[i])) if (session.isDataFlavorSupported(types[i]))
return true; return true;
@ -1264,7 +1263,7 @@ var PlacesControllerDragHelper = {
_initTransferable: function PCDH__initTransferable(session) { _initTransferable: function PCDH__initTransferable(session) {
var xferable = Cc["@mozilla.org/widget/transferable;1"]. var xferable = Cc["@mozilla.org/widget/transferable;1"].
createInstance(Ci.nsITransferable); createInstance(Ci.nsITransferable);
var types = PlacesUIUtils.GENERIC_VIEW_DROP_TYPES; var types = PlacesUtils.GENERIC_VIEW_DROP_TYPES;
for (var i = 0; i < types.length; ++i) { for (var i = 0; i < types.length; ++i) {
if (session.isDataFlavorSupported(types[i])) if (session.isDataFlavorSupported(types[i]))
xferable.addDataFlavor(types[i]); xferable.addDataFlavor(types[i]);
@ -1307,13 +1306,13 @@ var PlacesControllerDragHelper = {
movedCount++; movedCount++;
} }
transactions.push(PlacesUIUtils.makeTransaction(unwrapped, transactions.push(PlacesUtils.makeTransaction(unwrapped,
flavor.value, insertionPoint.itemId, flavor.value, insertionPoint.itemId,
index, copy)); index, copy));
} }
var txn = PlacesUIUtils.ptm.aggregateTransactions("DropItems", transactions); var txn = PlacesUtils.ptm.aggregateTransactions("DropItems", transactions);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
} }
}; };

View File

@ -145,7 +145,7 @@ var gEditItemOverlay = {
// description field // description field
this._initTextField("descriptionField", this._initTextField("descriptionField",
PlacesUIUtils.getItemDescription(this._itemId)); PlacesUtils.getItemDescription(this._itemId));
this._showHideRows(); this._showHideRows();
@ -324,8 +324,8 @@ var gEditItemOverlay = {
try { try {
if (this._itemType == Ci.nsINavBookmarksService.TYPE_BOOKMARK && if (this._itemType == Ci.nsINavBookmarksService.TYPE_BOOKMARK &&
!this._readOnly) !this._readOnly)
this._microsummaries = PlacesUIUtils.microsummaries this._microsummaries = PlacesUtils.microsummaries
.getMicrosummaries(this._uri, -1); .getMicrosummaries(this._uri, -1);
} }
catch(ex) { catch(ex) {
// getMicrosummaries will throw an exception in at least two cases: // getMicrosummaries will throw an exception in at least two cases:
@ -346,8 +346,8 @@ var gEditItemOverlay = {
var microsummary = enumerator.getNext() var microsummary = enumerator.getNext()
.QueryInterface(Ci.nsIMicrosummary); .QueryInterface(Ci.nsIMicrosummary);
var menuItem = this._createMicrosummaryMenuItem(microsummary); var menuItem = this._createMicrosummaryMenuItem(microsummary);
if (PlacesUIUtils.microsummaries if (PlacesUtils.microsummaries
.isMicrosummary(this._itemId, microsummary)) .isMicrosummary(this._itemId, microsummary))
itemToSelect = menuItem; itemToSelect = menuItem;
menupopup.appendChild(menuItem); menupopup.appendChild(menuItem);
@ -449,12 +449,12 @@ var gEditItemOverlay = {
} }
if (tagsToAdd.length > 0) { if (tagsToAdd.length > 0) {
var tagTxn = PlacesUIUtils.ptm.tagURI(this._uri, tagsToAdd); var tagTxn = PlacesUtils.ptm.tagURI(this._uri, tagsToAdd);
PlacesUIUtils.ptm.doTransaction(tagTxn); PlacesUtils.ptm.doTransaction(tagTxn);
} }
if (tagsToRemove.length > 0) { if (tagsToRemove.length > 0) {
var untagTxn = PlacesUIUtils.ptm.untagURI(this._uri, tagsToRemove); var untagTxn = PlacesUtils.ptm.untagURI(this._uri, tagsToRemove);
PlacesUIUtils.ptm.doTransaction(untagTxn); PlacesUtils.ptm.doTransaction(untagTxn);
} }
} }
}, },
@ -470,12 +470,12 @@ var gEditItemOverlay = {
var namePicker = this._element("namePicker") var namePicker = this._element("namePicker")
var txns = []; var txns = [];
const ptm = PlacesUIUtils.ptm; const ptm = PlacesUtils.ptm;
// Here we update either the item title or its cached static title // Here we update either the item title or its cached static title
var newTitle = this._element("userEnteredName").label; var newTitle = this._element("userEnteredName").label;
if (this._getItemStaticTitle() != newTitle) { if (this._getItemStaticTitle() != newTitle) {
if (PlacesUIUtils.microsummaries.hasMicrosummary(this._itemId)) { if (PlacesUtils.microsummaries.hasMicrosummary(this._itemId)) {
// Note: this implicitly also takes care of the microsummary->static // Note: this implicitly also takes care of the microsummary->static
// title case, the removeMicorosummary method in the service will set // title case, the removeMicorosummary method in the service will set
// the item-title to the value of this annotation. // the item-title to the value of this annotation.
@ -496,10 +496,10 @@ var gEditItemOverlay = {
// bookmark previously had one, or the user selected a microsummary which // bookmark previously had one, or the user selected a microsummary which
// is not the one the bookmark previously had // is not the one the bookmark previously had
if ((newMicrosummary == null && if ((newMicrosummary == null &&
PlacesUIUtils.microsummaries.hasMicrosummary(this._itemId)) || PlacesUtils.microsummaries.hasMicrosummary(this._itemId)) ||
(newMicrosummary != null && (newMicrosummary != null &&
!PlacesUIUtils.microsummaries !PlacesUtils.microsummaries
.isMicrosummary(this._itemId, newMicrosummary))) { .isMicrosummary(this._itemId, newMicrosummary))) {
txns.push(ptm.editBookmarkMicrosummary(this._itemId, newMicrosummary)); txns.push(ptm.editBookmarkMicrosummary(this._itemId, newMicrosummary));
} }
@ -510,67 +510,67 @@ var gEditItemOverlay = {
onDescriptionFieldBlur: function EIO_onDescriptionFieldInput() { onDescriptionFieldBlur: function EIO_onDescriptionFieldInput() {
var description = this._element("descriptionField").value; var description = this._element("descriptionField").value;
if (description != PlacesUtils.getItemDescription(this._itemId)) { if (description != PlacesUtils.getItemDescription(this._itemId)) {
var txn = PlacesUIUtils.ptm var txn = PlacesUtils.ptm
.editItemDescription(this._itemId, description); .editItemDescription(this._itemId, description);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
} }
}, },
onLocationFieldBlur: function EIO_onLocationFieldBlur() { onLocationFieldBlur: function EIO_onLocationFieldBlur() {
var uri; var uri;
try { try {
uri = PlacesUIUtils.createFixedURI(this._element("locationField").value); uri = PlacesUtils.createFixedURI(this._element("locationField").value);
} }
catch(ex) { return; } catch(ex) { return; }
if (!this._uri.equals(uri)) { if (!this._uri.equals(uri)) {
var txn = PlacesUIUtils.ptm.editBookmarkURI(this._itemId, uri); var txn = PlacesUtils.ptm.editBookmarkURI(this._itemId, uri);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
} }
}, },
onKeywordFieldBlur: function EIO_onKeywordFieldBlur() { onKeywordFieldBlur: function EIO_onKeywordFieldBlur() {
var keyword = this._element("keywordField").value; var keyword = this._element("keywordField").value;
if (keyword != PlacesUtils.bookmarks.getKeywordForBookmark(this._itemId)) { if (keyword != PlacesUtils.bookmarks.getKeywordForBookmark(this._itemId)) {
var txn = PlacesUIUtils.ptm.editBookmarkKeyword(this._itemId, keyword); var txn = PlacesUtils.ptm.editBookmarkKeyword(this._itemId, keyword);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
} }
}, },
onFeedLocationFieldBlur: function EIO_onFeedLocationFieldBlur() { onFeedLocationFieldBlur: function EIO_onFeedLocationFieldBlur() {
var uri; var uri;
try { try {
uri = PlacesUIUtils.createFixedURI(this._element("feedLocationField").value); uri = PlacesUtils.createFixedURI(this._element("feedLocationField").value);
} }
catch(ex) { return; } catch(ex) { return; }
var currentFeedURI = PlacesUtils.livemarks.getFeedURI(this._itemId); var currentFeedURI = PlacesUtils.livemarks.getFeedURI(this._itemId);
if (!currentFeedURI.equals(uri)) { if (!currentFeedURI.equals(uri)) {
var txn = PlacesUIUtils.ptm.editLivemarkFeedURI(this._itemId, uri); var txn = PlacesUtils.ptm.editLivemarkFeedURI(this._itemId, uri);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
} }
}, },
onSiteLocationFieldBlur: function EIO_onSiteLocationFieldBlur() { onSiteLocationFieldBlur: function EIO_onSiteLocationFieldBlur() {
var uri = null; var uri = null;
try { try {
uri = PlacesUIUtils.createFixedURI(this._element("siteLocationField").value); uri = PlacesUtils.createFixedURI(this._element("siteLocationField").value);
} }
catch(ex) { } catch(ex) { }
var currentSiteURI = PlacesUtils.livemarks.getSiteURI(this._itemId); var currentSiteURI = PlacesUtils.livemarks.getSiteURI(this._itemId);
if (!uri || !currentSiteURI.equals(uri)) { if (!uri || !currentSiteURI.equals(uri)) {
var txn = PlacesUIUtils.ptm.editLivemarkSiteURI(this._itemId, uri); var txn = PlacesUtils.ptm.editLivemarkSiteURI(this._itemId, uri);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
} }
}, },
onLoadInSidebarCheckboxCommand: onLoadInSidebarCheckboxCommand:
function EIO_onLoadInSidebarCheckboxCommand() { function EIO_onLoadInSidebarCheckboxCommand() {
var loadInSidebarChecked = this._element("loadInSidebarCheckbox").checked; var loadInSidebarChecked = this._element("loadInSidebarCheckbox").checked;
var txn = PlacesUIUtils.ptm.setLoadInSidebar(this._itemId, var txn = PlacesUtils.ptm.setLoadInSidebar(this._itemId,
loadInSidebarChecked); loadInSidebarChecked);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
}, },
toggleFolderTreeVisibility: function EIO_toggleFolderTreeVisibility() { toggleFolderTreeVisibility: function EIO_toggleFolderTreeVisibility() {
@ -591,7 +591,7 @@ var gEditItemOverlay = {
if (!this._folderTree.place) { if (!this._folderTree.place) {
const FOLDER_TREE_PLACE_URI = const FOLDER_TREE_PLACE_URI =
"place:excludeItems=1&excludeQueries=1&excludeReadOnlyFolders=1&folder=" + "place:excludeItems=1&excludeQueries=1&excludeReadOnlyFolders=1&folder=" +
window.top.PlacesUIUtils.allBookmarksFolderId; window.top.PlacesUtils.allBookmarksFolderId;
this._folderTree.place = FOLDER_TREE_PLACE_URI; this._folderTree.place = FOLDER_TREE_PLACE_URI;
} }
@ -651,8 +651,8 @@ var gEditItemOverlay = {
// Move the item // Move the item
var container = this._getFolderIdFromMenuList(); var container = this._getFolderIdFromMenuList();
if (PlacesUtils.bookmarks.getFolderIdForItem(this._itemId) != container) { if (PlacesUtils.bookmarks.getFolderIdForItem(this._itemId) != container) {
var txn = PlacesUIUtils.ptm.moveItem(this._itemId, container, -1); var txn = PlacesUtils.ptm.moveItem(this._itemId, container, -1);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
// Mark the containing folder as recently-used if it isn't in the // Mark the containing folder as recently-used if it isn't in the
// static list // static list

View File

@ -104,7 +104,7 @@ function historyAddBookmarks()
// or if the selected item is not a URI node // or if the selected item is not a URI node
var node = gHistoryTree.selectedNode; var node = gHistoryTree.selectedNode;
if (node && PlacesUtils.nodeIsURI(node)) if (node && PlacesUtils.nodeIsURI(node))
PlacesUIUtils.showMinimalAddBookmarkUI(PlacesUtils._uri(node.uri), node.title); PlacesUtils.showMinimalAddBookmarkUI(PlacesUtils._uri(node.uri), node.title);
} }
function searchHistory(aInput) function searchHistory(aInput)

View File

@ -215,7 +215,7 @@
<method name="getSupportedFlavours"> <method name="getSupportedFlavours">
<body><![CDATA[ <body><![CDATA[
var flavourSet = new FlavourSet(); var flavourSet = new FlavourSet();
var acceptedDropFlavours = PlacesUIUtils.GENERIC_VIEW_DROP_TYPES; var acceptedDropFlavours = PlacesUtils.GENERIC_VIEW_DROP_TYPES;
acceptedDropFlavours.forEach(flavourSet.appendFlavour, flavourSet); acceptedDropFlavours.forEach(flavourSet.appendFlavour, flavourSet);
return flavourSet; return flavourSet;
]]></body> ]]></body>
@ -601,7 +601,7 @@
<parameter name="aBefore"/> <parameter name="aBefore"/>
<body><![CDATA[ <body><![CDATA[
var element = var element =
PlacesUIUtils.createMenuItemForNode(aChild, this._containerNodesMap); PlacesUtils.createMenuItemForNode(aChild, this._containerNodesMap);
if (aBefore) if (aBefore)
aParentPopup.insertBefore(element, aBefore); aParentPopup.insertBefore(element, aBefore);
@ -626,7 +626,7 @@
return; return;
} }
var label = PlacesUIUtils.getString("bookmarksMenuEmptyFolder"); var label = PlacesUtils.getString("bookmarksMenuEmptyFolder");
aPopup._emptyMenuItem = document.createElement("menuitem"); aPopup._emptyMenuItem = document.createElement("menuitem");
aPopup._emptyMenuItem.setAttribute("label", label); aPopup._emptyMenuItem.setAttribute("label", label);
aPopup._emptyMenuItem.setAttribute("disabled", true); aPopup._emptyMenuItem.setAttribute("disabled", true);

View File

@ -52,7 +52,7 @@ var gMoveBookmarksDialog = {
this.foldersTree.place = this.foldersTree.place =
"place:excludeItems=1&excludeQueries=1&excludeReadOnlyFolders=1&folder=" + "place:excludeItems=1&excludeQueries=1&excludeReadOnlyFolders=1&folder=" +
PlacesUIUtils.allBookmarksFolderId; PlacesUtils.allBookmarksFolderId;
}, },
onOK: function MBD_onOK(aEvent) { onOK: function MBD_onOK(aEvent) {
@ -68,12 +68,12 @@ var gMoveBookmarksDialog = {
continue; continue;
transactions.push(new transactions.push(new
PlacesUIUtils.ptm.moveItem(this._nodes[i].itemId, selectedFolderID, -1)); PlacesUtils.ptm.moveItem(this._nodes[i].itemId, selectedFolderID, -1));
} }
if (transactions.length != 0) { if (transactions.length != 0) {
var txn = PlacesUIUtils.ptm.aggregateTransactions("Move Items", transactions); var txn = PlacesUtils.ptm.aggregateTransactions("Move Items", transactions);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
} }
}, },

View File

@ -43,12 +43,12 @@ var PlacesOrganizer = {
_content: null, _content: null,
_initFolderTree: function() { _initFolderTree: function() {
var leftPaneRoot = PlacesUIUtils.leftPaneFolderId; var leftPaneRoot = PlacesUtils.leftPaneFolderId;
this._places.place = "place:excludeItems=1&expandQueries=0&folder=" + leftPaneRoot; this._places.place = "place:excludeItems=1&expandQueries=0&folder=" + leftPaneRoot;
}, },
selectLeftPaneQuery: function PO_selectLeftPaneQuery(aQueryName) { selectLeftPaneQuery: function PO_selectLeftPaneQuery(aQueryName) {
var itemId = PlacesUIUtils.leftPaneQueries[aQueryName]; var itemId = PlacesUtils.leftPaneQueries[aQueryName];
this._places.selectItems([itemId]); this._places.selectItems([itemId]);
// Forcefully expand all-bookmarks // Forcefully expand all-bookmarks
if (aQueryName == "AllBookmarks") if (aQueryName == "AllBookmarks")
@ -218,7 +218,7 @@ var PlacesOrganizer = {
// the search box in the toolbar if the active collection is the current // the search box in the toolbar if the active collection is the current
// collection. // collection.
var findCommand = document.getElementById("OrganizerCommand_find:current"); var findCommand = document.getElementById("OrganizerCommand_find:current");
var findLabel = PlacesUIUtils.getFormattedString("findInPrefix", [node.title]); var findLabel = PlacesUtils.getFormattedString("findInPrefix", [node.title]);
findCommand.setAttribute("label", findLabel); findCommand.setAttribute("label", findLabel);
if (PlacesSearchBox.filterCollection == "collection") if (PlacesSearchBox.filterCollection == "collection")
PlacesSearchBox.updateCollectionTitle(node.title); PlacesSearchBox.updateCollectionTitle(node.title);
@ -239,7 +239,7 @@ var PlacesOrganizer = {
var selectedNode = currentView.selectedNode; var selectedNode = currentView.selectedNode;
if (selectedNode && aEvent.button == 1) { if (selectedNode && aEvent.button == 1) {
if (PlacesUtils.nodeIsURI(selectedNode)) if (PlacesUtils.nodeIsURI(selectedNode))
PlacesUIUtils.openNodeWithEvent(selectedNode, aEvent); PlacesUtils.openNodeWithEvent(selectedNode, aEvent);
else if (PlacesUtils.nodeIsContainer(selectedNode)) { else if (PlacesUtils.nodeIsContainer(selectedNode)) {
// The command execution function will take care of seeing the // The command execution function will take care of seeing the
// selection is a folder/container and loading its contents in // selection is a folder/container and loading its contents in
@ -257,7 +257,7 @@ var PlacesOrganizer = {
}, },
openSelectedNode: function PU_openSelectedNode(aEvent) { openSelectedNode: function PU_openSelectedNode(aEvent) {
PlacesUIUtils.openNodeWithEvent(this._content.selectedNode, aEvent); PlacesUtils.openNodeWithEvent(this._content.selectedNode, aEvent);
}, },
/** /**
@ -298,7 +298,7 @@ var PlacesOrganizer = {
importFromFile: function PO_importFromFile() { importFromFile: function PO_importFromFile() {
var fp = Cc["@mozilla.org/filepicker;1"]. var fp = Cc["@mozilla.org/filepicker;1"].
createInstance(Ci.nsIFilePicker); createInstance(Ci.nsIFilePicker);
fp.init(window, PlacesUIUtils.getString("SelectImport"), fp.init(window, PlacesUtils.getString("SelectImport"),
Ci.nsIFilePicker.modeOpen); Ci.nsIFilePicker.modeOpen);
fp.appendFilters(Ci.nsIFilePicker.filterHTML | Ci.nsIFilePicker.filterAll); fp.appendFilters(Ci.nsIFilePicker.filterHTML | Ci.nsIFilePicker.filterAll);
if (fp.show() != Ci.nsIFilePicker.returnCancel) { if (fp.show() != Ci.nsIFilePicker.returnCancel) {
@ -317,7 +317,7 @@ var PlacesOrganizer = {
exportBookmarks: function PO_exportBookmarks() { exportBookmarks: function PO_exportBookmarks() {
var fp = Cc["@mozilla.org/filepicker;1"]. var fp = Cc["@mozilla.org/filepicker;1"].
createInstance(Ci.nsIFilePicker); createInstance(Ci.nsIFilePicker);
fp.init(window, PlacesUIUtils.getString("EnterExport"), fp.init(window, PlacesUtils.getString("EnterExport"),
Ci.nsIFilePicker.modeSave); Ci.nsIFilePicker.modeSave);
fp.appendFilters(Ci.nsIFilePicker.filterHTML); fp.appendFilters(Ci.nsIFilePicker.filterHTML);
fp.defaultString = "bookmarks.html"; fp.defaultString = "bookmarks.html";
@ -352,13 +352,13 @@ var PlacesOrganizer = {
var files = bookmarksBackupDir.directoryEntries; var files = bookmarksBackupDir.directoryEntries;
while (files.hasMoreElements()) { while (files.hasMoreElements()) {
var f = files.getNext().QueryInterface(Ci.nsIFile); var f = files.getNext().QueryInterface(Ci.nsIFile);
if (!f.isHidden() && f.leafName.match(/^bookmarks-.+(html|json)?$/)) if (!f.isHidden() && f.leafName.match(/\.html?$/))
fileList.push(f); fileList.push(f);
} }
fileList.sort(function PO_fileList_compare(a, b) { fileList.sort(function PO_fileList_compare(a, b) {
return b.lastModifiedTime - a.lastModifiedTime; return b.lastModifiedTime - a.lastModifiedTime;
}); });
if (fileList.length == 0) if (fileList.length == 0)
return; return;
@ -369,7 +369,7 @@ var PlacesOrganizer = {
(document.createElement("menuitem"), (document.createElement("menuitem"),
document.getElementById("restoreFromFile")); document.getElementById("restoreFromFile"));
var dateStr = fileList[i].leafName.replace("bookmarks-", ""). var dateStr = fileList[i].leafName.replace("bookmarks-", "").
replace(/\.(html|json)$/, ""); replace(".html", "");
if (!dateStr.length) if (!dateStr.length)
dateStr = fileList[i].leafName; dateStr = fileList[i].leafName;
m.setAttribute("label", dateStr); m.setAttribute("label", dateStr);
@ -392,58 +392,27 @@ var PlacesOrganizer = {
bookmarksFile.append(aMenuItem.getAttribute("value")); bookmarksFile.append(aMenuItem.getAttribute("value"));
if (!bookmarksFile.exists()) if (!bookmarksFile.exists())
return; return;
this.restoreBookmarksFromFile(bookmarksFile);
},
/**
* Called when 'Choose File...' is selected from the restore menu.
* Prompts for a file and restores bookmarks to those in the file.
*/
onRestoreBookmarksFromFile: function PO_onRestoreBookmarksFromFile() {
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
fp.init(window, PlacesUIUtils.getString("bookmarksRestoreTitle"),
Ci.nsIFilePicker.modeOpen);
var dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
var backupsDir = dirSvc.get("Desk", Ci.nsILocalFile);
fp.displayDirectory = backupsDir;
if (fp.show() != Ci.nsIFilePicker.returnCancel)
PlacesUtils.restoreBookmarksFromFile(fp.file);
},
/**
* Restores bookmarks from an HTML or JSON file.
*/
restoreBookmarksFromFile: function PO_restoreBookmarksFromFile(aFile) {
var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"]. var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"].
getService(Ci.nsIPromptService); getService(Ci.nsIPromptService);
if (!prompts.confirm(null, if (!prompts.confirm(null,
PlacesUIUtils.getString("bookmarksRestoreAlertTitle"), PlacesUtils.getString("bookmarksRestoreAlertTitle"),
PlacesUIUtils.getString("bookmarksRestoreAlert"))) PlacesUtils.getString("bookmarksRestoreAlert")))
return; return;
if (aFile.leafName.match("\.json$")) { var ieSvc = Cc["@mozilla.org/browser/places/import-export-service;1"].
// restore a JSON backup getService(Ci.nsIPlacesImportExportService);
PlacesUtils.restoreBookmarksFromJSONFile(aFile); ieSvc.importHTMLFromFile(bookmarksFile, true);
}
else {
var importer = Cc["@mozilla.org/browser/places/import-export-service;1"].
getService(Ci.nsIPlacesImportExportService);
importer.importHTMLFromFile(aFile, true /* overwrite existing */);
}
}, },
/** /**
* Backup bookmarks to desktop, auto-generate a filename with a date. * Backup bookmarks to desktop, auto-generate a filename with a date
* The file is a JSON serialization of bookmarks, tags and any annotations
* of those items.
*/ */
backupBookmarks: function PO_backupBookmarks() { backupBookmarks: function PO_backupBookmarks() {
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
fp.init(window, PlacesUIUtils.getString("bookmarksBackupTitle"), fp.init(window, PlacesUtils.getString("bookmarksBackupTitle"),
Ci.nsIFilePicker.modeSave); Ci.nsIFilePicker.modeSave);
fp.appendFilters(Ci.nsIFilePicker.filterHTML);
var dirSvc = Cc["@mozilla.org/file/directory_service;1"]. var dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties); getService(Ci.nsIProperties);
@ -454,10 +423,41 @@ var PlacesOrganizer = {
// and makes the alphabetical order of multiple backup files more useful. // and makes the alphabetical order of multiple backup files more useful.
var date = (new Date).toLocaleFormat("%Y-%m-%d"); var date = (new Date).toLocaleFormat("%Y-%m-%d");
fp.defaultString = PlacesUtils.getFormattedString("bookmarksBackupFilename", fp.defaultString = PlacesUtils.getFormattedString("bookmarksBackupFilename",
[date]); [date]);
if (fp.show() != Ci.nsIFilePicker.returnCancel) if (fp.show() != Ci.nsIFilePicker.returnCancel) {
PlacesUtils.backupBookmarksToFile(fp.file); var ieSvc = Cc["@mozilla.org/browser/places/import-export-service;1"].
getService(Ci.nsIPlacesImportExportService);
ieSvc.exportHTMLToFile(fp.file);
}
},
/**
* Called when 'Choose File...' is selected from the Revert menupopup
* Prompts for a file and reverts bookmarks to those in the file
*/
restoreFromFile: function PO_restoreFromFile() {
var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"].
getService(Ci.nsIPromptService);
if (!prompts.confirm(null, PlacesUtils.getString("bookmarksRestoreAlertTitle"),
PlacesUtils.getString("bookmarksRestoreAlert")))
return;
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
fp.init(window, PlacesUtils.getString("bookmarksRestoreTitle"),
Ci.nsIFilePicker.modeOpen);
fp.appendFilters(Ci.nsIFilePicker.filterHTML);
var dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
var backupsDir = dirSvc.get("Desk", Ci.nsILocalFile);
fp.displayDirectory = backupsDir;
if (fp.show() != Ci.nsIFilePicker.returnCancel) {
var ieSvc = Cc["@mozilla.org/browser/places/import-export-service;1"].
getService(Ci.nsIPlacesImportExportService);
ieSvc.importHTMLFromFile(fp.file, true);
}
}, },
_paneDisabled: false, _paneDisabled: false,
@ -548,16 +548,16 @@ var PlacesOrganizer = {
var rowCount = this._content.treeBoxObject.view.rowCount; var rowCount = this._content.treeBoxObject.view.rowCount;
if (rowCount == 0) { if (rowCount == 0) {
selectItemDesc.hidden = true; selectItemDesc.hidden = true;
itemsCountLabel.value = PlacesUIUtils.getString("detailsPane.noItems"); itemsCountLabel.value = PlacesUtils.getString("detailsPane.noItems");
} }
else { else {
selectItemDesc.hidden = false; selectItemDesc.hidden = false;
if (rowCount == 1) if (rowCount == 1)
itemsCountLabel.value = PlacesUIUtils.getString("detailsPane.oneItem"); itemsCountLabel.value = PlacesUtils.getString("detailsPane.oneItem");
else { else {
itemsCountLabel.value = itemsCountLabel.value =
PlacesUIUtils.getFormattedString("detailsPane.multipleItems", PlacesUtils.getFormattedString("detailsPane.multipleItems",
[rowCount]); [rowCount]);
} }
} }
} }
@ -640,9 +640,9 @@ var PlacesOrganizer = {
// Prompt the user for a name for the query. // Prompt the user for a name for the query.
// XXX - using prompt service for now; will need to make // XXX - using prompt service for now; will need to make
// a real dialog and localize when we're sure this is the UI we want. // a real dialog and localize when we're sure this is the UI we want.
var title = PlacesUIUtils.getString("saveSearch.title"); var title = PlacesUtils.getString("saveSearch.title");
var inputLabel = PlacesUIUtils.getString("saveSearch.inputLabel"); var inputLabel = PlacesUtils.getString("saveSearch.inputLabel");
var defaultText = PlacesUIUtils.getString("saveSearch.defaultText"); var defaultText = PlacesUtils.getString("saveSearch.defaultText");
var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"]. var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"].
getService(Ci.nsIPromptService); getService(Ci.nsIPromptService);
@ -655,11 +655,11 @@ var PlacesOrganizer = {
return; return;
// Add the place: uri as a bookmark under the bookmarks root. // Add the place: uri as a bookmark under the bookmarks root.
var txn = PlacesUIUtils.ptm.createItem(placeURI, var txn = PlacesUtils.ptm.createItem(placeURI,
PlacesUtils.bookmarksMenuFolderId, PlacesUtils.bookmarksMenuFolderId,
PlacesUtils.bookmarks.DEFAULT_INDEX, PlacesUtils.bookmarks.DEFAULT_INDEX,
input.value); input.value);
PlacesUIUtils.ptm.doTransaction(txn); PlacesUtils.ptm.doTransaction(txn);
// select and load the new query // select and load the new query
this._places.selectPlaceURI(placeSpec); this._places.selectPlaceURI(placeSpec);
@ -772,8 +772,8 @@ var PlacesSearchBox = {
updateCollectionTitle: function PSB_updateCollectionTitle(title) { updateCollectionTitle: function PSB_updateCollectionTitle(title) {
this.searchFilter.emptyText = this.searchFilter.emptyText =
title ? title ?
PlacesUIUtils.getFormattedString("searchCurrentDefault", [title]) : PlacesUtils.getFormattedString("searchCurrentDefault", [title]) :
PlacesUIUtils.getString("searchBookmarks"); PlacesUtils.getString("searchBookmarks");
}, },
/** /**
@ -1331,7 +1331,7 @@ var PlacesQueryBuilder = {
var selectedFolder = PlacesOrganizer._places.selectedNode.itemId; var selectedFolder = PlacesOrganizer._places.selectedNode.itemId;
// note "all bookmarks" isn't the concrete parent of the top-level // note "all bookmarks" isn't the concrete parent of the top-level
// bookmark folders // bookmark folders
if (selectedFolder != PlacesUIUtils.allBookmarksFolderId) { if (selectedFolder != PlacesUtils.allBookmarksFolderId) {
PlacesSearchBox.filterCollection = "collection"; PlacesSearchBox.filterCollection = "collection";
folders.push(PlacesOrganizer._places.selectedNode.itemId); folders.push(PlacesOrganizer._places.selectedNode.itemId);
break; break;
@ -1443,8 +1443,8 @@ var ViewMenu = {
// see bug #386287 for details // see bug #386287 for details
var columnId = column.getAttribute("anonid"); var columnId = column.getAttribute("anonid");
menuitemPrefix += columnId == "title" ? "name" : columnId; menuitemPrefix += columnId == "title" ? "name" : columnId;
label = PlacesUIUtils.getString(menuitemPrefix + ".label"); label = PlacesUtils.getString(menuitemPrefix + ".label");
var accesskey = PlacesUIUtils.getString(menuitemPrefix + ".accesskey"); var accesskey = PlacesUtils.getString(menuitemPrefix + ".accesskey");
menuitem.setAttribute("accesskey", accesskey); menuitem.setAttribute("accesskey", accesskey);
} }
menuitem.setAttribute("label", label); menuitem.setAttribute("label", label);

View File

@ -107,7 +107,7 @@
<command id="OrganizerCommand_backup" <command id="OrganizerCommand_backup"
oncommand="PlacesOrganizer.backupBookmarks();"/> oncommand="PlacesOrganizer.backupBookmarks();"/>
<command id="OrganizerCommand_restoreFromFile" <command id="OrganizerCommand_restoreFromFile"
oncommand="PlacesOrganizer.onRestoreBookmarksFromFile();"/> oncommand="PlacesOrganizer.restoreFromFile();"/>
<command id="OrganizerCommand_search:save" <command id="OrganizerCommand_search:save"
oncommand="PlacesOrganizer.saveSearch();"/> oncommand="PlacesOrganizer.saveSearch();"/>
<command id="OrganizerCommand_search:moreCriteria" <command id="OrganizerCommand_search:moreCriteria"

View File

@ -94,7 +94,7 @@
</commandset> </commandset>
<popup id="placesContext" <popup id="placesContext"
onpopupshowing="this._view = PlacesUIUtils.getViewForNode(document.popupNode); onpopupshowing="this._view = PlacesUtils.getViewForNode(document.popupNode);
return this._view.buildContextMenu(this);" return this._view.buildContextMenu(this);"
onpopuphiding="this._view.destroyContextMenu();"> onpopuphiding="this._view.destroyContextMenu();">
<menuitem id="placesContext_open" <menuitem id="placesContext_open"
@ -117,7 +117,7 @@
selectiontype="single" selectiontype="single"
selection="link"/> selection="link"/>
<menuitem id="placesContext_openContainer:tabs" <menuitem id="placesContext_openContainer:tabs"
oncommand="var view = PlacesUIUtils.getViewForNode(document.popupNode); oncommand="var view = PlacesUtils.getViewForNode(document.popupNode);
view.controller.openSelectionInTabs(event);" view.controller.openSelectionInTabs(event);"
onclick="checkForMiddleClick(this, event);" onclick="checkForMiddleClick(this, event);"
label="&cmd.open_all_in_tabs.label;" label="&cmd.open_all_in_tabs.label;"
@ -125,7 +125,7 @@
selectiontype="single" selectiontype="single"
selection="folder|host|query"/> selection="folder|host|query"/>
<menuitem id="placesContext_openLinks:tabs" <menuitem id="placesContext_openLinks:tabs"
oncommand="var view = PlacesUIUtils.getViewForNode(document.popupNode); oncommand="var view = PlacesUtils.getViewForNode(document.popupNode);
view.controller.openSelectionInTabs(event);" view.controller.openSelectionInTabs(event);"
onclick="checkForMiddleClick(this, event);" onclick="checkForMiddleClick(this, event);"
label="&cmd.open_all_in_tabs.label;" label="&cmd.open_all_in_tabs.label;"

View File

@ -67,13 +67,13 @@ var SidebarUtils = {
// do this *before* attempting to load the link since openURL uses // do this *before* attempting to load the link since openURL uses
// selection as an indication of which link to load. // selection as an indication of which link to load.
tbo.view.selection.select(row.value); tbo.view.selection.select(row.value);
PlacesUIUtils.openNodeWithEvent(aTree.selectedNode, aEvent); PlacesUtils.openNodeWithEvent(aTree.selectedNode, aEvent);
} }
}, },
handleTreeKeyPress: function SU_handleTreeKeyPress(aEvent) { handleTreeKeyPress: function SU_handleTreeKeyPress(aEvent) {
if (aEvent.keyCode == KeyEvent.DOM_VK_RETURN) if (aEvent.keyCode == KeyEvent.DOM_VK_RETURN)
PlacesUIUtils.openNodeWithEvent(aEvent.target.selectedNode, aEvent); PlacesUtils.openNodeWithEvent(aEvent.target.selectedNode, aEvent);
}, },
/** /**

View File

@ -902,7 +902,7 @@
getSupportedFlavours: function TBV_DO_getSupportedFlavours() { getSupportedFlavours: function TBV_DO_getSupportedFlavours() {
var flavorSet = new FlavourSet(); var flavorSet = new FlavourSet();
var types = PlacesUIUtils.GENERIC_VIEW_DROP_TYPES; var types = PlacesUtils.GENERIC_VIEW_DROP_TYPES;
for (var i = 0; i < types.length; ++i) for (var i = 0; i < types.length; ++i)
flavorSet.appendFlavour(types[i]); flavorSet.appendFlavour(types[i]);
return flavorSet; return flavorSet;
@ -961,7 +961,7 @@
return; return;
} }
var label = PlacesUIUtils.getString("bookmarksMenuEmptyFolder"); var label = PlacesUtils.getString("bookmarksMenuEmptyFolder");
aPopup._emptyMenuItem = document.createElement("menuitem"); aPopup._emptyMenuItem = document.createElement("menuitem");
aPopup._emptyMenuItem.setAttribute("label", label); aPopup._emptyMenuItem.setAttribute("label", label);
aPopup._emptyMenuItem.setAttribute("disabled", true); aPopup._emptyMenuItem.setAttribute("disabled", true);
@ -975,7 +975,7 @@
<parameter name="aBefore"/> <parameter name="aBefore"/>
<body><![CDATA[ <body><![CDATA[
var element = var element =
PlacesUIUtils.createMenuItemForNode(aChild, this._containerNodesMap); PlacesUtils.createMenuItemForNode(aChild, this._containerNodesMap);
if (aBefore) if (aBefore)
aParentPopup.insertBefore(element, aBefore); aParentPopup.insertBefore(element, aBefore);
else else

View File

@ -711,7 +711,7 @@
<method name="getSupportedFlavours"> <method name="getSupportedFlavours">
<body><![CDATA[ <body><![CDATA[
var flavorSet = new FlavourSet(); var flavorSet = new FlavourSet();
var types = PlacesUIUtils.GENERIC_VIEW_DROP_TYPES; var types = PlacesUtils.GENERIC_VIEW_DROP_TYPES;
for (var i = 0; i < types.length; ++i) for (var i = 0; i < types.length; ++i)
flavorSet.appendFlavour(types[i]); flavorSet.appendFlavour(types[i]);
return flavorSet; return flavorSet;

View File

@ -191,8 +191,8 @@ PlacesTreeView.prototype = {
if (!aContainer.containerOpen) if (!aContainer.containerOpen)
return; // nothing to do return; // nothing to do
const openLiteral = PlacesUIUtils.RDF.GetResource("http://home.netscape.com/NC-rdf#open"); const openLiteral = PlacesUtils.RDF.GetResource("http://home.netscape.com/NC-rdf#open");
const trueLiteral = PlacesUIUtils.RDF.GetLiteral("true"); const trueLiteral = PlacesUtils.RDF.GetLiteral("true");
var cc = aContainer.childCount; var cc = aContainer.childCount;
for (var i=0; i < cc; i++) { for (var i=0; i < cc; i++) {
@ -218,8 +218,8 @@ PlacesTreeView.prototype = {
var resource = this._getResourceForNode(curChild); var resource = this._getResourceForNode(curChild);
var isopen = resource != null && var isopen = resource != null &&
PlacesUIUtils.localStore.HasAssertion(resource, openLiteral, PlacesUtils.localStore.HasAssertion(resource, openLiteral,
trueLiteral, true); trueLiteral, true);
if (isopen != curChild.containerOpen) if (isopen != curChild.containerOpen)
aToOpen.push(curChild); aToOpen.push(curChild);
else if (curChild.containerOpen && curChild.childCount > 0) else if (curChild.containerOpen && curChild.childCount > 0)
@ -829,7 +829,7 @@ PlacesTreeView.prototype = {
{ {
var uri = aNode.uri; var uri = aNode.uri;
NS_ASSERT(uri, "if there is no uri, we can't persist the open state"); NS_ASSERT(uri, "if there is no uri, we can't persist the open state");
return uri ? PlacesUIUtils.RDF.GetResource(uri) : null; return uri ? PlacesUtils.RDF.GetResource(uri) : null;
}, },
// nsITreeView // nsITreeView
@ -1117,7 +1117,7 @@ PlacesTreeView.prototype = {
// if they go through the "result" API. // if they go through the "result" API.
if (PlacesUtils.nodeIsSeparator(node)) if (PlacesUtils.nodeIsSeparator(node))
return ""; return "";
return node.title || PlacesUIUtils.getString("noTitle"); return node.title || PlacesUtils.getString("noTitle");
case this.COLUMN_TYPE_TAGS: case this.COLUMN_TYPE_TAGS:
return node.tags; return node.tags;
case this.COLUMN_TYPE_URI: case this.COLUMN_TYPE_URI:
@ -1191,13 +1191,13 @@ PlacesTreeView.prototype = {
var resource = this._getResourceForNode(node); var resource = this._getResourceForNode(node);
if (resource) { if (resource) {
const openLiteral = PlacesUIUtils.RDF.GetResource("http://home.netscape.com/NC-rdf#open"); const openLiteral = PlacesUtils.RDF.GetResource("http://home.netscape.com/NC-rdf#open");
const trueLiteral = PlacesUIUtils.RDF.GetLiteral("true"); const trueLiteral = PlacesUtils.RDF.GetLiteral("true");
if (node.containerOpen) if (node.containerOpen)
PlacesUIUtils.localStore.Unassert(resource, openLiteral, trueLiteral); PlacesUtils.localStore.Unassert(resource, openLiteral, trueLiteral);
else else
PlacesUIUtils.localStore.Assert(resource, openLiteral, trueLiteral, true); PlacesUtils.localStore.Assert(resource, openLiteral, trueLiteral, true);
} }
node.containerOpen = !node.containerOpen; node.containerOpen = !node.containerOpen;

File diff suppressed because it is too large Load Diff

View File

@ -67,8 +67,6 @@ CPPSRCS = nsPlacesImportExportService.cpp
EXTRA_COMPONENTS = nsPlacesTransactionsService.js EXTRA_COMPONENTS = nsPlacesTransactionsService.js
EXTRA_PP_COMPONENTS = nsPlacesTransactionsService.js
include $(topsrcdir)/config/rules.mk include $(topsrcdir)/config/rules.mk
XPIDL_FLAGS += -I$(topsrcdir)/browser/components XPIDL_FLAGS += -I$(topsrcdir)/browser/components

View File

@ -381,10 +381,10 @@ protected:
// importing bookmarks.html files. // importing bookmarks.html files.
PRBool mAllowRootChanges; PRBool mAllowRootChanges;
// If set, this is an import of initial bookmarks.html content, // if set, this is an import of initial bookmarks.html content,
// so we don't want to kick off HTTP traffic // so we don't want to kick off HTTP traffic
// and we want the imported personal toolbar folder // and we want the imported personal toolbar folder
// to be set as the personal toolbar folder. (If not set // to be set as the personal toolbar folder. (if not set
// we will treat it as a normal folder.) // we will treat it as a normal folder.)
PRBool mIsImportDefaults; PRBool mIsImportDefaults;
@ -2440,7 +2440,9 @@ nsPlacesImportExportService::ExportHTMLToFile(nsILocalFile* aBookmarksFile)
return rv; return rv;
} }
#define BROWSER_BOOKMARKS_OVERWRITE_PREF "browser.bookmarks.overwrite"
#define BROWSER_BOOKMARKS_MAX_BACKUPS_PREF "browser.bookmarks.max_backups" #define BROWSER_BOOKMARKS_MAX_BACKUPS_PREF "browser.bookmarks.max_backups"
#define POSTPLACES_BOOKMARKS_FILE "bookmarks.postplaces.html"
NS_IMETHODIMP NS_IMETHODIMP
nsPlacesImportExportService::BackupBookmarksFile() nsPlacesImportExportService::BackupBookmarksFile()
@ -2456,6 +2458,15 @@ nsPlacesImportExportService::BackupBookmarksFile()
rv = NS_GetSpecialDirectory(NS_APP_BOOKMARKS_50_FILE, rv = NS_GetSpecialDirectory(NS_APP_BOOKMARKS_50_FILE,
getter_AddRefs(bookmarksFileDir)); 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); NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsILocalFile> bookmarksFile(do_QueryInterface(bookmarksFileDir)); nsCOMPtr<nsILocalFile> bookmarksFile(do_QueryInterface(bookmarksFileDir));
@ -2472,6 +2483,17 @@ nsPlacesImportExportService::BackupBookmarksFile()
rv = ExportHTMLToFile(bookmarksFile); rv = ExportHTMLToFile(bookmarksFile);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
// archive if needed
PRInt32 numberOfBackups;
rv = prefs->GetIntPref(BROWSER_BOOKMARKS_MAX_BACKUPS_PREF, &numberOfBackups);
if (NS_FAILED(rv))
numberOfBackups = 5;
if (numberOfBackups > 0) {
rv = ArchiveBookmarksFile(numberOfBackups, PR_FALSE);
NS_ENSURE_SUCCESS(rv, rv);
}
return NS_OK; return NS_OK;
} }
@ -2487,7 +2509,7 @@ nsPlacesImportExportService::BackupBookmarksFile()
*/ */
nsresult nsresult
nsPlacesImportExportService::ArchiveBookmarksFile(PRInt32 numberOfBackups, nsPlacesImportExportService::ArchiveBookmarksFile(PRInt32 numberOfBackups,
PRBool forceArchive) PRBool forceArchive)
{ {
nsCOMPtr<nsIFile> bookmarksBackupDir; nsCOMPtr<nsIFile> bookmarksBackupDir;
nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR, nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
@ -2508,7 +2530,7 @@ nsPlacesImportExportService::ArchiveBookmarksFile(PRInt32 numberOfBackups,
} }
// construct the new leafname // construct the new leafname
PRTime now64 = PR_Now(); PRTime now64 = PR_Now();
PRExplodedTime nowInfo; PRExplodedTime nowInfo;
PR_ExplodeTime(now64, PR_LocalTimeParameters, &nowInfo); PR_ExplodeTime(now64, PR_LocalTimeParameters, &nowInfo);
PR_NormalizeTime(&nowInfo, PR_LocalTimeParameters); PR_NormalizeTime(&nowInfo, PR_LocalTimeParameters);
@ -2519,6 +2541,8 @@ nsPlacesImportExportService::ArchiveBookmarksFile(PRInt32 numberOfBackups,
// and makes the alphabetical order of multiple backup files more useful. // and makes the alphabetical order of multiple backup files more useful.
PR_FormatTime(timeString, 128, "bookmarks-%Y-%m-%d.html", &nowInfo); PR_FormatTime(timeString, 128, "bookmarks-%Y-%m-%d.html", &nowInfo);
//nsCAutoString backupFilenameCString(timeString);
//nsAutoString backupFilenameString = NS_ConvertUTF8toUTF16(backupFilenameCString);
nsAutoString backupFilenameString = NS_ConvertUTF8toUTF16((timeString)); nsAutoString backupFilenameString = NS_ConvertUTF8toUTF16((timeString));
nsCOMPtr<nsIFile> backupFile; nsCOMPtr<nsIFile> backupFile;
@ -2585,6 +2609,18 @@ nsPlacesImportExportService::ArchiveBookmarksFile(PRInt32 numberOfBackups,
getter_AddRefs(bookmarksFile)); getter_AddRefs(bookmarksFile));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIPrefBranch> 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); rv = bookmarksFile->CopyTo(bookmarksBackupDir, backupFilenameString);
// at least dump something out in case this fails in a debug build // at least dump something out in case this fails in a debug build
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);

View File

@ -37,18 +37,17 @@
* *
* ***** END LICENSE BLOCK ***** */ * ***** END LICENSE BLOCK ***** */
let Ci = Components.interfaces;
let Cc = Components.classes;
let Cr = Components.results;
const loadInSidebarAnno = "bookmarkProperties/loadInSidebar"; const loadInSidebarAnno = "bookmarkProperties/loadInSidebar";
const descriptionAnno = "bookmarkProperties/description"; const descriptionAnno = "bookmarkProperties/description";
const CLASS_ID = Components.ID("c0844a84-5a12-4808-80a8-809cb002bb4f"); const CLASS_ID = Components.ID("c0844a84-5a12-4808-80a8-809cb002bb4f");
const CONTRACT_ID = "@mozilla.org/browser/placesTransactionsService;1"; const CONTRACT_ID = "@mozilla.org/browser/placesTransactionsService;1";
var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].
getService(Components.interfaces.mozIJSSubScriptLoader);
loader.loadSubScript("chrome://global/content/debug.js");
loader.loadSubScript("chrome://browser/content/places/utils.js");
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/utils.js");
Components.utils.import("resource://gre/modules/debug.js");
// The minimum amount of transactions we should tell our observers to begin // The minimum amount of transactions we should tell our observers to begin
// batching (rather than letting them do incremental drawing). // batching (rather than letting them do incremental drawing).

View File

@ -37,8 +37,6 @@
* *
* ***** END LICENSE BLOCK ***** */ * ***** END LICENSE BLOCK ***** */
version(170);
const NS_APP_USER_PROFILE_50_DIR = "ProfD"; const NS_APP_USER_PROFILE_50_DIR = "ProfD";
var Ci = Components.interfaces; var Ci = Components.interfaces;
var Cc = Components.classes; var Cc = Components.classes;

View File

@ -36,7 +36,12 @@
* *
* ***** END LICENSE BLOCK ***** */ * ***** END LICENSE BLOCK ***** */
Components.utils.import("resource://gre/modules/utils.js"); version(170);
var loader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
getService(Ci.mozIJSSubScriptLoader);
loader.loadSubScript("chrome://global/content/debug.js");
loader.loadSubScript("chrome://browser/content/places/utils.js");
const bmsvc = PlacesUtils.bookmarks; const bmsvc = PlacesUtils.bookmarks;
const testFolderId = PlacesUtils.bookmarksMenuFolderId; const testFolderId = PlacesUtils.bookmarksMenuFolderId;

View File

@ -78,6 +78,7 @@ try {
do_throw("Could not get io service\n"); do_throw("Could not get io service\n");
} }
const DESCRIPTION_ANNO = "bookmarkProperties/description"; const DESCRIPTION_ANNO = "bookmarkProperties/description";
const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar"; const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
const POST_DATA_ANNO = "bookmarkProperties/POSTData"; const POST_DATA_ANNO = "bookmarkProperties/POSTData";

View File

@ -129,7 +129,7 @@ function (aTitle, aContentURL, aCustomizeURL, aPersist)
} }
catch(ex) { return; } catch(ex) { return; }
win.PlacesUIUtils.showMinimalAddBookmarkUI(uri, aTitle, null, null, true, true); win.PlacesUtils.showMinimalAddBookmarkUI(uri, aTitle, null, null, true, true);
} }
nsSidebar.prototype.validateSearchEngine = nsSidebar.prototype.validateSearchEngine =

View File

@ -102,8 +102,4 @@ EXTRA_PP_COMPONENTS = nsLivemarkService.js \
nsTaggingService.js \ nsTaggingService.js \
$(NULL) $(NULL)
EXTRA_JS_MODULES = utils.js
EXTRA_PP_JS_MODULES = utils.js
include $(topsrcdir)/config/rules.mk include $(topsrcdir)/config/rules.mk

View File

@ -194,14 +194,13 @@ TaggingService.prototype = {
* the item-id of the tag element under the tags root * the item-id of the tag element under the tags root
*/ */
_removeTagIfEmpty: function TS__removeTagIfEmpty(aTagId) { _removeTagIfEmpty: function TS__removeTagIfEmpty(aTagId) {
var node = this._getTagNode(aTagId).QueryInterface(Ci.nsINavHistoryContainerResultNode); var options = this._history.getNewQueryOptions();
var wasOpen = node.containerOpen; var query = this._history.getNewQuery();
if (!wasOpen) query.setFolders([aTagId], 1);
node.containerOpen = true; var result = this._history.executeQuery(query, options);
var cc = node.childCount; var rootNode = result.root;
if (wasOpen) rootNode.containerOpen = true;
node.containerOpen = false; if (rootNode.childCount == 0)
if (cc == 0)
this._bms.removeFolder(aTagId); this._bms.removeFolder(aTagId);
}, },

View File

@ -51,9 +51,6 @@ ifdef ENABLE_TESTS
DIRS += tests DIRS += tests
endif endif
EXTRA_JS_MODULES = debug.js
EXTRA_PP_JS_MODULES = debug.js
include $(topsrcdir)/config/rules.mk include $(topsrcdir)/config/rules.mk
distclean:: distclean::

View File

@ -42,8 +42,6 @@
# This file contains functions that are useful for debugging purposes from # This file contains functions that are useful for debugging purposes from
# within JavaScript code. # within JavaScript code.
var EXPORTED_SYMBOLS = ["NS_ASSERT"];
var gTraceOnAssert = true; var gTraceOnAssert = true;
/** /**

View File

@ -196,4 +196,4 @@ function FillInTooltip ( tipElement )
return retVal; return retVal;
} }
Components.utils.import("resource://gre/modules/debug.js"); #include debug.js

View File

@ -11,6 +11,7 @@ toolkit.jar:
* content/global/about.xhtml (about.xhtml) * content/global/about.xhtml (about.xhtml)
content/global/plugins.html content/global/plugins.html
content/global/plugins.css content/global/plugins.css
* content/global/debug.js (debug.js)
+ content/global/buildconfig.html (buildconfig.html) + content/global/buildconfig.html (buildconfig.html)
+ content/global/charsetOverlay.js (charsetOverlay.js) + content/global/charsetOverlay.js (charsetOverlay.js)
+ content/global/charsetOverlay.xul (charsetOverlay.xul) + content/global/charsetOverlay.xul (charsetOverlay.xul)