| Index: chrome/browser/chromeos/dom_ui/language_options_handler.cc
|
| diff --git a/chrome/browser/chromeos/dom_ui/language_options_handler.cc b/chrome/browser/chromeos/dom_ui/language_options_handler.cc
|
| index 6ce3f846c5e0f5b428a215e92bc9130635cd35de..c859f8293a5877ca9f4d54984543f6b4ccb62a65 100644
|
| --- a/chrome/browser/chromeos/dom_ui/language_options_handler.cc
|
| +++ b/chrome/browser/chromeos/dom_ui/language_options_handler.cc
|
| @@ -56,11 +56,15 @@ void LanguageOptionsHandler::GetLocalizedValues(
|
| localized_strings->SetString(L"restart_required",
|
| l10n_util::GetString(IDS_OPTIONS_RESTART_REQUIRED));
|
|
|
| + // GetSupportedInputMethods() never return NULL.
|
| + scoped_ptr<InputMethodDescriptors> descriptors(
|
| + CrosLibrary::Get()->GetInputMethodLibrary()->GetSupportedInputMethods());
|
| +
|
| // The followigns are resources, rather than local strings.
|
| localized_strings->SetString(L"currentUiLanguageCode",
|
| UTF8ToWide(g_browser_process->GetApplicationLocale()));
|
| - localized_strings->Set(L"inputMethodList", GetInputMethodList());
|
| - localized_strings->Set(L"languageList", GetLanguageList());
|
| + localized_strings->Set(L"inputMethodList", GetInputMethodList(*descriptors));
|
| + localized_strings->Set(L"languageList", GetLanguageList(*descriptors));
|
| }
|
|
|
| void LanguageOptionsHandler::RegisterMessages() {
|
| @@ -70,14 +74,12 @@ void LanguageOptionsHandler::RegisterMessages() {
|
| &LanguageOptionsHandler::UiLanguageChangeCallback));
|
| }
|
|
|
| -ListValue* LanguageOptionsHandler::GetInputMethodList() {
|
| +ListValue* LanguageOptionsHandler::GetInputMethodList(
|
| + const InputMethodDescriptors& descriptors) {
|
| ListValue* input_method_list = new ListValue();
|
|
|
| - // GetSupportedLanguages() never return NULL.
|
| - scoped_ptr<InputMethodDescriptors> descriptors(
|
| - CrosLibrary::Get()->GetInputMethodLibrary()->GetSupportedInputMethods());
|
| - for (size_t i = 0; i < descriptors->size(); ++i) {
|
| - const InputMethodDescriptor& descriptor = descriptors->at(i);
|
| + for (size_t i = 0; i < descriptors.size(); ++i) {
|
| + const InputMethodDescriptor& descriptor = descriptors[i];
|
| const std::string language_code =
|
| input_method::GetLanguageCodeFromDescriptor(descriptor);
|
| const std::string display_name =
|
| @@ -93,7 +95,23 @@ ListValue* LanguageOptionsHandler::GetInputMethodList() {
|
| return input_method_list;
|
| }
|
|
|
| -ListValue* LanguageOptionsHandler::GetLanguageList() {
|
| +ListValue* LanguageOptionsHandler::GetLanguageList(
|
| + const InputMethodDescriptors& descriptors) {
|
| + std::vector<std::string> language_codes;
|
| + // Collect the language codes from the supported input methods.
|
| + for (size_t i = 0; i < descriptors.size(); ++i) {
|
| + const InputMethodDescriptor& descriptor = descriptors[i];
|
| + const std::string language_code =
|
| + input_method::GetLanguageCodeFromDescriptor(descriptor);
|
| + language_codes.push_back(language_code);
|
| + }
|
| + // Collect the language codes from kExtraLanguages.
|
| + for (size_t i = 0; i < arraysize(input_method::kExtraLanguages); ++i) {
|
| + const char* language_code =
|
| + input_method::kExtraLanguages[i].language_code;
|
| + language_codes.push_back(language_code);
|
| + }
|
| +
|
| // Map of display name -> {language code, native_display_name}.
|
| // In theory, we should be able to create a map that is sorted by
|
| // display names using ICU comparator, but doing it is hard, thus we'll
|
| @@ -105,16 +123,15 @@ ListValue* LanguageOptionsHandler::GetLanguageList() {
|
| std::vector<std::wstring> display_names;
|
|
|
| // Build the list of display names, and build the language map.
|
| - const std::vector<std::string>& locales = l10n_util::GetAvailableLocales();
|
| - for (size_t i = 0; i < locales.size(); ++i) {
|
| + for (size_t i = 0; i < language_codes.size(); ++i) {
|
| const std::wstring display_name =
|
| - input_method::GetLanguageDisplayNameFromCode(locales[i]);
|
| + input_method::GetLanguageDisplayNameFromCode(language_codes[i]);
|
| const std::wstring native_display_name =
|
| input_method::GetLanguageNativeDisplayNameFromCode(
|
| - locales[i]);
|
| + language_codes[i]);
|
| display_names.push_back(display_name);
|
| language_map[display_name] =
|
| - std::make_pair(locales[i], native_display_name);
|
| + std::make_pair(language_codes[i], native_display_name);
|
| }
|
| DCHECK_EQ(display_names.size(), language_map.size());
|
|
|
|
|