|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 "use strict"; |
|
5 |
|
6 let gTestTab; |
|
7 let gContentAPI; |
|
8 let gContentWindow; |
|
9 |
|
10 Components.utils.import("resource:///modules/UITour.jsm"); |
|
11 Components.utils.import("resource://gre/modules/UITelemetry.jsm"); |
|
12 Components.utils.import("resource:///modules/BrowserUITelemetry.jsm"); |
|
13 |
|
14 function test() { |
|
15 UITelemetry._enabled = true; |
|
16 |
|
17 registerCleanupFunction(function() { |
|
18 Services.prefs.clearUserPref("browser.uitour.seenPageIDs"); |
|
19 resetSeenPageIDsLazyGetter(); |
|
20 UITelemetry._enabled = undefined; |
|
21 BrowserUITelemetry.setBucket(null); |
|
22 delete window.UITelemetry; |
|
23 delete window.BrowserUITelemetry; |
|
24 }); |
|
25 UITourTest(); |
|
26 } |
|
27 |
|
28 function resetSeenPageIDsLazyGetter() { |
|
29 delete UITour.seenPageIDs; |
|
30 // This should be kept in sync with how UITour.init() sets this. |
|
31 Object.defineProperty(UITour, "seenPageIDs", { |
|
32 get: UITour.restoreSeenPageIDs.bind(UITour), |
|
33 configurable: true, |
|
34 }); |
|
35 } |
|
36 |
|
37 function checkExpectedSeenPageIDs(expected) { |
|
38 is(UITour.seenPageIDs.size, expected.length, "Should be " + expected.length + " total seen page IDs"); |
|
39 |
|
40 for (let id of expected) |
|
41 ok(UITour.seenPageIDs.has(id), "Should have seen '" + id + "' page ID"); |
|
42 |
|
43 let prefData = Services.prefs.getCharPref("browser.uitour.seenPageIDs"); |
|
44 prefData = new Map(JSON.parse(prefData)); |
|
45 |
|
46 is(prefData.size, expected.length, "Should be " + expected.length + " total seen page IDs persisted"); |
|
47 |
|
48 for (let id of expected) |
|
49 ok(prefData.has(id), "Should have seen '" + id + "' page ID persisted"); |
|
50 } |
|
51 |
|
52 let tests = [ |
|
53 function test_seenPageIDs_restore(done) { |
|
54 info("Setting up seenPageIDs to be restored from pref"); |
|
55 let data = JSON.stringify([ |
|
56 ["savedID1", { lastSeen: Date.now() }], |
|
57 ["savedID2", { lastSeen: Date.now() }], |
|
58 // 9 weeks ago, should auto expire. |
|
59 ["savedID3", { lastSeen: Date.now() - 9 * 7 * 24 * 60 * 60 * 1000 }], |
|
60 ]); |
|
61 Services.prefs.setCharPref("browser.uitour.seenPageIDs", |
|
62 data); |
|
63 |
|
64 resetSeenPageIDsLazyGetter(); |
|
65 checkExpectedSeenPageIDs(["savedID1", "savedID2"]); |
|
66 |
|
67 done(); |
|
68 }, |
|
69 function test_seenPageIDs_set_1(done) { |
|
70 gContentAPI.registerPageID("testpage1"); |
|
71 |
|
72 checkExpectedSeenPageIDs(["savedID1", "savedID2", "testpage1"]); |
|
73 |
|
74 const PREFIX = BrowserUITelemetry.BUCKET_PREFIX; |
|
75 const SEP = BrowserUITelemetry.BUCKET_SEPARATOR; |
|
76 |
|
77 let bucket = PREFIX + "UITour" + SEP + "testpage1"; |
|
78 is(BrowserUITelemetry.currentBucket, bucket, "Bucket should have correct name"); |
|
79 |
|
80 gBrowser.selectedTab = gBrowser.addTab("about:blank"); |
|
81 bucket = PREFIX + "UITour" + SEP + "testpage1" + SEP + "inactive" + SEP + "1m"; |
|
82 is(BrowserUITelemetry.currentBucket, bucket, |
|
83 "After switching tabs, bucket should be expiring"); |
|
84 |
|
85 gBrowser.removeTab(gBrowser.selectedTab); |
|
86 gBrowser.selectedTab = gTestTab; |
|
87 BrowserUITelemetry.setBucket(null); |
|
88 done(); |
|
89 }, |
|
90 function test_seenPageIDs_set_2(done) { |
|
91 gContentAPI.registerPageID("testpage2"); |
|
92 |
|
93 checkExpectedSeenPageIDs(["savedID1", "savedID2", "testpage1", "testpage2"]); |
|
94 |
|
95 const PREFIX = BrowserUITelemetry.BUCKET_PREFIX; |
|
96 const SEP = BrowserUITelemetry.BUCKET_SEPARATOR; |
|
97 |
|
98 let bucket = PREFIX + "UITour" + SEP + "testpage2"; |
|
99 is(BrowserUITelemetry.currentBucket, bucket, "Bucket should have correct name"); |
|
100 |
|
101 gBrowser.removeTab(gTestTab); |
|
102 gTestTab = null; |
|
103 bucket = PREFIX + "UITour" + SEP + "testpage2" + SEP + "closed" + SEP + "1m"; |
|
104 is(BrowserUITelemetry.currentBucket, bucket, |
|
105 "After closing tab, bucket should be expiring"); |
|
106 |
|
107 BrowserUITelemetry.setBucket(null); |
|
108 done(); |
|
109 }, |
|
110 ]; |