[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;
     }
 }