Index: chrome/android/java/src/org/chromium/chrome/browser/WebsiteSettingsPopup.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WebsiteSettingsPopup.java b/chrome/android/java/src/org/chromium/chrome/browser/WebsiteSettingsPopup.java |
index 77a1bd55f84d588fa8270214721931e1b20e78f0..887ea4a3047adc5958d18360f800856810c73741 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/WebsiteSettingsPopup.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/WebsiteSettingsPopup.java |
@@ -24,6 +24,7 @@ import android.widget.TextView; |
import org.chromium.base.CalledByNative; |
import org.chromium.chrome.R; |
+import org.chromium.content.browser.WebContentsObserverAndroid; |
import org.chromium.content_public.browser.WebContents; |
import java.net.URISyntaxException; |
@@ -56,10 +57,20 @@ public class WebsiteSettingsPopup implements OnClickListener { |
mDialog.setCanceledOnTouchOutside(true); |
// This needs to come after other member initialization. |
final long nativeWebsiteSettingsPopup = nativeInit(this, webContents); |
+ final WebContentsObserverAndroid webContentsObserver = |
+ new WebContentsObserverAndroid(mWebContents) { |
+ @Override |
+ public void navigationEntryCommitted() { |
+ // If a navigation is committed (e.g. from in-page redirect), the data we're |
+ // showing is stale so dismiss the dialog. |
+ mDialog.dismiss(); |
+ } |
+ }; |
mDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { |
@Override |
public void onDismiss(DialogInterface dialog) { |
assert nativeWebsiteSettingsPopup != 0; |
+ webContentsObserver.detachFromWebContents(); |
nativeDestroy(nativeWebsiteSettingsPopup); |
} |
}); |