Index: chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc |
diff --git a/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc |
index 3c31fccf733cf60ed4d0e8b06112999b837e375c..468666b8e54028fd70b02695647a065be01bfdb3 100644 |
--- a/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc |
+++ b/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc |
@@ -8,7 +8,6 @@ |
#include <iterator> |
#include <map> |
#include <set> |
-#include <vector> |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
@@ -57,8 +56,7 @@ bool IsBlacklisted(const std::string& language_code) { |
namespace chromeos { |
namespace options { |
-const char kVendorOtherLanguagesListDivider[] = |
- "VENDOR_OTHER_LANGUAGES_LIST_DIVIDER"; |
+const char kMostRelevantLanguagesDivider[] = "MOST_RELEVANT_LANGUAGES_DIVIDER"; |
CrosLanguageOptionsHandler::CrosLanguageOptionsHandler() |
: composition_extension_appended_(false), |
@@ -195,6 +193,7 @@ base::ListValue* CrosLanguageOptionsHandler::GetInputMethodList( |
base::ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal( |
const input_method::InputMethodDescriptors& descriptors, |
const std::vector<std::string>& base_language_codes, |
+ const std::vector<std::string>& most_relevant_language_codes, |
const bool insert_divider) { |
const std::string app_locale = g_browser_process->GetApplicationLocale(); |
@@ -208,16 +207,10 @@ base::ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal( |
language_codes.insert(languages[i]); |
} |
- const StartupCustomizationDocument* startup_manifest = |
- StartupCustomizationDocument::GetInstance(); |
- |
- const std::vector<std::string>& configured_locales = |
- startup_manifest->configured_locales(); |
- |
// Languages sort order. |
std::map<std::string, int /* index */> language_index; |
- for (size_t i = 0; i < configured_locales.size(); ++i) { |
- language_index[configured_locales[i]] = i; |
+ for (size_t i = 0; i < most_relevant_language_codes.size(); ++i) { |
+ language_index[most_relevant_language_codes[i]] = i; |
} |
// Map of display name -> {language code, native_display_name}. |
@@ -228,14 +221,14 @@ base::ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal( |
typedef std::map<base::string16, LanguagePair> LanguageMap; |
LanguageMap language_map; |
- // The auxiliary vector mentioned above. (except vendor locales) |
+ // The auxiliary vector mentioned above. (except the most relevant locales) |
std::vector<base::string16> display_names; |
- // Separate vector of vendor locales. |
- std::vector<base::string16> configured_locales_display_names( |
- configured_locales.size()); |
+ // Separate vector of the most relevant locales. |
+ std::vector<base::string16> most_relevant_locales_display_names( |
+ most_relevant_language_codes.size()); |
- size_t configured_locales_count = 0; |
+ size_t most_relevant_locales_count = 0; |
// Build the list of display names, and build the language map. |
@@ -281,8 +274,8 @@ base::ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal( |
language_map[display_name] = |
std::make_pair(language_id, native_display_name); |
- configured_locales_display_names[language_idx] = display_name; |
- ++configured_locales_count; |
+ most_relevant_locales_display_names[language_idx] = display_name; |
+ ++most_relevant_locales_count; |
} |
// Translate language codes, generated from input methods. |
@@ -308,16 +301,16 @@ base::ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal( |
language_index.find(*iter); |
if (index_pos != language_index.end()) { |
base::string16& stored_display_name = |
- configured_locales_display_names[index_pos->second]; |
+ most_relevant_locales_display_names[index_pos->second]; |
if (stored_display_name.empty()) { |
stored_display_name = display_name; |
- ++configured_locales_count; |
+ ++most_relevant_locales_count; |
} |
} else { |
display_names.push_back(display_name); |
} |
} |
- DCHECK_EQ(display_names.size() + configured_locales_count, |
+ DCHECK_EQ(display_names.size() + most_relevant_locales_count, |
language_map.size()); |
// Build the list of display names, and build the language map. |
@@ -343,8 +336,8 @@ base::ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal( |
const std::map<std::string, int>::const_iterator index_pos = |
language_index.find(base_language_codes[i]); |
if (index_pos != language_index.end()) { |
- configured_locales_display_names[index_pos->second] = display_name; |
- ++configured_locales_count; |
+ most_relevant_locales_display_names[index_pos->second] = display_name; |
+ ++most_relevant_locales_count; |
} else { |
display_names.push_back(display_name); |
} |
@@ -352,19 +345,18 @@ base::ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal( |
// Sort display names using locale specific sorter. |
l10n_util::SortStrings16(app_locale, &display_names); |
- // Concatenate configured_locales_display_names and display_names. |
+ // Concatenate most_relevant_locales_display_names and display_names. |
// Insert special divider in between. |
std::vector<base::string16> out_display_names; |
- for (size_t i = 0; i < configured_locales_display_names.size(); ++i) { |
- if (configured_locales_display_names[i].size() == 0) |
+ for (size_t i = 0; i < most_relevant_locales_display_names.size(); ++i) { |
+ if (most_relevant_locales_display_names[i].size() == 0) |
continue; |
- out_display_names.push_back(configured_locales_display_names[i]); |
+ out_display_names.push_back(most_relevant_locales_display_names[i]); |
} |
base::string16 divider16; |
if (insert_divider) { |
- divider16 = base::ASCIIToUTF16( |
- insert_divider ? "" : kVendorOtherLanguagesListDivider); |
+ divider16 = base::ASCIIToUTF16(kMostRelevantLanguagesDivider); |
out_display_names.push_back(divider16); |
} |
@@ -380,7 +372,7 @@ base::ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal( |
if (insert_divider && display_name == divider16) { |
// Insert divider. |
base::DictionaryValue* dictionary = new base::DictionaryValue(); |
- dictionary->SetString("code", kVendorOtherLanguagesListDivider); |
+ dictionary->SetString("code", kMostRelevantLanguagesDivider); |
language_list->Append(dictionary); |
continue; |
} |
@@ -409,15 +401,25 @@ base::ListValue* CrosLanguageOptionsHandler::GetAcceptLanguageList( |
const std::string app_locale = g_browser_process->GetApplicationLocale(); |
std::vector<std::string> accept_language_codes; |
l10n_util::GetAcceptLanguagesForLocale(app_locale, &accept_language_codes); |
- return GetLanguageListInternal(descriptors, accept_language_codes, false); |
+ return GetLanguageListInternal( |
+ descriptors, |
+ accept_language_codes, |
+ StartupCustomizationDocument::GetInstance()->configured_locales(), |
+ false); |
} |
// static |
base::ListValue* CrosLanguageOptionsHandler::GetUILanguageList( |
- const input_method::InputMethodDescriptors& descriptors) { |
+ const input_method::InputMethodDescriptors& descriptors, |
+ const std::vector<std::string>* most_relevant_language_codes) { |
// Collect the language codes from the available locales. |
return GetLanguageListInternal( |
- descriptors, l10n_util::GetAvailableLocales(), true); |
+ descriptors, |
+ l10n_util::GetAvailableLocales(), |
+ most_relevant_language_codes |
+ ? *most_relevant_language_codes |
+ : StartupCustomizationDocument::GetInstance()->configured_locales(), |
+ true); |
} |
base::ListValue* |