Bug 384370 - use JSON as the on disk, lossless format for our bookmark backup (r=mano)

This commit is contained in:
dietrich%mozilla.com 2008-03-13 19:25:52 +00:00
Родитель cc8021c233
Коммит 0056d5f1e8
35 изменённых файлов: 862 добавлений и 1408 удалений

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

@ -2640,7 +2640,7 @@ var bookmarksButtonObserver = {
var split = aXferData.data.split("\n");
var url = split[0];
if (url != aXferData.data) // do nothing if it's not a valid URL
PlacesUtils.showMinimalAddBookmarkUI(makeURI(url), split[1]);
PlacesUIUtils.showMinimalAddBookmarkUI(makeURI(url), split[1]);
},
onDragOver: function (aEvent, aFlavour, aDragSession)
@ -3115,7 +3115,7 @@ function addToUrlbarHistory(aUrlToAdd)
try {
if (aUrlToAdd.indexOf(" ") == -1) {
PlacesUtils.markPageAsTyped(aUrlToAdd);
PlacesUIUtils.markPageAsTyped(aUrlToAdd);
}
}
catch(ex) {
@ -4780,9 +4780,9 @@ function asyncOpenWebPanel(event)
// 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
// title attribute contains the title that should be used for the sidebar panel.
PlacesUtils.showMinimalAddBookmarkUI(makeURI(wrapper.href),
wrapper.getAttribute("title"),
null, null, true, true);
PlacesUIUtils.showMinimalAddBookmarkUI(makeURI(wrapper.href),
wrapper.getAttribute("title"),
null, null, true, true);
event.preventDefault();
return false;
}
@ -5746,9 +5746,9 @@ function AddKeywordForSearchField()
else
spec += "?" + formData.join("&");
var description = PlacesUtils.getDescriptionFromDocument(node.ownerDocument);
PlacesUtils.showMinimalAddBookmarkUI(makeURI(spec), "", description, null,
null, null, "", postData);
var description = PlacesUIUtils.getDescriptionFromDocument(node.ownerDocument);
PlacesUIUtils.showMinimalAddBookmarkUI(makeURI(spec), "", description, null,
null, null, "", postData);
}
function SwitchDocumentDirection(aWindow) {

Просмотреть файл

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

Просмотреть файл

@ -47,6 +47,13 @@ Cu.import("resource:///modules/distribution.js");
const PREF_EM_NEW_ADDONS_LIST = "extensions.newAddons";
// 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
const BrowserGlueServiceFactory = {
_instance: null,
@ -108,15 +115,23 @@ BrowserGlue.prototype = {
if (this._saveSession) {
this._setPrefToSaveSession();
}
this._shutdownPlaces();
this.idleService.removeIdleObserver(this, BOOKMARKS_ARCHIVE_IDLE_TIME);
break;
case "session-save":
this._setPrefToSaveSession();
subject.QueryInterface(Ci.nsISupportsPRBool);
subject.data = true;
break;
case "idle":
if (this.idleService.idleTime > BOOKMARKS_ARCHIVE_IDLE_TIME * 1000) {
// Back up bookmarks.
this._archiveBookmarks();
}
break;
}
}
,
},
// initialization (called on application startup)
_init: function()
{
@ -357,6 +372,14 @@ BrowserGlue.prototype = {
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
* - imports the bookmarks html file if bookmarks datastore is empty
@ -369,10 +392,11 @@ BrowserGlue.prototype = {
var histsvc = Cc["@mozilla.org/browser/nav-history-service;1"].
getService(Ci.nsINavHistoryService);
var prefBranch = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefBranch);
var importBookmarks = false;
try {
var prefBranch = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefBranch);
importBookmarks = prefBranch.getBoolPref("browser.places.importBookmarksHTML");
} catch(ex) {}
@ -380,55 +404,86 @@ BrowserGlue.prototype = {
// Call it here for Fx3 profiles created before the Places folder
// has been added, otherwise it's called during import.
this.ensurePlacesDefaultQueriesInitialized();
return;
}
else {
// get latest backup
Cu.import("resource://gre/modules/utils.js");
var bookmarksFile = PlacesUtils.getMostRecentBackup();
var dirService = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
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);
if (bookmarksFile && bookmarksFile.leafName.match("\.json$")) {
// restore a JSON backup
PlacesUtils.restoreBookmarksFromJSONFile(bookmarksFile);
}
else {
// if there's no json backup use bookmarks.html
// only back up pre-places bookmarks.html if we plan on overwriting it
if (prefBranch.getBoolPref("browser.bookmarks.overwrite")) {
// backup pre-places bookmarks.html
// XXXtodo remove this before betas, after import/export is solid
var profDir = dirService.get("ProfD", Ci.nsILocalFile);
var bookmarksBackup = profDir.clone();
bookmarksBackup.append("bookmarks.preplaces.html");
if (!bookmarksBackup.exists()) {
// save old bookmarks.html file as bookmarks.preplaces.html
try {
bookmarksFile.copyTo(profDir, "bookmarks.preplaces.html");
} catch(ex) {
dump("nsBrowserGlue::_initPlaces(): copy of bookmarks.html to bookmarks.preplaces.html failed: " + ex + "\n");
}
var dirService = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
var bookmarksFile = dirService.get("BMarks", Ci.nsILocalFile);
// import the file
try {
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
* - 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() {
// backup bookmarks to bookmarks.html
var importer =
// Backup and archive Places bookmarks.
this._archiveBookmarks();
// 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"].
getService(Ci.nsIPlacesImportExportService);
importer.backupBookmarksFile();
getService(Ci.nsIPlacesImportExportService).
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() {

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

@ -76,7 +76,7 @@
<field name="_endMarker">-1</field>
<!-- This is the view that manage the popup -->
<field name="_rootView">PlacesUtils.getViewForNode(this);</field>
<field name="_rootView">PlacesUIUtils.getViewForNode(this);</field>
<field name="_built">false</field>
@ -217,7 +217,7 @@
<method name="getSupportedFlavours">
<body><![CDATA[
var flavourSet = new FlavourSet();
var acceptedDropFlavours = PlacesUtils.GENERIC_VIEW_DROP_TYPES;
var acceptedDropFlavours = PlacesUIUtils.GENERIC_VIEW_DROP_TYPES;
acceptedDropFlavours.forEach(flavourSet.appendFlavour, flavourSet);
return flavourSet;
]]></body>
@ -580,7 +580,7 @@
<parameter name="aBefore"/>
<body><![CDATA[
var element =
PlacesUtils.createMenuItemForNode(aChild, this._containerNodesMap);
PlacesUIUtils.createMenuItemForNode(aChild, this._containerNodesMap);
if (aBefore)
aParentPopup.insertBefore(element, aBefore);
@ -605,7 +605,7 @@
return;
}
var label = PlacesUtils.getString("bookmarksMenuEmptyFolder");
var label = PlacesUIUtils.getString("bookmarksMenuEmptyFolder");
aPopup._emptyMenuItem = document.createElement("menuitem");
aPopup._emptyMenuItem.setAttribute("label", label);
aPopup._emptyMenuItem.setAttribute("disabled", true);
@ -616,7 +616,7 @@
<method name="_rebuild">
<parameter name="aPopup"/>
<body><![CDATA[
PlacesUtils.cleanPlacesPopup(aPopup);
PlacesUIUtils.cleanPlacesPopup(aPopup);
var cc = aPopup._resultNode.childCount;
if (cc > 0) {
@ -756,7 +756,7 @@
else
menuitem.removeAttribute("image");
var title = PlacesUtils.getBestTitle(aNode);
var title = PlacesUIUtils.getBestTitle(aNode);
if (menuitem.getAttribute("label") != title)
menuitem.setAttribute("label", title);

Просмотреть файл

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

Просмотреть файл

@ -43,12 +43,12 @@ var PlacesOrganizer = {
_content: null,
_initFolderTree: function() {
var leftPaneRoot = PlacesUtils.leftPaneFolderId;
var leftPaneRoot = PlacesUIUtils.leftPaneFolderId;
this._places.place = "place:excludeItems=1&expandQueries=0&folder=" + leftPaneRoot;
},
selectLeftPaneQuery: function PO_selectLeftPaneQuery(aQueryName) {
var itemId = PlacesUtils.leftPaneQueries[aQueryName];
var itemId = PlacesUIUtils.leftPaneQueries[aQueryName];
this._places.selectItems([itemId]);
// Forcefully expand all-bookmarks
if (aQueryName == "AllBookmarks")
@ -225,7 +225,7 @@ var PlacesOrganizer = {
// the search box in the toolbar if the active collection is the current
// collection.
var findCommand = document.getElementById("OrganizerCommand_find:current");
var findLabel = PlacesUtils.getFormattedString("findInPrefix", [node.title]);
var findLabel = PlacesUIUtils.getFormattedString("findInPrefix", [node.title]);
findCommand.setAttribute("label", findLabel);
if (PlacesSearchBox.filterCollection == "collection")
PlacesSearchBox.updateCollectionTitle(node.title);
@ -246,7 +246,7 @@ var PlacesOrganizer = {
var selectedNode = currentView.selectedNode;
if (selectedNode && aEvent.button == 1) {
if (PlacesUtils.nodeIsURI(selectedNode))
PlacesUtils.openNodeWithEvent(selectedNode, aEvent);
PlacesUIUtils.openNodeWithEvent(selectedNode, aEvent);
else if (PlacesUtils.nodeIsContainer(selectedNode)) {
// The command execution function will take care of seeing the
// selection is a folder/container and loading its contents in
@ -264,7 +264,7 @@ var PlacesOrganizer = {
},
openSelectedNode: function PU_openSelectedNode(aEvent) {
PlacesUtils.openNodeWithEvent(this._content.selectedNode, aEvent);
PlacesUIUtils.openNodeWithEvent(this._content.selectedNode, aEvent);
},
/**
@ -305,7 +305,7 @@ var PlacesOrganizer = {
importFromFile: function PO_importFromFile() {
var fp = Cc["@mozilla.org/filepicker;1"].
createInstance(Ci.nsIFilePicker);
fp.init(window, PlacesUtils.getString("SelectImport"),
fp.init(window, PlacesUIUtils.getString("SelectImport"),
Ci.nsIFilePicker.modeOpen);
fp.appendFilters(Ci.nsIFilePicker.filterHTML | Ci.nsIFilePicker.filterAll);
if (fp.show() != Ci.nsIFilePicker.returnCancel) {
@ -324,7 +324,7 @@ var PlacesOrganizer = {
exportBookmarks: function PO_exportBookmarks() {
var fp = Cc["@mozilla.org/filepicker;1"].
createInstance(Ci.nsIFilePicker);
fp.init(window, PlacesUtils.getString("EnterExport"),
fp.init(window, PlacesUIUtils.getString("EnterExport"),
Ci.nsIFilePicker.modeSave);
fp.appendFilters(Ci.nsIFilePicker.filterHTML);
fp.defaultString = "bookmarks.html";
@ -359,13 +359,13 @@ var PlacesOrganizer = {
var files = bookmarksBackupDir.directoryEntries;
while (files.hasMoreElements()) {
var f = files.getNext().QueryInterface(Ci.nsIFile);
if (!f.isHidden() && f.leafName.match(/\.html?$/))
if (!f.isHidden() && f.leafName.match(/^bookmarks-.+(html|json)?$/))
fileList.push(f);
}
fileList.sort(function PO_fileList_compare(a, b) {
return b.lastModifiedTime - a.lastModifiedTime;
});
return b.lastModifiedTime - a.lastModifiedTime;
});
if (fileList.length == 0)
return;
@ -376,7 +376,7 @@ var PlacesOrganizer = {
(document.createElement("menuitem"),
document.getElementById("restoreFromFile"));
var dateStr = fileList[i].leafName.replace("bookmarks-", "").
replace(".html", "");
replace(/\.(html|json)$/, "");
if (!dateStr.length)
dateStr = fileList[i].leafName;
m.setAttribute("label", dateStr);
@ -399,27 +399,58 @@ var PlacesOrganizer = {
bookmarksFile.append(aMenuItem.getAttribute("value"));
if (!bookmarksFile.exists())
return;
var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"].
getService(Ci.nsIPromptService);
if (!prompts.confirm(null,
PlacesUtils.getString("bookmarksRestoreAlertTitle"),
PlacesUtils.getString("bookmarksRestoreAlert")))
return;
var ieSvc = Cc["@mozilla.org/browser/places/import-export-service;1"].
getService(Ci.nsIPlacesImportExportService);
ieSvc.importHTMLFromFile(bookmarksFile, true);
this.restoreBookmarksFromFile(bookmarksFile);
},
/**
* Backup bookmarks to desktop, auto-generate a filename with a date
* 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"].
getService(Ci.nsIPromptService);
if (!prompts.confirm(null,
PlacesUIUtils.getString("bookmarksRestoreAlertTitle"),
PlacesUIUtils.getString("bookmarksRestoreAlert")))
return;
if (aFile.leafName.match("\.json$")) {
// restore a JSON backup
PlacesUtils.restoreBookmarksFromJSONFile(aFile);
}
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.
* The file is a JSON serialization of bookmarks, tags and any annotations
* of those items.
*/
backupBookmarks: function PO_backupBookmarks() {
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
fp.init(window, PlacesUtils.getString("bookmarksBackupTitle"),
fp.init(window, PlacesUIUtils.getString("bookmarksBackupTitle"),
Ci.nsIFilePicker.modeSave);
fp.appendFilters(Ci.nsIFilePicker.filterHTML);
var dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
@ -430,41 +461,10 @@ var PlacesOrganizer = {
// and makes the alphabetical order of multiple backup files more useful.
var date = (new Date).toLocaleFormat("%Y-%m-%d");
fp.defaultString = PlacesUtils.getFormattedString("bookmarksBackupFilename",
[date]);
[date]);
if (fp.show() != Ci.nsIFilePicker.returnCancel) {
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);
}
if (fp.show() != Ci.nsIFilePicker.returnCancel)
PlacesUtils.backupBookmarksToFile(fp.file);
},
_paneDisabled: false,
@ -567,16 +567,16 @@ var PlacesOrganizer = {
var rowCount = this._content.treeBoxObject.view.rowCount;
if (rowCount == 0) {
selectItemDesc.hidden = true;
itemsCountLabel.value = PlacesUtils.getString("detailsPane.noItems");
itemsCountLabel.value = PlacesUIUtils.getString("detailsPane.noItems");
}
else {
selectItemDesc.hidden = false;
if (rowCount == 1)
itemsCountLabel.value = PlacesUtils.getString("detailsPane.oneItem");
itemsCountLabel.value = PlacesUIUtils.getString("detailsPane.oneItem");
else {
itemsCountLabel.value =
PlacesUtils.getFormattedString("detailsPane.multipleItems",
[rowCount]);
PlacesUIUtils.getFormattedString("detailsPane.multipleItems",
[rowCount]);
}
}
}
@ -661,9 +661,9 @@ var PlacesOrganizer = {
// Prompt the user for a name for the query.
// 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.
var title = PlacesUtils.getString("saveSearch.title");
var inputLabel = PlacesUtils.getString("saveSearch.inputLabel");
var defaultText = PlacesUtils.getString("saveSearch.defaultText");
var title = PlacesUIUtils.getString("saveSearch.title");
var inputLabel = PlacesUIUtils.getString("saveSearch.inputLabel");
var defaultText = PlacesUIUtils.getString("saveSearch.defaultText");
var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"].
getService(Ci.nsIPromptService);
@ -676,11 +676,11 @@ var PlacesOrganizer = {
return;
// Add the place: uri as a bookmark under the bookmarks root.
var txn = PlacesUtils.ptm.createItem(placeURI,
PlacesUtils.bookmarksMenuFolderId,
PlacesUtils.bookmarks.DEFAULT_INDEX,
input.value);
PlacesUtils.ptm.doTransaction(txn);
var txn = PlacesUIUtils.ptm.createItem(placeURI,
PlacesUtils.bookmarksMenuFolderId,
PlacesUtils.bookmarks.DEFAULT_INDEX,
input.value);
PlacesUIUtils.ptm.doTransaction(txn);
// select and load the new query
this._places.selectPlaceURI(placeSpec);
@ -793,8 +793,8 @@ var PlacesSearchBox = {
updateCollectionTitle: function PSB_updateCollectionTitle(title) {
this.searchFilter.emptyText =
title ?
PlacesUtils.getFormattedString("searchCurrentDefault", [title]) :
PlacesUtils.getString("searchBookmarks");
PlacesUIUtils.getFormattedString("searchCurrentDefault", [title]) :
PlacesUIUtils.getString("searchBookmarks");
},
/**
@ -1352,7 +1352,7 @@ var PlacesQueryBuilder = {
var selectedFolder = PlacesOrganizer._places.selectedNode.itemId;
// note "all bookmarks" isn't the concrete parent of the top-level
// bookmark folders
if (selectedFolder != PlacesUtils.allBookmarksFolderId) {
if (selectedFolder != PlacesUIUtils.allBookmarksFolderId) {
PlacesSearchBox.filterCollection = "collection";
folders.push(PlacesOrganizer._places.selectedNode.itemId);
break;
@ -1464,8 +1464,8 @@ var ViewMenu = {
// see bug #386287 for details
var columnId = column.getAttribute("anonid");
menuitemPrefix += columnId == "title" ? "name" : columnId;
label = PlacesUtils.getString(menuitemPrefix + ".label");
var accesskey = PlacesUtils.getString(menuitemPrefix + ".accesskey");
label = PlacesUIUtils.getString(menuitemPrefix + ".label");
var accesskey = PlacesUIUtils.getString(menuitemPrefix + ".accesskey");
menuitem.setAttribute("accesskey", accesskey);
}
menuitem.setAttribute("label", label);

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -383,10 +383,10 @@ protected:
// importing bookmarks.html files.
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
// 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.)
PRBool mIsImportDefaults;
@ -2448,9 +2448,7 @@ nsPlacesImportExportService::ExportHTMLToFile(nsILocalFile* aBookmarksFile)
return rv;
}
#define BROWSER_BOOKMARKS_OVERWRITE_PREF "browser.bookmarks.overwrite"
#define BROWSER_BOOKMARKS_MAX_BACKUPS_PREF "browser.bookmarks.max_backups"
#define POSTPLACES_BOOKMARKS_FILE "bookmarks.postplaces.html"
NS_IMETHODIMP
nsPlacesImportExportService::BackupBookmarksFile()
@ -2466,15 +2464,6 @@ nsPlacesImportExportService::BackupBookmarksFile()
rv = NS_GetSpecialDirectory(NS_APP_BOOKMARKS_50_FILE,
getter_AddRefs(bookmarksFileDir));
PRBool overwriteBookmarks;
rv = prefs->GetBoolPref(BROWSER_BOOKMARKS_OVERWRITE_PREF, &overwriteBookmarks);
NS_ENSURE_SUCCESS(rv, rv);
if (!overwriteBookmarks) {
rv = bookmarksFileDir->SetLeafName(NS_LITERAL_STRING(POSTPLACES_BOOKMARKS_FILE));
NS_ENSURE_SUCCESS(rv, rv);
}
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsILocalFile> bookmarksFile(do_QueryInterface(bookmarksFileDir));
@ -2491,17 +2480,6 @@ nsPlacesImportExportService::BackupBookmarksFile()
rv = ExportHTMLToFile(bookmarksFile);
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;
}
@ -2517,7 +2495,7 @@ nsPlacesImportExportService::BackupBookmarksFile()
*/
nsresult
nsPlacesImportExportService::ArchiveBookmarksFile(PRInt32 numberOfBackups,
PRBool forceArchive)
PRBool forceArchive)
{
nsCOMPtr<nsIFile> bookmarksBackupDir;
nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
@ -2538,7 +2516,7 @@ nsPlacesImportExportService::ArchiveBookmarksFile(PRInt32 numberOfBackups,
}
// construct the new leafname
PRTime now64 = PR_Now();
PRTime now64 = PR_Now();
PRExplodedTime nowInfo;
PR_ExplodeTime(now64, PR_LocalTimeParameters, &nowInfo);
PR_NormalizeTime(&nowInfo, PR_LocalTimeParameters);
@ -2549,8 +2527,6 @@ nsPlacesImportExportService::ArchiveBookmarksFile(PRInt32 numberOfBackups,
// and makes the alphabetical order of multiple backup files more useful.
PR_FormatTime(timeString, 128, "bookmarks-%Y-%m-%d.html", &nowInfo);
//nsCAutoString backupFilenameCString(timeString);
//nsAutoString backupFilenameString = NS_ConvertUTF8toUTF16(backupFilenameCString);
nsAutoString backupFilenameString = NS_ConvertUTF8toUTF16((timeString));
nsCOMPtr<nsIFile> backupFile;
@ -2617,18 +2593,6 @@ nsPlacesImportExportService::ArchiveBookmarksFile(PRInt32 numberOfBackups,
getter_AddRefs(bookmarksFile));
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);
// at least dump something out in case this fails in a debug build
NS_ENSURE_SUCCESS(rv, rv);

Просмотреть файл

@ -37,18 +37,24 @@
*
* ***** END LICENSE BLOCK ***** */
let Ci = Components.interfaces;
let Cc = Components.classes;
let Cr = Components.results;
const loadInSidebarAnno = "bookmarkProperties/loadInSidebar";
const descriptionAnno = "bookmarkProperties/description";
const CLASS_ID = Components.ID("c0844a84-5a12-4808-80a8-809cb002bb4f");
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");
__defineGetter__("PlacesUtils", function() {
delete this.PlacesUtils
var tmpScope = {};
Components.utils.import("resource://gre/modules/utils.js", tmpScope);
return this.PlacesUtils = tmpScope.PlacesUtils;
});
// The minimum amount of transactions we should tell our observers to begin
// batching (rather than letting them do incremental drawing).
const MIN_TRANSACTIONS_FOR_BATCH = 5;
@ -442,11 +448,9 @@ placesCreateLivemarkTransactions.prototype = {
};
function placesMoveItemTransactions(aItemId, aNewContainer, aNewIndex) {
NS_ASSERT(aNewIndex >= -1, "invalid insertion index");
this._id = aItemId;
this._oldContainer = PlacesUtils.bookmarks.getFolderIdForItem(this._id);
this._oldIndex = PlacesUtils.bookmarks.getItemIndex(this._id);
NS_ASSERT(this._oldContainer > 0 && this._oldIndex >= 0, "invalid item");
this._newContainer = aNewContainer;
this._newIndex = aNewIndex;
this.redoTransaction = this.doTransaction;

Просмотреть файл

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

Просмотреть файл

@ -36,7 +36,278 @@
*
* ***** END LICENSE BLOCK ***** */
const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
const DESCRIPTION_ANNO = "bookmarkProperties/description";
const POST_DATA_ANNO = "bookmarkProperties/POSTData";
const LAST_CHARSET_ANNO = "URIProperties/characterSet";
Components.utils.import("resource://gre/modules/utils.js");
do_check_eq(typeof PlacesUtils, "object");
// main
function run_test() {
// XXX test disabled due to backout of bug 384370
return;
/*
HTML+FEATURES SUMMARY:
- import legacy bookmarks
- export as json, import, test (tests integrity of html > json)
- export as html, import, test (tests integrity of json > html)
BACKUP/RESTORE SUMMARY:
- create a bookmark in each root
- tag multiple URIs with multiple tags
- export as json, import, test
*/
// get places import/export service
var importer = Cc["@mozilla.org/browser/places/import-export-service;1"].getService(Ci.nsIPlacesImportExportService);
// avoid creating the places smart folder during tests
Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch).
setBoolPref("browser.places.createdSmartBookmarks", true);
// file pointer to legacy bookmarks file
//var bookmarksFileOld = do_get_file("browser/components/places/tests/unit/bookmarks.large.html");
var bookmarksFileOld = do_get_file("browser/components/places/tests/unit/bookmarks.preplaces.html");
// file pointer to a new places-exported json file
var jsonFile = dirSvc.get("ProfD", Ci.nsILocalFile);
jsonFile.append("bookmarks.exported.json");
// create bookmarks.exported.json
if (jsonFile.exists())
jsonFile.remove(false);
jsonFile.create(Ci.nsILocalFile.NORMAL_FILE_TYPE, 0600);
if (!jsonFile.exists())
do_throw("couldn't create file: bookmarks.exported.json");
// Test importing a pre-Places canonical bookmarks file.
// 1. import bookmarks.preplaces.html
// 2. run the test-suite
// Note: we do not empty the db before this import to catch bugs like 380999
try {
importer.importHTMLFromFile(bookmarksFileOld, true);
} catch(ex) { do_throw("couldn't import legacy bookmarks file: " + ex); }
populate();
validate();
// Test exporting a Places canonical json file.
// 1. export to bookmarks.exported.json
// 2. empty bookmarks db
// 3. import bookmarks.exported.json
// 4. run the test-suite
try {
PlacesUtils.backupBookmarksToFile(jsonFile);
} catch(ex) { do_throw("couldn't export to file: " + ex); }
LOG("exported json");
try {
PlacesUtils.restoreBookmarksFromFile(jsonFile);
} catch(ex) { do_throw("couldn't import the exported file: " + ex); }
LOG("imported json");
validate();
LOG("validated import");
}
var tagData = [
{ uri: uri("http://slint.us"), tags: ["indie", "kentucky", "music"] },
{ uri: uri("http://en.wikipedia.org/wiki/Diplodocus"), tags: ["dinosaur", "dj", "rad word"] }
];
var bookmarkData = [
{ uri: uri("http://slint.us"), title: "indie, kentucky, music" },
{ uri: uri("http://en.wikipedia.org/wiki/Diplodocus"), title: "dinosaur, dj, rad word" }
];
/*
populate data in each folder
(menu is populated via the html import)
*/
function populate() {
// add tags
for each(let {uri: u, tags: t} in tagData)
PlacesUtils.tagging.tagURI(u, t);
// add unfiled bookmarks
for each(let {uri: u, title: t} in bookmarkData) {
PlacesUtils.bookmarks.insertBookmark(PlacesUtils.bookmarks.unfiledBookmarksFolder,
u, PlacesUtils.bookmarks.DEFAULT_INDEX, t);
}
// add to the toolbar
for each(let {uri: u, title: t} in bookmarkData) {
PlacesUtils.bookmarks.insertBookmark(PlacesUtils.bookmarks.toolbarFolder,
u, PlacesUtils.bookmarks.DEFAULT_INDEX, t);
}
}
function validate() {
testCanonicalBookmarks(PlacesUtils.bookmarks.bookmarksMenuFolder);
testToolbarFolder();
testUnfiledBookmarks();
testTags();
}
// Tests a bookmarks datastore that has a set of bookmarks, etc
// that flex each supported field and feature.
function testCanonicalBookmarks() {
// query to see if the deleted folder and items have been imported
var query = PlacesUtils.history.getNewQuery();
query.setFolders([PlacesUtils.bookmarks.bookmarksMenuFolder], 1);
var result = PlacesUtils.history.executeQuery(query, PlacesUtils.history.getNewQueryOptions());
var rootNode = result.root;
rootNode.containerOpen = true;
// 6-2: the toolbar contents are imported to the places-toolbar folder,
// the separator above it is removed.
do_check_eq(rootNode.childCount, 4);
// get test folder
var testFolder = rootNode.getChild(3);
do_check_eq(testFolder.type, testFolder.RESULT_TYPE_FOLDER);
do_check_eq(testFolder.title, "test");
/*
// add date
do_check_eq(PlacesUtils.bookmarks.getItemDateAdded(testFolder.itemId)/1000000, 1177541020);
// last modified
do_check_eq(PlacesUtils.bookmarks.getItemLastModified(testFolder.itemId)/1000000, 1177541050);
*/
testFolder = testFolder.QueryInterface(Ci.nsINavHistoryQueryResultNode);
do_check_eq(testFolder.hasChildren, true);
// folder description
do_check_true(PlacesUtils.annotations.itemHasAnnotation(testFolder.itemId,
DESCRIPTION_ANNO));
do_check_eq("folder test comment",
PlacesUtils.annotations.getItemAnnotation(testFolder.itemId, DESCRIPTION_ANNO));
// open test folder, and test the children
testFolder.containerOpen = true;
var cc = testFolder.childCount;
// XXX Bug 380468
// do_check_eq(cc, 2);
do_check_eq(cc, 1);
// test bookmark 1
var testBookmark1 = testFolder.getChild(0);
// url
do_check_eq("http://test/post", testBookmark1.uri);
// title
do_check_eq("test post keyword", testBookmark1.title);
// keyword
do_check_eq("test", PlacesUtils.bookmarks.getKeywordForBookmark(testBookmark1.itemId));
// sidebar
do_check_true(PlacesUtils.annotations.itemHasAnnotation(testBookmark1.itemId,
LOAD_IN_SIDEBAR_ANNO));
/*
// add date
do_check_eq(testBookmark1.dateAdded/1000000, 1177375336);
// last modified
do_check_eq(testBookmark1.lastModified/1000000, 1177375423);
*/
// post data
do_check_true(PlacesUtils.annotations.itemHasAnnotation(testBookmark1.itemId, POST_DATA_ANNO));
do_check_eq("hidden1%3Dbar&text1%3D%25s",
PlacesUtils.annotations.getItemAnnotation(testBookmark1.itemId, POST_DATA_ANNO));
// last charset
do_check_true(PlacesUtils.annotations.itemHasAnnotation(testBookmark1.itemId, LAST_CHARSET_ANNO));
do_check_eq("ISO-8859-1", PlacesUtils.annotations.getItemAnnotation(testBookmark1.itemId,
LAST_CHARSET_ANNO));
// description
do_check_true(PlacesUtils.annotations.itemHasAnnotation(testBookmark1.itemId,
DESCRIPTION_ANNO));
do_check_eq("item description",
PlacesUtils.annotations.getItemAnnotation(testBookmark1.itemId,
DESCRIPTION_ANNO));
/*
// XXX Bug 380468
// test bookmark 2
var testBookmark2 = testFolder.getChild(1);
// url
do_check_eq("http://test/micsum", testBookmark2.uri);
// title
do_check_eq("test microsummary", testBookmark2.title);
// check that it's a microsummary
var micsum = mssvc.getMicrosummary(testBookmark2.itemId);
if (!micsum)
do_throw("Could not import microsummary");
// check generator uri
var generator = micsum.generator;
do_check_eq("urn:source:http://dietrich.ganx4.com/mozilla/test-microsummary.xml", generator.uri.spec);
// expiration and generated title can change, so don't test them
*/
// clean up
testFolder.containerOpen = false;
rootNode.containerOpen = false;
}
function testToolbarFolder() {
var query = PlacesUtils.history.getNewQuery();
query.setFolders([PlacesUtils.bookmarks.toolbarFolder], 1);
var result = PlacesUtils.history.executeQuery(query, PlacesUtils.history.getNewQueryOptions());
var toolbar = result.root;
toolbar.containerOpen = true;
// child count (add 2 for pre-existing items)
do_check_eq(toolbar.childCount, bookmarkData.length + 2);
// livemark
var livemark = toolbar.getChild(1);
// title
do_check_eq("Latest Headlines", livemark.title);
// livemark check
do_check_true(PlacesUtils.livemarks.isLivemark(livemark.itemId));
// site url
do_check_eq("http://en-us.fxfeeds.mozilla.com/en-US/firefox/livebookmarks/",
PlacesUtils.livemarks.getSiteURI(livemark.itemId).spec);
// feed url
do_check_eq("http://en-us.fxfeeds.mozilla.com/en-US/firefox/headlines.xml",
PlacesUtils.livemarks.getFeedURI(livemark.itemId).spec);
// test added bookmark data
var child = toolbar.getChild(2);
do_check_eq(child.uri, bookmarkData[0].uri.spec);
do_check_eq(child.title, bookmarkData[0].title);
child = toolbar.getChild(3);
do_check_eq(child.uri, bookmarkData[1].uri.spec);
do_check_eq(child.title, bookmarkData[1].title);
toolbar.containerOpen = false;
}
function testUnfiledBookmarks() {
var query = PlacesUtils.history.getNewQuery();
query.setFolders([PlacesUtils.bookmarks.unfiledBookmarksFolder], 1);
var result = PlacesUtils.history.executeQuery(query, PlacesUtils.history.getNewQueryOptions());
var rootNode = result.root;
rootNode.containerOpen = true;
do_check_eq(rootNode.childCount, bookmarkData.length);
for (var i = 0; i < rootNode.childCount; i++) {
var child = rootNode.getChild(i);
dump(bookmarkData[i].uri.spec + " == " + child.uri + "?\n");
do_check_true(bookmarkData[i].uri.equals(uri(child.uri)));
do_check_eq(child.title, bookmarkData[i].title);
/* WTF
if (child.tags)
do_check_eq(child.tags, bookmarkData[i].title);
*/
}
rootNode.containerOpen = false;
}
function testTags() {
for each(let {uri: u, tags: t} in tagData) {
var i = 0;
dump("test tags for " + u.spec + ": " + t + "\n");
var tt = PlacesUtils.tagging.getTagsForURI(u, {});
dump("true tags for " + u.spec + ": " + tt + "\n");
do_check_true(t.every(function(el) {
i++;
return tt.indexOf(el) > -1;
}));
do_check_eq(i, t.length);
}
}

Просмотреть файл

@ -36,12 +36,7 @@
*
* ***** END LICENSE BLOCK ***** */
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");
Components.utils.import("resource://gre/modules/utils.js");
const bmsvc = PlacesUtils.bookmarks;
const testFolderId = PlacesUtils.bookmarksMenuFolderId;

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

@ -49,7 +49,12 @@ var Ci = Components.interfaces;
var Cc = Components.classes;
var Cr = Components.results;
Components.utils.import("resource://gre/modules/debug.js");
__defineGetter__("NS_ASSERT", function() {
delete this.NS_ASSERT;
var tmpScope = {};
Components.utils.import("resource://gre/modules/debug.js", tmpScope);
return this.NS_ASSERT = tmpScope.NS_ASSERT;
});
const POST_DATA_ANNO = "bookmarkProperties/POSTData";
const LMANNO_FEEDURI = "livemark/feedURI";
@ -1320,10 +1325,23 @@ var PlacesUtils = {
return; // XXX
// init stream
var stream = Cc["@mozilla.org/network/safe-file-output-stream;1"].
var stream = Cc["@mozilla.org/network/file-output-stream;1"].
createInstance(Ci.nsIFileOutputStream);
stream.init(aFile, 0x02 | 0x08 | 0x20, 0600, 0);
// utf-8 converter stream
var converter = Cc["@mozilla.org/intl/converter-output-stream;1"].
createInstance(Ci.nsIConverterOutputStream);
converter.init(stream, "UTF-8", 0, 0x0000);
// weep over stream interface variance
var streamProxy = {
converter: converter,
write: function(aData, aLen) {
this.converter.writeString(aData);
}
};
// query places root
var options = this.history.getNewQueryOptions();
options.expandQueries = false;
@ -1332,14 +1350,12 @@ var PlacesUtils = {
var result = this.history.executeQuery(query, options);
result.root.containerOpen = true;
// serialize as JSON, write to stream
this.serializeNodeAsJSONToOutputStream(result.root, stream);
this.serializeNodeAsJSONToOutputStream(result.root, streamProxy);
result.root.containerOpen = false;
// close stream
if (stream instanceof Ci.nsISafeOutputStream)
stream.finish();
else
stream.close();
// close converter and stream
converter.close();
stream.close();
},
/**

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

@ -196,4 +196,9 @@ function FillInTooltip ( tipElement )
return retVal;
}
#include debug.js
__defineGetter__("NS_ASSERT", function() {
delete this.NS_ASSERT;
var tmpScope = {};
Components.utils.import("resource://gre/modules/debug.js", tmpScope);
return this.NS_ASSERT = tmpScope.NS_ASSERT;
});

Просмотреть файл

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