1
Cu.import("resource://services-sync/engines/tabs.js");
2
Cu.import("resource://services-sync/engines/clients.js");
3
Cu.import("resource://services-sync/util.js");
5
function fakeSvcWinMediator() {
6
// actions on windows are captured in logs
8
delete Svc.WinMediator;
10
getEnumerator: function() {
13
hasMoreElements: function() this.cnt-- > 0,
15
let elt = {addTopics: [], remTopics: []};
18
addEventListener: function(topic) {
19
elt.addTopics.push(topic);
21
removeEventListener: function(topic) {
22
elt.remTopics.push(topic);
32
function fakeSvcSession() {
33
// actions on Session are captured in logs
37
setTabValue: function(target, prop, value) {
38
logs.push({target: target, prop: prop, value: value});
45
let engine = new TabEngine();
47
_("We assume that tabs have changed at startup.");
48
let tracker = engine._tracker;
49
do_check_true(tracker.modified);
50
do_check_true(Utils.deepEquals([id for (id in engine.getChangedIDs())],
55
_("Test listeners are registered on windows");
56
logs = fakeSvcWinMediator();
57
Svc.Obs.notify("weave:engine:start-tracking");
58
do_check_eq(logs.length, 2);
59
for each (let log in logs) {
60
do_check_eq(log.addTopics.length, 5);
61
do_check_true(log.addTopics.indexOf("pageshow") >= 0);
62
do_check_true(log.addTopics.indexOf("TabOpen") >= 0);
63
do_check_true(log.addTopics.indexOf("TabClose") >= 0);
64
do_check_true(log.addTopics.indexOf("TabSelect") >= 0);
65
do_check_true(log.addTopics.indexOf("unload") >= 0);
66
do_check_eq(log.remTopics.length, 0);
69
_("Test listeners are unregistered on windows");
70
logs = fakeSvcWinMediator();
71
Svc.Obs.notify("weave:engine:stop-tracking");
72
do_check_eq(logs.length, 2);
73
for each (let log in logs) {
74
do_check_eq(log.addTopics.length, 0);
75
do_check_eq(log.remTopics.length, 5);
76
do_check_true(log.remTopics.indexOf("pageshow") >= 0);
77
do_check_true(log.remTopics.indexOf("TabOpen") >= 0);
78
do_check_true(log.remTopics.indexOf("TabClose") >= 0);
79
do_check_true(log.remTopics.indexOf("TabSelect") >= 0);
80
do_check_true(log.remTopics.indexOf("unload") >= 0);
83
_("Test tab listener");
84
logs = fakeSvcSession();
86
for each (let evttype in ["TabOpen", "TabClose", "TabSelect"]) {
87
// Pretend we just synced.
88
tracker.clearChangedIDs();
89
do_check_false(tracker.modified);
91
// Send a fake tab event
92
tracker.onTab({type: evttype , originalTarget: evttype});
93
do_check_true(tracker.modified);
94
do_check_true(Utils.deepEquals([id for (id in engine.getChangedIDs())],
96
do_check_eq(logs.length, idx+1);
97
do_check_eq(logs[idx].target, evttype);
98
do_check_eq(logs[idx].prop, "weaveLastUsed");
99
do_check_true(typeof logs[idx].value == "number");
103
// Pretend we just synced.
104
tracker.clearChangedIDs();
105
do_check_false(tracker.modified);
107
tracker.onTab({type: "pageshow", originalTarget: "pageshow"});
108
do_check_true(Utils.deepEquals([id for (id in engine.getChangedIDs())],
110
do_check_eq(logs.length, idx); // test that setTabValue isn't called