summaryrefslogtreecommitdiffstats
path: root/chrome/browser/resources/options/chromeos_language_list.js
diff options
context:
space:
mode:
authorsatorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-16 10:27:58 +0000
committersatorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-16 10:27:58 +0000
commitac480ee572c8cc26c31fbce55d7b959f57abc9b6 (patch)
tree43430627cac6c24779a12b3caf15cc2a76de49d7 /chrome/browser/resources/options/chromeos_language_list.js
parentad234bccc903216a8b5b9f6d223f58dde93d3a59 (diff)
downloadchromium_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.js28
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;