summaryrefslogtreecommitdiff
path: root/chromium/weblayer/browser/translate_client_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/weblayer/browser/translate_client_impl.cc')
-rw-r--r--chromium/weblayer/browser/translate_client_impl.cc38
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