Index: chrome/browser/ui/webui/about_ui.cc |
diff --git a/chrome/browser/ui/webui/about_ui.cc b/chrome/browser/ui/webui/about_ui.cc |
index 5e5c545e8c504c1cc0b0534a60aeb15705d5ddd7..38ef82ce2897da995d43ce74446bd940f27e159e 100644 |
--- a/chrome/browser/ui/webui/about_ui.cc |
+++ b/chrome/browser/ui/webui/about_ui.cc |
@@ -103,7 +103,7 @@ const char kMemoryCssPath[] = "about_memory.css"; |
const char kStatsJsPath[] = "stats.js"; |
const char kStringsJsPath[] = "strings.js"; |
// chrome://terms falls back to offline page after kOnlineTermsTimeoutSec. |
-const int kOnlineTermsTimeoutSec = 10; |
+const int kOnlineTermsTimeoutSec = 7; |
// When you type about:memory, it actually loads this intermediate URL that |
// redirects you to the final page. This avoids the problem where typing |
@@ -145,18 +145,54 @@ class AboutMemoryHandler : public MemoryDetails { |
}; |
#if defined(OS_CHROMEOS) |
+ |
+// Contains pairs of corresponding languages for Chrome and Google URLs. |
+struct Chrome2GoogleLanguageMapping { |
Nikita (slow)
2013/05/06 14:22:25
nit: Please rename language to locale to match ter
vasilii
2013/05/06 15:36:33
Done.
|
+ const char* chrome_language; |
+ const char* google_language; |
+}; |
+ |
+// List of languages constant which are different for Google URL |
+const Chrome2GoogleLanguageMapping language_mapping[] = { |
+ {"de-AT", "de"}, |
+ {"de-CH", "de"}, |
+ {"de-DE", "de"}, |
+ {"en-GB", "en_uk"}, |
+ {"fr-CA", "fr"}, |
+ {"fr-CH", "fr"}, |
+ {"fr-FR", "fr"}, |
+ {"it-CH", "it"}, |
+ {"it-IT", "it"} |
+}; |
+ |
+// Returns language in Google format if it's different from the Chrome one. |
Nikita (slow)
2013/05/06 14:22:25
nit: Change "Google format" to something like "ser
vasilii
2013/05/06 15:36:33
Done.
|
+// Otherwise, returns NULL. |
+const char* TranslateChromeLangToGoogle(const char* chrome_language) { |
+ for (std::size_t i = 0; i < arraysize(language_mapping); ++i) { |
+ if (LowerCaseEqualsASCII(chrome_language, |
+ language_mapping[i].chrome_language)) |
+ return language_mapping[i].google_language; |
Nikita (slow)
2013/05/06 14:22:25
nit: Add {}
vasilii
2013/05/06 15:36:33
Done.
|
+ } |
+ return NULL; |
+} |
+ |
// Helper class that fetches the online Chrome OS terms. Empty string is |
// returned once fetching failed or exceeded |kOnlineTermsTimeoutSec|. |
class ChromeOSOnlineTermsHandler : public net::URLFetcherDelegate { |
public: |
typedef base::Callback<void (ChromeOSOnlineTermsHandler*)> FetchCallback; |
- explicit ChromeOSOnlineTermsHandler(const FetchCallback& callback) |
+ explicit ChromeOSOnlineTermsHandler(const FetchCallback& callback, |
+ const std::string& locale) |
: fetch_callback_(callback) { |
- eula_fetcher_.reset(net::URLFetcher::Create( |
- GURL(l10n_util::GetStringUTF16(IDS_EULA_POLICY_URL)), |
- net::URLFetcher::GET, |
- this)); |
+ const char* google_lang = TranslateChromeLangToGoogle(locale.c_str()); |
+ if (!google_lang) |
+ google_lang = locale.c_str(); |
+ std::string eula_URL = base::StringPrintf(chrome::kOnlineEulaURLPath, |
+ google_lang); |
+ eula_fetcher_.reset(net::URLFetcher::Create(GURL(eula_URL), |
+ net::URLFetcher::GET, |
+ this)); |
eula_fetcher_->SetRequestContext( |
g_browser_process->system_request_context()); |
eula_fetcher_->AddExtraRequestHeader("Accept: text/html"); |
@@ -257,7 +293,8 @@ class ChromeOSTermsHandler |
// Try to load online version of ChromeOS terms first. |
// ChromeOSOnlineTermsHandler object destroys itself. |
new ChromeOSOnlineTermsHandler( |
- base::Bind(&ChromeOSTermsHandler::OnOnlineEULAFetched, this)); |
+ base::Bind(&ChromeOSTermsHandler::OnOnlineEULAFetched, this), |
+ locale_); |
} |
} |