| Index: chrome/browser/translate/translate_manager.cc
|
| diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc
|
| index 6237e89dc7dd4cccc6311fc936b4009935e48afd..5a7a44d33d2ec013c1ffcfb2a6264fb094b1202f 100644
|
| --- a/chrome/browser/translate/translate_manager.cc
|
| +++ b/chrome/browser/translate/translate_manager.cc
|
| @@ -50,6 +50,7 @@
|
| #include "net/base/escape.h"
|
| #include "net/base/load_flags.h"
|
| #include "net/base/url_util.h"
|
| +#include "net/http/http_status_code.h"
|
| #include "net/url_request/url_fetcher.h"
|
| #include "net/url_request/url_request_status.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| @@ -136,31 +137,50 @@ const char* const kDefaultSupportedLanguages[] = {
|
|
|
| const char* const kTranslateScriptURL =
|
| "https://translate.google.com/translate_a/element.js";
|
| -const char* const kTranslateScriptQuery =
|
| - "?cb=cr.googleTranslate.onTranslateElementLoad&hl=%s";
|
| const char* const kTranslateScriptHeader =
|
| "Google-Translate-Element-Mode: library";
|
| const char* const kReportLanguageDetectionErrorURL =
|
| - "https://translate.google.com/translate_error";
|
| + "https://translate.google.com/translate_error?client=cr&action=langidc";
|
| const char* const kLanguageListFetchURL =
|
| "https://translate.googleapis.com/translate_a/l?client=chrome&cb=sl";
|
|
|
| -const char* const kLanguageListFetchLocaleQueryName = "hl";
|
| -const char* const kLanguageListFetchAlphaLanguageQueryName = "alpha";
|
| -const char* const kLanguageListFetchAlphaLanguageQueryValue = "1";
|
| +// Used in kTranslateScriptURL to request supporting languages list including
|
| +// "alpha languages".
|
| +const char* const kAlphaLanguageQueryName = "alpha";
|
| +const char* const kAlphaLanguageQueryValue = "1";
|
| +
|
| +// Used in all translate URLs to specify API Key.
|
| +const char* const kApiKeyName = "key";
|
| +
|
| +// Used in kTranslateScriptURL to specify a callback function name.
|
| +const char* const kCallbackQueryName = "cb";
|
| +const char* const kCallbackQueryValue =
|
| + "cr.googleTranslate.onTranslateElementLoad";
|
| +
|
| +// Used in kTranslateScriptURL and kLanguageListFetchURL to specify the
|
| +// application locale.
|
| +const char* const kHostLocaleQueryName = "hl";
|
| +
|
| +// Used in kReportLanguageDetectionErrorURL to specify the original page
|
| +// language.
|
| +const char* const kSourceLanguageQueryName = "sl";
|
| +
|
| +// Used in kReportLanguageDetectionErrorURL to specify the page URL.
|
| +const char* const kUrlQueryName = "u";
|
|
|
| const int kMaxRetryLanguageListFetch = 5;
|
| const int kTranslateScriptExpirationDelayDays = 1;
|
|
|
| -void AddApiKeyToUrl(GURL* url) {
|
| - std::string api_key = google_apis::GetAPIKey();
|
| - std::string query(url->query());
|
| - if (!query.empty())
|
| - query += "&";
|
| - query += "key=" + net::EscapeQueryParamValue(api_key, true);
|
| - GURL::Replacements replacements;
|
| - replacements.SetQueryStr(query);
|
| - *url = url->ReplaceComponents(replacements);
|
| +GURL AddApiKeyToUrl(const GURL& url) {
|
| + return net::AppendQueryParameter(url, kApiKeyName, google_apis::GetAPIKey());
|
| +}
|
| +
|
| +GURL AddHostLocaleToUrl(const GURL& url) {
|
| + return net::AppendQueryParameter(
|
| + url,
|
| + kHostLocaleQueryName,
|
| + TranslateManager::GetLanguageCode(
|
| + g_browser_process->GetApplicationLocale()));
|
| }
|
|
|
| } // namespace
|
| @@ -312,7 +332,7 @@ void TranslateManager::Observe(int type,
|
| // If the navigation happened while offline don't show the translate
|
| // bar since there will be nothing to translate.
|
| if (load_details->http_status_code == 0 ||
|
| - load_details->http_status_code == 500) {
|
| + load_details->http_status_code == net::HTTP_INTERNAL_SERVER_ERROR) {
|
| return;
|
| }
|
|
|
| @@ -407,7 +427,7 @@ void TranslateManager::OnURLFetchComplete(const net::URLFetcher* source) {
|
|
|
| bool error =
|
| (source->GetStatus().status() != net::URLRequestStatus::SUCCESS ||
|
| - source->GetResponseCode() != 200);
|
| + source->GetResponseCode() != net::HTTP_OK);
|
| if (translate_script_request_pending_.get() == source) {
|
| scoped_ptr<const net::URLFetcher> delete_ptr(
|
| translate_script_request_pending_.release());
|
| @@ -638,24 +658,24 @@ void TranslateManager::ReportLanguageDetectionError(WebContents* web_contents) {
|
| return;
|
| }
|
|
|
| + GURL report_error_url = GURL(kReportLanguageDetectionErrorURL);
|
| +
|
| GURL page_url = web_contents->GetController().GetActiveEntry()->GetURL();
|
| - // Report option should be disabled for secure URLs.
|
| - DCHECK(!page_url.SchemeIsSecure());
|
| - std::string report_error_url_str(kReportLanguageDetectionErrorURL);
|
| - report_error_url_str += "?client=cr&action=langidc&u=";
|
| - report_error_url_str += net::EscapeUrlEncodedData(page_url.spec(), true);
|
| - report_error_url_str += "&sl=";
|
| + report_error_url = net::AppendQueryParameter(
|
| + report_error_url,
|
| + kUrlQueryName,
|
| + page_url.spec());
|
|
|
| TranslateTabHelper* translate_tab_helper =
|
| TranslateTabHelper::FromWebContents(web_contents);
|
| - report_error_url_str +=
|
| - translate_tab_helper->language_state().original_language();
|
| - report_error_url_str += "&hl=";
|
| - report_error_url_str +=
|
| - GetLanguageCode(g_browser_process->GetApplicationLocale());
|
| + report_error_url = net::AppendQueryParameter(
|
| + report_error_url,
|
| + kSourceLanguageQueryName,
|
| + translate_tab_helper->language_state().original_language());
|
| +
|
| + report_error_url = AddHostLocaleToUrl(report_error_url);
|
| + report_error_url = AddApiKeyToUrl(report_error_url);
|
|
|
| - GURL report_error_url(report_error_url_str);
|
| - AddApiKeyToUrl(&report_error_url);
|
| chrome::AddSelectedTabWithURL(browser, report_error_url,
|
| content::PAGE_TRANSITION_AUTO_BOOKMARK);
|
| }
|
| @@ -780,19 +800,17 @@ void TranslateManager::FetchLanguageListFromTranslateServer(
|
| }
|
|
|
| GURL language_list_fetch_url = GURL(kLanguageListFetchURL);
|
| - language_list_fetch_url = net::AppendQueryParameter(
|
| - language_list_fetch_url,
|
| - kLanguageListFetchLocaleQueryName,
|
| - GetLanguageCode(g_browser_process->GetApplicationLocale()).c_str());
|
| + language_list_fetch_url = AddHostLocaleToUrl(language_list_fetch_url);
|
| + language_list_fetch_url = AddApiKeyToUrl(language_list_fetch_url);
|
|
|
| const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| if (command_line.HasSwitch(switches::kEnableTranslateAlphaLanguages)) {
|
| language_list_fetch_url = net::AppendQueryParameter(
|
| language_list_fetch_url,
|
| - kLanguageListFetchAlphaLanguageQueryName,
|
| - kLanguageListFetchAlphaLanguageQueryValue);
|
| + kAlphaLanguageQueryName,
|
| + kAlphaLanguageQueryValue);
|
| }
|
| - AddApiKeyToUrl(&language_list_fetch_url);
|
| +
|
| VLOG(9) << "Fetch supporting language list from: "
|
| << language_list_fetch_url.spec().c_str();
|
|
|
| @@ -817,30 +835,31 @@ void TranslateManager::RequestTranslateScript() {
|
| return;
|
|
|
| GURL translate_script_url;
|
| - std::string translate_script;
|
| // Check if command-line contains an alternative URL for translate service.
|
| const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| if (command_line.HasSwitch(switches::kTranslateScriptURL)) {
|
| - translate_script = std::string(
|
| + translate_script_url = GURL(
|
| command_line.GetSwitchValueASCII(switches::kTranslateScriptURL));
|
| - translate_script_url = GURL(translate_script.c_str());
|
| if (!translate_script_url.is_valid() ||
|
| !translate_script_url.query().empty()) {
|
| LOG(WARNING) << "The following translate URL specified at the "
|
| - << "command-line is invalid: " << translate_script;
|
| - translate_script.clear();
|
| + << "command-line is invalid: "
|
| + << translate_script_url.spec();
|
| + translate_script_url = GURL();
|
| }
|
| }
|
| // Use default URL when command-line argument is not specified, or specified
|
| // URL is invalid.
|
| - if (translate_script.empty())
|
| - translate_script = std::string(kTranslateScriptURL);
|
| -
|
| - translate_script += std::string(kTranslateScriptQuery);
|
| - translate_script_url = GURL(base::StringPrintf(
|
| - translate_script.c_str(),
|
| - GetLanguageCode(g_browser_process->GetApplicationLocale()).c_str()));
|
| - AddApiKeyToUrl(&translate_script_url);
|
| + if (translate_script_url.is_empty())
|
| + translate_script_url = GURL(kTranslateScriptURL);
|
| +
|
| + translate_script_url = net::AppendQueryParameter(
|
| + translate_script_url,
|
| + kCallbackQueryName,
|
| + kCallbackQueryValue);
|
| + translate_script_url = AddHostLocaleToUrl(translate_script_url);
|
| + translate_script_url = AddApiKeyToUrl(translate_script_url);
|
| +
|
| translate_script_request_pending_.reset(net::URLFetcher::Create(
|
| 0, translate_script_url, net::URLFetcher::GET, this));
|
| translate_script_request_pending_->SetLoadFlags(
|
|
|