| Index: chrome/browser/translate/translate_manager.cc
|
| diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc
|
| index 493f94be86ee117f97f4386fbca8f42d5a8ef187..945288949f3cf35a397dac6602aee088c20a4075 100644
|
| --- a/chrome/browser/translate/translate_manager.cc
|
| +++ b/chrome/browser/translate/translate_manager.cc
|
| @@ -165,37 +165,6 @@ void TranslateManager::Observe(int type,
|
| 0));
|
| break;
|
| }
|
| - case chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED: {
|
| - const LanguageDetectionDetails* lang_det_details =
|
| - content::Details<const LanguageDetectionDetails>(details).ptr();
|
| -
|
| - WebContents* tab = content::Source<WebContents>(source).ptr();
|
| - DCHECK_EQ(translate_tab_helper_->GetWebContents(), tab);
|
| -
|
| - if (!translate_tab_helper_->GetWebContents())
|
| - return;
|
| -
|
| - // We may get this notifications multiple times. Make sure to translate
|
| - // only once.
|
| - LanguageState& language_state = translate_driver_->GetLanguageState();
|
| - if (language_state.page_needs_translation() &&
|
| - !language_state.translation_pending() &&
|
| - !language_state.translation_declined() &&
|
| - !language_state.IsPageTranslated()) {
|
| - std::string language = lang_det_details->adopted_language;
|
| - InitiateTranslation(language);
|
| - }
|
| - break;
|
| - }
|
| - case chrome::NOTIFICATION_PAGE_TRANSLATED: {
|
| - // Only add translate infobar if it doesn't exist; if it already exists,
|
| - // just update the state, the actual infobar would have received the same
|
| - // notification and update the visual display accordingly.
|
| - PageTranslatedDetails* page_translated_details =
|
| - content::Details<PageTranslatedDetails>(details).ptr();
|
| - PageTranslated(page_translated_details);
|
| - break;
|
| - }
|
| default:
|
| NOTREACHED();
|
| }
|
| @@ -225,15 +194,19 @@ TranslateManager::TranslateManager(
|
| notification_registrar_.Add(
|
| this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
|
| content::Source<NavigationController>(&web_contents->GetController()));
|
| - notification_registrar_.Add(this,
|
| - chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED,
|
| - content::Source<WebContents>(web_contents));
|
| - notification_registrar_.Add(this,
|
| - chrome::NOTIFICATION_PAGE_TRANSLATED,
|
| - content::Source<WebContents>(web_contents));
|
| }
|
|
|
| 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(
|
| @@ -332,7 +305,6 @@ void TranslateManager::InitiateTranslation(const std::string& page_lang) {
|
| }
|
| }
|
|
|
| - LanguageState& language_state = translate_driver_->GetLanguageState();
|
| std::string auto_translate_to = language_state.AutoTranslateTo();
|
| if (!auto_translate_to.empty()) {
|
| // This page was navigated through a click from a translated page.
|
| @@ -467,29 +439,31 @@ void TranslateManager::DoTranslatePage(const std::string& translate_script,
|
| translate_driver_->TranslatePage(translate_script, source_lang, target_lang);
|
| }
|
|
|
| -void TranslateManager::PageTranslated(PageTranslatedDetails* details) {
|
| - if ((details->error_type == TranslateErrors::NONE) &&
|
| - details->source_language != translate::kUnknownLanguageCode &&
|
| - !TranslateDownloadManager::IsSupportedLanguage(
|
| - details->source_language)) {
|
| - details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE;
|
| - }
|
| +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);
|
|
|
| - DCHECK(translate_tab_helper_->GetWebContents());
|
| + 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,
|
| - details->source_language,
|
| - details->target_language,
|
| - details->error_type,
|
| + source_lang,
|
| + target_lang,
|
| + error_type,
|
| false);
|
|
|
| WebContents* web_contents = translate_tab_helper_->GetWebContents();
|
| - if (details->error_type != TranslateErrors::NONE &&
|
| + if (error_type != TranslateErrors::NONE &&
|
| !translate_driver_->IsOffTheRecord()) {
|
| TranslateErrorDetails error_details;
|
| error_details.time = base::Time::Now();
|
| error_details.url = web_contents->GetLastCommittedURL();
|
| - error_details.error = details->error_type;
|
| + error_details.error = error_type;
|
| NotifyTranslateError(error_details);
|
| }
|
| }
|
|
|