diff options
Diffstat (limited to 'chromium/weblayer/browser/translate_client_impl.cc')
-rw-r--r-- | chromium/weblayer/browser/translate_client_impl.cc | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/chromium/weblayer/browser/translate_client_impl.cc b/chromium/weblayer/browser/translate_client_impl.cc index 8166e11b1ab..dbe11d68bbc 100644 --- a/chromium/weblayer/browser/translate_client_impl.cc +++ b/chromium/weblayer/browser/translate_client_impl.cc @@ -7,6 +7,7 @@ #include <memory> #include <vector> +#include "build/build_config.h" #include "components/infobars/core/infobar.h" #include "components/language/core/browser/pref_names.h" #include "components/translate/content/browser/content_translate_driver.h" @@ -21,6 +22,11 @@ #include "weblayer/browser/translate_accept_languages_factory.h" #include "weblayer/browser/translate_ranker_factory.h" +#if defined(OS_ANDROID) +#include "weblayer/browser/infobar_service.h" +#include "weblayer/browser/translate_compact_infobar.h" +#endif + namespace weblayer { namespace { @@ -54,6 +60,7 @@ TranslateClientImpl::TranslateClientImpl(content::WebContents* web_contents) TranslateRankerFactory::GetForBrowserContext( web_contents->GetBrowserContext()), /*language_model=*/nullptr)) { + observer_.Add(&translate_driver_); translate_driver_.set_translate_manager(translate_manager_.get()); } @@ -69,6 +76,18 @@ bool TranslateClientImpl::ShowTranslateUI( const std::string& target_language, translate::TranslateErrors::Type error_type, bool triggered_from_menu) { + if (error_type != translate::TranslateErrors::NONE) + step = translate::TRANSLATE_STEP_TRANSLATE_ERROR; + +#if defined(OS_ANDROID) + translate::TranslateInfoBarDelegate::Create( + step != translate::TRANSLATE_STEP_BEFORE_TRANSLATE, + translate_manager_->GetWeakPtr(), + InfoBarService::FromWebContents(web_contents()), + web_contents()->GetBrowserContext()->IsOffTheRecord(), step, + source_language, target_language, error_type, triggered_from_menu); + return true; +#endif return false; } @@ -100,8 +119,7 @@ TranslateClientImpl::GetTranslateAcceptLanguages() { #if defined(OS_ANDROID) std::unique_ptr<infobars::InfoBar> TranslateClientImpl::CreateInfoBar( std::unique_ptr<translate::TranslateInfoBarDelegate> delegate) const { - NOTREACHED(); - return nullptr; + return std::make_unique<TranslateCompactInfoBar>(std::move(delegate)); } int TranslateClientImpl::GetInfobarIconID() const { @@ -119,6 +137,22 @@ void TranslateClientImpl::ShowReportLanguageDetectionErrorUI( NOTREACHED(); } +void TranslateClientImpl::OnLanguageDetermined( + const translate::LanguageDetectionDetails& details) { + if (manual_translate_on_ready_) { + GetTranslateManager()->InitiateManualTranslation(); + manual_translate_on_ready_ = false; + } +} + +void TranslateClientImpl::ManualTranslateWhenReady() { + if (GetLanguageState().original_language().empty()) { + manual_translate_on_ready_ = true; + } else { + GetTranslateManager()->InitiateManualTranslation(); + } +} + void TranslateClientImpl::WebContentsDestroyed() { // Translation process can be interrupted. // Destroying the TranslateManager now guarantees that it never has to deal |