Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Side by Side Diff: chrome/browser/dom_ui/options/language_options_handler.cc

Issue 6296017: dom-ui settings: enable languages & spell checker settings for all platforms.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: code review tweak Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // TODO(csilv): This is for the move CL. Changes to make this cross-platform
6 // will come in the followup CL.
7 #if defined(OS_CHROMEOS)
8
9 #include "chrome/browser/dom_ui/options/language_options_handler.h" 5 #include "chrome/browser/dom_ui/options/language_options_handler.h"
10 6
11 #include <map> 7 #include <map>
12 #include <set> 8 #include <set>
13 #include <string> 9 #include <string>
14 #include <utility> 10 #include <utility>
15 #include <vector> 11 #include <vector>
16 12
17 #include "app/l10n_util.h" 13 #include "app/l10n_util.h"
18 #include "base/basictypes.h" 14 #include "base/basictypes.h"
15 #include "base/command_line.h"
19 #include "base/utf_string_conversions.h" 16 #include "base/utf_string_conversions.h"
20 #include "base/values.h" 17 #include "base/values.h"
21 #include "chrome/app/chrome_command_ids.h" 18 #include "chrome/app/chrome_command_ids.h"
19 #include "chrome/browser/browser_list.h"
22 #include "chrome/browser/browser_process.h" 20 #include "chrome/browser/browser_process.h"
23 #include "chrome/browser/chromeos/cros/cros_library.h"
24 #include "chrome/browser/chromeos/cros/input_method_library.h"
25 #include "chrome/browser/chromeos/input_method/input_method_util.h"
26 #include "chrome/browser/metrics/user_metrics.h" 21 #include "chrome/browser/metrics/user_metrics.h"
22 #include "chrome/browser/prefs/pref_service.h"
27 #include "chrome/browser/profiles/profile.h" 23 #include "chrome/browser/profiles/profile.h"
28 #include "chrome/browser/tab_contents/tab_contents.h" 24 #include "chrome/browser/tab_contents/tab_contents.h"
29 #include "chrome/browser/ui/browser.h" 25 #include "chrome/browser/ui/browser.h"
26 #include "chrome/common/chrome_switches.h"
30 #include "chrome/common/pref_names.h" 27 #include "chrome/common/pref_names.h"
31 #include "chrome/common/spellcheck_common.h" 28 #include "chrome/common/spellcheck_common.h"
32 #include "grit/chromium_strings.h" 29 #include "grit/chromium_strings.h"
33 #include "grit/generated_resources.h" 30 #include "grit/generated_resources.h"
34 31
35 namespace chromeos { 32 #if defined(OS_CHROMEOS)
33 #include "chrome/browser/chromeos/cros/cros_library.h"
34 #include "chrome/browser/chromeos/cros/input_method_library.h"
35 #endif // defined(OS_CHROMEOS)
36 36
37 LanguageOptionsHandler::LanguageOptionsHandler() { 37 LanguageOptionsHandler::LanguageOptionsHandler() {
38 } 38 }
39 39
40 LanguageOptionsHandler::~LanguageOptionsHandler() { 40 LanguageOptionsHandler::~LanguageOptionsHandler() {
41 } 41 }
42 42
43 void LanguageOptionsHandler::GetLocalizedValues( 43 void LanguageOptionsHandler::GetLocalizedValues(
44 DictionaryValue* localized_strings) { 44 DictionaryValue* localized_strings) {
45 DCHECK(localized_strings); 45 DCHECK(localized_strings);
46 string16 product_name;
47 #if defined(OS_CHROMEOS)
48 product_name = l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME);
49 #else
50 product_name = l10n_util::GetStringUTF16(IDS_PRODUCT_NAME);
51 #endif // defined(OS_CHROMEOS)
46 localized_strings->SetString("languagePage", 52 localized_strings->SetString("languagePage",
47 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_DIALOG_TITLE)); 53 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_DIALOG_TITLE));
48 localized_strings->SetString("add_button", 54 localized_strings->SetString("add_button",
49 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_ADD_BUTTON)); 55 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_ADD_BUTTON));
50 localized_strings->SetString("configure",
51 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_CONFIGURE));
52 localized_strings->SetString("input_method",
53 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_INPUT_METHOD));
54 localized_strings->SetString("languages", 56 localized_strings->SetString("languages",
55 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_LANGUAGES)); 57 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_LANGUAGES));
56 localized_strings->SetString("please_add_another_input_method",
57 l10n_util::GetStringUTF16(
58 IDS_OPTIONS_SETTINGS_LANGUAGES_PLEASE_ADD_ANOTHER_INPUT_METHOD));
59 localized_strings->SetString("please_add_another_language", 58 localized_strings->SetString("please_add_another_language",
60 l10n_util::GetStringUTF16( 59 l10n_util::GetStringUTF16(
61 IDS_OPTIONS_SETTINGS_LANGUAGES_PLEASE_ADD_ANOTHER_LANGUAGE)); 60 IDS_OPTIONS_SETTINGS_LANGUAGES_PLEASE_ADD_ANOTHER_LANGUAGE));
62 localized_strings->SetString("ok_button", l10n_util::GetStringUTF16(IDS_OK));
63 localized_strings->SetString("remove_button", 61 localized_strings->SetString("remove_button",
64 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_REMOVE_BUTTON)); 62 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_REMOVE_BUTTON));
65 localized_strings->SetString("sign_out_button",
66 l10n_util::GetStringUTF16(
67 IDS_OPTIONS_SETTINGS_LANGUAGES_SIGN_OUT_BUTTON));
68 localized_strings->SetString("add_language_instructions", 63 localized_strings->SetString("add_language_instructions",
69 l10n_util::GetStringUTF16( 64 l10n_util::GetStringUTF16(
70 IDS_OPTIONS_SETTINGS_LANGUAGES_ADD_LANGUAGE_INSTRUCTIONS)); 65 IDS_OPTIONS_SETTINGS_LANGUAGES_ADD_LANGUAGE_INSTRUCTIONS));
71 localized_strings->SetString("input_method_instructions",
72 l10n_util::GetStringUTF16(
73 IDS_OPTIONS_SETTINGS_LANGUAGES_INPUT_METHOD_INSTRUCTIONS));
74 localized_strings->SetString("switch_input_methods_hint",
75 l10n_util::GetStringFUTF16(
76 IDS_OPTIONS_SETTINGS_LANGUAGES_SWITCH_INPUT_METHODS_HINT,
77 ASCIIToUTF16("alt+shift")));
78 localized_strings->SetString("select_previous_input_method_hint",
79 l10n_util::GetStringFUTF16(
80 IDS_OPTIONS_SETTINGS_LANGUAGES_SELECT_PREVIOUS_INPUT_METHOD_HINT,
81 ASCIIToUTF16("ctrl+space")));
82 localized_strings->SetString("cannot_be_displayed_in_this_language", 66 localized_strings->SetString("cannot_be_displayed_in_this_language",
83 l10n_util::GetStringFUTF16( 67 l10n_util::GetStringFUTF16(
84 IDS_OPTIONS_SETTINGS_LANGUAGES_CANNOT_BE_DISPLAYED_IN_THIS_LANGUAGE, 68 IDS_OPTIONS_SETTINGS_LANGUAGES_CANNOT_BE_DISPLAYED_IN_THIS_LANGUAGE,
85 l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME))); 69 product_name));
86 localized_strings->SetString("is_displayed_in_this_language", 70 localized_strings->SetString("is_displayed_in_this_language",
87 l10n_util::GetStringFUTF16( 71 l10n_util::GetStringFUTF16(
88 IDS_OPTIONS_SETTINGS_LANGUAGES_IS_DISPLAYED_IN_THIS_LANGUAGE, 72 IDS_OPTIONS_SETTINGS_LANGUAGES_IS_DISPLAYED_IN_THIS_LANGUAGE,
89 l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME))); 73 product_name));
90 localized_strings->SetString("display_in_this_language", 74 localized_strings->SetString("display_in_this_language",
91 l10n_util::GetStringFUTF16( 75 l10n_util::GetStringFUTF16(
92 IDS_OPTIONS_SETTINGS_LANGUAGES_DISPLAY_IN_THIS_LANGUAGE, 76 IDS_OPTIONS_SETTINGS_LANGUAGES_DISPLAY_IN_THIS_LANGUAGE,
93 l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME))); 77 product_name));
94 localized_strings->SetString("sign_out_required",
95 l10n_util::GetStringUTF16(IDS_OPTIONS_RESTART_REQUIRED));
96 localized_strings->SetString("this_language_is_currently_in_use", 78 localized_strings->SetString("this_language_is_currently_in_use",
97 l10n_util::GetStringFUTF16( 79 l10n_util::GetStringFUTF16(
98 IDS_OPTIONS_SETTINGS_LANGUAGES_THIS_LANGUAGE_IS_CURRENTLY_IN_USE, 80 IDS_OPTIONS_SETTINGS_LANGUAGES_THIS_LANGUAGE_IS_CURRENTLY_IN_USE,
99 l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME))); 81 product_name));
100 localized_strings->SetString("use_this_for_spell_checking", 82 localized_strings->SetString("use_this_for_spell_checking",
101 l10n_util::GetStringUTF16( 83 l10n_util::GetStringUTF16(
102 IDS_OPTIONS_SETTINGS_USE_THIS_FOR_SPELL_CHECKING)); 84 IDS_OPTIONS_SETTINGS_USE_THIS_FOR_SPELL_CHECKING));
103 localized_strings->SetString("cannot_be_used_for_spell_checking", 85 localized_strings->SetString("cannot_be_used_for_spell_checking",
104 l10n_util::GetStringUTF16( 86 l10n_util::GetStringUTF16(
105 IDS_OPTIONS_SETTINGS_CANNOT_BE_USED_FOR_SPELL_CHECKING)); 87 IDS_OPTIONS_SETTINGS_CANNOT_BE_USED_FOR_SPELL_CHECKING));
106 localized_strings->SetString("is_used_for_spell_checking", 88 localized_strings->SetString("is_used_for_spell_checking",
107 l10n_util::GetStringUTF16( 89 l10n_util::GetStringUTF16(
108 IDS_OPTIONS_SETTINGS_IS_USED_FOR_SPELL_CHECKING)); 90 IDS_OPTIONS_SETTINGS_IS_USED_FOR_SPELL_CHECKING));
91 localized_strings->SetString("restart_required",
92 l10n_util::GetStringUTF16(IDS_OPTIONS_RESTART_REQUIRED));
93 localized_strings->SetString("enable_spell_check",
94 l10n_util::GetStringUTF16(IDS_OPTIONS_ENABLE_SPELLCHECK));
95 localized_strings->SetString("enable_auto_spell_correction",
96 l10n_util::GetStringUTF16(IDS_OPTIONS_ENABLE_AUTO_SPELL_CORRECTION));
97 localized_strings->SetString("add_language_title",
98 l10n_util::GetStringUTF16(IDS_OPTIONS_LANGUAGES_ADD_TITLE));
99 localized_strings->SetString("add_language_select_label",
100 l10n_util::GetStringUTF16(IDS_OPTIONS_LANGUAGES_ADD_SELECT_LABEL));
109 101
110 // GetSupportedInputMethods() never return NULL. 102 #if defined(OS_CHROMEOS)
111 scoped_ptr<InputMethodDescriptors> descriptors( 103 localized_strings->SetString("ok_button", l10n_util::GetStringUTF16(IDS_OK));
112 CrosLibrary::Get()->GetInputMethodLibrary()->GetSupportedInputMethods()); 104 localized_strings->SetString("configure",
105 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_CONFIGURE));
106 localized_strings->SetString("input_method",
107 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_INPUT_METHOD));
108 localized_strings->SetString("please_add_another_input_method",
109 l10n_util::GetStringUTF16(
110 IDS_OPTIONS_SETTINGS_LANGUAGES_PLEASE_ADD_ANOTHER_INPUT_METHOD));
111 localized_strings->SetString("input_method_instructions",
112 l10n_util::GetStringUTF16(
113 IDS_OPTIONS_SETTINGS_LANGUAGES_INPUT_METHOD_INSTRUCTIONS));
114 localized_strings->SetString("switch_input_methods_hint",
115 l10n_util::GetStringFUTF16(
116 IDS_OPTIONS_SETTINGS_LANGUAGES_SWITCH_INPUT_METHODS_HINT,
117 ASCIIToUTF16("alt+shift")));
118 localized_strings->SetString("select_previous_input_method_hint",
119 l10n_util::GetStringFUTF16(
120 IDS_OPTIONS_SETTINGS_LANGUAGES_SELECT_PREVIOUS_INPUT_METHOD_HINT,
121 ASCIIToUTF16("ctrl+space")));
122 localized_strings->SetString("restart_button",
123 l10n_util::GetStringUTF16(
124 IDS_OPTIONS_SETTINGS_LANGUAGES_SIGN_OUT_BUTTON));
125 #else
126 localized_strings->SetString("restart_button",
127 l10n_util::GetStringUTF16(
128 IDS_OPTIONS_SETTINGS_LANGUAGES_RESTART_BUTTON));
129 #endif // defined(OS_CHROMEOS)
113 130
114 // The followigns are resources, rather than local strings. 131 // The followigns are resources, rather than local strings.
115 localized_strings->SetString("currentUiLanguageCode", 132 localized_strings->SetString("currentUiLanguageCode",
116 g_browser_process->GetApplicationLocale()); 133 g_browser_process->GetApplicationLocale());
117 localized_strings->Set("inputMethodList", GetInputMethodList(*descriptors));
118 localized_strings->Set("languageList", GetLanguageList(*descriptors));
119 localized_strings->Set("spellCheckLanguageCodeSet", 134 localized_strings->Set("spellCheckLanguageCodeSet",
120 GetSpellCheckLanguageCodeSet()); 135 GetSpellCheckLanguageCodeSet());
121 localized_strings->Set("uiLanguageCodeSet", GetUiLanguageCodeSet()); 136 localized_strings->Set("uiLanguageCodeSet", GetUILanguageCodeSet());
137
138 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
139 bool experimental_spell_check_features =
140 command_line.HasSwitch(switches::kExperimentalSpellcheckerFeatures);
141 localized_strings->SetString("experimentalSpellCheckFeatures",
142 experimental_spell_check_features ? "true" : "false");
143
144 #if defined(OS_CHROMEOS)
145 // GetSupportedInputMethods() never return NULL.
146 chromeos::InputMethodLibrary *im_library =
147 chromeos::CrosLibrary::Get()->GetInputMethodLibrary();
148 scoped_ptr<chromeos::InputMethodDescriptors> descriptors(
149 im_library->GetSupportedInputMethods());
150 localized_strings->Set("languageList", GetLanguageList(*descriptors));
151 localized_strings->Set("inputMethodList", GetInputMethodList(*descriptors));
152 #else
153 localized_strings->Set("languageList", GetLanguageList());
154 #endif // defined(OS_CHROMEOS)
122 } 155 }
123 156
124 void LanguageOptionsHandler::RegisterMessages() { 157 void LanguageOptionsHandler::RegisterMessages() {
125 DCHECK(dom_ui_); 158 DCHECK(dom_ui_);
159 #if defined(OS_CHROMEOS)
126 dom_ui_->RegisterMessageCallback("inputMethodDisable", 160 dom_ui_->RegisterMessageCallback("inputMethodDisable",
127 NewCallback(this, &LanguageOptionsHandler::InputMethodDisableCallback)); 161 NewCallback(this, &LanguageOptionsHandler::InputMethodDisableCallback));
128 dom_ui_->RegisterMessageCallback("inputMethodEnable", 162 dom_ui_->RegisterMessageCallback("inputMethodEnable",
129 NewCallback(this, &LanguageOptionsHandler::InputMethodEnableCallback)); 163 NewCallback(this, &LanguageOptionsHandler::InputMethodEnableCallback));
130 dom_ui_->RegisterMessageCallback("inputMethodOptionsOpen", 164 dom_ui_->RegisterMessageCallback("inputMethodOptionsOpen",
131 NewCallback(this, 165 NewCallback(this,
132 &LanguageOptionsHandler::InputMethodOptionsOpenCallback)); 166 &LanguageOptionsHandler::InputMethodOptionsOpenCallback));
167 #endif // defined(OS_CHROMEOS)
133 dom_ui_->RegisterMessageCallback("languageOptionsOpen", 168 dom_ui_->RegisterMessageCallback("languageOptionsOpen",
134 NewCallback(this, &LanguageOptionsHandler::LanguageOptionsOpenCallback)); 169 NewCallback(this, &LanguageOptionsHandler::LanguageOptionsOpenCallback));
135 dom_ui_->RegisterMessageCallback("spellCheckLanguageChange", 170 dom_ui_->RegisterMessageCallback("spellCheckLanguageChange",
136 NewCallback(this, 171 NewCallback(this,
137 &LanguageOptionsHandler::SpellCheckLanguageChangeCallback)); 172 &LanguageOptionsHandler::SpellCheckLanguageChangeCallback));
138 dom_ui_->RegisterMessageCallback("uiLanguageChange", 173 dom_ui_->RegisterMessageCallback("uiLanguageChange",
139 NewCallback(this, &LanguageOptionsHandler::UiLanguageChangeCallback)); 174 NewCallback(this, &LanguageOptionsHandler::UiLanguageChangeCallback));
140 dom_ui_->RegisterMessageCallback("uiLanguageSignOut", 175 dom_ui_->RegisterMessageCallback("uiLanguageRestart",
141 NewCallback(this, &LanguageOptionsHandler::SignOutCallback)); 176 NewCallback(this, &LanguageOptionsHandler::RestartCallback));
142 } 177 }
143 178
179 #if defined(OS_CHROMEOS)
144 ListValue* LanguageOptionsHandler::GetInputMethodList( 180 ListValue* LanguageOptionsHandler::GetInputMethodList(
145 const InputMethodDescriptors& descriptors) { 181 const chromeos::InputMethodDescriptors& descriptors) {
146 ListValue* input_method_list = new ListValue(); 182 ListValue* input_method_list = new ListValue();
147 183
148 for (size_t i = 0; i < descriptors.size(); ++i) { 184 for (size_t i = 0; i < descriptors.size(); ++i) {
149 const InputMethodDescriptor& descriptor = descriptors[i]; 185 const chromeos::InputMethodDescriptor& descriptor = descriptors[i];
150 const std::string language_code = 186 const std::string language_code =
151 input_method::GetLanguageCodeFromDescriptor(descriptor); 187 chromeos::input_method::GetLanguageCodeFromDescriptor(descriptor);
152 const std::string display_name = 188 const std::string display_name =
153 input_method::GetInputMethodDisplayNameFromId(descriptor.id); 189 chromeos::input_method::GetInputMethodDisplayNameFromId(descriptor.id);
154 190
155 DictionaryValue* dictionary = new DictionaryValue(); 191 DictionaryValue* dictionary = new DictionaryValue();
156 dictionary->SetString("id", descriptor.id); 192 dictionary->SetString("id", descriptor.id);
157 dictionary->SetString("displayName", display_name); 193 dictionary->SetString("displayName", display_name);
158 194
159 // One input method can be associated with multiple languages, hence 195 // One input method can be associated with multiple languages, hence
160 // we use a dictionary here. 196 // we use a dictionary here.
161 DictionaryValue* language_codes = new DictionaryValue(); 197 DictionaryValue* language_codes = new DictionaryValue();
162 language_codes->SetBoolean(language_code, true); 198 language_codes->SetBoolean(language_code, true);
163 // Check kExtraLanguages to see if there are languages associated with 199 // Check kExtraLanguages to see if there are languages associated with
164 // this input method. If these are present, add these. 200 // this input method. If these are present, add these.
165 for (size_t j = 0; j < arraysize(input_method::kExtraLanguages); ++j) { 201 for (size_t j = 0; j < arraysize(chromeos::input_method::kExtraLanguages);
202 ++j) {
166 const std::string extra_input_method_id = 203 const std::string extra_input_method_id =
167 input_method::kExtraLanguages[j].input_method_id; 204 chromeos::input_method::kExtraLanguages[j].input_method_id;
168 const std::string extra_language_code = 205 const std::string extra_language_code =
169 input_method::kExtraLanguages[j].language_code; 206 chromeos::input_method::kExtraLanguages[j].language_code;
170 if (extra_input_method_id == descriptor.id) { 207 if (extra_input_method_id == descriptor.id) {
171 language_codes->SetBoolean(extra_language_code, true); 208 language_codes->SetBoolean(extra_language_code, true);
172 } 209 }
173 } 210 }
174 dictionary->Set("languageCodeSet", language_codes); 211 dictionary->Set("languageCodeSet", language_codes);
175 212
176 input_method_list->Append(dictionary); 213 input_method_list->Append(dictionary);
177 } 214 }
178 215
179 return input_method_list; 216 return input_method_list;
180 } 217 }
181 218
182 ListValue* LanguageOptionsHandler::GetLanguageList( 219 ListValue* LanguageOptionsHandler::GetLanguageList(
183 const InputMethodDescriptors& descriptors) { 220 const chromeos::InputMethodDescriptors& descriptors) {
184 std::set<std::string> language_codes; 221 std::set<std::string> language_codes;
185 // Collect the language codes from the supported input methods. 222 // Collect the language codes from the supported input methods.
186 for (size_t i = 0; i < descriptors.size(); ++i) { 223 for (size_t i = 0; i < descriptors.size(); ++i) {
187 const InputMethodDescriptor& descriptor = descriptors[i]; 224 const chromeos::InputMethodDescriptor& descriptor = descriptors[i];
188 const std::string language_code = 225 const std::string language_code =
189 input_method::GetLanguageCodeFromDescriptor(descriptor); 226 chromeos::input_method::GetLanguageCodeFromDescriptor(descriptor);
190 language_codes.insert(language_code); 227 language_codes.insert(language_code);
191 } 228 }
192 // Collect the language codes from kExtraLanguages. 229 // Collect the language codes from kExtraLanguages.
193 for (size_t i = 0; i < arraysize(input_method::kExtraLanguages); ++i) { 230 for (size_t i = 0; i < arraysize(chromeos::input_method::kExtraLanguages);
231 ++i) {
194 const char* language_code = 232 const char* language_code =
195 input_method::kExtraLanguages[i].language_code; 233 chromeos::input_method::kExtraLanguages[i].language_code;
196 language_codes.insert(language_code); 234 language_codes.insert(language_code);
197 } 235 }
198 236
199 // Map of display name -> {language code, native_display_name}. 237 // Map of display name -> {language code, native_display_name}.
200 // In theory, we should be able to create a map that is sorted by 238 // In theory, we should be able to create a map that is sorted by
201 // display names using ICU comparator, but doing it is hard, thus we'll 239 // display names using ICU comparator, but doing it is hard, thus we'll
202 // use an auxiliary vector to achieve the same result. 240 // use an auxiliary vector to achieve the same result.
203 typedef std::pair<std::string, string16> LanguagePair; 241 typedef std::pair<std::string, string16> LanguagePair;
204 typedef std::map<string16, LanguagePair> LanguageMap; 242 typedef std::map<string16, LanguagePair> LanguageMap;
205 LanguageMap language_map; 243 LanguageMap language_map;
206 // The auxiliary vector mentioned above. 244 // The auxiliary vector mentioned above.
207 std::vector<string16> display_names; 245 std::vector<string16> display_names;
208 246
209 // Build the list of display names, and build the language map. 247 // Build the list of display names, and build the language map.
210 for (std::set<std::string>::const_iterator iter = language_codes.begin(); 248 for (std::set<std::string>::const_iterator iter = language_codes.begin();
211 iter != language_codes.end(); ++iter) { 249 iter != language_codes.end(); ++iter) {
212 const string16 display_name = 250 const string16 display_name =
213 input_method::GetLanguageDisplayNameFromCode(*iter); 251 chromeos::input_method::GetLanguageDisplayNameFromCode(*iter);
214 const string16 native_display_name = 252 const string16 native_display_name =
215 input_method::GetLanguageNativeDisplayNameFromCode(*iter); 253 chromeos::input_method::GetLanguageNativeDisplayNameFromCode(*iter);
216 display_names.push_back(display_name); 254 display_names.push_back(display_name);
217 language_map[display_name] = 255 language_map[display_name] =
218 std::make_pair(*iter, native_display_name); 256 std::make_pair(*iter, native_display_name);
219 } 257 }
220 DCHECK_EQ(display_names.size(), language_map.size()); 258 DCHECK_EQ(display_names.size(), language_map.size());
221 259
222 // Sort display names using locale specific sorter. 260 // Sort display names using locale specific sorter.
223 l10n_util::SortStrings16(g_browser_process->GetApplicationLocale(), 261 l10n_util::SortStrings16(g_browser_process->GetApplicationLocale(),
224 &display_names); 262 &display_names);
225 263
226 // Build the language list from the language map. 264 // Build the language list from the language map.
227 ListValue* language_list = new ListValue(); 265 ListValue* language_list = new ListValue();
228 for (size_t i = 0; i < display_names.size(); ++i) { 266 for (size_t i = 0; i < display_names.size(); ++i) {
229 const LanguagePair& pair = language_map[display_names[i]]; 267 const LanguagePair& pair = language_map[display_names[i]];
230 DictionaryValue* dictionary = new DictionaryValue(); 268 DictionaryValue* dictionary = new DictionaryValue();
231 dictionary->SetString("code", pair.first); 269 dictionary->SetString("code", pair.first);
232 dictionary->SetString("displayName", display_names[i]); 270 dictionary->SetString("displayName", display_names[i]);
233 dictionary->SetString("nativeDisplayName", pair.second); 271 dictionary->SetString("nativeDisplayName", pair.second);
234 language_list->Append(dictionary); 272 language_list->Append(dictionary);
235 } 273 }
236 274
237 return language_list; 275 return language_list;
238 } 276 }
277 #endif // defined(OS_CHROMEOS)
239 278
240 DictionaryValue* LanguageOptionsHandler::GetUiLanguageCodeSet() { 279 #if !defined(OS_CHROMEOS)
280 ListValue* LanguageOptionsHandler::GetLanguageList() {
281 // Collect the language codes from the supported accept-languages.
282 const std::string app_locale = g_browser_process->GetApplicationLocale();
283 std::vector<std::string> language_codes;
284 l10n_util::GetAcceptLanguagesForLocale(app_locale, &language_codes);
285
286 // Map of display name -> {language code, native_display_name}.
287 // In theory, we should be able to create a map that is sorted by
288 // display names using ICU comparator, but doing it is hard, thus we'll
289 // use an auxiliary vector to achieve the same result.
290 typedef std::pair<std::string, string16> LanguagePair;
291 typedef std::map<string16, LanguagePair> LanguageMap;
292 LanguageMap language_map;
293 // The auxiliary vector mentioned above.
294 std::vector<string16> display_names;
295
296 // Build the list of display names, and build the language map.
297 for (size_t i = 0; i < language_codes.size(); ++i) {
298 const string16 display_name =
299 l10n_util::GetDisplayNameForLocale(language_codes[i], app_locale, true);
300 const string16 native_display_name =
301 l10n_util::GetDisplayNameForLocale(language_codes[i], language_codes[i],
302 true);
303 display_names.push_back(display_name);
304 language_map[display_name] =
305 std::make_pair(language_codes[i], native_display_name);
306 }
307 DCHECK_EQ(display_names.size(), language_map.size());
308
309 // Sort display names using locale specific sorter.
310 l10n_util::SortStrings16(app_locale, &display_names);
311
312 // Build the language list from the language map.
313 ListValue* language_list = new ListValue();
314 for (size_t i = 0; i < display_names.size(); ++i) {
315 const LanguagePair& pair = language_map[display_names[i]];
316 DictionaryValue* dictionary = new DictionaryValue();
317 dictionary->SetString("code", pair.first);
318 dictionary->SetString("displayName", display_names[i]);
319 dictionary->SetString("nativeDisplayName", pair.second);
320 language_list->Append(dictionary);
321 }
322
323 return language_list;
324 }
325 #endif // !defined(OS_CHROMEOS)
326
327 DictionaryValue* LanguageOptionsHandler::GetUILanguageCodeSet() {
241 DictionaryValue* dictionary = new DictionaryValue(); 328 DictionaryValue* dictionary = new DictionaryValue();
242 const std::vector<std::string>& available_locales = 329 const std::vector<std::string>& available_locales =
243 l10n_util::GetAvailableLocales(); 330 l10n_util::GetAvailableLocales();
244 for (size_t i = 0; i < available_locales.size(); ++i) { 331 for (size_t i = 0; i < available_locales.size(); ++i) {
245 dictionary->SetBoolean(available_locales[i], true); 332 dictionary->SetBoolean(available_locales[i], true);
246 } 333 }
247 return dictionary; 334 return dictionary;
248 } 335 }
249 336
250 DictionaryValue* LanguageOptionsHandler::GetSpellCheckLanguageCodeSet() { 337 DictionaryValue* LanguageOptionsHandler::GetSpellCheckLanguageCodeSet() {
251 DictionaryValue* dictionary = new DictionaryValue(); 338 DictionaryValue* dictionary = new DictionaryValue();
252 std::vector<std::string> spell_check_languages; 339 std::vector<std::string> spell_check_languages;
253 SpellCheckCommon::SpellCheckLanguages(&spell_check_languages); 340 SpellCheckCommon::SpellCheckLanguages(&spell_check_languages);
254 for (size_t i = 0; i < spell_check_languages.size(); ++i) { 341 for (size_t i = 0; i < spell_check_languages.size(); ++i) {
255 dictionary->SetBoolean(spell_check_languages[i], true); 342 dictionary->SetBoolean(spell_check_languages[i], true);
256 } 343 }
257 return dictionary; 344 return dictionary;
258 } 345 }
259 346
347 #if defined(OS_CHROMEOS)
260 void LanguageOptionsHandler::InputMethodDisableCallback( 348 void LanguageOptionsHandler::InputMethodDisableCallback(
261 const ListValue* args) { 349 const ListValue* args) {
262 const std::string input_method_id = WideToASCII(ExtractStringValue(args)); 350 const std::string input_method_id = WideToASCII(ExtractStringValue(args));
263 const std::string action = StringPrintf( 351 const std::string action = StringPrintf(
264 "LanguageOptions_DisableInputMethod_%s", input_method_id.c_str()); 352 "LanguageOptions_DisableInputMethod_%s", input_method_id.c_str());
265 UserMetrics::RecordComputedAction(action); 353 UserMetrics::RecordComputedAction(action);
266 } 354 }
267 355
268 void LanguageOptionsHandler::InputMethodEnableCallback( 356 void LanguageOptionsHandler::InputMethodEnableCallback(
269 const ListValue* args) { 357 const ListValue* args) {
270 const std::string input_method_id = WideToASCII(ExtractStringValue(args)); 358 const std::string input_method_id = WideToASCII(ExtractStringValue(args));
271 const std::string action = StringPrintf( 359 const std::string action = StringPrintf(
272 "LanguageOptions_EnableInputMethod_%s", input_method_id.c_str()); 360 "LanguageOptions_EnableInputMethod_%s", input_method_id.c_str());
273 UserMetrics::RecordComputedAction(action); 361 UserMetrics::RecordComputedAction(action);
274 } 362 }
275 363
276 void LanguageOptionsHandler::InputMethodOptionsOpenCallback( 364 void LanguageOptionsHandler::InputMethodOptionsOpenCallback(
277 const ListValue* args) { 365 const ListValue* args) {
278 const std::string input_method_id = WideToASCII(ExtractStringValue(args)); 366 const std::string input_method_id = WideToASCII(ExtractStringValue(args));
279 const std::string action = StringPrintf( 367 const std::string action = StringPrintf(
280 "InputMethodOptions_Open_%s", input_method_id.c_str()); 368 "InputMethodOptions_Open_%s", input_method_id.c_str());
281 UserMetrics::RecordComputedAction(action); 369 UserMetrics::RecordComputedAction(action);
282 } 370 }
371 #endif // defined(OS_CHROMEOS)
283 372
284 void LanguageOptionsHandler::LanguageOptionsOpenCallback( 373 void LanguageOptionsHandler::LanguageOptionsOpenCallback(
285 const ListValue* args) { 374 const ListValue* args) {
286 UserMetrics::RecordAction(UserMetricsAction("LanguageOptions_Open")); 375 UserMetrics::RecordAction(UserMetricsAction("LanguageOptions_Open"));
287 } 376 }
288 377
289 void LanguageOptionsHandler::UiLanguageChangeCallback( 378 void LanguageOptionsHandler::UiLanguageChangeCallback(
290 const ListValue* args) { 379 const ListValue* args) {
291 const std::string language_code = WideToASCII(ExtractStringValue(args)); 380 const std::string language_code = WideToASCII(ExtractStringValue(args));
292 CHECK(!language_code.empty()); 381 CHECK(!language_code.empty());
293 const std::string action = StringPrintf( 382 const std::string action = StringPrintf(
294 "LanguageOptions_UiLanguageChange_%s", language_code.c_str()); 383 "LanguageOptions_UiLanguageChange_%s", language_code.c_str());
295 UserMetrics::RecordComputedAction(action); 384 UserMetrics::RecordComputedAction(action);
385 #if defined(OS_CHROMEOS)
296 dom_ui_->GetProfile()->ChangeApplicationLocale(language_code, false); 386 dom_ui_->GetProfile()->ChangeApplicationLocale(language_code, false);
387 #else
388 PrefService* prefs = dom_ui_->GetProfile()->GetPrefs();
389 prefs->SetString(prefs::kApplicationLocale, language_code);
390 #endif // defined(OS_CHROMEOS)
297 dom_ui_->CallJavascriptFunction( 391 dom_ui_->CallJavascriptFunction(
298 L"options.LanguageOptions.uiLanguageSaved"); 392 L"options.LanguageOptions.uiLanguageSaved");
299 } 393 }
300 394
301 void LanguageOptionsHandler::SpellCheckLanguageChangeCallback( 395 void LanguageOptionsHandler::SpellCheckLanguageChangeCallback(
302 const ListValue* args) { 396 const ListValue* args) {
303 const std::string language_code = WideToASCII(ExtractStringValue(args)); 397 const std::string language_code = WideToASCII(ExtractStringValue(args));
304 CHECK(!language_code.empty()); 398 CHECK(!language_code.empty());
305 const std::string action = StringPrintf( 399 const std::string action = StringPrintf(
306 "LanguageOptions_SpellCheckLanguageChange_%s", language_code.c_str()); 400 "LanguageOptions_SpellCheckLanguageChange_%s", language_code.c_str());
307 UserMetrics::RecordComputedAction(action); 401 UserMetrics::RecordComputedAction(action);
308 } 402 }
309 403
310 void LanguageOptionsHandler::SignOutCallback(const ListValue* args) { 404 void LanguageOptionsHandler::RestartCallback(const ListValue* args) {
405 #if defined(OS_CHROMEOS)
311 UserMetrics::RecordAction(UserMetricsAction("LanguageOptions_SignOut")); 406 UserMetrics::RecordAction(UserMetricsAction("LanguageOptions_SignOut"));
312 407
313 Browser* browser = Browser::GetBrowserForController( 408 Browser* browser = Browser::GetBrowserForController(
314 &dom_ui_->tab_contents()->controller(), NULL); 409 &dom_ui_->tab_contents()->controller(), NULL);
315 if (browser) 410 if (browser)
316 browser->ExecuteCommand(IDC_EXIT); 411 browser->ExecuteCommand(IDC_EXIT);
412 #else
413 UserMetrics::RecordAction(UserMetricsAction("LanguageOptions_Restart"));
414
415 // Set the flag to restore state after the restart.
416 PrefService* pref_service = g_browser_process->local_state();
417 pref_service->SetBoolean(prefs::kRestartLastSessionOnShutdown, true);
418 BrowserList::CloseAllBrowsersAndExit();
419 #endif // defined(OS_CHROMEOS)
317 } 420 }
318 421
319 } // namespace chromeos
320
321 #endif // OS_CHROMEOS
322
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698