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) { ...@@ -462,8 +462,10 @@ void TranslatePrefs::UnblockLanguage(const std::string& input_language) {
std::string translate_language = input_language; std::string translate_language = input_language;
translate::ToTranslateLanguageSynonym(&translate_language); translate::ToTranslateLanguageSynonym(&translate_language);
if (GetListSize(kPrefTranslateBlockedLanguages) > 1) {
RemoveValueFromBlacklist(kPrefTranslateBlockedLanguages, translate_language); RemoveValueFromBlacklist(kPrefTranslateBlockedLanguages,
translate_language);
}
} }
bool TranslatePrefs::IsSiteBlacklisted(const std::string& site) const { bool TranslatePrefs::IsSiteBlacklisted(const std::string& site) const {
...@@ -547,7 +549,7 @@ void TranslatePrefs::RemoveLanguagePairFromWhitelist( ...@@ -547,7 +549,7 @@ void TranslatePrefs::RemoveLanguagePairFromWhitelist(
} }
bool TranslatePrefs::HasBlockedLanguages() const { bool TranslatePrefs::HasBlockedLanguages() const {
return !IsListEmpty(kPrefTranslateBlockedLanguages); return GetListSize(kPrefTranslateBlockedLanguages) != 0;
} }
void TranslatePrefs::ClearBlockedLanguages() { void TranslatePrefs::ClearBlockedLanguages() {
...@@ -938,9 +940,9 @@ void TranslatePrefs::RemoveValueFromBlacklist(const char* pref_id, ...@@ -938,9 +940,9 @@ void TranslatePrefs::RemoveValueFromBlacklist(const char* pref_id,
blacklist->Remove(string_value, nullptr); 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); 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 { bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const {
......
...@@ -236,9 +236,6 @@ class TranslatePrefs { ...@@ -236,9 +236,6 @@ class TranslatePrefs {
void RemoveLanguagePairFromWhitelist(const std::string& original_language, void RemoveLanguagePairFromWhitelist(const std::string& original_language,
const std::string& target_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. // Will return true if at least one site has been blacklisted.
bool HasBlacklistedSites() const; bool HasBlacklistedSites() const;
...@@ -352,6 +349,9 @@ class TranslatePrefs { ...@@ -352,6 +349,9 @@ class TranslatePrefs {
// Updates the language list of the language settings. // Updates the language list of the language settings.
void UpdateLanguageList(const std::vector<std::string>& languages); 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. // Merges two language sets to migrate to the language setting UI.
static void CreateBlockedLanguages( static void CreateBlockedLanguages(
std::vector<std::string>* blocked_languages, std::vector<std::string>* blocked_languages,
...@@ -361,12 +361,15 @@ class TranslatePrefs { ...@@ -361,12 +361,15 @@ class TranslatePrefs {
void ClearBlockedLanguages(); void ClearBlockedLanguages();
void ClearBlacklistedSites(); void ClearBlacklistedSites();
void ClearWhitelistedLanguagePairs(); void ClearWhitelistedLanguagePairs();
// |pref_id| is the name of a list pref.
bool IsValueBlacklisted(const char* pref_id, const std::string& value) const; bool IsValueBlacklisted(const char* pref_id, const std::string& value) const;
void BlacklistValue(const char* pref_id, const std::string& value); void BlacklistValue(const char* pref_id, const std::string& value);
void RemoveValueFromBlacklist(const char* pref_id, const std::string& value); void RemoveValueFromBlacklist(const char* pref_id, const std::string& value);
bool IsValueInList(const base::ListValue* list, bool IsValueInList(const base::ListValue* list,
const std::string& value) const; 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; bool IsDictionaryEmpty(const char* pref_id) const;
// Removes from the language list any language that isn't supported as an // 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 // Accept-Language (it's not in kAcceptLanguageList) if and only if there
......
...@@ -391,6 +391,7 @@ TEST_F(TranslatePrefsTest, GetLanguageInfoList) { ...@@ -391,6 +391,7 @@ TEST_F(TranslatePrefsTest, GetLanguageInfoList) {
TEST_F(TranslatePrefsTest, BlockLanguage) { TEST_F(TranslatePrefsTest, BlockLanguage) {
// `en` is a default blocked language, it should be present already. // `en` is a default blocked language, it should be present already.
ExpectBlockedLanguageListContent({"en"});
// One language. // One language.
translate_prefs_->BlockLanguage("fr-CA"); translate_prefs_->BlockLanguage("fr-CA");
...@@ -427,17 +428,26 @@ TEST_F(TranslatePrefsTest, BlockLanguage) { ...@@ -427,17 +428,26 @@ TEST_F(TranslatePrefsTest, BlockLanguage) {
TEST_F(TranslatePrefsTest, UnblockLanguage) { TEST_F(TranslatePrefsTest, UnblockLanguage) {
// Language in the list. // Language in the list.
// Should not unblock last language.
translate_prefs_->UnblockLanguage("en-UK"); translate_prefs_->UnblockLanguage("en-UK");
ExpectBlockedLanguageListContent({}); ExpectBlockedLanguageListContent({"en"});
// Language not in the list. // Language in the list but with different region.
translate_prefs_->BlockLanguage("en-UK"); // Should not unblock last language.
translate_prefs_->UnblockLanguage("es-AR"); translate_prefs_->UnblockLanguage("en-AU");
ExpectBlockedLanguageListContent({"en"}); 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. // Language in the list but with different region.
translate_prefs_->ClearBlockedLanguages();
translate_prefs_->BlockLanguage("fr");
translate_prefs_->UnblockLanguage("en-AU"); translate_prefs_->UnblockLanguage("en-AU");
ExpectBlockedLanguageListContent({}); ExpectBlockedLanguageListContent({"fr"});
// Multiple languages. // Multiple languages.
translate_prefs_->ClearBlockedLanguages(); translate_prefs_->ClearBlockedLanguages();
...@@ -519,6 +529,23 @@ TEST_F(TranslatePrefsTest, RemoveFromLanguageListRemovesRemainingUnsupported) { ...@@ -519,6 +529,23 @@ TEST_F(TranslatePrefsTest, RemoveFromLanguageListRemovesRemainingUnsupported) {
ExpectLanguagePrefs(""); 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) { TEST_F(TranslatePrefsTest, RemoveFromLanguageListClearsRecentLanguage) {
std::vector<std::string> languages; std::vector<std::string> languages;
...@@ -931,7 +958,7 @@ TEST_F(TranslatePrefsTest, DefaultBlockedLanguages) { ...@@ -931,7 +958,7 @@ TEST_F(TranslatePrefsTest, DefaultBlockedLanguages) {
// default accept languages for Chrome (resource IDS_ACCEPT_LANGUAGES, // default accept languages for Chrome (resource IDS_ACCEPT_LANGUAGES,
// provided by components_locale_settings_en-US.pak), and // provided by components_locale_settings_en-US.pak), and
// language::kFallbackInputMethodLocale for ChromeOS. For the tests, the // language::kFallbackInputMethodLocale for ChromeOS. For the tests, the
// resources are given by . // resources match.
std::vector<std::string> blocked_languages_expected = {"en"}; std::vector<std::string> blocked_languages_expected = {"en"};
ExpectBlockedLanguageListContent(blocked_languages_expected); ExpectBlockedLanguageListContent(blocked_languages_expected);
} }
...@@ -968,5 +995,4 @@ TEST_F(TranslatePrefsTest, CanTranslateLanguage) { ...@@ -968,5 +995,4 @@ TEST_F(TranslatePrefsTest, CanTranslateLanguage) {
EXPECT_TRUE(translate_prefs_->CanTranslateLanguage( EXPECT_TRUE(translate_prefs_->CanTranslateLanguage(
&translate_accept_languages, "en")); &translate_accept_languages, "en"));
} }
} // namespace translate } // 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