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

Side by Side Diff: chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc

Issue 1373073003: Implement chrome.languageSettingsPrivate custom spell check functions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@LanguagePage1EditIndividual
Patch Set: rebase on histogram fixes Created 5 years, 2 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "chrome/browser/extensions/api/language_settings_private/language_setti ngs_private_api.h" 5 #include "chrome/browser/extensions/api/language_settings_private/language_setti ngs_private_api.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/containers/hash_tables.h" 12 #include "base/containers/hash_tables.h"
13 #include "base/i18n/rtl.h" 13 #include "base/i18n/rtl.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/strings/string16.h" 15 #include "base/strings/string16.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "base/values.h" 17 #include "base/values.h"
18 #include "chrome/browser/browser_process.h" 18 #include "chrome/browser/browser_process.h"
19 #include "chrome/browser/extensions/api/language_settings_private/language_setti ngs_private_delegate.h" 19 #include "chrome/browser/extensions/api/language_settings_private/language_setti ngs_private_delegate.h"
20 #include "chrome/browser/extensions/api/language_settings_private/language_setti ngs_private_delegate_factory.h" 20 #include "chrome/browser/extensions/api/language_settings_private/language_setti ngs_private_delegate_factory.h"
21 #include "chrome/browser/profiles/profile.h" 21 #include "chrome/browser/profiles/profile.h"
22 #include "chrome/browser/spellchecker/spellcheck_factory.h" 22 #include "chrome/browser/spellchecker/spellcheck_factory.h"
23 #include "chrome/browser/spellchecker/spellcheck_service.h" 23 #include "chrome/browser/spellchecker/spellcheck_service.h"
24 #include "chrome/browser/translate/chrome_translate_client.h" 24 #include "chrome/browser/translate/chrome_translate_client.h"
25 #include "chrome/browser/translate/translate_service.h" 25 #include "chrome/browser/translate/translate_service.h"
26 #include "chrome/common/extensions/api/language_settings_private.h" 26 #include "chrome/common/extensions/api/language_settings_private.h"
27 #include "chrome/common/spellcheck_common.h" 27 #include "chrome/common/spellcheck_common.h"
28 #include "components/translate/core/browser/translate_download_manager.h" 28 #include "components/translate/core/browser/translate_download_manager.h"
29 #include "components/translate/core/common/translate_util.h"
30 #include "third_party/icu/source/i18n/unicode/coll.h" 29 #include "third_party/icu/source/i18n/unicode/coll.h"
31 #include "ui/base/l10n/l10n_util.h" 30 #include "ui/base/l10n/l10n_util.h"
32 #include "ui/base/l10n/l10n_util_collator.h" 31 #include "ui/base/l10n/l10n_util_collator.h"
33 32
34 namespace extensions { 33 namespace extensions {
35 34
36 namespace language_settings_private = api::language_settings_private; 35 namespace language_settings_private = api::language_settings_private;
37 36
38 LanguageSettingsPrivateGetLanguageListFunction:: 37 LanguageSettingsPrivateGetLanguageListFunction::
39 LanguageSettingsPrivateGetLanguageListFunction() { 38 LanguageSettingsPrivateGetLanguageListFunction() {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 base::string16 adjusted_native_display_name(pair.second); 106 base::string16 adjusted_native_display_name(pair.second);
108 base::i18n::AdjustStringForLocaleDirection(&adjusted_native_display_name); 107 base::i18n::AdjustStringForLocaleDirection(&adjusted_native_display_name);
109 language.native_display_name = 108 language.native_display_name =
110 base::UTF16ToUTF8(adjusted_native_display_name); 109 base::UTF16ToUTF8(adjusted_native_display_name);
111 110
112 // Set optional fields only if they differ from the default. 111 // Set optional fields only if they differ from the default.
113 if (base::i18n::StringContainsStrongRTLChars(display_name)) 112 if (base::i18n::StringContainsStrongRTLChars(display_name))
114 language.display_name_rtl.reset(new bool(true)); 113 language.display_name_rtl.reset(new bool(true));
115 if (locale_set.count(pair.first) > 0) 114 if (locale_set.count(pair.first) > 0)
116 language.supports_ui.reset(new bool(true)); 115 language.supports_ui.reset(new bool(true));
117 if (spellcheck_language_set.count(language.code) > 0) 116 if (spellcheck_language_set.count(pair.first) > 0)
118 language.supports_spellcheck.reset(new bool(true)); 117 language.supports_spellcheck.reset(new bool(true));
119 std::string translate_code = language.code; 118 if (translate_language_set.count(pair.first) > 0)
120 translate::ToTranslateLanguageSynonym(&translate_code);
121 if (translate_language_set.count(translate_code) > 0)
122 language.supports_translate.reset(new bool(true)); 119 language.supports_translate.reset(new bool(true));
123 120
124 language_list->Append(language.ToValue()); 121 language_list->Append(language.ToValue());
125 } 122 }
126 return RespondNow(OneArgument(language_list.release())); 123 return RespondNow(OneArgument(language_list.release()));
127 } 124 }
128 125
129 LanguageSettingsPrivateSetLanguageListFunction:: 126 LanguageSettingsPrivateSetLanguageListFunction::
130 LanguageSettingsPrivateSetLanguageListFunction() 127 LanguageSettingsPrivateSetLanguageListFunction()
131 : chrome_details_(this) { 128 : chrome_details_(this) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 LanguageSettingsPrivateGetSpellcheckWordsFunction:: 173 LanguageSettingsPrivateGetSpellcheckWordsFunction::
177 ~LanguageSettingsPrivateGetSpellcheckWordsFunction() { 174 ~LanguageSettingsPrivateGetSpellcheckWordsFunction() {
178 } 175 }
179 176
180 ExtensionFunction::ResponseAction 177 ExtensionFunction::ResponseAction
181 LanguageSettingsPrivateGetSpellcheckWordsFunction::Run() { 178 LanguageSettingsPrivateGetSpellcheckWordsFunction::Run() {
182 SpellcheckService* service = 179 SpellcheckService* service =
183 SpellcheckServiceFactory::GetForContext(browser_context()); 180 SpellcheckServiceFactory::GetForContext(browser_context());
184 SpellcheckCustomDictionary* dictionary = service->GetCustomDictionary(); 181 SpellcheckCustomDictionary* dictionary = service->GetCustomDictionary();
185 182
183 if (dictionary->IsLoaded())
184 return RespondNow(OneArgument(GetSpellcheckWords().release()));
185
186 dictionary->AddObserver(this);
187 AddRef(); // Balanced in OnCustomDictionaryLoaded().
188 return RespondLater();
189 }
190
191 void
192 LanguageSettingsPrivateGetSpellcheckWordsFunction::OnCustomDictionaryLoaded() {
193 SpellcheckService* service =
194 SpellcheckServiceFactory::GetForContext(browser_context());
195 service->GetCustomDictionary()->RemoveObserver(this);
196 Respond(OneArgument(GetSpellcheckWords().release()));
197 Release();
198 }
199
200 void
201 LanguageSettingsPrivateGetSpellcheckWordsFunction::OnCustomDictionaryChanged(
202 const SpellcheckCustomDictionary::Change& dictionary_change) {
203 NOTREACHED() << "SpellcheckCustomDictionary::Observer: "
204 "OnCustomDictionaryChanged() called before "
205 "OnCustomDictionaryLoaded()";
206 }
207
208 scoped_ptr<base::ListValue>
209 LanguageSettingsPrivateGetSpellcheckWordsFunction::GetSpellcheckWords() const {
210 SpellcheckService* service =
211 SpellcheckServiceFactory::GetForContext(browser_context());
212 SpellcheckCustomDictionary* dictionary = service->GetCustomDictionary();
213 DCHECK(dictionary->IsLoaded());
214
215 // TODO(michaelpg): Sort using app locale.
186 scoped_ptr<base::ListValue> word_list(new base::ListValue()); 216 scoped_ptr<base::ListValue> word_list(new base::ListValue());
187 // TODO(michaelpg): observe the dictionary and respond later if not loaded. 217 const std::set<std::string>& words = dictionary->GetWords();
188 if (dictionary->IsLoaded()) { 218 for (const std::string& word : words)
189 const std::set<std::string>& words = dictionary->GetWords(); 219 word_list->AppendString(word);
190 for (const std::string& word : words) 220 return word_list.Pass();
191 word_list->AppendString(word); 221 }
192 } 222
193 return RespondNow(OneArgument(word_list.release())); 223 LanguageSettingsPrivateAddSpellcheckWordFunction::
224 LanguageSettingsPrivateAddSpellcheckWordFunction() {
225 }
226
227 LanguageSettingsPrivateAddSpellcheckWordFunction::
228 ~LanguageSettingsPrivateAddSpellcheckWordFunction() {
229 }
230
231 ExtensionFunction::ResponseAction
232 LanguageSettingsPrivateAddSpellcheckWordFunction::Run() {
233 scoped_ptr<language_settings_private::AddSpellcheckWord::Params> params =
234 language_settings_private::AddSpellcheckWord::Params::Create(*args_);
235 EXTENSION_FUNCTION_VALIDATE(params.get());
236
237 SpellcheckService* service =
238 SpellcheckServiceFactory::GetForContext(browser_context());
239 bool success = service->GetCustomDictionary()->AddWord(params->word);
240
241 return RespondNow(OneArgument(new base::FundamentalValue(success)));
242 }
243
244 LanguageSettingsPrivateRemoveSpellcheckWordFunction::
245 LanguageSettingsPrivateRemoveSpellcheckWordFunction() {
246 }
247
248 LanguageSettingsPrivateRemoveSpellcheckWordFunction::
249 ~LanguageSettingsPrivateRemoveSpellcheckWordFunction() {
250 }
251
252 ExtensionFunction::ResponseAction
253 LanguageSettingsPrivateRemoveSpellcheckWordFunction::Run() {
254 scoped_ptr<language_settings_private::RemoveSpellcheckWord::Params> params =
255 language_settings_private::RemoveSpellcheckWord::Params::Create(*args_);
256 EXTENSION_FUNCTION_VALIDATE(params.get());
257
258 SpellcheckService* service =
259 SpellcheckServiceFactory::GetForContext(browser_context());
260 bool success = service->GetCustomDictionary()->RemoveWord(params->word);
261
262 return RespondNow(OneArgument(new base::FundamentalValue(success)));
194 } 263 }
195 264
196 LanguageSettingsPrivateGetTranslateTargetLanguageFunction:: 265 LanguageSettingsPrivateGetTranslateTargetLanguageFunction::
197 LanguageSettingsPrivateGetTranslateTargetLanguageFunction() 266 LanguageSettingsPrivateGetTranslateTargetLanguageFunction()
198 : chrome_details_(this) { 267 : chrome_details_(this) {
199 } 268 }
200 269
201 LanguageSettingsPrivateGetTranslateTargetLanguageFunction:: 270 LanguageSettingsPrivateGetTranslateTargetLanguageFunction::
202 ~LanguageSettingsPrivateGetTranslateTargetLanguageFunction() { 271 ~LanguageSettingsPrivateGetTranslateTargetLanguageFunction() {
203 } 272 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 LanguageSettingsPrivateRemoveInputMethodFunction:: 311 LanguageSettingsPrivateRemoveInputMethodFunction::
243 ~LanguageSettingsPrivateRemoveInputMethodFunction() { 312 ~LanguageSettingsPrivateRemoveInputMethodFunction() {
244 } 313 }
245 314
246 ExtensionFunction::ResponseAction 315 ExtensionFunction::ResponseAction
247 LanguageSettingsPrivateRemoveInputMethodFunction::Run() { 316 LanguageSettingsPrivateRemoveInputMethodFunction::Run() {
248 return RespondNow(OneArgument(new base::FundamentalValue(true))); 317 return RespondNow(OneArgument(new base::FundamentalValue(true)));
249 } 318 }
250 319
251 } // namespace extensions 320 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698