Commit 90c75070 authored by Alexandre Frechette's avatar Alexandre Frechette Committed by Commit Bot

Never unblock the last blocked language.

Bug: 902354, 872096
Change-Id: Ia2d51f0dd702fdc201a35118b19085fd38dc7678
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1475112Reviewed-by: default avataranthonyvd <anthonyvd@chromium.org>
Reviewed-by: default avatarMoe Ahmadi <mahmadi@chromium.org>
Commit-Queue: Alexandre Frechette <frechette@chromium.org>
Cr-Commit-Position: refs/heads/master@{#638164}
parent e7439fac
......@@ -462,8 +462,10 @@ void TranslatePrefs::UnblockLanguage(const std::string& input_language) {
std::string translate_language = input_language;
translate::ToTranslateLanguageSynonym(&translate_language);
RemoveValueFromBlacklist(kPrefTranslateBlockedLanguages, translate_language);
if (GetListSize(kPrefTranslateBlockedLanguages) > 1) {
RemoveValueFromBlacklist(kPrefTranslateBlockedLanguages,
translate_language);
}
}
bool TranslatePrefs::IsSiteBlacklisted(const std::string& site) const {
......@@ -547,7 +549,7 @@ void TranslatePrefs::RemoveLanguagePairFromWhitelist(
}
bool TranslatePrefs::HasBlockedLanguages() const {
return !IsListEmpty(kPrefTranslateBlockedLanguages);
return GetListSize(kPrefTranslateBlockedLanguages) != 0;
}
void TranslatePrefs::ClearBlockedLanguages() {
......@@ -938,9 +940,9 @@ void TranslatePrefs::RemoveValueFromBlacklist(const char* pref_id,
blacklist->Remove(string_value, nullptr);
}
bool TranslatePrefs::IsListEmpty(const char* pref_id) const {
size_t TranslatePrefs::GetListSize(const char* pref_id) const {
const base::ListValue* blacklist = prefs_->GetList(pref_id);
return (blacklist == nullptr || blacklist->empty());
return blacklist == nullptr ? 0 : blacklist->GetList().size();
}
bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const {
......
......@@ -236,9 +236,6 @@ class TranslatePrefs {
void RemoveLanguagePairFromWhitelist(const std::string& original_language,
const std::string& target_language);
// Will return true if at least one language has been blacklisted.
bool HasBlockedLanguages() const;
// Will return true if at least one site has been blacklisted.
bool HasBlacklistedSites() const;
......@@ -352,6 +349,9 @@ class TranslatePrefs {
// Updates the language list of the language settings.
void UpdateLanguageList(const std::vector<std::string>& languages);
// Will return true if at least one language has been blocked.
bool HasBlockedLanguages() const;
// Merges two language sets to migrate to the language setting UI.
static void CreateBlockedLanguages(
std::vector<std::string>* blocked_languages,
......@@ -361,12 +361,15 @@ class TranslatePrefs {
void ClearBlockedLanguages();
void ClearBlacklistedSites();
void ClearWhitelistedLanguagePairs();
// |pref_id| is the name of a list pref.
bool IsValueBlacklisted(const char* pref_id, const std::string& value) const;
void BlacklistValue(const char* pref_id, const std::string& value);
void RemoveValueFromBlacklist(const char* pref_id, const std::string& value);
bool IsValueInList(const base::ListValue* list,
const std::string& value) const;
bool IsListEmpty(const char* pref_id) const;
size_t GetListSize(const char* pref_id) const;
bool IsDictionaryEmpty(const char* pref_id) const;
// Removes from the language list any language that isn't supported as an
// Accept-Language (it's not in kAcceptLanguageList) if and only if there
......
......@@ -391,6 +391,7 @@ TEST_F(TranslatePrefsTest, GetLanguageInfoList) {
TEST_F(TranslatePrefsTest, BlockLanguage) {
// `en` is a default blocked language, it should be present already.
ExpectBlockedLanguageListContent({"en"});
// One language.
translate_prefs_->BlockLanguage("fr-CA");
......@@ -427,17 +428,26 @@ TEST_F(TranslatePrefsTest, BlockLanguage) {
TEST_F(TranslatePrefsTest, UnblockLanguage) {
// Language in the list.
// Should not unblock last language.
translate_prefs_->UnblockLanguage("en-UK");
ExpectBlockedLanguageListContent({});
ExpectBlockedLanguageListContent({"en"});
// Language not in the list.
translate_prefs_->BlockLanguage("en-UK");
translate_prefs_->UnblockLanguage("es-AR");
// Language in the list but with different region.
// Should not unblock last language.
translate_prefs_->UnblockLanguage("en-AU");
ExpectBlockedLanguageListContent({"en"});
// Language in the list.
translate_prefs_->ClearBlockedLanguages();
translate_prefs_->BlockLanguage("fr");
translate_prefs_->UnblockLanguage("en-UK");
ExpectBlockedLanguageListContent({"fr"});
// Language in the list but with different region.
translate_prefs_->ClearBlockedLanguages();
translate_prefs_->BlockLanguage("fr");
translate_prefs_->UnblockLanguage("en-AU");
ExpectBlockedLanguageListContent({});
ExpectBlockedLanguageListContent({"fr"});
// Multiple languages.
translate_prefs_->ClearBlockedLanguages();
......@@ -519,6 +529,23 @@ TEST_F(TranslatePrefsTest, RemoveFromLanguageListRemovesRemainingUnsupported) {
ExpectLanguagePrefs("");
}
TEST_F(TranslatePrefsTest, ResetEmptyBlockedLanguagesToDefaults) {
ExpectBlockedLanguageListContent({"en"});
translate_prefs_->ResetEmptyBlockedLanguagesToDefaults();
ExpectBlockedLanguageListContent({"en"});
translate_prefs_->BlockLanguage("fr");
translate_prefs_->ResetEmptyBlockedLanguagesToDefaults();
ExpectBlockedLanguageListContent({"en", "fr"});
prefs_->Set(TranslatePrefs::kPrefTranslateBlockedLanguages,
base::ListValue());
ExpectBlockedLanguageListContent({});
translate_prefs_->ResetEmptyBlockedLanguagesToDefaults();
ExpectBlockedLanguageListContent({"en"});
}
TEST_F(TranslatePrefsTest, RemoveFromLanguageListClearsRecentLanguage) {
std::vector<std::string> languages;
......@@ -931,7 +958,7 @@ TEST_F(TranslatePrefsTest, DefaultBlockedLanguages) {
// default accept languages for Chrome (resource IDS_ACCEPT_LANGUAGES,
// provided by components_locale_settings_en-US.pak), and
// language::kFallbackInputMethodLocale for ChromeOS. For the tests, the
// resources are given by .
// resources match.
std::vector<std::string> blocked_languages_expected = {"en"};
ExpectBlockedLanguageListContent(blocked_languages_expected);
}
......@@ -968,5 +995,4 @@ TEST_F(TranslatePrefsTest, CanTranslateLanguage) {
EXPECT_TRUE(translate_prefs_->CanTranslateLanguage(
&translate_accept_languages, "en"));
}
} // namespace translate
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment