michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: "use strict"; michael@0: michael@0: let gTestTab; michael@0: let gContentAPI; michael@0: let gContentWindow; michael@0: michael@0: Components.utils.import("resource:///modules/UITour.jsm"); michael@0: Components.utils.import("resource://gre/modules/UITelemetry.jsm"); michael@0: Components.utils.import("resource:///modules/BrowserUITelemetry.jsm"); michael@0: michael@0: function test() { michael@0: UITelemetry._enabled = true; michael@0: michael@0: registerCleanupFunction(function() { michael@0: Services.prefs.clearUserPref("browser.uitour.seenPageIDs"); michael@0: resetSeenPageIDsLazyGetter(); michael@0: UITelemetry._enabled = undefined; michael@0: BrowserUITelemetry.setBucket(null); michael@0: delete window.UITelemetry; michael@0: delete window.BrowserUITelemetry; michael@0: }); michael@0: UITourTest(); michael@0: } michael@0: michael@0: function resetSeenPageIDsLazyGetter() { michael@0: delete UITour.seenPageIDs; michael@0: // This should be kept in sync with how UITour.init() sets this. michael@0: Object.defineProperty(UITour, "seenPageIDs", { michael@0: get: UITour.restoreSeenPageIDs.bind(UITour), michael@0: configurable: true, michael@0: }); michael@0: } michael@0: michael@0: function checkExpectedSeenPageIDs(expected) { michael@0: is(UITour.seenPageIDs.size, expected.length, "Should be " + expected.length + " total seen page IDs"); michael@0: michael@0: for (let id of expected) michael@0: ok(UITour.seenPageIDs.has(id), "Should have seen '" + id + "' page ID"); michael@0: michael@0: let prefData = Services.prefs.getCharPref("browser.uitour.seenPageIDs"); michael@0: prefData = new Map(JSON.parse(prefData)); michael@0: michael@0: is(prefData.size, expected.length, "Should be " + expected.length + " total seen page IDs persisted"); michael@0: michael@0: for (let id of expected) michael@0: ok(prefData.has(id), "Should have seen '" + id + "' page ID persisted"); michael@0: } michael@0: michael@0: let tests = [ michael@0: function test_seenPageIDs_restore(done) { michael@0: info("Setting up seenPageIDs to be restored from pref"); michael@0: let data = JSON.stringify([ michael@0: ["savedID1", { lastSeen: Date.now() }], michael@0: ["savedID2", { lastSeen: Date.now() }], michael@0: // 9 weeks ago, should auto expire. michael@0: ["savedID3", { lastSeen: Date.now() - 9 * 7 * 24 * 60 * 60 * 1000 }], michael@0: ]); michael@0: Services.prefs.setCharPref("browser.uitour.seenPageIDs", michael@0: data); michael@0: michael@0: resetSeenPageIDsLazyGetter(); michael@0: checkExpectedSeenPageIDs(["savedID1", "savedID2"]); michael@0: michael@0: done(); michael@0: }, michael@0: function test_seenPageIDs_set_1(done) { michael@0: gContentAPI.registerPageID("testpage1"); michael@0: michael@0: checkExpectedSeenPageIDs(["savedID1", "savedID2", "testpage1"]); michael@0: michael@0: const PREFIX = BrowserUITelemetry.BUCKET_PREFIX; michael@0: const SEP = BrowserUITelemetry.BUCKET_SEPARATOR; michael@0: michael@0: let bucket = PREFIX + "UITour" + SEP + "testpage1"; michael@0: is(BrowserUITelemetry.currentBucket, bucket, "Bucket should have correct name"); michael@0: michael@0: gBrowser.selectedTab = gBrowser.addTab("about:blank"); michael@0: bucket = PREFIX + "UITour" + SEP + "testpage1" + SEP + "inactive" + SEP + "1m"; michael@0: is(BrowserUITelemetry.currentBucket, bucket, michael@0: "After switching tabs, bucket should be expiring"); michael@0: michael@0: gBrowser.removeTab(gBrowser.selectedTab); michael@0: gBrowser.selectedTab = gTestTab; michael@0: BrowserUITelemetry.setBucket(null); michael@0: done(); michael@0: }, michael@0: function test_seenPageIDs_set_2(done) { michael@0: gContentAPI.registerPageID("testpage2"); michael@0: michael@0: checkExpectedSeenPageIDs(["savedID1", "savedID2", "testpage1", "testpage2"]); michael@0: michael@0: const PREFIX = BrowserUITelemetry.BUCKET_PREFIX; michael@0: const SEP = BrowserUITelemetry.BUCKET_SEPARATOR; michael@0: michael@0: let bucket = PREFIX + "UITour" + SEP + "testpage2"; michael@0: is(BrowserUITelemetry.currentBucket, bucket, "Bucket should have correct name"); michael@0: michael@0: gBrowser.removeTab(gTestTab); michael@0: gTestTab = null; michael@0: bucket = PREFIX + "UITour" + SEP + "testpage2" + SEP + "closed" + SEP + "1m"; michael@0: is(BrowserUITelemetry.currentBucket, bucket, michael@0: "After closing tab, bucket should be expiring"); michael@0: michael@0: BrowserUITelemetry.setBucket(null); michael@0: done(); michael@0: }, michael@0: ];