Commit dbc6d91a authored by John Lee's avatar John Lee Committed by Commit Bot

Settings WebUI: Disable spellcheck when all languages are turned off,

and enable spellcheck for all languages when spellcheck is turned on

Bug: 848536
Change-Id: I99f814b559fb591f85eda6012cca94d4a1c81635
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1559232
Commit-Queue: John Lee <johntlee@chromium.org>
Reviewed-by: default avatarEsmael El-Moslimany <aee@chromium.org>
Cr-Commit-Position: refs/heads/master@{#649312}
parent a8fb785b
...@@ -277,7 +277,8 @@ ...@@ -277,7 +277,8 @@
<settings-toggle-button <settings-toggle-button
id="enableSpellcheckingToggle" id="enableSpellcheckingToggle"
label="$i18n{spellCheckTitle}" label="$i18n{spellCheckTitle}"
pref="{{prefs.browser.enable_spellchecking}}"> pref="{{prefs.browser.enable_spellchecking}}"
on-change="onEnableSpellCheckingChange_">
</settings-toggle-button> </settings-toggle-button>
<if expr="_google_chrome or not is_macosx"> <if expr="_google_chrome or not is_macosx">
<iron-collapse id="spellCheckCollapse" <iron-collapse id="spellCheckCollapse"
...@@ -334,7 +335,7 @@ ...@@ -334,7 +335,7 @@
$i18n{retry} $i18n{retry}
</paper-button> </paper-button>
<template is="dom-if" if="[[!item.isManaged]]"> <template is="dom-if" if="[[!item.isManaged]]">
<cr-toggle on-change="onSpellCheckChange_" <cr-toggle on-change="onSpellCheckLanguageChange_"
disabled="[[!item.language.supportsSpellcheck]]" disabled="[[!item.language.supportsSpellcheck]]"
checked="[[item.spellCheckEnabled]]" checked="[[item.spellCheckEnabled]]"
aria-label$="[[item.language.displayName]]" aria-label$="[[item.language.displayName]]"
......
...@@ -569,11 +569,24 @@ Polymer({ ...@@ -569,11 +569,24 @@ Polymer({
settings.navigateTo(settings.routes.EDIT_DICTIONARY); settings.navigateTo(settings.routes.EDIT_DICTIONARY);
}, },
/** @private */
onEnableSpellCheckingChange_: function() {
// <if expr="not is_macosx">
if (this.getPref('browser.enable_spellchecking').value) {
this.spellCheckLanguages_.forEach(item => {
if (!item.isManaged && item.language.supportsSpellcheck) {
this.languageHelper.toggleSpellCheck(item.language.code, true);
}
});
}
// </if>
},
/** /**
* Handler for enabling or disabling spell check. * Handler for enabling or disabling spell check for a specific language.
* @param {!{target: Element, model: !{item: !LanguageState}}} e * @param {!{target: Element, model: !{item: !LanguageState}}} e
*/ */
onSpellCheckChange_: function(e) { onSpellCheckLanguageChange_: function(e) {
const item = e.model.item; const item = e.model.item;
if (!item.language.supportsSpellcheck) { if (!item.language.supportsSpellcheck) {
return; return;
...@@ -581,6 +594,18 @@ Polymer({ ...@@ -581,6 +594,18 @@ Polymer({
this.languageHelper.toggleSpellCheck( this.languageHelper.toggleSpellCheck(
item.language.code, !item.spellCheckEnabled); item.language.code, !item.spellCheckEnabled);
// <if expr="not is_macosx">
// When the user toggles off spellcheck for all languages, disable
// spellcheck entirely to signal to the user that no spellcheck will occur.
const allSpellcheckLanguagesDisabled =
this.spellCheckLanguages_.every(item => !item.spellCheckEnabled);
if (allSpellcheckLanguagesDisabled &&
this.getPref('browser.enable_spellchecking').enforcement !==
chrome.settingsPrivate.Enforcement.ENFORCED) {
this.setPrefValue('browser.enable_spellchecking', false);
}
// </if>
}, },
/** /**
...@@ -601,7 +626,7 @@ Polymer({ ...@@ -601,7 +626,7 @@ Polymer({
*/ */
onSpellCheckNameClick_: function(e) { onSpellCheckNameClick_: function(e) {
assert(!this.isSpellCheckNameClickDisabled_(e.model.item)); assert(!this.isSpellCheckNameClickDisabled_(e.model.item));
this.onSpellCheckChange_(e); this.onSpellCheckLanguageChange_(e);
}, },
/** /**
......
...@@ -694,6 +694,40 @@ cr.define('languages_page_tests', function() { ...@@ -694,6 +694,40 @@ cr.define('languages_page_tests', function() {
Polymer.dom.flush(); Polymer.dom.flush();
assertFalse(moreInfo.hidden); assertFalse(moreInfo.hidden);
}); });
test('disabling all languages disables spellcheck', () => {
if (cr.isMac) {
return;
}
languageHelper.setPrefValue('browser.enable_spellchecking', true);
const spellCheckToggles =
languagesPage.$.spellCheckCollapse.querySelectorAll(
'.list-item cr-toggle');
spellCheckToggles.forEach((language) => {
language.click();
});
assertFalse(
languageHelper.getPref('browser.enable_spellchecking').value);
});
test('enabling spellcheck should enable all spellcheck', () => {
if (cr.isMac) {
return;
}
languagesPage.setPrefValue('browser.enable_spellchecking', false);
languagesPage.setPrefValue('spellcheck.dictionaries', []);
languagesPage.$.enableSpellcheckingToggle.click();
// Assert that the enabled languages are all the languages that have
// spell check enabled in FakeLanguageSettingsPrivate.
const enabledLanguages =
languageHelper.getPref('spellcheck.dictionaries').value;
assertEquals(enabledLanguages.length, 2);
assertEquals(enabledLanguages[0], 'en-US');
assertEquals(enabledLanguages[1], 'sw');
});
}); });
suite(TestNames.SpellcheckOfficialBuild, function() { suite(TestNames.SpellcheckOfficialBuild, function() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment