diff options
author | satorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-16 10:27:58 +0000 |
---|---|---|
committer | satorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-16 10:27:58 +0000 |
commit | ac480ee572c8cc26c31fbce55d7b959f57abc9b6 (patch) | |
tree | 43430627cac6c24779a12b3caf15cc2a76de49d7 /chrome/browser/resources/options/chromeos_language_list.js | |
parent | ad234bccc903216a8b5b9f6d223f58dde93d3a59 (diff) | |
download | chromium_src-ac480ee572c8cc26c31fbce55d7b959f57abc9b6.zip chromium_src-ac480ee572c8cc26c31fbce55d7b959f57abc9b6.tar.gz chromium_src-ac480ee572c8cc26c31fbce55d7b959f57abc9b6.tar.bz2 |
Add logic to remove duplicates.
Duplicates shouldn't be created if the code is correct, but
to be defensive, add logic to remove these.
BUG=none
TEST=manually
Review URL: http://codereview.chromium.org/3135019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56196 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/resources/options/chromeos_language_list.js')
-rw-r--r-- | chrome/browser/resources/options/chromeos_language_list.js | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/chrome/browser/resources/options/chromeos_language_list.js b/chrome/browser/resources/options/chromeos_language_list.js index 9debe98..3e649e9 100644 --- a/chrome/browser/resources/options/chromeos_language_list.js +++ b/chrome/browser/resources/options/chromeos_language_list.js @@ -54,6 +54,19 @@ cr.define('options.language', function() { return this.languageCodeToNativeDisplayName_[languageCode]; } + /** + * Returns true if the given language code is valid. + * @param {string} languageCode Language code (ex. "fr"). + */ + LanguageList.isValidLanguageCode = function(languageCode) { + // Having the display name for the language code means that the + // language code is valid. + if (LanguageList.getDisplayNameFromLanguageCode(languageCode)) { + return true; + } + return false; + } + LanguageList.prototype = { __proto__: List.prototype, @@ -100,6 +113,10 @@ cr.define('options.language', function() { * @param {string} languageCode language code (ex. "fr"). */ addLanguage: function(languageCode) { + // It shouldn't happen but ignore the language code if it's present. + if (this.dataModel.indexOf(languageCode) >= 0) { + return; + } this.dataModel.push(languageCode); // Select the last item, which is the language added. this.selectionModel.selectedIndex = this.dataModel.length - 1; @@ -254,17 +271,20 @@ cr.define('options.language', function() { /** * Filters bad language codes in case bad language codes are - * stored in the preference. + * stored in the preference. Removes duplicates as well. * @param {Array} languageCodes List of language codes. * @private */ filterBadLanguageCodes_: function(languageCodes) { var filteredLanguageCodes = []; + var seen = {}; for (var i = 0; i < languageCodes.length; i++) { - // Check if the translation for the language code is - // present. Otherwise, skip it. - if (LanguageList.getDisplayNameFromLanguageCode(languageCodes[i])) { + // Check if the the language code is valid, and not + // duplicate. Otherwise, skip it. + if (LanguageList.isValidLanguageCode(languageCodes[i]) && + !(languageCodes[i] in seen)) { filteredLanguageCodes.push(languageCodes[i]); + seen[languageCodes[i]] = true; } } return filteredLanguageCodes; |