-
Notifications
You must be signed in to change notification settings - Fork 54
/
test_onItemChanged_tags.js
75 lines (65 loc) · 1.96 KB
/
test_onItemChanged_tags.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
// This test checks that changing a tag for a bookmark with multiple tags
// notifies OnItemChanged("tags") only once, and not once per tag.
add_task(async function run_test() {
let tags = ["a", "b", "c"];
let uri = Services.io.newURI("http://1.moz.org/");
let bookmark = await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
url: uri,
title: "Bookmark 1",
});
PlacesUtils.tagging.tagURI(uri, tags);
let promise = PromiseUtils.defer();
let bookmarksObserver = {
QueryInterface: ChromeUtils.generateQI([Ci.nsINavBookmarkObserver]),
_changedCount: 0,
onItemChanged(
aItemId,
aProperty,
aIsAnnotationProperty,
aValue,
aLastModified,
aItemType,
aParentId,
aGuid
) {
if (aProperty == "tags") {
Assert.equal(aGuid, bookmark.guid);
this._changedCount++;
}
},
handlePlacesEvents(events) {
for (let event of events) {
switch (event.type) {
case "bookmark-removed":
if (event.guid == bookmark.guid) {
PlacesUtils.observers.removeListener(
["bookmark-removed"],
this.handlePlacesEvents
);
Assert.equal(this._changedCount, 2);
promise.resolve();
}
}
}
},
onBeginUpdateBatch() {},
onEndUpdateBatch() {},
onItemVisited() {},
onItemMoved() {},
};
PlacesUtils.bookmarks.addObserver(bookmarksObserver);
bookmarksObserver.handlePlacesEvents = bookmarksObserver.handlePlacesEvents.bind(
bookmarksObserver
);
PlacesUtils.observers.addListener(
["bookmark-removed"],
bookmarksObserver.handlePlacesEvents
);
PlacesUtils.tagging.tagURI(uri, ["d"]);
PlacesUtils.tagging.tagURI(uri, ["e"]);
await promise;
await PlacesUtils.bookmarks.remove(bookmark.guid);
});