diff -r 000000000000 -r 6474c204b198 browser/metro/base/content/bookmarks.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/metro/base/content/bookmarks.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,76 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +'use strict'; + +/** + * Utility singleton for manipulating bookmarks. + */ +var Bookmarks = { + get metroRoot() { + return PlacesUtils.annotations.getItemsWithAnnotation('metro/bookmarksRoot', {})[0]; + }, + + logging: false, + log: function(msg) { + if (this.logging) { + Services.console.logStringMessage(msg); + } + }, + + addForURI: function bh_addForURI(aURI, aTitle, callback) { + this.isURIBookmarked(aURI, function (isBookmarked) { + if (isBookmarked) + return; + + let bookmarkTitle = aTitle || aURI.spec; + let bookmarkService = PlacesUtils.bookmarks; + let bookmarkId = bookmarkService.insertBookmark(Bookmarks.metroRoot, + aURI, + bookmarkService.DEFAULT_INDEX, + bookmarkTitle); + + // XXX Used for browser-chrome tests + let event = document.createEvent("Events"); + event.initEvent("BookmarkCreated", true, false); + window.dispatchEvent(event); + + if (callback) + callback(bookmarkId); + }); + }, + + _isMetroBookmark: function(aItemId) { + return PlacesUtils.bookmarks.getFolderIdForItem(aItemId) == Bookmarks.metroRoot; + }, + + isURIBookmarked: function bh_isURIBookmarked(aURI, callback) { + if (!callback) + return; + PlacesUtils.asyncGetBookmarkIds(aURI, aItemIds => { + callback(aItemIds && aItemIds.length > 0 && aItemIds.some(this._isMetroBookmark)); + }); + }, + + removeForURI: function bh_removeForURI(aURI, callback) { + // XXX blargle xpconnect! might not matter, but a method on + // nsINavBookmarksService that takes an array of items to + // delete would be faster. better yet, a method that takes a URI! + PlacesUtils.asyncGetBookmarkIds(aURI, (aItemIds) => { + aItemIds.forEach((aItemId) => { + if (this._isMetroBookmark(aItemId)) { + PlacesUtils.bookmarks.removeItem(aItemId); + } + }); + + if (callback) + callback(); + + // XXX Used for browser-chrome tests + let event = document.createEvent("Events"); + event.initEvent("BookmarkRemoved", true, false); + window.dispatchEvent(event); + }); + } +};