Chromium Code Reviews| Index: chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc |
| diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc |
| index efc2f1ff66bc86a58ef29f16cf8c01cf78a62947..af7c47ff378b7adccd00f9f820b837f6ca81aacf 100644 |
| --- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc |
| +++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc |
| @@ -53,9 +53,14 @@ using chromeos::input_method::InputMethodDescriptor; |
| using chromeos::input_method::InputMethodDescriptors; |
| using chromeos::input_method::InputMethodManager; |
| using chromeos::input_method::InputMethodUtil; |
| +#endif |
| namespace { |
| +static const char kErrorLanguageAlreadyEnabled[] = "Language already enabled"; |
| +static const char kErrorLanguageNotEnabled[] = "Language not enabled"; |
| + |
| +#if defined(OS_CHROMEOS) |
| // Returns the set of IDs of all enabled IMEs. |
| std::unordered_set<std::string> GetEnabledIMEs( |
| scoped_refptr<InputMethodManager::State> ime_state) { |
| @@ -152,9 +157,9 @@ std::vector<std::string> GetSortedExtensionIMEs( |
| return extension_ime_list; |
| } |
| +#endif |
| } // anonymous namespace |
| -#endif |
| LanguageSettingsPrivateGetLanguageListFunction:: |
| LanguageSettingsPrivateGetLanguageListFunction() { |
| @@ -245,26 +250,66 @@ LanguageSettingsPrivateGetLanguageListFunction::Run() { |
| return RespondNow(OneArgument(std::move(language_list))); |
| } |
| -LanguageSettingsPrivateSetLanguageListFunction:: |
| - LanguageSettingsPrivateSetLanguageListFunction() |
| - : chrome_details_(this) { |
| -} |
| +LanguageSettingsPrivateEnableLanguageFunction:: |
| + LanguageSettingsPrivateEnableLanguageFunction() |
| + : chrome_details_(this) {} |
| + |
| +LanguageSettingsPrivateEnableLanguageFunction:: |
| + ~LanguageSettingsPrivateEnableLanguageFunction() {} |
| + |
| +ExtensionFunction::ResponseAction |
| +LanguageSettingsPrivateEnableLanguageFunction::Run() { |
| + std::unique_ptr<language_settings_private::EnableLanguage::Params> |
| + parameters = |
| + language_settings_private::EnableLanguage::Params::Create(*args_); |
| + EXTENSION_FUNCTION_VALIDATE(parameters.get()); |
| + |
| + std::unique_ptr<translate::TranslatePrefs> translate_prefs = |
| + ChromeTranslateClient::CreateTranslatePrefs( |
| + chrome_details_.GetProfile()->GetPrefs()); |
| + |
| + std::vector<std::string> languages; |
| + translate_prefs->GetLanguageList(&languages); |
| + |
| + if (std::find(languages.begin(), languages.end(), |
| + parameters->language_code) != languages.end()) { |
| + return RespondNow(Error(kErrorLanguageAlreadyEnabled)); |
|
Devlin
2016/08/22 18:38:19
drive-by: To me, this seems a little weird. I wou
stevenjb
2016/08/22 18:41:30
I requested this. The UI shouldn't generally do th
Devlin
2016/08/22 19:01:00
Given this is a private API, I don't care that muc
|
| + } |
| + |
| + languages.push_back(parameters->language_code); |
|
Devlin
2016/08/22 18:38:19
drive-by: do we need to check that the language ex
|
| + translate_prefs->UpdateLanguageList(languages); |
| -LanguageSettingsPrivateSetLanguageListFunction:: |
| - ~LanguageSettingsPrivateSetLanguageListFunction() { |
| + return RespondNow(NoArguments()); |
| } |
| +LanguageSettingsPrivateDisableLanguageFunction:: |
| + LanguageSettingsPrivateDisableLanguageFunction() |
| + : chrome_details_(this) {} |
| + |
| +LanguageSettingsPrivateDisableLanguageFunction:: |
| + ~LanguageSettingsPrivateDisableLanguageFunction() {} |
| + |
| ExtensionFunction::ResponseAction |
| -LanguageSettingsPrivateSetLanguageListFunction::Run() { |
| - std::unique_ptr<language_settings_private::SetLanguageList::Params> |
| +LanguageSettingsPrivateDisableLanguageFunction::Run() { |
| + std::unique_ptr<language_settings_private::DisableLanguage::Params> |
| parameters = |
| - language_settings_private::SetLanguageList::Params::Create(*args_); |
| + language_settings_private::DisableLanguage::Params::Create(*args_); |
| EXTENSION_FUNCTION_VALIDATE(parameters.get()); |
| std::unique_ptr<translate::TranslatePrefs> translate_prefs = |
| ChromeTranslateClient::CreateTranslatePrefs( |
| chrome_details_.GetProfile()->GetPrefs()); |
| - translate_prefs->UpdateLanguageList(parameters->language_codes); |
| + |
| + std::vector<std::string> languages; |
| + translate_prefs->GetLanguageList(&languages); |
| + |
| + auto it = |
| + std::find(languages.begin(), languages.end(), parameters->language_code); |
| + if (it == languages.end()) |
| + return RespondNow(Error(kErrorLanguageNotEnabled)); |
| + |
| + languages.erase(it); |
| + translate_prefs->UpdateLanguageList(languages); |
| return RespondNow(NoArguments()); |
| } |