Source code

Revision control

Copy as Markdown

Other Tools

/* 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/. */
// 'arguments' is defined by the marionette harness.
/* global arguments */
const { PlacesUtils } = ChromeUtils.importESModule(
);
let resolve = arguments[3];
try {
// Get the number of current bookmarks
PlacesUtils.promiseBookmarksTree(PlacesUtils.bookmarks.unfiledGuid, {
includeItemIds: true,
}).then(root => {
let count = root.itemsCount;
let maxBookmarks = arguments[2];
// making sure we don't exceed the maximum number of bookmarks
if (count >= maxBookmarks) {
let toRemove = count - maxBookmarks + 1;
console.log("We've reached the maximum number of bookmarks");
console.log("Removing " + toRemove);
let children = root.children;
for (let i = 0, p = Promise.resolve(); i < toRemove; i++) {
p = p.then(
_ =>
new Promise(resolve =>
PlacesUtils.bookmarks.remove(children[i].guid).then(res => {
console.log("removed one bookmark");
resolve(res);
})
)
);
}
}
// now adding the bookmark
PlacesUtils.bookmarks
.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
url: arguments[0],
title: arguments[1],
})
.then(res => {
resolve(res);
});
});
} catch (error) {
let res = { logs: {}, result: 1, result_message: error.toString() };
resolve(res);
}