[Zine] Fixing crash when SnippetsBridge is accessed after being destroyed
Replacing suggestion source with an empty suggestions source, once
SuggestionsUiDelegateImpl is destroyed.
Bug: 898078
Change-Id: Ic6f05da92e0c90f566275d4b9f0e1fb12afeb2a6
Reviewed-on: https://chromium-review.googlesource.com/c/1324611
Reviewed-by: Theresa <twellington@chromium.org>
Commit-Queue: Filip Gorski <fgorski@chromium.org>
Cr-Commit-Position: refs/heads/master@{#606264}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsUiDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsUiDelegateImpl.java
index e6d83c6..fb2b4c6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsUiDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsUiDelegateImpl.java
@@ -8,6 +8,7 @@
import org.chromium.base.DiscardableReferencePool;
import org.chromium.chrome.browser.native_page.NativePageHost;
+import org.chromium.chrome.browser.ntp.snippets.EmptySuggestionsSource;
import org.chromium.chrome.browser.ntp.snippets.SuggestionsSource;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.snackbar.SnackbarManager;
@@ -20,7 +21,7 @@
*/
public class SuggestionsUiDelegateImpl implements SuggestionsUiDelegate {
private final List<DestructionObserver> mDestructionObservers = new ArrayList<>();
- private final SuggestionsSource mSuggestionsSource;
+ private SuggestionsSource mSuggestionsSource;
private final SuggestionsRanker mSuggestionsRanker;
private final SuggestionsEventReporter mSuggestionsEventReporter;
private final SuggestionsNavigationDelegate mSuggestionsNavigationDelegate;
@@ -107,6 +108,10 @@
// while they are called.
mSuggestionsSource.destroy();
+ // Now replacing suggestions source with an empty one, which serves as a sentinel here.
+ // This prevents crashes when SnippetsBridge being access after being destroyed.
+ mSuggestionsSource = new EmptySuggestionsSource();
+
mIsDestroyed = true;
}
}