Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
// This test ensures that skipHistoryDetailsNotifications works as expected.
function accumulateNotifications(
result,
skipHistoryDetailsNotifications = false
) {
let notifications = [];
let resultObserver = new Proxy(NavHistoryResultObserver, {
get(target, name) {
if (name == "check") {
result.removeObserver(resultObserver, false);
return expectedNotifications =>
Assert.deepEqual(notifications, expectedNotifications);
}
if (name == "skipHistoryDetailsNotifications") {
return skipHistoryDetailsNotifications;
}
// ignore a few uninteresting notifications.
if (["QueryInterface", "containerStateChanged"].includes(name)) {
return () => {};
}
return () => {
notifications.push(name);
};
},
});
result.addObserver(resultObserver, false);
return resultObserver;
}
add_task(async function test_history_query_observe() {
let query = PlacesUtils.history.getNewQuery();
let options = PlacesUtils.history.getNewQueryOptions();
let result = PlacesUtils.history.executeQuery(query, options);
let notifications = accumulateNotifications(result);
let root = PlacesUtils.asContainer(result.root);
root.containerOpen = true;
await PlacesTestUtils.addVisits({
title: "test",
});
notifications.check([
"nodeHistoryDetailsChanged",
"nodeInserted",
"nodeTitleChanged",
]);
root.containerOpen = false;
await PlacesUtils.history.clear();
});
add_task(async function test_history_query_no_observe() {
let query = PlacesUtils.history.getNewQuery();
let options = PlacesUtils.history.getNewQueryOptions();
let result = PlacesUtils.history.executeQuery(query, options);
// Even if we opt-out of notifications, this is an history query, thus the
// setting is pretty much ignored.
let notifications = accumulateNotifications(result, true);
let root = PlacesUtils.asContainer(result.root);
root.containerOpen = true;
await PlacesTestUtils.addVisits({
title: "test",
});
await PlacesTestUtils.addVisits({
title: "test",
});
notifications.check([
"nodeHistoryDetailsChanged",
"nodeInserted",
"nodeTitleChanged",
"nodeHistoryDetailsChanged",
"nodeInserted",
"nodeTitleChanged",
]);
root.containerOpen = false;
await PlacesUtils.history.clear();
});
add_task(async function test_bookmarks_query_observe() {
let query = PlacesUtils.history.getNewQuery();
query.setParents([PlacesUtils.bookmarks.toolbarGuid]);
let options = PlacesUtils.history.getNewQueryOptions();
options.queryType = options.QUERY_TYPE_BOOKMARKS;
let result = PlacesUtils.history.executeQuery(query, options);
let notifications = accumulateNotifications(result);
let root = PlacesUtils.asContainer(result.root);
root.containerOpen = true;
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
title: "test",
});
await PlacesTestUtils.addVisits({
title: "title",
});
notifications.check([
"nodeHistoryDetailsChanged",
"nodeInserted",
"nodeHistoryDetailsChanged",
]);
root.containerOpen = false;
await PlacesUtils.history.clear();
await PlacesUtils.bookmarks.eraseEverything();
});
add_task(async function test_bookmarks_query_no_observe() {
let query = PlacesUtils.history.getNewQuery();
query.setParents([PlacesUtils.bookmarks.toolbarGuid]);
let options = PlacesUtils.history.getNewQueryOptions();
options.queryType = options.QUERY_TYPE_BOOKMARKS;
let result = PlacesUtils.history.executeQuery(query, options);
let notifications = accumulateNotifications(result, true);
let root = PlacesUtils.asContainer(result.root);
root.containerOpen = true;
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
title: "test",
});
await PlacesTestUtils.addVisits({
title: "title",
});
notifications.check(["nodeInserted"]);
info("Change the sorting mode to one that is based on history");
notifications = accumulateNotifications(result, true);
result.sortingMode = options.SORT_BY_VISITCOUNT_DESCENDING;
notifications.check(["invalidateContainer"]);
notifications = accumulateNotifications(result, true);
await PlacesTestUtils.addVisits({
title: "title",
});
notifications.check(["nodeHistoryDetailsChanged"]);
root.containerOpen = false;
await PlacesUtils.bookmarks.eraseEverything();
});