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

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

Issue 1150193004: Straighten up life cycle of native InfoBar pointers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed david's comments Created 5 years, 7 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
diff --git a/chrome/browser/ui/android/infobars/translate_infobar.cc b/chrome/browser/ui/android/infobars/translate_infobar.cc
index d287757448286d8d325ffb7e8be2adb3d2285b03..a2215e7d0b8b5c9ab3b0885b2a12bb9f2d774e2a 100644
--- a/chrome/browser/ui/android/infobars/translate_infobar.cc
+++ b/chrome/browser/ui/android/infobars/translate_infobar.cc
@@ -9,7 +9,7 @@
#include "base/android/jni_weak_ref.h"
#include "chrome/browser/translate/chrome_translate_client.h"
#include "components/translate/core/browser/translate_infobar_delegate.h"
-#include "jni/TranslateInfoBarDelegate_jni.h"
+#include "jni/TranslateInfoBar_jni.h"
// ChromeTranslateClient
// ----------------------------------------------------------
@@ -24,14 +24,17 @@ scoped_ptr<infobars::InfoBar> ChromeTranslateClient::CreateInfoBar(
TranslateInfoBar::TranslateInfoBar(
scoped_ptr<translate::TranslateInfoBarDelegate> delegate)
- : InfoBarAndroid(delegate.Pass()), java_translate_delegate_() {
+ : InfoBarAndroid(delegate.Pass()) {
}
TranslateInfoBar::~TranslateInfoBar() {
+ if (java_info_bar()) {
David Trainor- moved to gerrit 2015/06/03 19:38:46 Just override onNativeDestroyed() in java?
Changwan Ryu 2015/06/04 01:42:27 Done.
+ JNIEnv* env = base::android::AttachCurrentThread();
+ Java_TranslateInfoBar_onNativeDestroyed(env, java_info_bar());
+ }
}
ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) {
- java_translate_delegate_.Reset(Java_TranslateInfoBarDelegate_create(env));
translate::TranslateInfoBarDelegate* delegate = GetDelegate();
std::vector<base::string16> languages;
languages.reserve(delegate->num_languages());
@@ -40,10 +43,10 @@ ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) {
base::android::ScopedJavaLocalRef<jobjectArray> java_languages =
base::android::ToJavaArrayOfStrings(env, languages);
- return Java_TranslateInfoBarDelegate_showTranslateInfoBar(
- env, java_translate_delegate_.obj(), reinterpret_cast<intptr_t>(this),
- delegate->translate_step(), delegate->original_language_index(),
- delegate->target_language_index(), delegate->ShouldAlwaysTranslate(),
+ return Java_TranslateInfoBar_show(
+ env, delegate->translate_step(),
+ delegate->original_language_index(), delegate->target_language_index(),
+ delegate->ShouldAlwaysTranslate(),
ShouldDisplayNeverTranslateInfoBarOnCancel(),
delegate->triggered_from_menu(), java_languages.obj());
}
@@ -80,6 +83,14 @@ void TranslateInfoBar::PassJavaInfoBar(InfoBarAndroid* source) {
this, delegate->translate_step());
}
+void TranslateInfoBar::SetJavaInfoBar(
+ const base::android::JavaRef<jobject>& java_info_bar) {
+ InfoBarAndroid::SetJavaInfoBar(java_info_bar);
+ JNIEnv* env = base::android::AttachCurrentThread();
+ Java_TranslateInfoBar_setNativePtr(env, java_info_bar.obj(),
+ reinterpret_cast<intptr_t>(this));
+}
+
void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env,
jobject obj,
int source_language_index,
@@ -104,17 +115,9 @@ void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env,
void TranslateInfoBar::TransferOwnership(TranslateInfoBar* destination,
translate::TranslateStep new_type) {
JNIEnv* env = base::android::AttachCurrentThread();
- if (Java_TranslateInfoBarDelegate_changeTranslateInfoBarTypeAndPointer(
- env, java_translate_delegate_.obj(),
- reinterpret_cast<intptr_t>(destination), new_type)) {
- ReassignJavaInfoBar(destination);
- destination->SetJavaDelegate(java_translate_delegate_.Release());
- }
-}
-
-void TranslateInfoBar::SetJavaDelegate(jobject delegate) {
- JNIEnv* env = base::android::AttachCurrentThread();
- java_translate_delegate_.Reset(env, delegate);
+ Java_TranslateInfoBar_changeTranslateInfoBarType(env, java_info_bar(),
+ new_type);
+ ReassignJavaInfoBar(destination);
}
bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() {

Powered by Google App Engine
This is Rietveld 408576698