Skip to content

Commit 7f3ddc3

Browse files
authored
Update ad blocking experiment copy per ship review (#1691)
1 parent 2750fc8 commit 7f3ddc3

File tree

12 files changed

+124
-46
lines changed

12 files changed

+124
-46
lines changed

special-pages/pages/new-tab/app/activity/integration-tests/activity.page.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ export class ActivityPage {
420420
const { page } = this;
421421
await expect(page.getByTestId('ActivityHeading')).toMatchAriaSnapshot(`
422422
- img "Privacy Shield"
423-
- heading "Total of 0 ads & tracking attempts blocked" [level=2]
423+
- heading "0 advertising & tracking attempts blocked" [level=2]
424424
- button "Hide recent activity" [expanded] [pressed]:
425425
- img
426426
- paragraph: Past 7 days

special-pages/pages/new-tab/app/privacy-stats/integration-tests/privacy-stats.page.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,14 +186,14 @@ export class PrivacyStatsPage {
186186

187187
async hasEmptyAdsAndTrackersTitle() {
188188
await expect(this.page.getByTestId('PrivacyStatsHeading')).toMatchAriaSnapshot(`
189-
- heading "Ads & tracking protections active" [level=2]
189+
- heading "Protections active" [level=2]
190190
- paragraph: DuckDuckGo blocks ads and tracking attempts as you browse. Visit a few sites to see how many we block!
191191
`);
192192
}
193193

194194
async hasPopulatedAdsAndTrackersTitle() {
195195
await expect(this.page.getByTestId('PrivacyStatsHeading')).toMatchAriaSnapshot(`
196-
- heading "Total of 868 ads & tracking attempts blocked" [level=2]
196+
- heading "868 advertising & tracking attempts blocked" [level=2]
197197
- paragraph: Past 7 days
198198
`);
199199
}

special-pages/pages/new-tab/app/privacy-stats/strings.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@
2828
"note": "Placeholder for when we cannot report any blocked ads and trackers yet"
2929
},
3030
"stats_noRecentAdsAndTrackers": {
31-
"title": "Ads & tracking protections active",
31+
"title": "Protections active",
3232
"note": "Placeholder to indicate that no ads or tracking activity was blocked in the last 7 days"
3333
},
3434
"stats_countBlockedAdsAndTrackersSingular": {
35-
"title": "Total of <b>1</b> ad & tracking attempt blocked",
35+
"title": "<b>1</b> advertising & tracking attempt blocked",
3636
"note": "The main headline indicating that a single ad or tracking attempt was blocked"
3737
},
3838
"stats_countBlockedAdsAndTrackersPlural": {
39-
"title": "Total of <b>{count}</b> ads & tracking attempts blocked",
40-
"note": "The main headline indicating that more than 1 ad or tracking attempt has been blocked. Eg: 'Total of 2 ads & tracking attempts blocked'"
39+
"title": "<b>{count}</b> advertising & tracking attempts blocked",
40+
"note": "The main headline indicating that more than 1 ad or tracking attempt has been blocked. Eg: '2 advertising & tracking attempts blocked"
4141
},
4242
"stats_feedCountBlockedSingular": {
4343
"title": "1 attempt blocked by DuckDuckGo in the last 7 days",

special-pages/pages/new-tab/public/locales/en/new-tab.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,16 @@
7070
"note": "Placeholder for when we cannot report any blocked ads and trackers yet"
7171
},
7272
"stats_noRecentAdsAndTrackers": {
73-
"title": "Ads & tracking protections active",
73+
"title": "Protections active",
7474
"note": "Placeholder to indicate that no ads or tracking activity was blocked in the last 7 days"
7575
},
7676
"stats_countBlockedAdsAndTrackersSingular": {
77-
"title": "Total of <b>1</b> ad & tracking attempt blocked",
77+
"title": "<b>1</b> advertising & tracking attempt blocked",
7878
"note": "The main headline indicating that a single ad or tracking attempt was blocked"
7979
},
8080
"stats_countBlockedAdsAndTrackersPlural": {
81-
"title": "Total of <b>{count}</b> ads & tracking attempts blocked",
82-
"note": "The main headline indicating that more than 1 ad or tracking attempt has been blocked. Eg: 'Total of 2 ads & tracking attempts blocked'"
81+
"title": "<b>{count}</b> advertising & tracking attempts blocked",
82+
"note": "The main headline indicating that more than 1 ad or tracking attempt has been blocked. Eg: '2 advertising & tracking attempts blocked"
8383
},
8484
"stats_feedCountBlockedSingular": {
8585
"title": "1 attempt blocked by DuckDuckGo in the last 7 days",

special-pages/pages/onboarding/app/components/v3/ComparisonTable.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ export function ComparisonTable() {
7373
const state = useGlobalState();
7474

7575
const systemSettingsStep = /** @type {import('../../types').SystemSettingsStep|undefined} */ (state.stepDefinitions.systemSettings);
76-
const adBlockingEnabled = systemSettingsStep?.rows?.some((row) => row === 'ad-blocking' || row === 'youtube-ad-blocking') ?? false;
76+
const adBlockingEnabled =
77+
systemSettingsStep?.rows?.some((row) => row === 'aggressive-ad-blocking' || row === 'youtube-ad-blocking') ?? false;
7778
const tableData = comparisonTableData(t, adBlockingEnabled);
7879

7980
return (

special-pages/pages/onboarding/app/components/v3/data.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,18 +204,27 @@ export const settingsRowItems = {
204204
acceptText: t('row_home-shortcut_accept'),
205205
accepButtonVariant: 'secondary',
206206
}),
207-
'ad-blocking': (t) => ({
208-
id: 'ad-blocking',
207+
'placebo-ad-blocking': (t) => ({
208+
id: 'placebo-ad-blocking',
209209
icon: 'v3/ads.svg',
210-
title: t('row_ad-blocking_title_v3'),
210+
title: t('row_placebo-ad-blocking_title_v3'),
211+
secondaryText: t('row_ad-blocking_desc_v3'),
212+
kind: 'one-time',
213+
acceptText: t('row_ad-blocking_accept_v3'),
214+
accepButtonVariant: 'primary',
215+
}),
216+
'aggressive-ad-blocking': (t) => ({
217+
id: 'aggressive-ad-blocking',
218+
icon: 'v3/ads.svg',
219+
title: t('row_aggressive-ad-blocking_title_v3'),
211220
secondaryText: t('row_ad-blocking_desc_v3'),
212221
kind: 'one-time',
213222
acceptText: t('row_ad-blocking_accept_v3'),
214223
accepButtonVariant: 'primary',
215224
}),
216225
'youtube-ad-blocking': (t) => ({
217226
id: 'youtube-ad-blocking',
218-
icon: 'v3/video-player.svg',
227+
icon: 'v3/ads.svg',
219228
title: t('row_youtube-ad-blocking_title_v3'),
220229
secondaryText: t('row_youtube-ad-blocking_desc_v3'),
221230
kind: 'one-time',

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

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,12 +218,23 @@ export const settingsRowItems = {
218218
acceptText: t('row_home-shortcut_accept'),
219219
}),
220220
// Intended only for use with v3
221-
'ad-blocking': (t) => ({
222-
id: 'ad-blocking',
221+
'placebo-ad-blocking': (t) => ({
222+
id: 'placebo-ad-blocking',
223223
icon: 'v3/ads.svg',
224-
title: t('row_ad-blocking_title_v3'),
224+
title: t('row_placebo-ad-blocking_title_v3'),
225225
secondaryText: t('row_ad-blocking_desc_v3'),
226-
summary: t('row_ad-blocking_title_v3'),
226+
summary: t('row_placebo-ad-blocking_title_v3'),
227+
kind: 'one-time',
228+
acceptText: t('row_ad-blocking_accept_v3'),
229+
accepButtonVariant: 'primary',
230+
}),
231+
// Intended only for use with v3
232+
'aggressive-ad-blocking': (t) => ({
233+
id: 'aggressive-ad-blocking',
234+
icon: 'v3/ads.svg',
235+
title: t('row_aggressive-ad-blocking_title_v3'),
236+
secondaryText: t('row_ad-blocking_desc_v3'),
237+
summary: t('row_aggressive-ad-blocking_title_v3'),
227238
kind: 'one-time',
228239
acceptText: t('row_ad-blocking_accept_v3'),
229240
accepButtonVariant: 'primary',

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,10 @@ export function reducer(state, action) {
7878

7979
// skip Duck Player onboarding step when ad blocking is enabled
8080
// note: there's no UI for disabling this setting, so we never need to re-insert duckPlayerSingle into order
81-
const isAdBlockingSetting = systemValueId === 'ad-blocking' || systemValueId === 'youtube-ad-blocking';
81+
const isAdBlockingSetting =
82+
systemValueId === 'placebo-ad-blocking' ||
83+
systemValueId === 'aggressive-ad-blocking' ||
84+
systemValueId === 'youtube-ad-blocking';
8285
const nextOrder =
8386
isAdBlockingSetting && action.payload.enabled
8487
? state.order.filter((step) => step !== 'duckPlayerSingle')
@@ -152,7 +155,8 @@ export function GlobalProvider({ order, children, stepDefinitions, messaging, fi
152155
bookmarks: 'idle',
153156
'session-restore': 'idle',
154157
'home-shortcut': 'idle',
155-
'ad-blocking': 'idle',
158+
'placebo-ad-blocking': 'idle',
159+
'aggressive-ad-blocking': 'idle',
156160
'youtube-ad-blocking': 'idle',
157161
},
158162
});
@@ -241,7 +245,8 @@ async function handleSystemSettingUpdate(action, messaging, platform) {
241245
messaging.setShowHomeButton(payload);
242246
return payload;
243247
}
244-
case 'ad-blocking':
248+
case 'placebo-ad-blocking':
249+
case 'aggressive-ad-blocking':
245250
case 'youtube-ad-blocking': {
246251
messaging.setAdBlocking(payload);
247252
return payload;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import { useContext } from 'preact/hooks';
1010
* | 'bookmarks'
1111
* | 'session-restore'
1212
* | 'home-shortcut'
13-
* | 'ad-blocking'
13+
* | 'placebo-ad-blocking'
14+
* | 'aggressive-ad-blocking'
1415
* | 'youtube-ad-blocking'
1516
* } SystemValueId - Each setting that can be updated should have a unique ID listed here.
1617
*/

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

Lines changed: 63 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,28 @@ test.describe('onboarding', () => {
3232
await onboarding.handlesFatalException();
3333
});
3434
test.describe('Given I am on the make default step', () => {
35-
test('Then "Watch YouTube ad-free" appears when ad blocking is enabled', async ({ page }, workerInfo) => {
35+
test('Then "Play YouTube without targeted ads" appears when ad blocking is enabled (placebo variant)', async ({
36+
page,
37+
}, workerInfo) => {
3638
const onboarding = OnboardingPage.create(page, workerInfo);
3739
onboarding.withInitData({
3840
stepDefinitions: {
3941
systemSettings: {
40-
rows: ['dock', 'import', 'ad-blocking'],
42+
rows: ['dock', 'import', 'placebo-ad-blocking'],
43+
},
44+
},
45+
order: 'v3',
46+
});
47+
await onboarding.reducedMotion();
48+
await onboarding.openPage({ env: 'app', page: 'makeDefaultSingle' });
49+
await onboarding.checkYouTubeText(false);
50+
});
51+
test('Then "Watch YouTube ad-free" appears when ad blocking is enabled (aggressive variant)', async ({ page }, workerInfo) => {
52+
const onboarding = OnboardingPage.create(page, workerInfo);
53+
onboarding.withInitData({
54+
stepDefinitions: {
55+
systemSettings: {
56+
rows: ['dock', 'import', 'aggressive-ad-blocking'],
4157
},
4258
},
4359
order: 'v3',
@@ -46,20 +62,19 @@ test.describe('onboarding', () => {
4662
await onboarding.openPage({ env: 'app', page: 'makeDefaultSingle' });
4763
await onboarding.checkYouTubeText(true);
4864
});
49-
50-
test('Then "Play YouTube without targeted ads" appears when ad blocking is not enabled', async ({ page }, workerInfo) => {
65+
test('Then "Watch YouTube ad-free" appears when ad blocking is enabled (YouTube variant)', async ({ page }, workerInfo) => {
5166
const onboarding = OnboardingPage.create(page, workerInfo);
5267
onboarding.withInitData({
5368
stepDefinitions: {
5469
systemSettings: {
55-
rows: ['dock', 'import'],
70+
rows: ['dock', 'import', 'youtube-ad-blocking'],
5671
},
5772
},
5873
order: 'v3',
5974
});
6075
await onboarding.reducedMotion();
6176
await onboarding.openPage({ env: 'app', page: 'makeDefaultSingle' });
62-
await onboarding.checkYouTubeText(false);
77+
await onboarding.checkYouTubeText(true);
6378
});
6479
});
6580
test.describe('Given I am on the summary step', () => {
@@ -84,12 +99,44 @@ test.describe('onboarding', () => {
8499
await onboarding.openPage({ env: 'app', page: 'systemSettings' });
85100
await onboarding.keepInTaskbar();
86101
});
87-
test('Then I can turn on enhanced ad blocking', async ({ page }, workerInfo) => {
102+
test('Then I can turn on ad blocking (placebo variant)', async ({ page }, workerInfo) => {
103+
const onboarding = OnboardingPage.create(page, workerInfo);
104+
onboarding.withInitData({
105+
stepDefinitions: {
106+
systemSettings: {
107+
rows: ['dock', 'import', 'placebo-ad-blocking'],
108+
},
109+
},
110+
order: 'v3',
111+
});
112+
await onboarding.reducedMotion();
113+
await onboarding.openPage({ env: 'app', page: 'systemSettings' });
114+
await onboarding.skippedCurrent();
115+
await onboarding.skippedCurrent();
116+
await onboarding.enableEnhancedAdBlocking();
117+
});
118+
test('Then I can skip ad blocking (placebo variant)', async ({ page }, workerInfo) => {
119+
const onboarding = OnboardingPage.create(page, workerInfo);
120+
onboarding.withInitData({
121+
stepDefinitions: {
122+
systemSettings: {
123+
rows: ['dock', 'import', 'placebo-ad-blocking'],
124+
},
125+
},
126+
order: 'v3',
127+
});
128+
await onboarding.reducedMotion();
129+
await onboarding.openPage({ env: 'app', page: 'systemSettings' });
130+
await onboarding.skippedCurrent();
131+
await onboarding.skippedCurrent();
132+
await onboarding.skipAdBlocking();
133+
});
134+
test('Then I can turn on ad blocking (aggressive variant)', async ({ page }, workerInfo) => {
88135
const onboarding = OnboardingPage.create(page, workerInfo);
89136
onboarding.withInitData({
90137
stepDefinitions: {
91138
systemSettings: {
92-
rows: ['dock', 'import', 'ad-blocking'],
139+
rows: ['dock', 'import', 'aggressive-ad-blocking'],
93140
},
94141
},
95142
order: 'v3',
@@ -100,12 +147,12 @@ test.describe('onboarding', () => {
100147
await onboarding.skippedCurrent();
101148
await onboarding.enableEnhancedAdBlocking();
102149
});
103-
test('Then I can skip enhanced ad blocking', async ({ page }, workerInfo) => {
150+
test('Then I can skip ad blocking (aggresive variant)', async ({ page }, workerInfo) => {
104151
const onboarding = OnboardingPage.create(page, workerInfo);
105152
onboarding.withInitData({
106153
stepDefinitions: {
107154
systemSettings: {
108-
rows: ['dock', 'import', 'ad-blocking'],
155+
rows: ['dock', 'import', 'aggressive-ad-blocking'],
109156
},
110157
},
111158
order: 'v3',
@@ -116,7 +163,7 @@ test.describe('onboarding', () => {
116163
await onboarding.skippedCurrent();
117164
await onboarding.skipAdBlocking();
118165
});
119-
test('Then I can turn on YouTube ad blocking', async ({ page }, workerInfo) => {
166+
test('Then I can turn on ad blocking (YouTube variant)', async ({ page }, workerInfo) => {
120167
const onboarding = OnboardingPage.create(page, workerInfo);
121168
onboarding.withInitData({
122169
stepDefinitions: {
@@ -132,7 +179,7 @@ test.describe('onboarding', () => {
132179
await onboarding.skippedCurrent();
133180
await onboarding.enableYouTubeAdBlocking();
134181
});
135-
test('Then I can skip YouTube ad blocking', async ({ page }, workerInfo) => {
182+
test('Then I can skip ad blocking (YouTube variant)', async ({ page }, workerInfo) => {
136183
const onboarding = OnboardingPage.create(page, workerInfo);
137184
onboarding.withInitData({
138185
stepDefinitions: {
@@ -273,7 +320,7 @@ test.describe('onboarding', () => {
273320
onboarding.withInitData({
274321
stepDefinitions: {
275322
systemSettings: {
276-
rows: ['dock', 'import', 'ad-blocking'],
323+
rows: ['dock', 'import', 'aggressive-ad-blocking'],
277324
},
278325
},
279326
order: 'v3',
@@ -288,7 +335,7 @@ test.describe('onboarding', () => {
288335
onboarding.withInitData({
289336
stepDefinitions: {
290337
systemSettings: {
291-
rows: ['dock', 'import', 'ad-blocking'],
338+
rows: ['dock', 'import', 'aggressive-ad-blocking'],
292339
},
293340
},
294341
order: 'v3',
@@ -298,7 +345,7 @@ test.describe('onboarding', () => {
298345
await onboarding.openPage();
299346
await onboarding.completesOrderV3WithAdBlockingDisabled();
300347
});
301-
test('shows v3 flow with YouTube ad blocking', async ({ page }, workerInfo) => {
348+
test('shows v3 flow with ad blocking (YouTube variant)', async ({ page }, workerInfo) => {
302349
const onboarding = OnboardingPage.create(page, workerInfo);
303350
onboarding.withInitData({
304351
stepDefinitions: {
@@ -313,7 +360,7 @@ test.describe('onboarding', () => {
313360
await onboarding.openPage();
314361
await onboarding.completesOrderV3WithAdBlockingEnabled('youtube-ad-blocking');
315362
});
316-
test('shows v3 flow with YouTube ad blocking disabled', async ({ page }, workerInfo) => {
363+
test('shows v3 flow with ad blocking disabled (YouTube variant)', async ({ page }, workerInfo) => {
317364
const onboarding = OnboardingPage.create(page, workerInfo);
318365
onboarding.withInitData({
319366
stepDefinitions: {

0 commit comments

Comments
 (0)