browser/modules/test/browser_UITour_registerPageID.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:f7e0abfa3b52
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 ];

mercurial