Commit 570a7457 authored by Alexandre Frechette's avatar Alexandre Frechette Committed by Commit Bot

[Accept Languages List] Check all criteria when updating whether a language can

be translated or not.

Bug: 872096
Change-Id: I9cd2df787c46f6b95f3918adaf8023a030c0b480
Reviewed-on: https://chromium-review.googlesource.com/c/1313416
Commit-Queue: Alexandre Frechette <frechette@chromium.org>
Reviewed-by: default avatarMichael Giuffrida <michaelpg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605744}
parent a9e4ec1a
......@@ -392,17 +392,12 @@ Polymer({
/** @type {!Array<string>} */ (translateBlockedPref.value));
for (let i = 0; i < this.languages.enabled.length; i++) {
if (this.languages.enabled[i].language.code ==
this.languages.prospectiveUILanguage) {
continue;
}
// This conversion primarily strips away the region part.
// For example "fr-CA" --> "fr".
const translateCode = this.convertLanguageCodeForTranslate(
this.languages.enabled[i].language.code);
const language = this.languages.enabled[i].language;
const translateEnabled = this.isTranslateEnabled_(
language.code, !!language.supportsTranslate, translateBlockedSet,
this.languages.translateTarget, this.languages.prospectiveUILanguage);
this.set(
'languages.enabled.' + i + '.translateEnabled',
!translateBlockedSet.has(translateCode));
'languages.enabled.' + i + '.translateEnabled', translateEnabled);
}
},
......@@ -542,13 +537,9 @@ Polymer({
const languageState = /** @type {LanguageState} */ ({});
languageState.language = language;
languageState.spellCheckEnabled = !!spellCheckSet.has(code);
// Translate is considered disabled if this language maps to any translate
// language that is blocked.
const translateCode = this.convertLanguageCodeForTranslate(code);
languageState.translateEnabled = !!language.supportsTranslate &&
!translateBlockedSet.has(translateCode) &&
translateCode != translateTarget &&
(!prospectiveUILanguage || code != prospectiveUILanguage);
languageState.translateEnabled = this.isTranslateEnabled_(
code, !!language.supportsTranslate, translateBlockedSet,
translateTarget, prospectiveUILanguage);
languageState.isManaged = !!spellCheckForcedSet.has(code);
languageState.downloadDictionaryFailureCount = 0;
enabledLanguageStates.push(languageState);
......@@ -556,6 +547,29 @@ Polymer({
return enabledLanguageStates;
},
/**
* True iff we translate pages that are in the given language.
* @param {string} code Language code.
* @param {boolean} supportsTranslate If translation supports the given
* language.
* @param {!Set<string>} translateBlockedSet Set of languages for which
* translation is blocked.
* @param {string} translateTarget Language code of the default translate
* target language.
* @param {(string|undefined)} prospectiveUILanguage Prospective UI display
* language. Only defined on Windows and Chrome OS.
* @return {boolean}
* @private
*/
isTranslateEnabled_: function(
code, supportsTranslate, translateBlockedSet, translateTarget,
prospectiveUILanguage) {
const translateCode = this.convertLanguageCodeForTranslate(code);
return supportsTranslate && !translateBlockedSet.has(translateCode) &&
translateCode != translateTarget &&
(!prospectiveUILanguage || code != prospectiveUILanguage);
},
// <if expr="not is_macosx">
/**
* Updates the dictionary download status for languages in
......
......@@ -330,6 +330,19 @@ cr.define('languages_page_tests', function() {
}, settings.kMenuCloseDelay + 1);
});
test('toggle translate for target language', function() {
// Open options for 'en'.
const languageOptionsDropdownTrigger =
languagesCollapse.querySelectorAll('button')[0];
assertTrue(!!languageOptionsDropdownTrigger);
languageOptionsDropdownTrigger.click();
assertTrue(actionMenu.open);
// 'en' does not support.
const translateOption = getMenuItem('offerToTranslateInThisLanguage');
assertTrue(translateOption.disabled);
});
test('disable translate hides language-specific option', function() {
// Disables translate.
languageHelper.setPrefValue('translate.enabled', false);
......
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