Straighten up life cycle of native InfoBar pointers
commit6e63752fcab8553a3b84c5ecf6a356240dacb6e4
authorchangwan <changwan@chromium.org>
Fri, 5 Jun 2015 06:07:06 +0000 (4 23:07 -0700)
committerCommit bot <commit-bot@chromium.org>
Fri, 5 Jun 2015 06:08:46 +0000 (5 06:08 +0000)
tree40dff64c3c32a5c7ad6fb3bc55fb4955769c6cd0
parent71222592e93288a1610c31ff6402689188bf719e
Straighten up life cycle of native InfoBar pointers

Currently, there are two issues for potential crashes.

1. There is a chance that Java InfoBars can access native counterparts
even after they are destroyed.

mNativeInfoBarPtr is never reset even after native InfoBar is destroyed.
We do not accept touch inputs after closing infobars, but there may be
corner cases where mNativeInfoBarPtr is accessed afterwards.

2. Infobars aren't setting "base" native pointers correctly.

InfoBar_jni.h has the following code:

InfoBarAndroid* native =
    reinterpret_cast<InfoBarAndroid*>(nativeInfoBarAndroid);

Here, nativeInfoBarAndroid refers to the subclass, so we implicitly upcast
the pointer using reinterpret_cast<>, which may result in pointing to
an incorrect pointer depending on the architecture.

In order to prevent any such occurrence in the future,
this also prevents InfoBar Java subclasses from accessing
the native base pointer and functions.

BUG=492777, 481758

Review URL: https://codereview.chromium.org/1150193004

Cr-Commit-Position: refs/heads/master@{#333015}
30 files changed:
chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/AccountChooserInfoBar.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/AppBannerInfoBarAndroid.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/ConfirmInfoBar.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/ConfirmInfoBarDelegate.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/DataReductionProxyInfoBar.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/DataReductionProxyInfoBarDelegate.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/DownloadOverwriteInfoBar.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/GeneratedPasswordSavedInfoBar.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/GeneratedPasswordSavedInfoBarDelegate.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBar.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/MessageInfoBar.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/SavePasswordInfoBar.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java
chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBarDelegate.java [deleted file]
chrome/android/java_staging/src/org/chromium/chrome/browser/omaha/OmahaUpdateInfobar.java
chrome/browser/ui/android/infobars/account_chooser_infobar.cc
chrome/browser/ui/android/infobars/account_chooser_infobar.h
chrome/browser/ui/android/infobars/app_banner_infobar_android.cc
chrome/browser/ui/android/infobars/confirm_infobar.cc
chrome/browser/ui/android/infobars/data_reduction_proxy_infobar.cc
chrome/browser/ui/android/infobars/download_overwrite_infobar.cc
chrome/browser/ui/android/infobars/generated_password_saved_infobar.cc
chrome/browser/ui/android/infobars/infobar_android.cc
chrome/browser/ui/android/infobars/infobar_android.h
chrome/browser/ui/android/infobars/infobar_container_android.cc
chrome/browser/ui/android/infobars/save_password_infobar.cc
chrome/browser/ui/android/infobars/translate_infobar.cc
chrome/browser/ui/android/infobars/translate_infobar.h
chrome/chrome_browser.gypi