blob: a7d39c608a4db16e8ac42be64d2e71745efbade6 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'chrome://settings/lazy_load.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
import {CrDialogElement, SettingsPrivacySandboxAdMeasurementSubpageElement, SettingsPrivacySandboxFledgeSubpageElement, SettingsPrivacySandboxPageElement, SettingsPrivacySandboxTopicsSubpageElement} from 'chrome://settings/lazy_load.js';
import {CrLinkRowElement, CrSettingsPrefs, MetricsBrowserProxyImpl, PrivacySandboxBrowserProxyImpl, Router, routes, SettingsPrefsElement} from 'chrome://settings/settings.js';
import {assertDeepEquals, assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
import {flushTasks, waitAfterNextRender} from 'chrome://webui-test/polymer_test_util.js';
import {isChildVisible, isVisible} from 'chrome://webui-test/test_util.js';
import {TestMetricsBrowserProxy} from './test_metrics_browser_proxy.js';
import {TestPrivacySandboxBrowserProxy} from './test_privacy_sandbox_browser_proxy.js';
suite('PrivacySandboxPageTests', function() {
let page: SettingsPrivacySandboxPageElement;
let settingsPrefs: SettingsPrefsElement;
let metricsBrowserProxy: TestMetricsBrowserProxy;
suiteSetup(function() {
loadTimeData.overrideValues({
isPrivacySandboxRestricted: false,
});
settingsPrefs = document.createElement('settings-prefs');
return CrSettingsPrefs.initialized;
});
setup(function() {
metricsBrowserProxy = new TestMetricsBrowserProxy();
MetricsBrowserProxyImpl.setInstance(metricsBrowserProxy);
document.body.innerHTML = window.trustedTypes!.emptyHTML;
document.body.appendChild(settingsPrefs);
page = document.createElement('settings-privacy-sandbox-page');
page.prefs = settingsPrefs.prefs!;
document.body.appendChild(page);
return flushTasks();
});
teardown(function() {
Router.getInstance().resetRouteForTesting();
});
test('privacySandboxLinkRowsVisible', function() {
assertTrue(isChildVisible(page, '#privacySandboxTopicsLinkRow'));
assertTrue(isChildVisible(page, '#privacySandboxFledgeLinkRow'));
assertTrue(isVisible(page.$.privacySandboxAdMeasurementLinkRow));
});
test('privacySandboxTopicsRowSublabel', async function() {
page.setPrefValue('privacy_sandbox.m1.topics_enabled', true);
await flushTasks();
const topicsRow = page.shadowRoot!.querySelector<CrLinkRowElement>(
'#privacySandboxTopicsLinkRow');
assertTrue(!!topicsRow);
assertTrue(isVisible(topicsRow));
assertEquals(
loadTimeData.getString('adPrivacyPageTopicsLinkRowSubLabelEnabled'),
topicsRow.subLabel);
page.setPrefValue('privacy_sandbox.m1.topics_enabled', false);
await flushTasks();
assertTrue(isVisible(topicsRow));
assertEquals(
loadTimeData.getString('adPrivacyPageTopicsLinkRowSubLabelDisabled'),
topicsRow.subLabel);
});
test('privacySandboxFledgeRowSublabel', async function() {
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', true);
await flushTasks();
const fledgeRow = page.shadowRoot!.querySelector<CrLinkRowElement>(
'#privacySandboxFledgeLinkRow');
assertTrue(!!fledgeRow);
assertTrue(isVisible(fledgeRow));
assertEquals(
loadTimeData.getString('adPrivacyPageFledgeLinkRowSubLabelEnabled'),
fledgeRow.subLabel);
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', false);
await flushTasks();
assertTrue(isVisible(fledgeRow));
assertEquals(
loadTimeData.getString('adPrivacyPageFledgeLinkRowSubLabelDisabled'),
fledgeRow.subLabel);
});
test('privacySandboxAdMeasurementRowSublabel', async function() {
page.setPrefValue('privacy_sandbox.m1.ad_measurement_enabled', true);
await flushTasks();
assertTrue(isVisible(page.$.privacySandboxAdMeasurementLinkRow));
assertEquals(
loadTimeData.getString(
'adPrivacyPageAdMeasurementLinkRowSubLabelEnabled'),
page.$.privacySandboxAdMeasurementLinkRow.subLabel);
page.setPrefValue('privacy_sandbox.m1.ad_measurement_enabled', false);
await flushTasks();
assertTrue(isVisible(page.$.privacySandboxAdMeasurementLinkRow));
assertEquals(
loadTimeData.getString(
'adPrivacyPageAdMeasurementLinkRowSubLabelDisabled'),
page.$.privacySandboxAdMeasurementLinkRow.subLabel);
});
test('clickPrivacySandboxTopicsLinkRow', async function() {
const topicsRow = page.shadowRoot!.querySelector<HTMLElement>(
'#privacySandboxTopicsLinkRow');
assertTrue(!!topicsRow);
topicsRow.click();
assertEquals(
'Settings.PrivacySandbox.Topics.Opened',
await metricsBrowserProxy.whenCalled('recordAction'));
assertEquals(
routes.PRIVACY_SANDBOX_TOPICS, Router.getInstance().getCurrentRoute());
});
test('clickPrivacySandboxFledgeLinkRow', async function() {
const fledgeRow = page.shadowRoot!.querySelector<HTMLElement>(
'#privacySandboxFledgeLinkRow');
assertTrue(!!fledgeRow);
fledgeRow.click();
assertEquals(
'Settings.PrivacySandbox.Fledge.Opened',
await metricsBrowserProxy.whenCalled('recordAction'));
assertEquals(
routes.PRIVACY_SANDBOX_FLEDGE, Router.getInstance().getCurrentRoute());
});
test('clickPrivacySandboxAdMeasurementLinkRow', async function() {
page.$.privacySandboxAdMeasurementLinkRow.click();
assertEquals(
'Settings.PrivacySandbox.AdMeasurement.Opened',
await metricsBrowserProxy.whenCalled('recordAction'));
assertEquals(
routes.PRIVACY_SANDBOX_AD_MEASUREMENT,
Router.getInstance().getCurrentRoute());
});
});
suite('PrivacySandboxRestrictedEnabledTests', function() {
let page: SettingsPrivacySandboxPageElement;
let settingsPrefs: SettingsPrefsElement;
let metricsBrowserProxy: TestMetricsBrowserProxy;
suiteSetup(function() {
loadTimeData.overrideValues({
isPrivacySandboxRestricted: true,
});
settingsPrefs = document.createElement('settings-prefs');
return CrSettingsPrefs.initialized;
});
setup(function() {
metricsBrowserProxy = new TestMetricsBrowserProxy();
MetricsBrowserProxyImpl.setInstance(metricsBrowserProxy);
document.body.innerHTML = window.trustedTypes!.emptyHTML;
document.body.appendChild(settingsPrefs);
page = document.createElement('settings-privacy-sandbox-page');
page.prefs = settingsPrefs.prefs!;
document.body.appendChild(page);
return flushTasks();
});
// When the privacy sandbox is restricted, ensure only measurement is shown.
test('privacySandboxLinkRowsNotVisible', function() {
assertFalse(isChildVisible(page, '#privacySandboxTopicsLinkRow'));
assertFalse(isChildVisible(page, '#privacySandboxFledgeLinkRow'));
assertTrue(isVisible(page.$.privacySandboxAdMeasurementLinkRow));
});
});
suite('PrivacySandboxTopicsSubpageTests', function() {
let page: SettingsPrivacySandboxTopicsSubpageElement;
let testPrivacySandboxBrowserProxy: TestPrivacySandboxBrowserProxy;
let settingsPrefs: SettingsPrefsElement;
let metricsBrowserProxy: TestMetricsBrowserProxy;
suiteSetup(function() {
loadTimeData.overrideValues({
isPrivacySandboxRestricted: false,
});
settingsPrefs = document.createElement('settings-prefs');
return CrSettingsPrefs.initialized;
});
setup(async function() {
testPrivacySandboxBrowserProxy = new TestPrivacySandboxBrowserProxy();
PrivacySandboxBrowserProxyImpl.setInstance(testPrivacySandboxBrowserProxy);
metricsBrowserProxy = new TestMetricsBrowserProxy();
MetricsBrowserProxyImpl.setInstance(metricsBrowserProxy);
document.body.innerHTML = window.trustedTypes!.emptyHTML;
document.body.appendChild(settingsPrefs);
page = document.createElement('settings-privacy-sandbox-topics-subpage');
page.prefs = settingsPrefs.prefs!;
document.body.appendChild(page);
await testPrivacySandboxBrowserProxy.whenCalled('getTopicsState');
return flushTasks();
});
teardown(function() {
Router.getInstance().resetRouteForTesting();
});
function assertLearnMoreDialogClosed() {
const dialog = page.shadowRoot!.querySelector<CrDialogElement>('#dialog');
assertFalse(!!dialog);
}
function assertLearnMoreDialogOpened() {
const dialog = page.shadowRoot!.querySelector<CrDialogElement>('#dialog');
assertTrue(!!dialog);
assertTrue(dialog.open);
}
test('enableTopicsToggle', async function() {
page.setPrefValue('privacy_sandbox.m1.topics_enabled', false);
await flushTasks();
assertTrue(isVisible(page.$.topicsToggle));
assertFalse(page.$.topicsToggle.checked);
assertFalse(page.$.topicsToggle.controlDisabled());
assertEquals(
loadTimeData.getString('topicsPageToggleSubLabel'),
page.$.topicsToggle.subLabel);
assertTrue(isChildVisible(page, '#currentTopicsDescription'));
assertFalse(isChildVisible(page, '#currentTopicsDescriptionEmpty'));
assertTrue(isChildVisible(page, '#currentTopicsDescriptionDisabled'));
assertEquals(
0, testPrivacySandboxBrowserProxy.getCallCount('topicsToggleChanged'));
page.$.topicsToggle.click();
await flushTasks();
assertTrue(isVisible(page.$.topicsToggle));
assertTrue(page.$.topicsToggle.checked);
assertFalse(page.$.topicsToggle.controlDisabled());
assertEquals(
loadTimeData.getString('topicsPageToggleSubLabel'),
page.$.topicsToggle.subLabel);
assertTrue(!!page.getPref('privacy_sandbox.m1.topics_enabled.value'));
assertTrue(isChildVisible(page, '#currentTopicsDescription'));
// The current list is always empty after re-enabling the toggle.
assertTrue(isChildVisible(page, '#currentTopicsDescriptionEmpty'));
assertFalse(isChildVisible(page, '#currentTopicsDescriptionDisabled'));
assertEquals(
'Settings.PrivacySandbox.Topics.Enabled',
await metricsBrowserProxy.whenCalled('recordAction'));
assertTrue((await testPrivacySandboxBrowserProxy.whenCalled(
'topicsToggleChanged'))[0]);
});
test('disableTopicsToggle', async function() {
page.setPrefValue('privacy_sandbox.m1.topics_enabled', true);
await flushTasks();
assertTrue(isVisible(page.$.topicsToggle));
assertTrue(page.$.topicsToggle.checked);
assertFalse(page.$.topicsToggle.controlDisabled());
assertEquals(
loadTimeData.getString('topicsPageToggleSubLabel'),
page.$.topicsToggle.subLabel);
assertTrue(isChildVisible(page, '#currentTopicsDescription'));
assertFalse(isChildVisible(page, '#currentTopicsDescriptionEmpty'));
assertFalse(isChildVisible(page, '#currentTopicsDescriptionDisabled'));
assertEquals(
0, testPrivacySandboxBrowserProxy.getCallCount('topicsToggleChanged'));
page.$.topicsToggle.click();
await flushTasks();
assertTrue(isVisible(page.$.topicsToggle));
assertFalse(page.$.topicsToggle.checked);
assertFalse(page.$.topicsToggle.controlDisabled());
assertEquals(
loadTimeData.getString('topicsPageToggleSubLabel'),
page.$.topicsToggle.subLabel);
assertFalse(!!page.getPref('privacy_sandbox.m1.topics_enabled.value'));
assertTrue(isChildVisible(page, '#currentTopicsDescription'));
assertFalse(isChildVisible(page, '#currentTopicsDescriptionEmpty'));
assertTrue(isChildVisible(page, '#currentTopicsDescriptionDisabled'));
assertEquals(
'Settings.PrivacySandbox.Topics.Disabled',
await metricsBrowserProxy.whenCalled('recordAction'));
assertFalse((await testPrivacySandboxBrowserProxy.whenCalled(
'topicsToggleChanged'))[0]);
});
test('learnMoreDialog', async function() {
page.setPrefValue('privacy_sandbox.m1.topics_enabled', true);
await flushTasks();
assertLearnMoreDialogClosed();
const learnMoreButton =
page.shadowRoot!.querySelector<HTMLElement>('#learnMoreLink')!;
assertTrue(isVisible(learnMoreButton));
assertEquals(
loadTimeData.getString(
'topicsPageCurrentTopicsDescriptionLearnMoreA11yLabel'),
learnMoreButton.getAttribute('aria-label'));
learnMoreButton.click();
await flushTasks();
assertLearnMoreDialogOpened();
assertEquals(
'Settings.PrivacySandbox.Topics.LearnMoreClicked',
await metricsBrowserProxy.whenCalled('recordAction'));
const closeButton =
page.shadowRoot!.querySelector<HTMLElement>('#closeButton')!;
assertTrue(isVisible(closeButton));
closeButton.click();
await flushTasks();
assertLearnMoreDialogClosed();
await waitAfterNextRender(page);
assertEquals(learnMoreButton, page.shadowRoot!.activeElement);
});
test('blockedTopicsNotEmpty', async function() {
page.setPrefValue('privacy_sandbox.m1.topics_enabled', false);
const blockedTopicsRow =
page.shadowRoot!.querySelector<HTMLElement>('#blockedTopicsRow')!;
let blockedTopicsDescription = page.shadowRoot!.querySelector<HTMLElement>(
'#blockedTopicsDescription')!;
assertTrue(isVisible(blockedTopicsRow));
assertFalse(isVisible(blockedTopicsDescription));
blockedTopicsRow.click();
await flushTasks();
assertEquals(
'Settings.PrivacySandbox.Topics.BlockedTopicsOpened',
await metricsBrowserProxy.whenCalled('recordAction'));
// Check that blocked topics are shown even when toggle is disabled.
blockedTopicsDescription = page.shadowRoot!.querySelector<HTMLElement>(
'#blockedTopicsDescription')!;
assertTrue(isVisible(blockedTopicsDescription));
assertEquals(
loadTimeData.getString('topicsPageBlockedTopicsDescription'),
blockedTopicsDescription.innerText);
const blockedTopicsList =
page.shadowRoot!.querySelector('#blockedTopicsList')!;
let blockedTopics = blockedTopicsList.querySelector('dom-repeat');
assertTrue(!!blockedTopics);
assertEquals(1, blockedTopics.items!.length);
// Check that blocked topics are shown when toggle is enabled.
page.setPrefValue('privacy_sandbox.m1.topics_enabled', true);
await flushTasks();
blockedTopicsDescription = page.shadowRoot!.querySelector<HTMLElement>(
'#blockedTopicsDescription')!;
assertTrue(isVisible(blockedTopicsDescription));
assertEquals(
loadTimeData.getString('topicsPageBlockedTopicsDescription'),
blockedTopicsDescription.innerText);
blockedTopics = blockedTopicsList.querySelector('dom-repeat');
assertTrue(!!blockedTopics);
assertEquals(1, blockedTopics.items!.length);
});
test('blockAndAllowTopics', async function() {
page.setPrefValue('privacy_sandbox.m1.topics_enabled', true);
await flushTasks();
// Check for current topics.
const currentTopicsSection =
page.shadowRoot!.querySelector<HTMLElement>('#currentTopicsSection')!;
const currentTopics = currentTopicsSection.querySelector('dom-repeat');
assertTrue(!!currentTopics);
assertEquals(1, currentTopics.items!.length);
assertFalse(isVisible(
currentTopicsSection.querySelector('#currentTopicsDescriptionEmpty')));
assertEquals('test-topic-1', currentTopics.items![0].topic!.displayString);
// Check for blocked topics.
const blockedTopicsRow =
page.shadowRoot!.querySelector<HTMLElement>('#blockedTopicsRow');
blockedTopicsRow!.click();
await flushTasks();
assertEquals(
'Settings.PrivacySandbox.Topics.BlockedTopicsOpened',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
const blockedTopicsList =
page.shadowRoot!.querySelector('#blockedTopicsList')!;
let blockedTopics = blockedTopicsList.querySelector('dom-repeat');
assertTrue(!!blockedTopics);
const blockedTopicsDescription =
page.shadowRoot!.querySelector<HTMLElement>(
'#blockedTopicsDescription')!;
assertTrue(isVisible(blockedTopicsDescription));
assertEquals(
loadTimeData.getString('topicsPageBlockedTopicsDescription'),
blockedTopicsDescription.innerText);
assertEquals(1, blockedTopics.items!.length);
assertEquals('test-topic-2', blockedTopics.items![0].topic!.displayString);
// Block topic.
const item =
currentTopicsSection.querySelector('privacy-sandbox-interest-item')!;
const blockButton = item.shadowRoot!.querySelector('cr-button');
assertEquals(
page.i18n('topicsPageBlockTopicA11yLabel', 'test-topic-1'),
blockButton!.getAttribute('aria-label'));
blockButton!.click();
assertEquals(
'Settings.PrivacySandbox.Topics.TopicRemoved',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
await testPrivacySandboxBrowserProxy.whenCalled('setTopicAllowed');
// Assert the topic is no longer visible.
assertEquals(
0, currentTopicsSection.querySelector('dom-repeat')!.items!.length);
assertTrue(isVisible(
currentTopicsSection.querySelector('#currentTopicsDescriptionEmpty')));
// Check that the focus is not lost after blocking the last item.
await waitAfterNextRender(page);
assertEquals(blockedTopicsRow, page.shadowRoot!.activeElement);
// Assert the topic was moved to blocked topics section.
blockedTopics = blockedTopicsList.querySelector('dom-repeat')!;
assertEquals(2, blockedTopics.items!.length);
assertEquals('test-topic-1', blockedTopics.items![0].topic!.displayString);
assertEquals('test-topic-2', blockedTopics.items![1].topic!.displayString);
// Allow first blocked topic.
let blockedItems =
blockedTopicsList.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(2, blockedItems.length);
const allowButton = blockedItems[0]!.shadowRoot!.querySelector('cr-button');
assertEquals(
page.i18n('topicsPageAllowTopicA11yLabel', 'test-topic-1'),
allowButton!.getAttribute('aria-label'));
allowButton!.click();
await testPrivacySandboxBrowserProxy.whenCalled('setTopicAllowed');
assertEquals(
'Settings.PrivacySandbox.Topics.TopicAdded',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
// Allow second blocked topic.
blockedItems =
blockedTopicsList.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(1, blockedItems.length);
assertEquals('test-topic-2', blockedTopics.items![0].topic!.displayString);
blockedItems[0]!.shadowRoot!.querySelector('cr-button')!.click();
await testPrivacySandboxBrowserProxy.whenCalled('setTopicAllowed');
assertEquals(
'Settings.PrivacySandbox.Topics.TopicAdded',
await metricsBrowserProxy.whenCalled('recordAction'));
// Assert all blocked topics are gone.
assertEquals(
0, blockedTopicsList.querySelector('dom-repeat')!.items!.length);
assertTrue(isVisible(blockedTopicsDescription));
assertEquals(
loadTimeData.getString('topicsPageBlockedTopicsDescriptionEmpty'),
blockedTopicsDescription.innerText);
// Check that the focus is not lost after allowing the last item.
await waitAfterNextRender(page);
assertEquals(blockedTopicsRow, page.shadowRoot!.activeElement);
});
test('topicsManaged', async function() {
page.set('prefs.privacy_sandbox.m1.topics_enabled', {
...page.get('prefs.privacy_sandbox.m1.topics_enabled'),
value: false,
controlledBy: chrome.settingsPrivate.ControlledBy.USER_POLICY,
enforcement: chrome.settingsPrivate.Enforcement.ENFORCED,
});
await flushTasks();
assertFalse(page.$.topicsToggle.checked);
assertTrue(page.$.topicsToggle.controlDisabled());
assertFalse(isChildVisible(page, '#currentTopicsSection'));
});
test('footerLinks', async function() {
assertTrue(isChildVisible(page, '#footer'));
const links =
page.shadowRoot!.querySelectorAll<HTMLAnchorElement>('#footer a[href]');
assertEquals(links.length, 2, 'footer should contains two links');
links.forEach(
link => assertEquals(
link.title, loadTimeData.getString('opensInNewTab'),
'the link should indicate that it will be opened in a new tab'));
const hrefs = Array.from<HTMLAnchorElement>(links).map(link => link.href);
const expectedLinks =
['chrome://settings/adPrivacy/sites', 'chrome://settings/cookies'];
assertDeepEquals(hrefs, expectedLinks);
});
});
suite('PrivacySandboxTopicsSubpageEmptyTests', function() {
let page: SettingsPrivacySandboxTopicsSubpageElement;
let testPrivacySandboxBrowserProxy: TestPrivacySandboxBrowserProxy;
let metricsBrowserProxy: TestMetricsBrowserProxy;
let settingsPrefs: SettingsPrefsElement;
suiteSetup(function() {
loadTimeData.overrideValues({
isPrivacySandboxRestricted: false,
});
settingsPrefs = document.createElement('settings-prefs');
return CrSettingsPrefs.initialized;
});
setup(async function() {
testPrivacySandboxBrowserProxy = new TestPrivacySandboxBrowserProxy();
testPrivacySandboxBrowserProxy.setTopicsState({
topTopics: [],
blockedTopics: [],
});
PrivacySandboxBrowserProxyImpl.setInstance(testPrivacySandboxBrowserProxy);
metricsBrowserProxy = new TestMetricsBrowserProxy();
MetricsBrowserProxyImpl.setInstance(metricsBrowserProxy);
document.body.innerHTML = window.trustedTypes!.emptyHTML;
document.body.appendChild(settingsPrefs);
page = document.createElement('settings-privacy-sandbox-topics-subpage');
page.prefs = settingsPrefs.prefs!;
document.body.appendChild(page);
await testPrivacySandboxBrowserProxy.whenCalled('getTopicsState');
return flushTasks();
});
teardown(function() {
Router.getInstance().resetRouteForTesting();
});
test('topicsDisabled', async function() {
page.setPrefValue('privacy_sandbox.m1.topics_enabled', false);
await flushTasks();
// Check the current topics descriptions.
assertTrue(isChildVisible(page, '#currentTopicsDescription'));
assertFalse(isChildVisible(page, '#currentTopicsDescriptionEmpty'));
assertTrue(isChildVisible(page, '#currentTopicsDescriptionDisabled'));
});
test('topicsEnabled', async function() {
page.setPrefValue('privacy_sandbox.m1.topics_enabled', true);
await flushTasks();
// Check the current topics descriptions.
assertTrue(isChildVisible(page, '#currentTopicsDescription'));
assertTrue(isChildVisible(page, '#currentTopicsDescriptionEmpty'));
assertFalse(isChildVisible(page, '#currentTopicsDescriptionDisabled'));
// Check that there are no current topics.
const currentTopics =
page.shadowRoot!.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(0, currentTopics.length);
});
test('blockedTopicsEmpty', async function() {
page.setPrefValue('privacy_sandbox.m1.topics_enabled', true);
await flushTasks();
const blockedTopicsRow =
page.shadowRoot!.querySelector<HTMLElement>('#blockedTopicsRow')!;
const blockedTopicsDescription =
page.shadowRoot!.querySelector<HTMLElement>(
'#blockedTopicsDescription')!;
assertTrue(isVisible(blockedTopicsRow));
assertFalse(isVisible(blockedTopicsDescription));
blockedTopicsRow.click();
await flushTasks();
assertEquals(
'Settings.PrivacySandbox.Topics.BlockedTopicsOpened',
await metricsBrowserProxy.whenCalled('recordAction'));
// Check the blocked topics description.
assertTrue(isVisible(blockedTopicsDescription));
assertEquals(
loadTimeData.getString('topicsPageBlockedTopicsDescriptionEmpty'),
blockedTopicsDescription.innerText);
// Check that there are no blocked topics.
const blockedTopicsList =
page.shadowRoot!.querySelector('#blockedTopicsList')!;
const blockedTopics =
blockedTopicsList.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(0, blockedTopics.length);
});
});
suite('PrivacySandboxFledgeSubpageTests', function() {
let page: SettingsPrivacySandboxFledgeSubpageElement;
let testPrivacySandboxBrowserProxy: TestPrivacySandboxBrowserProxy;
let settingsPrefs: SettingsPrefsElement;
let metricsBrowserProxy: TestMetricsBrowserProxy;
suiteSetup(function() {
loadTimeData.overrideValues({
isPrivacySandboxRestricted: false,
});
settingsPrefs = document.createElement('settings-prefs');
return CrSettingsPrefs.initialized;
});
setup(async function() {
testPrivacySandboxBrowserProxy = new TestPrivacySandboxBrowserProxy();
PrivacySandboxBrowserProxyImpl.setInstance(testPrivacySandboxBrowserProxy);
metricsBrowserProxy = new TestMetricsBrowserProxy();
MetricsBrowserProxyImpl.setInstance(metricsBrowserProxy);
document.body.innerHTML = window.trustedTypes!.emptyHTML;
document.body.appendChild(settingsPrefs);
page = document.createElement('settings-privacy-sandbox-fledge-subpage');
page.prefs = settingsPrefs.prefs!;
document.body.appendChild(page);
await testPrivacySandboxBrowserProxy.whenCalled('getFledgeState');
return flushTasks();
});
teardown(function() {
Router.getInstance().resetRouteForTesting();
});
function assertLearnMoreDialogClosed() {
const dialog = page.shadowRoot!.querySelector<CrDialogElement>('#dialog');
assertFalse(!!dialog);
}
function assertLearnMoreDialogOpened() {
const dialog = page.shadowRoot!.querySelector<CrDialogElement>('#dialog');
assertTrue(!!dialog);
assertTrue(dialog.open);
}
test('enableFledgeToggle', async function() {
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', false);
await flushTasks();
assertTrue(isVisible(page.$.fledgeToggle));
assertFalse(page.$.fledgeToggle.checked);
assertFalse(page.$.fledgeToggle.controlDisabled());
assertEquals(
loadTimeData.getString('fledgePageToggleSubLabel'),
page.$.fledgeToggle.subLabel);
assertTrue(isChildVisible(page, '#currentSitesDescription'));
assertFalse(isChildVisible(page, '#currentSitesDescriptionEmpty'));
assertTrue(isChildVisible(page, '#currentSitesDescriptionDisabled'));
page.$.fledgeToggle.click();
await flushTasks();
assertTrue(isVisible(page.$.fledgeToggle));
assertTrue(page.$.fledgeToggle.checked);
assertFalse(page.$.fledgeToggle.controlDisabled());
assertEquals(
loadTimeData.getString('fledgePageToggleSubLabel'),
page.$.fledgeToggle.subLabel);
assertTrue(!!page.getPref('privacy_sandbox.m1.fledge_enabled.value'));
assertTrue(isChildVisible(page, '#currentSitesDescription'));
// The current list is always empty after re-enabling the toggle.
assertTrue(isChildVisible(page, '#currentSitesDescriptionEmpty'));
assertFalse(isChildVisible(page, '#currentSitesDescriptionDisabled'));
assertEquals(
'Settings.PrivacySandbox.Fledge.Enabled',
await metricsBrowserProxy.whenCalled('recordAction'));
});
test('disableFledgeToggle', async function() {
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', true);
await flushTasks();
assertTrue(isVisible(page.$.fledgeToggle));
assertTrue(page.$.fledgeToggle.checked);
assertFalse(page.$.fledgeToggle.controlDisabled());
assertEquals(
loadTimeData.getString('fledgePageToggleSubLabel'),
page.$.fledgeToggle.subLabel);
assertTrue(isChildVisible(page, '#currentSitesDescription'));
assertFalse(isChildVisible(page, '#currentSitesDescriptionEmpty'));
assertFalse(isChildVisible(page, '#currentSitesDescriptionDisabled'));
page.$.fledgeToggle.click();
await flushTasks();
assertTrue(isVisible(page.$.fledgeToggle));
assertFalse(page.$.fledgeToggle.checked);
assertFalse(page.$.fledgeToggle.controlDisabled());
assertEquals(
loadTimeData.getString('fledgePageToggleSubLabel'),
page.$.fledgeToggle.subLabel);
assertFalse(!!page.getPref('privacy_sandbox.m1.fledge_enabled.value'));
assertTrue(isChildVisible(page, '#currentSitesDescription'));
assertFalse(isChildVisible(page, '#currentSitesDescriptionEmpty'));
assertTrue(isChildVisible(page, '#currentSitesDescriptionDisabled'));
assertEquals(
'Settings.PrivacySandbox.Fledge.Disabled',
await metricsBrowserProxy.whenCalled('recordAction'));
});
test('learnMoreDialog', async function() {
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', true);
await flushTasks();
assertLearnMoreDialogClosed();
const learnMoreButton =
page.shadowRoot!.querySelector<HTMLElement>('#learnMoreLink')!;
assertTrue(isVisible(learnMoreButton));
assertEquals(
loadTimeData.getString(
'fledgePageCurrentSitesDescriptionLearnMoreA11yLabel'),
learnMoreButton.getAttribute('aria-label'));
learnMoreButton.click();
await flushTasks();
assertLearnMoreDialogOpened();
assertEquals(
'Settings.PrivacySandbox.Fledge.LearnMoreClicked',
await metricsBrowserProxy.whenCalled('recordAction'));
const closeButton =
page.shadowRoot!.querySelector<HTMLElement>('#closeButton')!;
assertTrue(isVisible(closeButton));
closeButton.click();
await flushTasks();
assertLearnMoreDialogClosed();
await waitAfterNextRender(page);
assertEquals(learnMoreButton, page.shadowRoot!.activeElement);
});
test('blockedSitesDescriptionNotEmpty', async function() {
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', false);
const blockedSitesRow =
page.shadowRoot!.querySelector<HTMLElement>('#blockedSitesRow')!;
let blockedSitesDescription = page.shadowRoot!.querySelector<HTMLElement>(
'#blockedSitesDescription')!;
assertTrue(isVisible(blockedSitesRow));
assertFalse(isVisible(blockedSitesDescription));
blockedSitesRow.click();
await flushTasks();
assertEquals(
'Settings.PrivacySandbox.Fledge.BlockedSitesOpened',
await metricsBrowserProxy.whenCalled('recordAction'));
blockedSitesDescription = page.shadowRoot!.querySelector<HTMLElement>(
'#blockedSitesDescription')!;
assertTrue(isVisible(blockedSitesDescription));
assertEquals(
loadTimeData.getString('fledgePageBlockedSitesDescription'),
blockedSitesDescription.innerText);
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', true);
await flushTasks();
blockedSitesDescription = page.shadowRoot!.querySelector<HTMLElement>(
'#blockedSitesDescription')!;
assertTrue(isVisible(blockedSitesDescription));
assertEquals(
loadTimeData.getString('fledgePageBlockedSitesDescription'),
blockedSitesDescription.innerText);
});
test('blockAndAllowSites', async function() {
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', true);
await flushTasks();
// Check for current sites.
const currentSitesSection =
page.shadowRoot!.querySelector<HTMLElement>('#currentSitesSection')!;
const currentSites = currentSitesSection.querySelector('dom-repeat');
assertTrue(!!currentSites);
assertEquals(1, currentSites.items!.length);
assertFalse(isVisible(
currentSitesSection.querySelector('#currentSitesDescriptionEmpty')));
assertEquals('test-site-one.com', currentSites.items![0].site!);
assertFalse(isVisible(currentSitesSection.querySelector('#seeAllSites')));
// Check for blocked sites.
const blockedSitesRow =
page.shadowRoot!.querySelector<HTMLElement>('#blockedSitesRow');
blockedSitesRow!.click();
await flushTasks();
assertEquals(
'Settings.PrivacySandbox.Fledge.BlockedSitesOpened',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
const blockedSitesList =
page.shadowRoot!.querySelector('#blockedSitesList')!;
let blockedSites = blockedSitesList.querySelector('dom-repeat');
assertTrue(!!blockedSites);
const blockedSitesDescription = page.shadowRoot!.querySelector<HTMLElement>(
'#blockedSitesDescription')!;
assertTrue(isVisible(blockedSitesDescription));
assertEquals(
loadTimeData.getString('fledgePageBlockedSitesDescription'),
blockedSitesDescription.innerText);
assertEquals(1, blockedSites.items!.length);
assertEquals('test-site-two.com', blockedSites.items![0].site!);
// Block site.
const item =
currentSitesSection.querySelector('privacy-sandbox-interest-item')!;
const blockButton = item.shadowRoot!.querySelector('cr-button');
assertEquals(
page.i18n('fledgePageBlockSiteA11yLabel', 'test-site-one.com'),
blockButton!.getAttribute('aria-label'));
blockButton!.click();
await testPrivacySandboxBrowserProxy.whenCalled('setFledgeJoiningAllowed');
assertEquals(
'Settings.PrivacySandbox.Fledge.SiteRemoved',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
// Assert the site is no longer visible.
assertEquals(
0, currentSitesSection.querySelector('dom-repeat')!.items!.length);
assertTrue(isVisible(
currentSitesSection.querySelector('#currentSitesDescriptionEmpty')));
// Check that the focus is not lost after blocking the last item.
await waitAfterNextRender(page);
assertEquals(blockedSitesRow, page.shadowRoot!.activeElement);
// Assert the site was moved to blocked sites section.
blockedSites = blockedSitesList.querySelector('dom-repeat')!;
assertEquals(2, blockedSites.items!.length);
assertEquals('test-site-one.com', blockedSites.items![0].site!);
assertEquals('test-site-two.com', blockedSites.items![1].site!);
// Allow first blocked site.
let blockedItems =
blockedSitesList.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(2, blockedItems.length);
const allowButton = blockedItems[0]!.shadowRoot!.querySelector('cr-button');
assertEquals(
page.i18n('fledgePageAllowSiteA11yLabel', 'test-site-one.com'),
allowButton!.getAttribute('aria-label'));
allowButton!.click();
await testPrivacySandboxBrowserProxy.whenCalled('setFledgeJoiningAllowed');
assertEquals(
'Settings.PrivacySandbox.Fledge.SiteAdded',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
// Allow second blocked site.
blockedItems =
blockedSitesList.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(1, blockedItems.length);
assertEquals('test-site-two.com', blockedSites.items![0].site!);
blockedItems[0]!.shadowRoot!.querySelector('cr-button')!.click();
await testPrivacySandboxBrowserProxy.whenCalled('setFledgeJoiningAllowed');
assertEquals(
'Settings.PrivacySandbox.Fledge.SiteAdded',
await metricsBrowserProxy.whenCalled('recordAction'));
// Assert all blocked sites are gone.
assertEquals(
0, blockedSitesList.querySelector('dom-repeat')!.items!.length);
assertTrue(isVisible(blockedSitesDescription));
assertEquals(
loadTimeData.getString('fledgePageBlockedSitesDescriptionEmpty'),
blockedSitesDescription.innerText);
// Check that the focus is not lost after allowing the last item.
await waitAfterNextRender(page);
assertEquals(blockedSitesRow, page.shadowRoot!.activeElement);
});
test('fledgeManaged', async function() {
page.set('prefs.privacy_sandbox.m1.fledge_enabled', {
...page.get('prefs.privacy_sandbox.m1.fledge_enabled'),
value: false,
controlledBy: chrome.settingsPrivate.ControlledBy.USER_POLICY,
enforcement: chrome.settingsPrivate.Enforcement.ENFORCED,
});
await flushTasks();
assertFalse(page.$.fledgeToggle.checked);
assertTrue(page.$.fledgeToggle.controlDisabled());
assertFalse(isChildVisible(page, '#currentSitesSection'));
});
test('footerLinks', async function() {
assertTrue(isChildVisible(page, '#footer'));
const links =
page.shadowRoot!.querySelectorAll<HTMLAnchorElement>('#footer a[href]');
assertEquals(links.length, 2, 'footer should contains two links');
links.forEach(
link => assertEquals(
link.title, loadTimeData.getString('opensInNewTab'),
'the link should indicate that it will be opened in a new tab'));
const hrefs = Array.from<HTMLAnchorElement>(links).map(link => link.href);
const expectedLinks =
['chrome://settings/adPrivacy/interests', 'chrome://settings/cookies'];
assertDeepEquals(hrefs, expectedLinks);
});
});
suite('PrivacySandboxFledgeSubpageEmptyTests', function() {
let page: SettingsPrivacySandboxFledgeSubpageElement;
let testPrivacySandboxBrowserProxy: TestPrivacySandboxBrowserProxy;
let metricsBrowserProxy: TestMetricsBrowserProxy;
let settingsPrefs: SettingsPrefsElement;
suiteSetup(function() {
loadTimeData.overrideValues({
isPrivacySandboxRestricted: false,
});
settingsPrefs = document.createElement('settings-prefs');
return CrSettingsPrefs.initialized;
});
setup(async function() {
testPrivacySandboxBrowserProxy = new TestPrivacySandboxBrowserProxy();
testPrivacySandboxBrowserProxy.setFledgeState({
joiningSites: [],
blockedSites: [],
});
PrivacySandboxBrowserProxyImpl.setInstance(testPrivacySandboxBrowserProxy);
metricsBrowserProxy = new TestMetricsBrowserProxy();
MetricsBrowserProxyImpl.setInstance(metricsBrowserProxy);
document.body.innerHTML = window.trustedTypes!.emptyHTML;
document.body.appendChild(settingsPrefs);
page = document.createElement('settings-privacy-sandbox-fledge-subpage');
page.prefs = settingsPrefs.prefs!;
document.body.appendChild(page);
await testPrivacySandboxBrowserProxy.whenCalled('getFledgeState');
return flushTasks();
});
teardown(function() {
Router.getInstance().resetRouteForTesting();
});
test('fledgeDisabled', async function() {
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', false);
await flushTasks();
// Check the current sites descriptions.
assertTrue(isChildVisible(page, '#currentSitesDescription'));
assertFalse(isChildVisible(page, '#currentSitesDescriptionEmpty'));
assertTrue(isChildVisible(page, '#currentSitesDescriptionDisabled'));
});
test('fledgeEnabled', async function() {
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', true);
await flushTasks();
// Check the current sites descriptions.
assertTrue(isChildVisible(page, '#currentSitesDescription'));
assertTrue(isChildVisible(page, '#currentSitesDescriptionEmpty'));
assertFalse(isChildVisible(page, '#currentSitesDescriptionDisabled'));
assertFalse(isChildVisible(page, '#seeAllSites'));
// Check that there are no current sites.
const currentSites =
page.shadowRoot!.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(0, currentSites.length);
});
test('blockedSitesEmpty', async function() {
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', true);
await flushTasks();
const blockedSitesRow =
page.shadowRoot!.querySelector<HTMLElement>('#blockedSitesRow')!;
const blockedSitesDescription = page.shadowRoot!.querySelector<HTMLElement>(
'#blockedSitesDescription')!;
assertTrue(isVisible(blockedSitesRow));
assertFalse(isVisible(blockedSitesDescription));
blockedSitesRow.click();
await flushTasks();
assertEquals(
'Settings.PrivacySandbox.Fledge.BlockedSitesOpened',
await metricsBrowserProxy.whenCalled('recordAction'));
// Check the blocked sites description.
assertTrue(isVisible(blockedSitesDescription));
assertEquals(
loadTimeData.getString('fledgePageBlockedSitesDescriptionEmpty'),
blockedSitesDescription.innerText);
// Check that there are no blocked sites.
const blockedSitesList =
page.shadowRoot!.querySelector('#blockedSitesList')!;
const blockedSites =
blockedSitesList.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(0, blockedSites.length);
});
});
suite('PrivacySandboxFledgeSubpageSeeAllSitesTests', function() {
let page: SettingsPrivacySandboxFledgeSubpageElement;
let testPrivacySandboxBrowserProxy: TestPrivacySandboxBrowserProxy;
let settingsPrefs: SettingsPrefsElement;
let metricsBrowserProxy: TestMetricsBrowserProxy;
const sitesList: string[] = [];
const sitesCount: number =
SettingsPrivacySandboxFledgeSubpageElement.maxFledgeSites + 2;
suiteSetup(function() {
loadTimeData.overrideValues({
isPrivacySandboxRestricted: false,
});
settingsPrefs = document.createElement('settings-prefs');
return CrSettingsPrefs.initialized;
});
setup(async function() {
testPrivacySandboxBrowserProxy = new TestPrivacySandboxBrowserProxy();
// Setup long list of sites.
for (let i = 0; i < sitesCount; i++) {
sitesList.push(`site-${i}.com`);
}
testPrivacySandboxBrowserProxy.setFledgeState({
joiningSites: sitesList,
blockedSites: [],
});
PrivacySandboxBrowserProxyImpl.setInstance(testPrivacySandboxBrowserProxy);
metricsBrowserProxy = new TestMetricsBrowserProxy();
MetricsBrowserProxyImpl.setInstance(metricsBrowserProxy);
document.body.innerHTML = window.trustedTypes!.emptyHTML;
document.body.appendChild(settingsPrefs);
page = document.createElement('settings-privacy-sandbox-fledge-subpage');
page.prefs = settingsPrefs.prefs!;
document.body.appendChild(page);
await testPrivacySandboxBrowserProxy.whenCalled('getFledgeState');
return flushTasks();
});
teardown(function() {
Router.getInstance().resetRouteForTesting();
});
test('blockAndAllowSites', async function() {
page.setPrefValue('privacy_sandbox.m1.fledge_enabled', true);
await flushTasks();
// Check for current sites.
const currentSitesSection =
page.shadowRoot!.querySelector<HTMLElement>('#currentSitesSection')!;
const currentSites = currentSitesSection.querySelector('dom-repeat');
assertTrue(!!currentSites);
assertEquals(
SettingsPrivacySandboxFledgeSubpageElement.maxFledgeSites,
currentSites.items!.length);
assertFalse(isVisible(
currentSitesSection.querySelector('#currentSitesDescriptionEmpty')));
// Check for blocked sites.
page.shadowRoot!.querySelector<HTMLElement>('#blockedSitesRow')!.click();
await flushTasks();
assertEquals(
'Settings.PrivacySandbox.Fledge.BlockedSitesOpened',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
const blockedSitesList =
page.shadowRoot!.querySelector('#blockedSitesList')!;
const blockedSites = blockedSitesList.querySelector('dom-repeat');
assertTrue(!!blockedSites);
assertEquals(0, blockedSites!.items!.length);
const blockedSitesDescription = page.shadowRoot!.querySelector<HTMLElement>(
'#blockedSitesDescription')!;
assertTrue(isVisible(blockedSitesDescription));
assertEquals(
loadTimeData.getString('fledgePageBlockedSitesDescriptionEmpty'),
blockedSitesDescription.innerText);
// Check for "See all sites" button.
const seeAllSites =
currentSitesSection.querySelector<HTMLElement>('#seeAllSites');
assertTrue(isVisible(seeAllSites));
seeAllSites!.click();
await flushTasks();
assertEquals(
'Settings.PrivacySandbox.Fledge.AllSitesOpened',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
const allCurrentSites = currentSitesSection.querySelectorAll('dom-repeat');
assertTrue(!!currentSites);
assertEquals(2, allCurrentSites.length);
const mainSitesList = allCurrentSites[0];
const remainingSitesList = allCurrentSites[1];
assertEquals(
SettingsPrivacySandboxFledgeSubpageElement.maxFledgeSites,
mainSitesList!.items!.length);
assertEquals(2, remainingSitesList!.items!.length);
assertEquals(sitesList[0], mainSitesList!.items![0].site!);
assertEquals(
sitesList[sitesCount - 2], remainingSitesList!.items![0].site!);
// Block site from the main current sites section.
let items =
currentSitesSection!.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(sitesCount, items.length);
items[0]!.shadowRoot!.querySelector('cr-button')!.click();
await testPrivacySandboxBrowserProxy.whenCalled('setFledgeJoiningAllowed');
assertEquals(
'Settings.PrivacySandbox.Fledge.SiteRemoved',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
// Check that a site from "See all sites" section move to the main one.
assertEquals(
SettingsPrivacySandboxFledgeSubpageElement.maxFledgeSites,
mainSitesList!.items!.length);
assertEquals(1, remainingSitesList!.items!.length);
assertEquals(sitesList[1], mainSitesList!.items![0].site!);
assertEquals(sitesList[sitesCount - 2], mainSitesList!.items!.at(-1).site!);
assertEquals(
sitesList[sitesCount - 1], remainingSitesList!.items![0].site!);
items = mainSitesList!.querySelectorAll('privacy-sandbox-interest-item');
// Check that site was blocked.
assertEquals(1, blockedSites.items!.length);
assertEquals(sitesList[0], blockedSites.items![0].site!);
assertEquals(
loadTimeData.getString('fledgePageBlockedSitesDescription'),
blockedSitesDescription.innerText);
// Block site from the "See all sites" section.
items =
currentSitesSection!.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(sitesCount - 1, items.length);
items[SettingsPrivacySandboxFledgeSubpageElement.maxFledgeSites]!
.shadowRoot!.querySelector('cr-button')!.click();
await testPrivacySandboxBrowserProxy.whenCalled('setFledgeJoiningAllowed');
assertEquals(
'Settings.PrivacySandbox.Fledge.SiteRemoved',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
// Check that "See all sites" section was removed.
assertFalse(isChildVisible(page, '#seeAllSites'));
// Check that site was blocked.
assertEquals(2, blockedSites.items!.length);
assertEquals(sitesList[0], blockedSites.items![0].site!);
assertEquals(sitesList[sitesCount - 1], blockedSites.items![1].site!);
// Allow first blocked site.
let blockedItems =
blockedSitesList.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(2, blockedItems.length);
blockedItems[0]!.shadowRoot!.querySelector('cr-button')!.click();
await testPrivacySandboxBrowserProxy.whenCalled('setFledgeJoiningAllowed');
assertEquals(
'Settings.PrivacySandbox.Fledge.SiteAdded',
await metricsBrowserProxy.whenCalled('recordAction'));
metricsBrowserProxy.resetResolver('recordAction');
// Allow second blocked site.
blockedItems =
blockedSitesList.querySelectorAll('privacy-sandbox-interest-item');
assertEquals(1, blockedItems.length);
assertEquals(sitesList[sitesCount - 1], blockedSites.items![0].site!);
blockedItems[0]!.shadowRoot!.querySelector('cr-button')!.click();
await testPrivacySandboxBrowserProxy.whenCalled('setFledgeJoiningAllowed');
assertEquals(
'Settings.PrivacySandbox.Fledge.SiteAdded',
await metricsBrowserProxy.whenCalled('recordAction'));
// Assert all blocked sites are gone.
assertEquals(
0, blockedSitesList.querySelector('dom-repeat')!.items!.length);
assertTrue(isVisible(blockedSitesDescription));
assertEquals(
loadTimeData.getString('fledgePageBlockedSitesDescriptionEmpty'),
blockedSitesDescription.innerText);
});
});
suite('PrivacySandboxAdMeasurementSubpageTests', function() {
let page: SettingsPrivacySandboxAdMeasurementSubpageElement;
let settingsPrefs: SettingsPrefsElement;
let metricsBrowserProxy: TestMetricsBrowserProxy;
suiteSetup(function() {
loadTimeData.overrideValues({
isPrivacySandboxRestricted: false,
});
settingsPrefs = document.createElement('settings-prefs');
return CrSettingsPrefs.initialized;
});
setup(function() {
metricsBrowserProxy = new TestMetricsBrowserProxy();
MetricsBrowserProxyImpl.setInstance(metricsBrowserProxy);
document.body.innerHTML = window.trustedTypes!.emptyHTML;
document.body.appendChild(settingsPrefs);
page = document.createElement(
'settings-privacy-sandbox-ad-measurement-subpage');
page.prefs = settingsPrefs.prefs!;
document.body.appendChild(page);
return flushTasks();
});
teardown(function() {
Router.getInstance().resetRouteForTesting();
});
test('enableAdMeasurementToggle', async function() {
page.setPrefValue('privacy_sandbox.m1.ad_measurement_enabled', false);
await flushTasks();
assertTrue(isVisible(page.$.adMeasurementToggle));
assertFalse(page.$.adMeasurementToggle.checked);
assertFalse(page.$.adMeasurementToggle.controlDisabled());
assertEquals(
loadTimeData.getString('adMeasurementPageToggleSubLabel'),
page.$.adMeasurementToggle.subLabel);
page.$.adMeasurementToggle.click();
await flushTasks();
assertTrue(isVisible(page.$.adMeasurementToggle));
assertTrue(page.$.adMeasurementToggle.checked);
assertFalse(page.$.adMeasurementToggle.controlDisabled());
assertEquals(
loadTimeData.getString('adMeasurementPageToggleSubLabel'),
page.$.adMeasurementToggle.subLabel);
assertTrue(
!!page.getPref('privacy_sandbox.m1.ad_measurement_enabled.value'));
assertEquals(
'Settings.PrivacySandbox.AdMeasurement.Enabled',
await metricsBrowserProxy.whenCalled('recordAction'));
});
test('disableAdMeasurementToggle', async function() {
page.setPrefValue('privacy_sandbox.m1.ad_measurement_enabled', true);
await flushTasks();
assertTrue(isVisible(page.$.adMeasurementToggle));
assertTrue(page.$.adMeasurementToggle.checked);
assertFalse(page.$.adMeasurementToggle.controlDisabled());
assertEquals(
loadTimeData.getString('adMeasurementPageToggleSubLabel'),
page.$.adMeasurementToggle.subLabel);
page.$.adMeasurementToggle.click();
await flushTasks();
assertTrue(isVisible(page.$.adMeasurementToggle));
assertFalse(page.$.adMeasurementToggle.checked);
assertFalse(page.$.adMeasurementToggle.controlDisabled());
assertEquals(
loadTimeData.getString('adMeasurementPageToggleSubLabel'),
page.$.adMeasurementToggle.subLabel);
assertFalse(
!!page.getPref('privacy_sandbox.m1.ad_measurement_enabled.value'));
assertEquals(
'Settings.PrivacySandbox.AdMeasurement.Disabled',
await metricsBrowserProxy.whenCalled('recordAction'));
});
test('adMeasurementManaged', async function() {
page.set('prefs.privacy_sandbox.m1.ad_measurement_enabled', {
...page.get('prefs.privacy_sandbox.m1.ad_measurement_enabled'),
value: false,
controlledBy: chrome.settingsPrivate.ControlledBy.USER_POLICY,
enforcement: chrome.settingsPrivate.Enforcement.ENFORCED,
});
await flushTasks();
assertFalse(page.$.adMeasurementToggle.checked);
assertTrue(page.$.adMeasurementToggle.controlDisabled());
});
});