/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; ChromeUtils.defineESModuleGetters(this, { UrlbarProviderInterventions: "resource:///modules/UrlbarProviderInterventions.sys.mjs", }); add_setup(async function () { Services.telemetry.clearEvents(); Services.telemetry.clearScalars(); makeProfileResettable(); }); // Tests the refresh tip. add_task(async function refresh() { // Pick the tip, which should open the refresh dialog. Click its cancel // button. await checkIntervention({ searchString: SEARCH_STRINGS.REFRESH, tip: UrlbarProviderInterventions.TIP_TYPE.REFRESH, title: "Restore default settings and remove old add-ons for optimal performance.", button: /^Refresh .+…$/, awaitCallback() { return BrowserTestUtils.promiseAlertDialog( "cancel", "chrome://global/content/resetProfile.xhtml", { isSubDialog: true } ); }, }); }); // Tests the clear tip. add_task(async function clear() { // Pick the tip, which should open the refresh dialog. Click its cancel // button. let useOldClearHistoryDialog = Services.prefs.getBoolPref( "privacy.sanitize.useOldClearHistoryDialog" ); let dialogURL = useOldClearHistoryDialog ? "chrome://browser/content/sanitize.xhtml" : "chrome://browser/content/sanitize_v2.xhtml"; await checkIntervention({ searchString: SEARCH_STRINGS.CLEAR, tip: UrlbarProviderInterventions.TIP_TYPE.CLEAR, title: "Clear your cache, cookies, history and more.", button: "Choose What to Clear…", awaitCallback() { return BrowserTestUtils.promiseAlertDialog("cancel", dialogURL, { isSubDialog: true, }); }, }); }); // Tests the clear tip in a private window. The clear tip shouldn't appear in // private windows. add_task(async function clear_private() { let win = await BrowserTestUtils.openNewBrowserWindow({ private: true }); // First, make sure the extension works in PBM by triggering a non-clear // tip. let result = (await awaitTip(SEARCH_STRINGS.REFRESH, win))[0]; Assert.strictEqual( result.payload.type, UrlbarProviderInterventions.TIP_TYPE.REFRESH ); // Blur the urlbar so that the engagement is ended. await UrlbarTestUtils.promisePopupClose(win, () => win.gURLBar.blur()); // Now do a search that would trigger the clear tip. await awaitNoTip(SEARCH_STRINGS.CLEAR, win); // Blur the urlbar so that the engagement is ended. await UrlbarTestUtils.promisePopupClose(win, () => win.gURLBar.blur()); await BrowserTestUtils.closeWindow(win); }); // Tests that if multiple interventions of the same type are seen in the same // engagement, only one instance is recorded in Telemetry. add_task(async function multipleInterventionsInOneEngagement() { Services.telemetry.clearScalars(); let result = (await awaitTip(SEARCH_STRINGS.REFRESH, window))[0]; Assert.strictEqual( result.payload.type, UrlbarProviderInterventions.TIP_TYPE.REFRESH ); result = (await awaitTip(SEARCH_STRINGS.CLEAR, window))[0]; Assert.strictEqual( result.payload.type, UrlbarProviderInterventions.TIP_TYPE.CLEAR ); result = (await awaitTip(SEARCH_STRINGS.REFRESH, window))[0]; Assert.strictEqual( result.payload.type, UrlbarProviderInterventions.TIP_TYPE.REFRESH ); // Blur the urlbar so that the engagement is ended. await UrlbarTestUtils.promisePopupClose(window, () => gURLBar.blur()); const scalars = TelemetryTestUtils.getProcessScalars("parent", true, true); // We should only record one impression for the Refresh tip. Although it was // seen twice, it was in the same engagement. TelemetryTestUtils.assertKeyedScalar( scalars, "urlbar.tips", `${UrlbarProviderInterventions.TIP_TYPE.REFRESH}-shown`, 1 ); TelemetryTestUtils.assertKeyedScalar( scalars, "urlbar.tips", `${UrlbarProviderInterventions.TIP_TYPE.CLEAR}-shown`, 1 ); }); // Test the result of UrlbarProviderInterventions.isActive() // and whether or not the function calucates the score. add_task(async function testIsActive() { const testData = [ { description: "Test for search string that activates the intervention", searchString: "firefox slow", expectedActive: true, expectedScoreCalculated: true, }, { description: "Test for search string that does not activate the intervention", searchString: "example slow", expectedActive: false, expectedScoreCalculated: true, }, { description: "Test for empty search string", searchString: "", expectedActive: false, expectedScoreCalculated: false, }, { description: "Test for an URL", searchString: "https://firefox/slow", expectedActive: false, expectedScoreCalculated: false, }, { description: "Test for a data URL", searchString: "data:text/html,