Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

function insertTree(tree) {
return PlacesUtils.bookmarks.insertTree(tree, {
fixupOrSkipInvalidEntries: true,
});
}
add_task(async function () {
let guid = PlacesUtils.bookmarks.unfiledGuid;
await Assert.throws(
() => insertTree({ guid, children: [] }),
/Should have a non-zero number of children to insert./
);
await Assert.throws(
() => insertTree({ guid: "invalid", children: [{}] }),
/The parent guid is not valid/
);
let now = new Date();
let url = "http://mozilla.com/";
let obs = {
count: 0,
lastIndex: 0,
handlePlacesEvent(events) {
for (let event of events) {
obs.count++;
let lastIndex = obs.lastIndex;
obs.lastIndex = event.index;
if (event.itemType == PlacesUtils.bookmarks.TYPE_BOOKMARK) {
Assert.equal(event.url, url, "Found the expected url");
}
Assert.ok(
event.index == 0 || event.index == lastIndex + 1,
"Consecutive indices"
);
Assert.ok(event.dateAdded >= now, "Found a valid dateAdded");
Assert.ok(PlacesUtils.isValidGuid(event.guid), "guid is valid");
}
},
};
PlacesUtils.observers.addListener(["bookmark-added"], obs.handlePlacesEvent);
let tree = {
guid,
children: [
{
// Should be inserted, and the invalid guid should be replaced.
guid: "test",
url,
},
{
// Should be skipped, since the url is invalid.
url: "fake_url",
},
{
// Should be skipped, since the type is invalid.
url,
type: 999,
},
{
// Should be skipped, since the type is invalid.
type: 999,
children: [
{
url,
},
],
},
{
type: PlacesUtils.bookmarks.TYPE_FOLDER,
title: "test",
children: [
{
// Should fix lastModified and dateAdded.
url,
lastModified: null,
},
{
// Should be skipped, since the url is invalid.
url: "fake_url",
dateAdded: null,
},
{
// Should fix lastModified and dateAdded.
url,
dateAdded: undefined,
},
{
// Should be skipped since it's a separator with a url
url,
type: PlacesUtils.bookmarks.TYPE_SEPARATOR,
},
{
// Should fix lastModified and dateAdded.
url,
dateAdded: new Date(now - 86400000),
lastModified: new Date(now - 172800000), // less than dateAdded
},
],
},
],
};
let bms = await insertTree(tree);
for (let bm of bms) {
checkBookmarkObject(bm);
}
Assert.equal(bms.length, 5);
Assert.equal(obs.count, bms.length);
PlacesUtils.observers.removeListener(
["bookmark-added"],
obs.handlePlacesEvent
);
});