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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java

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/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java
index bbfa1820c22aab12a54a743c8d6f0ba11328a4c8..145222b866c248d6f12b00d6dc1ed20ca33d1d7c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java
@@ -13,6 +13,7 @@ import android.text.style.ClickableSpan;
import android.view.View;
import android.widget.CheckBox;
+import org.chromium.base.CalledByNative;
import org.chromium.chrome.R;
import org.chromium.ui.base.DeviceFormFactor;
@@ -34,25 +35,30 @@ public class TranslateInfoBar extends InfoBar implements SubPanelListener {
public static final int ALWAYS_PANEL = 3;
public static final int MAX_PANEL_INDEX = 4;
+ private long mNativeTranslateInfoBarPtr;
private int mInfoBarType;
private final TranslateOptions mOptions;
private int mOptionsPanelViewType;
private TranslateSubPanel mSubPanel;
private final boolean mShouldShowNeverBar;
- private final TranslateInfoBarDelegate mTranslateDelegate;
- public TranslateInfoBar(long nativeInfoBarPtr, TranslateInfoBarDelegate delegate,
- int infoBarType, int sourceLanguageIndex, int targetLanguageIndex,
- boolean autoTranslatePair, boolean shouldShowNeverBar,
+ @CalledByNative
+ private static InfoBar show(int translateBarType, int sourceLanguageIndex,
+ int targetLanguageIndex, boolean autoTranslatePair, boolean showNeverInfobar,
boolean triggeredFromMenu, String[] languages) {
+ return new TranslateInfoBar(translateBarType, sourceLanguageIndex, targetLanguageIndex,
+ autoTranslatePair, showNeverInfobar, triggeredFromMenu, languages);
+ }
+
+ public TranslateInfoBar(int infoBarType, int sourceLanguageIndex, int targetLanguageIndex,
David Trainor- moved to gerrit 2015/06/03 19:38:45 Javadoc. Or make private because it's built from
Changwan Ryu 2015/06/04 01:42:27 Changed to private.
+ boolean autoTranslatePair, boolean shouldShowNeverBar, boolean triggeredFromMenu,
+ String[] languages) {
super(null, R.drawable.infobar_translate, null, null);
- mTranslateDelegate = delegate;
mOptions = new TranslateOptions(sourceLanguageIndex, targetLanguageIndex, languages,
autoTranslatePair, triggeredFromMenu);
mInfoBarType = infoBarType;
mShouldShowNeverBar = shouldShowNeverBar;
mOptionsPanelViewType = NO_PANEL;
- setNativeInfoBar(nativeInfoBarPtr);
}
@Override
@@ -61,7 +67,7 @@ public class TranslateInfoBar extends InfoBar implements SubPanelListener {
// Make it behave exactly as the Nope Button.
onButtonClicked(false);
} else {
- nativeOnCloseButtonClicked(mNativeInfoBarPtr);
+ super.onCloseButtonClicked();
}
}
@@ -208,8 +214,7 @@ public class TranslateInfoBar extends InfoBar implements SubPanelListener {
// We need to re-check if the pointer is null now because applying options (like never
// translate this site) can sometimes trigger closing the InfoBar.
- if (mNativeInfoBarPtr == 0) return;
- nativeOnButtonClicked(mNativeInfoBarPtr, action, "");
+ onButtonClicked(action, "");
}
@Override
@@ -226,15 +231,12 @@ public class TranslateInfoBar extends InfoBar implements SubPanelListener {
@Override
public void onOptionsChanged() {
- if (mNativeInfoBarPtr == 0) return;
+ if (mNativeTranslateInfoBarPtr == 0) return;
if (mOptions.optionsChanged()) {
- mTranslateDelegate.applyTranslateOptions(mNativeInfoBarPtr,
- mOptions.sourceLanguageIndex(),
- mOptions.targetLanguageIndex(),
- mOptions.alwaysTranslateLanguageState(),
- mOptions.neverTranslateLanguageState(),
- mOptions.neverTranslateDomainState());
+ nativeApplyTranslateOptions(mNativeTranslateInfoBarPtr, mOptions.sourceLanguageIndex(),
+ mOptions.targetLanguageIndex(), mOptions.alwaysTranslateLanguageState(),
+ mOptions.neverTranslateLanguageState(), mOptions.neverTranslateDomainState());
}
}
@@ -331,13 +333,33 @@ public class TranslateInfoBar extends InfoBar implements SubPanelListener {
return mInfoBarType;
}
- void changeInfoBarTypeAndNativePointer(int infoBarType, long newNativePointer) {
+ @CalledByNative
+ private void setNativePtr(long nativePtr) {
+ mNativeTranslateInfoBarPtr = nativePtr;
+ }
+
+ @CalledByNative
+ private void onNativeDestroyed() {
David Trainor- moved to gerrit 2015/06/03 19:38:45 Same comment as before
Changwan Ryu 2015/06/04 01:42:27 Done.
+ mNativeTranslateInfoBarPtr = 0;
+ }
+
+ @CalledByNative
+ private void changeTranslateInfoBarType(int infoBarType) {
if (infoBarType >= 0 && infoBarType < MAX_INFOBAR_INDEX) {
mInfoBarType = infoBarType;
- replaceNativePointer(newNativePointer);
updateViewForCurrentState(createView());
} else {
assert false : "Trying to change the InfoBar to a type that is invalid.";
}
}
+
+ @Override
+ protected void finalize() throws Throwable {
David Trainor- moved to gerrit 2015/06/03 19:38:45 Same comment as before
Changwan Ryu 2015/06/04 01:42:27 Done.
+ assert mNativeTranslateInfoBarPtr == 0;
+ super.finalize();
+ }
+
+ private native void nativeApplyTranslateOptions(long nativeTranslateInfoBar,
+ int sourceLanguageIndex, int targetLanguageIndex, boolean alwaysTranslate,
+ boolean neverTranslateLanguage, boolean neverTranslateSite);
}

Powered by Google App Engine
This is Rietveld 408576698