blob: 231df8422d36308d5581c2252076b7cb5de68cf3 [file] [log] [blame]
// Copyright 2019 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://os-settings/chromeos/lazy_load.js';
import {PdfOcrUserSelection, SettingsTextToSpeechSubpageElement} from 'chrome://os-settings/chromeos/lazy_load.js';
import {CrSettingsPrefs, Router, routes, SettingsPrefsElement, SettingsToggleButtonElement} from 'chrome://os-settings/chromeos/os_settings.js';
import {assert} from 'chrome://resources/js/assert_ts.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
import {fakeMetricsPrivate} from 'chrome://webui-test/metrics_test_support.js';
import {waitAfterNextRender, waitBeforeNextRender} from 'chrome://webui-test/polymer_test_util.js';
import {eventToPromise, isVisible} from 'chrome://webui-test/test_util.js';
suite('<settings-text-to-speech-subpage>', function() {
let page: SettingsTextToSpeechSubpageElement;
let prefElement: SettingsPrefsElement;
async function initPage() {
prefElement = document.createElement('settings-prefs');
document.body.appendChild(prefElement);
await CrSettingsPrefs.initialized;
page = document.createElement('settings-text-to-speech-subpage');
page.prefs = prefElement.prefs;
document.body.appendChild(page);
flush();
}
setup(function() {
Router.getInstance().navigateTo(routes.A11Y_TEXT_TO_SPEECH);
});
teardown(function() {
page.remove();
prefElement.remove();
Router.getInstance().resetRouteForTesting();
});
[{selector: '#ttsSubpageButton', route: routes.MANAGE_TTS_SETTINGS},
].forEach(({selector, route}) => {
test(
`should focus ${selector} button when returning from ${
route.path} subpage`,
async () => {
await initPage();
const router = Router.getInstance();
const subpageButton =
page.shadowRoot!.querySelector<HTMLElement>(selector);
assert(subpageButton);
subpageButton.click();
assertEquals(route, router.currentRoute);
assertNotEquals(
subpageButton, page.shadowRoot!.activeElement,
`${selector} should not be focused`);
const popStateEventPromise = eventToPromise('popstate', window);
router.navigateToPreviousRoute();
await popStateEventPromise;
await waitBeforeNextRender(page);
assertEquals(routes.A11Y_TEXT_TO_SPEECH, router.currentRoute);
assertEquals(
subpageButton, page.shadowRoot!.activeElement,
`${selector} should be focused`);
});
});
test('only allowed subpages are available in kiosk mode', async function() {
loadTimeData.overrideValues({
isKioskModeActive: true,
showTabletModeShelfNavigationButtonsSettings: true,
});
await initPage();
const allowed_subpages = [
'chromeVoxSubpageButton',
'selectToSpeakSubpageButton',
'ttsSubpageButton',
];
const subpages = page.root!.querySelectorAll('cr-link-row');
subpages.forEach(function(subpage) {
if (isVisible(subpage)) {
assertTrue(allowed_subpages.includes(subpage.id));
}
});
});
test(
'pdf ocr pref enabled when both pdf ocr and screen reader enabled',
async function() {
// `features::kPdfOcr` is enabled in os_settings_v3_browsertest.js
assertTrue(loadTimeData.getBoolean('pdfOcrEnabled'));
await initPage();
// Simulate enabling the ChromeVox.
page.hasScreenReader = true;
const pdfOcrToggle =
page.shadowRoot!.querySelector<SettingsToggleButtonElement>(
'#crosPdfOcrToggle');
assert(pdfOcrToggle);
assertTrue(isVisible(pdfOcrToggle));
assertFalse(pdfOcrToggle.checked);
assertFalse(page.prefs.settings.a11y.pdf_ocr_always_active.value);
pdfOcrToggle.click();
await waitAfterNextRender(pdfOcrToggle);
assertTrue(pdfOcrToggle.checked);
assertTrue(page.prefs.settings.a11y.pdf_ocr_always_active.value);
});
test('pdf ocr toggle on invokes uma metric', async function() {
// `features::kPdfOcr` is enabled in os_settings_v3_browsertest.js
assertTrue(loadTimeData.getBoolean('pdfOcrEnabled'));
const metrics = fakeMetricsPrivate();
await initPage();
// Simulate enabling the ChromeVox.
page.hasScreenReader = true;
const pdfOcrToggle =
page.shadowRoot!.querySelector<SettingsToggleButtonElement>(
'#crosPdfOcrToggle');
assert(pdfOcrToggle);
// Turn on PDF OCR always.
pdfOcrToggle.click();
await waitAfterNextRender(pdfOcrToggle);
assertTrue(pdfOcrToggle.checked);
assertEquals(
1,
metrics.count(
'Accessibility.PdfOcr.UserSelection',
PdfOcrUserSelection.TURN_ON_ALWAYS_FROM_SETTINGS));
});
test('pdf ocr toggle off invokes uma metric', async function() {
// `features::kPdfOcr` is enabled in os_settings_v3_browsertest.js
assertTrue(loadTimeData.getBoolean('pdfOcrEnabled'));
const metrics = fakeMetricsPrivate();
await initPage();
// Simulate enabling the ChromeVox.
page.hasScreenReader = true;
const pdfOcrToggle =
page.shadowRoot!.querySelector<SettingsToggleButtonElement>(
'#crosPdfOcrToggle');
assert(pdfOcrToggle);
// Turn on PDF OCR always.
pdfOcrToggle.click();
await waitAfterNextRender(pdfOcrToggle);
assertTrue(pdfOcrToggle.checked);
// Turn off PDF OCR.
pdfOcrToggle.click();
await waitAfterNextRender(pdfOcrToggle);
assertFalse(pdfOcrToggle.checked);
assertEquals(
1,
metrics.count(
'Accessibility.PdfOcr.UserSelection',
PdfOcrUserSelection.TURN_OFF_FROM_SETTINGS));
});
});