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

Unified Diff: chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc

Issue 2261903002: Fix race condition in MD Settings Languages page causing inconsistent settings (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: errors Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
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());
}

Powered by Google App Engine
This is Rietveld 408576698