Skip to content

Commit cb8819b

Browse files
committed
Bug 2065138 - Honor checkDefaultBrowser pref for campaign set default actions r=omc-reviewers,mviar
Differential Revision: https://phabricator.services.mozilla.com/D320232
1 parent 91cf4d6 commit cb8819b

2 files changed

Lines changed: 57 additions & 3 deletions

File tree

‎browser/components/aboutwelcome/actors/AboutWelcomeParent.sys.mjs‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ ChromeUtils.defineLazyGetter(
4545
const DID_SEE_ABOUT_WELCOME_PREF = "trailhead.firstrun.didSeeAboutWelcome";
4646
const DID_HANDLE_CAMAPAIGN_ACTION_PREF =
4747
"trailhead.firstrun.didHandleCampaignAction";
48+
const CHECK_DEFAULT_BROWSER_PREF = "browser.shell.checkDefaultBrowser";
49+
const SET_DEFAULT_CAMPAIGN_ACTIONS = ["SET_DEFAULT_BROWSER", "PIN_AND_DEFAULT"];
4850
const EXPERIMENTS_GATE_PREF = "browser.aboutwelcome.experimentsGate.enabled";
4951
const EXPERIMENTS_GATE_MAX_MS_PREF =
5052
"browser.aboutwelcome.experimentsGate.maxDisplayMs";
@@ -382,6 +384,12 @@ export class AboutWelcomeParent extends JSWindowActorParent {
382384
if (
383385
!Services.prefs.getBoolPref(DID_HANDLE_CAMAPAIGN_ACTION_PREF, false)
384386
) {
387+
if (
388+
SET_DEFAULT_CAMPAIGN_ACTIONS.includes(data) &&
389+
!Services.prefs.getBoolPref(CHECK_DEFAULT_BROWSER_PREF, true)
390+
) {
391+
break;
392+
}
385393
lazy.SpecialMessageActions.handleAction({ type: data }, browser);
386394
try {
387395
Services.prefs.setBoolPref(DID_HANDLE_CAMAPAIGN_ACTION_PREF, true);

‎browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_campaign_actions.js‎

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ add_task(async function test_unhandled_campaign_action() {
4343
const TEST_PROTON_JSON = JSON.stringify(TEST_PROTON_CONTENT);
4444

4545
await setAboutWelcomePref(true);
46-
await pushPrefs(["browser.aboutwelcome.screens", TEST_PROTON_JSON]);
46+
await pushPrefs(
47+
["browser.aboutwelcome.screens", TEST_PROTON_JSON],
48+
["browser.shell.checkDefaultBrowser", true]
49+
);
4750

4851
AttributionCode._clearCache();
4952
const data = await AttributionCode.getAttrDataAsync();
@@ -90,7 +93,50 @@ add_task(async function test_unhandled_campaign_action() {
9093
await ASRouter.forceAttribution("");
9194
Services.prefs.clearUserPref(DID_HANDLE_CAMAPAIGN_ACTION_PREF);
9295
Services.prefs.clearUserPref("browser.aboutwelcome.screens");
93-
94-
sandbox.restore();
9596
});
97+
98+
sandbox.restore();
99+
});
100+
101+
add_task(async function test_campaign_action_honors_default_browser_pref() {
102+
const sandbox = sinon.createSandbox();
103+
const handleActionStub = sandbox
104+
.stub(SpecialMessageActions, "handleAction")
105+
.resolves();
106+
107+
Services.prefs.clearUserPref(DID_HANDLE_CAMAPAIGN_ACTION_PREF);
108+
await AttributionCode.deleteFileAsync();
109+
await ASRouter.forceAttribution(TEST_ATTRIBUTION_DATA);
110+
111+
await setAboutWelcomePref(true);
112+
await pushPrefs(
113+
["browser.aboutwelcome.screens", JSON.stringify(TEST_PROTON_CONTENT)],
114+
["browser.shell.checkDefaultBrowser", false]
115+
);
116+
117+
AttributionCode._clearCache();
118+
const data = await AttributionCode.getAttrDataAsync();
119+
120+
Assert.equal(
121+
data.campaign,
122+
"set_default_browser",
123+
"Attribution campaign should be set"
124+
);
125+
126+
let tab = await BrowserTestUtils.openNewForegroundTab(
127+
gBrowser,
128+
"about:welcome",
129+
true
130+
);
131+
132+
sinon.assert.notCalled(handleActionStub);
133+
134+
Assert.equal(
135+
Services.prefs.getBoolPref(DID_HANDLE_CAMAPAIGN_ACTION_PREF, false),
136+
false,
137+
"Campaign action is left unhandled so it can run if the pref is restored"
138+
);
139+
140+
BrowserTestUtils.removeTab(tab);
141+
sandbox.restore();
96142
});

0 commit comments

Comments
 (0)