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

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: update histograms 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..b099c3ed2627f5073f46d6669eb6a26b2687838c 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
@@ -245,26 +245,70 @@ 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());
+ const std::string& language_code = parameters->language_code;
+
+ std::unique_ptr<translate::TranslatePrefs> translate_prefs =
+ ChromeTranslateClient::CreateTranslatePrefs(
+ chrome_details_.GetProfile()->GetPrefs());
+
+ std::vector<std::string> languages;
+ translate_prefs->GetLanguageList(&languages);
-LanguageSettingsPrivateSetLanguageListFunction::
- ~LanguageSettingsPrivateSetLanguageListFunction() {
+ if (std::find(languages.begin(), languages.end(), language_code) !=
+ languages.end()) {
+ LOG(ERROR) << "Language " << language_code << " already enabled";
+ return RespondNow(NoArguments());
+ }
+
+ languages.push_back(parameters->language_code);
+ translate_prefs->UpdateLanguageList(languages);
+
+ 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());
+ const std::string& language_code = parameters->language_code;
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(), language_code);
+ if (it == languages.end()) {
+ LOG(ERROR) << "Language " << language_code << " not enabled";
+ return RespondNow(NoArguments());
+ }
+
+ languages.erase(it);
+ translate_prefs->UpdateLanguageList(languages);
return RespondNow(NoArguments());
}

Powered by Google App Engine
This is Rietveld 408576698