Index: chrome/browser/translate/translate_manager.cc |
diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc |
deleted file mode 100644 |
index 0868817233e0b63c704b7afcc4434c2d6ddaef43..0000000000000000000000000000000000000000 |
--- a/chrome/browser/translate/translate_manager.cc |
+++ /dev/null |
@@ -1,402 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/translate/translate_manager.h" |
- |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/metrics/field_trial.h" |
-#include "base/metrics/histogram.h" |
-#include "base/prefs/pref_service.h" |
-#include "base/strings/string_split.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/time/time.h" |
-#include "chrome/browser/translate/translate_tab_helper.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/browser_finder.h" |
-#include "chrome/browser/ui/browser_tabstrip.h" |
-#include "chrome/browser/ui/tabs/tab_strip_model.h" |
-#include "components/translate/core/browser/language_state.h" |
-#include "components/translate/core/browser/page_translated_details.h" |
-#include "components/translate/core/browser/translate_accept_languages.h" |
-#include "components/translate/core/browser/translate_browser_metrics.h" |
-#include "components/translate/core/browser/translate_client.h" |
-#include "components/translate/core/browser/translate_download_manager.h" |
-#include "components/translate/core/browser/translate_driver.h" |
-#include "components/translate/core/browser/translate_error_details.h" |
-#include "components/translate/core/browser/translate_language_list.h" |
-#include "components/translate/core/browser/translate_prefs.h" |
-#include "components/translate/core/browser/translate_script.h" |
-#include "components/translate/core/browser/translate_url_util.h" |
-#include "components/translate/core/common/language_detection_details.h" |
-#include "components/translate/core/common/translate_constants.h" |
-#include "components/translate/core/common/translate_pref_names.h" |
-#include "components/translate/core/common/translate_switches.h" |
-#include "content/public/browser/web_contents.h" |
-#include "net/base/url_util.h" |
-#include "net/http/http_status_code.h" |
- |
-using content::WebContents; |
- |
-namespace { |
- |
-// Callbacks for translate errors. |
-TranslateManager::TranslateErrorCallbackList* g_callback_list_ = NULL; |
- |
-const char kReportLanguageDetectionErrorURL[] = |
- "https://translate.google.com/translate_error?client=cr&action=langidc"; |
- |
-// Used in kReportLanguageDetectionErrorURL to specify the original page |
-// language. |
-const char kSourceLanguageQueryName[] = "sl"; |
- |
-// Used in kReportLanguageDetectionErrorURL to specify the page URL. |
-const char kUrlQueryName[] = "u"; |
- |
-// Notifies |g_callback_list_| of translate errors. |
-void NotifyTranslateError(const TranslateErrorDetails& details) { |
- if (!g_callback_list_) |
- return; |
- |
- g_callback_list_->Notify(details); |
-} |
- |
-} // namespace |
- |
-TranslateManager::~TranslateManager() {} |
- |
-// static |
-scoped_ptr<TranslateManager::TranslateErrorCallbackList::Subscription> |
-TranslateManager::RegisterTranslateErrorCallback( |
- const TranslateManager::TranslateErrorCallback& callback) { |
- if (!g_callback_list_) |
- g_callback_list_ = new TranslateErrorCallbackList; |
- return g_callback_list_->Add(callback); |
-} |
- |
-TranslateManager::TranslateManager( |
- TranslateTabHelper* helper, |
- const std::string& accept_languages_pref_name) |
- : accept_languages_pref_name_(accept_languages_pref_name), |
- translate_tab_helper_(helper), |
- translate_client_(helper), |
- translate_driver_(translate_client_->GetTranslateDriver()), |
- weak_method_factory_(this) {} |
- |
-void TranslateManager::InitiateTranslation(const std::string& page_lang) { |
- // Short-circuit out if not in a state where initiating translation makes |
- // sense (this method may be called muhtiple times for a given page). |
- LanguageState& language_state = translate_driver_->GetLanguageState(); |
- if (!language_state.page_needs_translation() || |
- language_state.translation_pending() || |
- language_state.translation_declined() || |
- language_state.IsPageTranslated()) { |
- return; |
- } |
- |
- PrefService* prefs = translate_client_->GetPrefs(); |
- if (!prefs->GetBoolean(prefs::kEnableTranslate)) { |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); |
- const std::string& locale = |
- TranslateDownloadManager::GetInstance()->application_locale(); |
- TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs(locale); |
- return; |
- } |
- |
- // Allow disabling of translate from the command line to assist with |
- // automated browser testing. |
- if (CommandLine::ForCurrentProcess()->HasSwitch( |
- translate::switches::kDisableTranslate)) { |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH); |
- return; |
- } |
- |
- // MHTML pages currently cannot be translated. |
- // See bug: 217945. |
- if (translate_driver_->GetContentsMimeType() == "multipart/related") { |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_MIME_TYPE_IS_NOT_SUPPORTED); |
- return; |
- } |
- |
- // Don't translate any Chrome specific page, e.g., New Tab Page, Download, |
- // History, and so on. |
- const GURL& page_url = translate_driver_->GetVisibleURL(); |
- if (!translate_client_->IsTranslatableURL(page_url)) { |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED); |
- return; |
- } |
- |
- // Get the accepted languages list. |
- std::vector<std::string> accept_languages_list; |
- base::SplitString(prefs->GetString(accept_languages_pref_name_.c_str()), ',', |
- &accept_languages_list); |
- |
- std::string target_lang = GetTargetLanguage(accept_languages_list); |
- std::string language_code = |
- TranslateDownloadManager::GetLanguageCode(page_lang); |
- |
- // Don't translate similar languages (ex: en-US to en). |
- if (language_code == target_lang) { |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); |
- return; |
- } |
- |
- // Nothing to do if either the language Chrome is in or the language of the |
- // page is not supported by the translation server. |
- if (target_lang.empty() || |
- !TranslateDownloadManager::IsSupportedLanguage(language_code)) { |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); |
- TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation( |
- language_code); |
- return; |
- } |
- |
- scoped_ptr<TranslatePrefs> translate_prefs( |
- translate_client_->GetTranslatePrefs()); |
- |
- TranslateAcceptLanguages* accept_languages = |
- translate_client_->GetTranslateAcceptLanguages(); |
- // Don't translate any user black-listed languages. |
- if (!translate_prefs->CanTranslateLanguage(accept_languages, |
- language_code)) { |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); |
- return; |
- } |
- |
- // Don't translate any user black-listed URLs. |
- if (translate_prefs->IsSiteBlacklisted(page_url.HostNoBrackets())) { |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); |
- return; |
- } |
- |
- // If the user has previously selected "always translate" for this language we |
- // automatically translate. Note that in incognito mode we disable that |
- // feature; the user will get an infobar, so they can control whether the |
- // page's text is sent to the translate server. |
- if (!translate_driver_->IsOffTheRecord()) { |
- std::string auto_target_lang = GetAutoTargetLanguage(language_code, prefs); |
- if (!auto_target_lang.empty()) { |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); |
- TranslatePage(language_code, auto_target_lang, false); |
- return; |
- } |
- } |
- |
- std::string auto_translate_to = language_state.AutoTranslateTo(); |
- if (!auto_translate_to.empty()) { |
- // This page was navigated through a click from a translated page. |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK); |
- TranslatePage(language_code, auto_translate_to, false); |
- return; |
- } |
- |
- TranslateBrowserMetrics::ReportInitiationStatus( |
- TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); |
- |
- // Prompts the user if he/she wants the page translated. |
- translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
- language_code, |
- target_lang, |
- TranslateErrors::NONE, |
- false); |
-} |
- |
-void TranslateManager::TranslatePage(const std::string& original_source_lang, |
- const std::string& target_lang, |
- bool triggered_from_menu) { |
- if (!translate_driver_->HasCurrentPage()) { |
- NOTREACHED(); |
- return; |
- } |
- |
- // Translation can be kicked by context menu against unsupported languages. |
- // Unsupported language strings should be replaced with |
- // kUnknownLanguageCode in order to send a translation request with enabling |
- // server side auto language detection. |
- std::string source_lang(original_source_lang); |
- if (!TranslateDownloadManager::IsSupportedLanguage(source_lang)) |
- source_lang = std::string(translate::kUnknownLanguageCode); |
- |
- translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_TRANSLATING, |
- source_lang, |
- target_lang, |
- TranslateErrors::NONE, |
- triggered_from_menu); |
- |
- TranslateScript* script = TranslateDownloadManager::GetInstance()->script(); |
- DCHECK(script != NULL); |
- |
- const std::string& script_data = script->data(); |
- if (!script_data.empty()) { |
- DoTranslatePage(script_data, source_lang, target_lang); |
- return; |
- } |
- |
- // The script is not available yet. Queue that request and query for the |
- // script. Once it is downloaded we'll do the translate. |
- TranslateScript::RequestCallback callback = |
- base::Bind(&TranslateManager::OnTranslateScriptFetchComplete, |
- weak_method_factory_.GetWeakPtr(), |
- translate_driver_->GetCurrentPageID(), |
- source_lang, |
- target_lang); |
- |
- script->Request(callback); |
-} |
- |
-void TranslateManager::RevertTranslation() { |
- translate_driver_->RevertTranslation(); |
- translate_driver_->GetLanguageState().SetCurrentLanguage( |
- translate_driver_->GetLanguageState().original_language()); |
-} |
- |
-void TranslateManager::ReportLanguageDetectionError() { |
- TranslateBrowserMetrics::ReportLanguageDetectionError(); |
- // We'll open the URL in a new tab so that the user can tell us more. |
- WebContents* web_contents = translate_tab_helper_->GetWebContents(); |
- Browser* browser = chrome::FindBrowserWithWebContents(web_contents); |
- if (!browser) { |
- NOTREACHED(); |
- return; |
- } |
- |
- GURL report_error_url = GURL(kReportLanguageDetectionErrorURL); |
- |
- report_error_url = |
- net::AppendQueryParameter(report_error_url, |
- kUrlQueryName, |
- translate_driver_->GetActiveURL().spec()); |
- |
- report_error_url = net::AppendQueryParameter( |
- report_error_url, |
- kSourceLanguageQueryName, |
- translate_driver_->GetLanguageState().original_language()); |
- |
- report_error_url = TranslateURLUtil::AddHostLocaleToUrl(report_error_url); |
- report_error_url = TranslateURLUtil::AddApiKeyToUrl(report_error_url); |
- |
- chrome::AddSelectedTabWithURL(browser, report_error_url, |
- content::PAGE_TRANSITION_AUTO_BOOKMARK); |
-} |
- |
-void TranslateManager::DoTranslatePage(const std::string& translate_script, |
- const std::string& source_lang, |
- const std::string& target_lang) { |
- translate_driver_->GetLanguageState().set_translation_pending(true); |
- translate_driver_->TranslatePage(translate_script, source_lang, target_lang); |
-} |
- |
-void TranslateManager::PageTranslated(const std::string& source_lang, |
- const std::string& target_lang, |
- TranslateErrors::Type error_type) { |
- translate_driver_->GetLanguageState().SetCurrentLanguage(target_lang); |
- translate_driver_->GetLanguageState().set_translation_pending(false); |
- |
- if ((error_type == TranslateErrors::NONE) && |
- source_lang != translate::kUnknownLanguageCode && |
- !TranslateDownloadManager::IsSupportedLanguage(source_lang)) { |
- error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; |
- } |
- |
- translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_AFTER_TRANSLATE, |
- source_lang, |
- target_lang, |
- error_type, |
- false); |
- |
- if (error_type != TranslateErrors::NONE && |
- !translate_driver_->IsOffTheRecord()) { |
- TranslateErrorDetails error_details; |
- error_details.time = base::Time::Now(); |
- error_details.url = translate_driver_->GetLastCommittedURL(); |
- error_details.error = error_type; |
- NotifyTranslateError(error_details); |
- } |
-} |
- |
-void TranslateManager::OnTranslateScriptFetchComplete( |
- int page_id, |
- const std::string& source_lang, |
- const std::string& target_lang, |
- bool success, |
- const std::string& data) { |
- if (!translate_driver_->HasCurrentPage() || |
- translate_driver_->GetCurrentPageID() != page_id) { |
- // We navigated away from the page the translation was triggered on. |
- return; |
- } |
- |
- if (success) { |
- // Translate the page. |
- TranslateScript* translate_script = |
- TranslateDownloadManager::GetInstance()->script(); |
- DCHECK(translate_script); |
- DoTranslatePage(translate_script->data(), source_lang, target_lang); |
- } else { |
- translate_client_->ShowTranslateUI( |
- translate::TRANSLATE_STEP_TRANSLATE_ERROR, |
- source_lang, |
- target_lang, |
- TranslateErrors::NETWORK, |
- false); |
- if (!translate_driver_->IsOffTheRecord()) { |
- TranslateErrorDetails error_details; |
- error_details.time = base::Time::Now(); |
- error_details.url = translate_driver_->GetActiveURL(); |
- error_details.error = TranslateErrors::NETWORK; |
- NotifyTranslateError(error_details); |
- } |
- } |
-} |
- |
-// static |
-std::string TranslateManager::GetTargetLanguage( |
- const std::vector<std::string>& accept_languages_list) { |
- std::string ui_lang = TranslatePrefs::ConvertLangCodeForTranslation( |
- TranslateDownloadManager::GetLanguageCode( |
- TranslateDownloadManager::GetInstance()->application_locale())); |
- |
- if (TranslateDownloadManager::IsSupportedLanguage(ui_lang)) |
- return ui_lang; |
- |
- // Will translate to the first supported language on the Accepted Language |
- // list or not at all if no such candidate exists |
- std::vector<std::string>::const_iterator iter; |
- for (iter = accept_languages_list.begin(); |
- iter != accept_languages_list.end(); ++iter) { |
- std::string lang_code = TranslateDownloadManager::GetLanguageCode(*iter); |
- if (TranslateDownloadManager::IsSupportedLanguage(lang_code)) |
- return lang_code; |
- } |
- return std::string(); |
-} |
- |
-// static |
-std::string TranslateManager::GetAutoTargetLanguage( |
- const std::string& original_language, |
- PrefService* prefs) { |
- std::string auto_target_lang; |
- scoped_ptr<TranslatePrefs> translate_prefs( |
- TranslateTabHelper::CreateTranslatePrefs(prefs)); |
- if (translate_prefs->ShouldAutoTranslate(original_language, |
- &auto_target_lang)) { |
- // We need to confirm that the saved target language is still supported. |
- // Also, GetLanguageCode will take care of removing country code if any. |
- auto_target_lang = |
- TranslateDownloadManager::GetLanguageCode(auto_target_lang); |
- if (TranslateDownloadManager::IsSupportedLanguage(auto_target_lang)) |
- return auto_target_lang; |
- } |
- return std::string(); |
-} |