Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2007)

Unified Diff: chrome/browser/ui/android/infobars/translate_infobar.cc

Issue 22694006: Infobar system refactor. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/android/infobars/translate_infobar.cc
===================================================================
--- chrome/browser/ui/android/infobars/translate_infobar.cc (revision 226624)
+++ chrome/browser/ui/android/infobars/translate_infobar.cc (working copy)
@@ -12,131 +12,133 @@
#include "jni/TranslateInfoBarDelegate_jni.h"
#include "ui/base/l10n/l10n_util.h"
-using base::android::AttachCurrentThread;
-using base::android::ScopedJavaLocalRef;
+// TranslateInfoBarDelegate ---------------------------------------------------
+
// static
-InfoBar* TranslateInfoBarDelegate::CreateInfoBar(InfoBarService* owner) {
- return new TranslateInfoBar(owner, this);
+scoped_ptr<InfoBar> TranslateInfoBarDelegate::CreateInfoBar(
+ scoped_ptr<TranslateInfoBarDelegate> delegate) {
+ return scoped_ptr<InfoBar>(new TranslateInfoBar(delegate.Pass()));
}
-TranslateInfoBar::TranslateInfoBar(InfoBarService* owner,
- TranslateInfoBarDelegate* delegate)
- : InfoBarAndroid(owner, delegate),
- delegate_(delegate),
+
+// TranslateInfoBar -----------------------------------------------------------
+
+TranslateInfoBar::TranslateInfoBar(
+ scoped_ptr<TranslateInfoBarDelegate> delegate)
+ : InfoBarAndroid(delegate.PassAs<InfoBarDelegate>()),
java_translate_delegate_() {}
TranslateInfoBar::~TranslateInfoBar() {
}
-ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) {
+void TranslateInfoBar::ApplyTranslateOptions(
+ JNIEnv* env,
+ jobject obj,
+ int source_language_index,
+ int target_language_index,
+ bool always_translate,
+ bool never_translate_language,
+ bool never_translate_site) {
+ TranslateInfoBarDelegate* delegate = GetDelegate();
+ delegate->set_original_language_index(source_language_index);
+ delegate->set_target_language_index(target_language_index);
+ if (delegate->ShouldAlwaysTranslate() != always_translate)
+ delegate->ToggleAlwaysTranslate();
+ if (never_translate_language && delegate->IsTranslatableLanguageByPrefs())
+ delegate->ToggleTranslatableLanguageByPrefs();
+ if (never_translate_site && !delegate->IsSiteBlacklisted())
+ delegate->ToggleSiteBlacklist();
+}
+
+base::android::ScopedJavaLocalRef<jobject>
+ TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) {
java_translate_delegate_.Reset(Java_TranslateInfoBarDelegate_create(env));
- ScopedJavaLocalRef<jobject> java_infobar;
- std::vector<string16> languages(delegate_->num_languages());
- for (size_t i = 0; i < delegate_->num_languages(); ++i) {
- languages[i] = delegate_->language_name_at(i);
- }
- ScopedJavaLocalRef<jobjectArray> java_languages =
+ base::android::ScopedJavaLocalRef<jobject> java_infobar;
+ TranslateInfoBarDelegate* delegate = GetDelegate();
+ std::vector<string16> languages;
+ languages.reserve(delegate->num_languages());
+ for (size_t i = 0; i < delegate->num_languages(); ++i)
+ languages.push_back(delegate->language_name_at(i));
+ base::android::ScopedJavaLocalRef<jobjectArray> java_languages =
base::android::ToJavaArrayOfStrings(env, languages);
+ return Java_TranslateInfoBarDelegate_showTranslateInfoBar(
+ env, java_translate_delegate_.obj(), reinterpret_cast<jint>(this),
+ delegate->infobar_type(), delegate->original_language_index(),
+ delegate->target_language_index(), delegate->ShouldAlwaysTranslate(),
+ ShouldDisplayNeverInfoBarOnNope(), java_languages.obj());
+}
- java_infobar = Java_TranslateInfoBarDelegate_showTranslateInfoBar(
- env,
- java_translate_delegate_.obj(),
- reinterpret_cast<jint>(this),
- delegate_->infobar_type(),
- delegate_->original_language_index(),
- delegate_->target_language_index(),
- delegate_->ShouldAlwaysTranslate(),
- ShouldDisplayNeverInfoBarOnNope(),
- java_languages.obj());
+void TranslateInfoBar::ProcessButton(int action,
+ const std::string& action_value) {
+ // TODO(pkasting): The subsequent check isn't necessary if Android infobar
+ // buttons become unclickable once the infobar is unowned.
+ if (!owner())
+ return; // We're closing; don't call anything, it might access the owner.
- return java_infobar;
-}
-
-void TranslateInfoBar::ProcessButton(
- int action, const std::string& action_value) {
+ TranslateInfoBarDelegate* delegate = GetDelegate();
if (action == InfoBarAndroid::ACTION_TRANSLATE) {
- delegate_->Translate();
- } else if (action == InfoBarAndroid::ACTION_CANCEL) {
- delegate_->TranslationDeclined();
- } else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) {
- delegate_->RevertTranslation();
- } else if (action != InfoBarAndroid::ACTION_NONE) {
- NOTREACHED();
+ delegate->Translate();
+ return;
}
- if (action != InfoBarAndroid::ACTION_TRANSLATE) {
- // do not close the infobar upon translate
- // since it will be replaced by a different one
- // which will close this current infobar.
- CloseInfoBar();
- }
-}
+ if (action == InfoBarAndroid::ACTION_CANCEL)
+ delegate->TranslationDeclined();
+ else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL)
+ delegate->RevertTranslation();
+ else
+ DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action);
-void TranslateInfoBar::SetJavaDelegate(jobject delegate) {
- JNIEnv* env = AttachCurrentThread();
- java_translate_delegate_.Reset(env, delegate);
+ // Do not close the infobar upon translate, since it will be replaced by a
+ // different one which will close this infobar.
+ CloseInfoBar();
}
void TranslateInfoBar::PassJavaInfoBar(InfoBarAndroid* source) {
- if (delegate_->infobar_type() != TranslateInfoBarDelegate::TRANSLATING &&
- delegate_->infobar_type() != TranslateInfoBarDelegate::AFTER_TRANSLATE &&
- delegate_->infobar_type() !=
- TranslateInfoBarDelegate::TRANSLATION_ERROR) {
+ TranslateInfoBarDelegate* delegate = GetDelegate();
+ if (delegate->infobar_type() != TranslateInfoBarDelegate::TRANSLATING &&
+ delegate->infobar_type() != TranslateInfoBarDelegate::AFTER_TRANSLATE &&
+ delegate->infobar_type() != TranslateInfoBarDelegate::TRANSLATION_ERROR)
return;
- }
- DCHECK(source != NULL);
- TranslateInfoBar* source_infobar = static_cast<TranslateInfoBar*>(source);
// Ask the former bar to transfer ownership to us.
- source_infobar->TransferOwnership(this, delegate_->infobar_type());
+ DCHECK(source != NULL);
+ static_cast<TranslateInfoBar*>(source)->TransferOwnership(
+ this, delegate->infobar_type());
}
+bool TranslateInfoBar::ShouldDisplayNeverInfoBarOnNope() {
+ TranslateInfoBarDelegate* delegate = GetDelegate();
+ return
+ (delegate->infobar_type() ==
+ TranslateInfoBarDelegate::BEFORE_TRANSLATE) &&
+ delegate->ShouldShowNeverTranslateShortcut();
+}
+
+void TranslateInfoBar::SetJavaDelegate(jobject delegate) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ java_translate_delegate_.Reset(env, delegate);
+}
+
void TranslateInfoBar::TransferOwnership(
TranslateInfoBar* destination,
TranslateInfoBarDelegate::Type new_type) {
- JNIEnv* env = AttachCurrentThread();
+ JNIEnv* env = base::android::AttachCurrentThread();
if (Java_TranslateInfoBarDelegate_changeTranslateInfoBarTypeAndPointer(
- env,
- java_translate_delegate_.obj(),
- reinterpret_cast<jint>(destination),
- new_type)) {
+ env, java_translate_delegate_.obj(), reinterpret_cast<jint>(destination),
+ new_type)) {
ReassignJavaInfoBar(destination);
destination->SetJavaDelegate(java_translate_delegate_.Release());
}
}
-bool TranslateInfoBar::ShouldDisplayNeverInfoBarOnNope() {
- return
- (delegate_->infobar_type() == TranslateInfoBarDelegate::BEFORE_TRANSLATE)
- && (delegate_->ShouldShowNeverTranslateShortcut());
+TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() {
+ return delegate()->AsTranslateInfoBarDelegate();
}
-// -----------------------------------------------------------------------------
-// Native JNI methods for the translate delegate.
-// -----------------------------------------------------------------------------
-void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env, jobject obj,
- int source_language_index, int target_language_index,
- bool always_translate, bool never_translate_language,
- bool never_translate_site) {
- if (delegate_->original_language_index() !=
- static_cast<size_t>(source_language_index))
- delegate_->set_original_language_index(source_language_index);
- if (delegate_->target_language_index() !=
- static_cast<size_t>(target_language_index))
- delegate_->set_target_language_index(target_language_index);
+// Native JNI methods ---------------------------------------------------------
- if (delegate_->ShouldAlwaysTranslate() != always_translate)
- delegate_->ToggleAlwaysTranslate();
-
- if (never_translate_language && delegate_->IsTranslatableLanguageByPrefs())
- delegate_->ToggleTranslatableLanguageByPrefs();
-
- if (never_translate_site && !delegate_->IsSiteBlacklisted())
- delegate_->ToggleSiteBlacklist();
-}
-
bool RegisterTranslateInfoBarDelegate(JNIEnv* env) {
return RegisterNativesImpl(env);
}

Powered by Google App Engine
This is Rietveld 408576698