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

Unified Diff: chrome/browser/chromeos/locale_change_guard.cc

Issue 382973002: ChromeOS: should not show "Language changed" notification for certain languages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Bugfix. Created 6 years, 5 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/chromeos/locale_change_guard.cc
diff --git a/chrome/browser/chromeos/locale_change_guard.cc b/chrome/browser/chromeos/locale_change_guard.cc
index 0bcf9d38f7b6c8637731deeec04a354971997ab7..abb51a9b885689fdd028d27488727d77e577e8d2 100644
--- a/chrome/browser/chromeos/locale_change_guard.cc
+++ b/chrome/browser/chromeos/locale_change_guard.cc
@@ -4,6 +4,8 @@
#include "chrome/browser/chromeos/locale_change_guard.h"
+#include <algorithm>
+
#include "ash/shell.h"
#include "ash/system/tray/system_tray.h"
#include "ash/system/tray/system_tray_notifier.h"
@@ -33,6 +35,17 @@ using content::WebContents;
namespace chromeos {
+namespace {
+
+// This is the list of languages that do not require user notification when
+// locale is switched automatically between regions within the same language.
+//
+// New language in kAcceptLanguageList should be added either here or to
+// to the exception list in unit test.
+const char* const kSkipShowNotificationLanguages[4] = {"en", "de", "fr", "it"};
+
+} // anonymous namespace
+
LocaleChangeGuard::LocaleChangeGuard(Profile* profile)
: profile_(profile),
reverted_(false),
@@ -153,7 +166,11 @@ void LocaleChangeGuard::Check() {
if (prefs->GetString(prefs::kApplicationLocaleAccepted) == to_locale)
return; // Already accepted.
- // Locale change detected, showing notification.
+ // Locale change detected.
+ if (!ShouldShowLocaleChangeNotification(from_locale, to_locale))
+ return;
+
+ // Showing notification.
if (from_locale_ != from_locale || to_locale_ != to_locale) {
// Falling back to showing message in current locale.
LOG(ERROR) <<
@@ -212,4 +229,35 @@ void LocaleChangeGuard::PrepareChangingLocale(
}
}
+// static
+bool LocaleChangeGuard::ShouldShowLocaleChangeNotification(
+ const std::string& from_locale,
+ const std::string& to_locale) {
+ const std::string from_lang = l10n_util::GetLanguage(from_locale);
+ const std::string to_lang = l10n_util::GetLanguage(to_locale);
+
+ if (from_locale == to_locale)
+ return false;
+
+ if (from_lang != to_lang)
+ return true;
+
+ const char* const* begin = kSkipShowNotificationLanguages;
+ const char* const* end = kSkipShowNotificationLanguages +
+ arraysize(kSkipShowNotificationLanguages);
+
+ return std::find(begin, end, from_lang) == end;
+}
+
+// static
+const char* const*
+LocaleChangeGuard::GetSkipShowNotificationLanguagesForTesting() {
+ return kSkipShowNotificationLanguages;
+}
+
+// static
+size_t LocaleChangeGuard::GetSkipShowNotificationLanguagesSizeForTesting() {
+ return arraysize(kSkipShowNotificationLanguages);
+}
+
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698