| Index: chrome/browser/ui/android/infobars/translate_compact_infobar.cc
|
| diff --git a/chrome/browser/ui/android/infobars/translate_compact_infobar.cc b/chrome/browser/ui/android/infobars/translate_compact_infobar.cc
|
| index a7cafe9ecc8c8f8f166f131c5552078376f4892f..f4013c8460613524085fb9950bd9e3f78e75886e 100644
|
| --- a/chrome/browser/ui/android/infobars/translate_compact_infobar.cc
|
| +++ b/chrome/browser/ui/android/infobars/translate_compact_infobar.cc
|
| @@ -22,17 +22,12 @@ using base::android::ScopedJavaLocalRef;
|
|
|
| TranslateCompactInfoBar::TranslateCompactInfoBar(
|
| std::unique_ptr<translate::TranslateInfoBarDelegate> delegate)
|
| - : InfoBarAndroid(std::move(delegate)) {
|
| - // |translate_driver| must already be bound.
|
| - DCHECK(GetDelegate()->GetTranslateDriver());
|
| - translate_driver_ = static_cast<translate::ContentTranslateDriver*>(
|
| - GetDelegate()->GetTranslateDriver());
|
| - translate_driver_->AddObserver(this);
|
| + : InfoBarAndroid(std::move(delegate)), action_flags_(FLAG_NONE) {
|
| + GetDelegate()->SetObserver(this);
|
| }
|
|
|
| TranslateCompactInfoBar::~TranslateCompactInfoBar() {
|
| - DCHECK(translate_driver_);
|
| - translate_driver_->RemoveObserver(this);
|
| + GetDelegate()->SetObserver(nullptr);
|
| }
|
|
|
| ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar(
|
| @@ -67,6 +62,7 @@ void TranslateCompactInfoBar::ProcessButton(int action) {
|
| // TODO(ramyasharma): Handle other button clicks.
|
| translate::TranslateInfoBarDelegate* delegate = GetDelegate();
|
| if (action == InfoBarAndroid::ACTION_TRANSLATE) {
|
| + action_flags_ |= FLAG_TRANSLATE;
|
| delegate->Translate();
|
| if (!delegate->ShouldAlwaysTranslate() && ShouldAutoAlwaysTranslate()) {
|
| JNIEnv* env = base::android::AttachCurrentThread();
|
| @@ -74,6 +70,7 @@ void TranslateCompactInfoBar::ProcessButton(int action) {
|
| GetJavaInfoBar());
|
| }
|
| } else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) {
|
| + action_flags_ |= FLAG_REVERT;
|
| delegate->RevertTranslation();
|
| } else if (action == InfoBarAndroid::ACTION_CANCEL) {
|
| delegate->TranslationDeclined();
|
| @@ -119,14 +116,17 @@ void TranslateCompactInfoBar::ApplyBoolTranslateOption(
|
| translate::TranslateInfoBarDelegate* delegate = GetDelegate();
|
| if (option == TranslateUtils::OPTION_ALWAYS_TRANSLATE) {
|
| if (delegate->ShouldAlwaysTranslate() != value) {
|
| + action_flags_ |= FLAG_ALWAYS_TRANSLATE;
|
| delegate->ToggleAlwaysTranslate();
|
| }
|
| } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE) {
|
| if (value && delegate->IsTranslatableLanguageByPrefs()) {
|
| + action_flags_ |= FLAG_NEVER_LANGUAGE;
|
| delegate->ToggleTranslatableLanguageByPrefs();
|
| }
|
| } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE_SITE) {
|
| if (value && !delegate->IsSiteBlacklisted()) {
|
| + action_flags_ |= FLAG_NEVER_SITE;
|
| delegate->ToggleSiteBlacklist();
|
| }
|
| } else {
|
| @@ -134,19 +134,6 @@ void TranslateCompactInfoBar::ApplyBoolTranslateOption(
|
| }
|
| }
|
|
|
| -void TranslateCompactInfoBar::OnPageTranslated(
|
| - const std::string& original_lang,
|
| - const std::string& translated_lang,
|
| - translate::TranslateErrors::Type error_type) {
|
| - if (!owner())
|
| - return; // We're closing; don't call anything, it might access the owner.
|
| -
|
| - DCHECK(translate_driver_);
|
| - JNIEnv* env = base::android::AttachCurrentThread();
|
| - Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(),
|
| - error_type);
|
| -}
|
| -
|
| bool TranslateCompactInfoBar::ShouldAutoAlwaysTranslate() {
|
| translate::TranslateInfoBarDelegate* delegate = GetDelegate();
|
| return (delegate->GetTranslationAcceptedCount() == kAcceptCountThreshold);
|
| @@ -163,6 +150,24 @@ translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() {
|
| return delegate()->AsTranslateInfoBarDelegate();
|
| }
|
|
|
| +void TranslateCompactInfoBar::OnTranslateStepChanged(
|
| + translate::TranslateStep step,
|
| + translate::TranslateErrors::Type error_type) {
|
| + if (!owner())
|
| + return; // We're closing; don't call anything.
|
| +
|
| + if ((step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) ||
|
| + (step == translate::TRANSLATE_STEP_TRANSLATE_ERROR)) {
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(),
|
| + error_type);
|
| + }
|
| +}
|
| +
|
| +bool TranslateCompactInfoBar::IsDeclinedByUser() {
|
| + return action_flags_ == FLAG_NONE;
|
| +};
|
| +
|
| // Native JNI methods ---------------------------------------------------------
|
|
|
| // static
|
|
|