diff options
Diffstat (limited to 'content/public/android/java')
2 files changed, 7 insertions, 4 deletions
diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java index f7a82e6..216be3a 100644 --- a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java @@ -331,10 +331,6 @@ import org.chromium.content_public.browser.WebContentsObserver; public void removeObserver(WebContentsObserver observer) { if (mObserverProxy == null) return; mObserverProxy.removeObserver(observer); - if (!mObserverProxy.hasObservers()) { - mObserverProxy.destroy(); - mObserverProxy = null; - } } // This is static to avoid exposing a public destroy method on the native side of this class. diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java index fdae8f3a..730379a 100644 --- a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java +++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java @@ -224,7 +224,14 @@ class WebContentsObserverProxy extends WebContentsObserver { // Java-based WebContents) are quite different, so we explicitly avoid // calling it here. ThreadUtils.assertOnUiThread(); + for (mObserversIterator.rewind(); mObserversIterator.hasNext();) { + mObserversIterator.next().destroy(); + } + // All observer destroy() implementations should result in their removal + // from the proxy. + assert mObservers.isEmpty(); mObservers.clear(); + if (mNativeWebContentsObserverProxy != 0) { nativeDestroy(mNativeWebContentsObserverProxy); mNativeWebContentsObserverProxy = 0; |