Skip to content

Commit ac5e346

Browse files
committed
Onboarding: Send set*() messages to native apps when step is skipped
1 parent bba5ecc commit ac5e346

File tree

3 files changed

+147
-53
lines changed

3 files changed

+147
-53
lines changed

special-pages/pages/onboarding/app/global.js

+9-33
Original file line numberDiff line numberDiff line change
@@ -218,36 +218,23 @@ export function GlobalProvider({ order, children, stepDefinitions, messaging, fi
218218
* @param {ImportMeta['platform']} platform
219219
*/
220220
async function handleSystemSettingUpdate(action, messaging, platform) {
221-
const { id, payload, current } = action;
221+
const { id, payload } = action;
222222
switch (id) {
223223
case 'bookmarks': {
224-
if (!current) {
225-
messaging.setBookmarksBar(payload);
226-
} else {
227-
if (payload.enabled) {
228-
messaging.setBookmarksBar(payload);
229-
}
230-
}
224+
messaging.setBookmarksBar(payload);
231225
return payload;
232226
}
233227
case 'session-restore': {
234-
if (!current) {
235-
messaging.setSessionRestore(payload);
236-
} else {
237-
if (payload.enabled) {
238-
messaging.setSessionRestore(payload);
239-
}
240-
}
228+
messaging.setSessionRestore(payload);
241229
return payload;
242230
}
243231
case 'home-shortcut': {
244-
if (!current) {
245-
messaging.setShowHomeButton(payload);
246-
} else {
247-
if (payload.enabled) {
248-
messaging.setShowHomeButton(payload);
249-
}
250-
}
232+
messaging.setShowHomeButton(payload);
233+
return payload;
234+
}
235+
case 'ad-blocking':
236+
case 'youtube-ad-blocking': {
237+
messaging.setAdBlocking(payload);
251238
return payload;
252239
}
253240
case 'dock': {
@@ -280,17 +267,6 @@ async function handleSystemSettingUpdate(action, messaging, platform) {
280267
}
281268
break;
282269
}
283-
case 'ad-blocking':
284-
case 'youtube-ad-blocking': {
285-
if (!current) {
286-
messaging.setAdBlocking(payload);
287-
} else {
288-
if (payload.enabled) {
289-
messaging.setAdBlocking(payload);
290-
}
291-
}
292-
return payload;
293-
}
294270
}
295271
if ('value' in payload) {
296272
return { enabled: payload.enabled, value: payload.value };

special-pages/pages/onboarding/integration-tests/onboarding.js

+90-2
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,50 @@ export class OnboardingPage {
230230

231231
async skippedBookmarksBar() {
232232
await this.skippedCurrent();
233+
await this.page.getByRole('switch', { name: 'Show Bookmarks Bar' }).waitFor();
234+
const calls = await this.mocks.outgoing({ names: ['setBookmarksBar'] });
235+
expect(calls).toMatchObject([
236+
{
237+
payload: {
238+
context: 'specialPages',
239+
featureName: 'onboarding',
240+
method: 'setBookmarksBar',
241+
params: { enabled: false },
242+
},
243+
},
244+
]);
245+
}
246+
247+
async skippedSessionRestore() {
248+
await this.skippedCurrent();
249+
await this.page.getByRole('switch', { name: 'Enable Session Restore' }).waitFor();
250+
const calls = await this.mocks.outgoing({ names: ['setSessionRestore'] });
251+
expect(calls).toMatchObject([
252+
{
253+
payload: {
254+
context: 'specialPages',
255+
featureName: 'onboarding',
256+
method: 'setSessionRestore',
257+
params: { enabled: false },
258+
},
259+
},
260+
]);
261+
}
262+
263+
async skippedShowHomeButton() {
264+
await this.skippedCurrent();
265+
await this.page.getByRole('switch', { name: 'Show Home Button' }).waitFor();
266+
const calls = await this.mocks.outgoing({ names: ['setShowHomeButton'] });
267+
expect(calls).toMatchObject([
268+
{
269+
payload: {
270+
context: 'specialPages',
271+
featureName: 'onboarding',
272+
method: 'setShowHomeButton',
273+
params: { enabled: false },
274+
},
275+
},
276+
]);
233277
}
234278

235279
async canToggleBookmarksBar() {
@@ -252,6 +296,16 @@ export class OnboardingPage {
252296
// now check the outgoing messages
253297
const calls = await this.mocks.outgoing({ names: ['setBookmarksBar'] });
254298
expect(calls).toMatchObject([
299+
// initial call from skipping:
300+
{
301+
payload: {
302+
context: 'specialPages',
303+
featureName: 'onboarding',
304+
method: 'setBookmarksBar',
305+
params: { enabled: false },
306+
},
307+
},
308+
// subsequent calls from toggling:
255309
{
256310
payload: {
257311
context: 'specialPages',
@@ -308,6 +362,16 @@ export class OnboardingPage {
308362
// now check the outgoing messages
309363
const calls = await this.mocks.outgoing({ names: ['setSessionRestore'] });
310364
expect(calls).toMatchObject([
365+
// initial call from skipping:
366+
{
367+
payload: {
368+
context: 'specialPages',
369+
featureName: 'onboarding',
370+
method: 'setSessionRestore',
371+
params: { enabled: false },
372+
},
373+
},
374+
// subsequent calls from toggling:
311375
{
312376
payload: {
313377
context: 'specialPages',
@@ -347,6 +411,16 @@ export class OnboardingPage {
347411
// now check the outgoing messages
348412
const calls = await this.mocks.outgoing({ names: ['setShowHomeButton'] });
349413
expect(calls).toMatchObject([
414+
// initial call from skipping:
415+
{
416+
payload: {
417+
context: 'specialPages',
418+
featureName: 'onboarding',
419+
method: 'setShowHomeButton',
420+
params: { enabled: false },
421+
},
422+
},
423+
// subsequent calls from toggling:
350424
{
351425
payload: {
352426
context: 'specialPages',
@@ -397,15 +471,29 @@ export class OnboardingPage {
397471
await this.didSetAdBlocking();
398472
}
399473

400-
async didSetAdBlocking() {
474+
async skipAdBlocking() {
475+
const { page } = this;
476+
await this.skippedCurrent();
477+
await page.getByRole('button', { name: 'Import' }).waitFor();
478+
await this.didSetAdBlocking({ enabled: false }); // important that setAdBlocking() is called when skipped so that native apps can fire a pixel
479+
}
480+
481+
async skipYouTubeAdBlocking() {
482+
const { page } = this;
483+
await this.skippedCurrent();
484+
await page.getByRole('button', { name: 'Import' }).waitFor();
485+
await this.didSetAdBlocking({ enabled: false }); // important that setAdBlocking() is called when skipped so that native apps can fire a pixel
486+
}
487+
488+
async didSetAdBlocking({ enabled = true } = {}) {
401489
const calls = await this.mocks.outgoing({ names: ['setAdBlocking'] });
402490
expect(calls).toMatchObject([
403491
{
404492
payload: {
405493
context: 'specialPages',
406494
featureName: 'onboarding',
407495
method: 'setAdBlocking',
408-
params: { enabled: true },
496+
params: { enabled },
409497
},
410498
},
411499
]);

special-pages/pages/onboarding/integration-tests/onboarding.spec.js

+48-18
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,21 @@ test.describe('onboarding', () => {
6868
await onboarding.skippedCurrent();
6969
await onboarding.enableEnhancedAdBlocking();
7070
});
71+
test('Then I can skip enhanced ad blocking', async ({ page }, workerInfo) => {
72+
const onboarding = OnboardingPage.create(page, workerInfo);
73+
onboarding.withInitData({
74+
stepDefinitions: {
75+
systemSettings: {
76+
rows: ['dock', 'ad-blocking', 'import'],
77+
},
78+
},
79+
order: 'v3',
80+
});
81+
await onboarding.reducedMotion();
82+
await onboarding.openPage({ env: 'app', page: 'systemSettings' });
83+
await onboarding.skippedCurrent();
84+
await onboarding.skipAdBlocking();
85+
});
7186
test('Then I can turn on YouTube ad blocking', async ({ page }, workerInfo) => {
7287
const onboarding = OnboardingPage.create(page, workerInfo);
7388
onboarding.withInitData({
@@ -83,7 +98,22 @@ test.describe('onboarding', () => {
8398
await onboarding.skippedCurrent();
8499
await onboarding.enableYouTubeAdBlocking();
85100
});
86-
test('The I can skip all', async ({ page }, workerInfo) => {
101+
test('Then I can skip YouTube ad blocking', async ({ page }, workerInfo) => {
102+
const onboarding = OnboardingPage.create(page, workerInfo);
103+
onboarding.withInitData({
104+
stepDefinitions: {
105+
systemSettings: {
106+
rows: ['dock', 'youtube-ad-blocking', 'import'],
107+
},
108+
},
109+
order: 'v3',
110+
});
111+
await onboarding.reducedMotion();
112+
await onboarding.openPage({ env: 'app', page: 'systemSettings' });
113+
await onboarding.skippedCurrent();
114+
await onboarding.skipYouTubeAdBlocking();
115+
});
116+
test('Then I can skip all', async ({ page }, workerInfo) => {
87117
const onboarding = OnboardingPage.create(page, workerInfo);
88118
await onboarding.reducedMotion();
89119
await onboarding.openPage({ env: 'app', page: 'systemSettings' });
@@ -124,8 +154,8 @@ test.describe('onboarding', () => {
124154
await onboarding.openPage({ env: 'app', page: 'customize' });
125155

126156
// skipped first 2
127-
await onboarding.skippedCurrent();
128-
await onboarding.skippedCurrent();
157+
await onboarding.skippedBookmarksBar();
158+
await onboarding.skippedSessionRestore();
129159

130160
await onboarding.showHomeButton();
131161
});
@@ -135,9 +165,9 @@ test.describe('onboarding', () => {
135165
await onboarding.openPage({ env: 'app', page: 'customize' });
136166

137167
// skipped all
138-
await onboarding.skippedCurrent();
139-
await onboarding.skippedCurrent();
140-
await onboarding.skippedCurrent();
168+
await onboarding.skippedBookmarksBar();
169+
await onboarding.skippedSessionRestore();
170+
await onboarding.skippedShowHomeButton();
141171

142172
await onboarding.canToggleHomeButton();
143173
});
@@ -341,7 +371,7 @@ test.describe('onboarding', () => {
341371
});
342372
await onboarding.reducedMotion();
343373
await onboarding.openPage({ env: 'app', page: 'customize' });
344-
await onboarding.skippedCurrent();
374+
await onboarding.skippedBookmarksBar();
345375

346376
// ▶️ Then I can toggle it afterward
347377
await onboarding.canToggleBookmarksBar();
@@ -354,7 +384,7 @@ test.describe('onboarding', () => {
354384
});
355385
await onboarding.reducedMotion();
356386
await onboarding.openPage({ env: 'app', page: 'customize' });
357-
await onboarding.skippedCurrent();
387+
await onboarding.skippedBookmarksBar();
358388

359389
// ▶️ Then the restore session bar shows
360390
await onboarding.restoreSession();
@@ -367,8 +397,8 @@ test.describe('onboarding', () => {
367397
});
368398
await onboarding.reducedMotion();
369399
await onboarding.openPage({ env: 'app', page: 'customize' });
370-
await onboarding.skippedCurrent();
371-
await onboarding.skippedCurrent();
400+
await onboarding.skippedBookmarksBar();
401+
await onboarding.skippedSessionRestore();
372402

373403
// ▶️ Then I can toggle it afterward
374404
await onboarding.canToggleRestoreSession();
@@ -383,8 +413,8 @@ test.describe('onboarding', () => {
383413
await onboarding.openPage({ env: 'app', page: 'customize' });
384414

385415
// skipped first 2
386-
await onboarding.skippedCurrent();
387-
await onboarding.skippedCurrent();
416+
await onboarding.skippedBookmarksBar();
417+
await onboarding.skippedSessionRestore();
388418

389419
// ▶️ Then the home button bar shows
390420
await onboarding.showHomeButton();
@@ -399,9 +429,9 @@ test.describe('onboarding', () => {
399429
await onboarding.openPage({ env: 'app', page: 'customize' });
400430

401431
// skipped all
402-
await onboarding.skippedCurrent();
403-
await onboarding.skippedCurrent();
404-
await onboarding.skippedCurrent();
432+
await onboarding.skippedBookmarksBar();
433+
await onboarding.skippedSessionRestore();
434+
await onboarding.skippedShowHomeButton();
405435

406436
// ▶️ Then I can toggle it afterward
407437
await onboarding.canToggleHomeButton();
@@ -416,9 +446,9 @@ test.describe('onboarding', () => {
416446
await onboarding.openPage({ env: 'app', page: 'customize' });
417447

418448
// skipped all
419-
await onboarding.skippedCurrent();
420-
await onboarding.skippedCurrent();
421-
await onboarding.skippedCurrent();
449+
await onboarding.skippedBookmarksBar();
450+
await onboarding.skippedSessionRestore();
451+
await onboarding.skippedShowHomeButton();
422452

423453
// ▶️ Then I can toggle it afterward
424454
await onboarding.startBrowsing();

0 commit comments

Comments
 (0)