[Paint Preview] Fix NullPointerException crash

(cherry picked from commit 53d0ad6a9daf40e62ba936be8b9d7172d517485f)

Bug: 1135054
Change-Id: Idec0ddfab4877137e6a7deca395370b6619a9206
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2450717
Commit-Queue: Mehran Mahmoudi <[email protected]>
Commit-Queue: Michael Thiessen <[email protected]>
Reviewed-by: Michael Thiessen <[email protected]>
Reviewed-by: Calder Kitagawa <[email protected]>
Auto-Submit: Mehran Mahmoudi <[email protected]>
Cr-Original-Commit-Position: refs/heads/master@{#813948}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2456546
Reviewed-by: Mehran Mahmoudi <[email protected]>
Cr-Commit-Position: refs/branch-heads/4280@{#72}
Cr-Branched-From: ea420fb963f9658c9969b6513c56b8f47efa1a2a-refs/heads/master@{#812852}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index 9de0d5d..9cafb3f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -1488,7 +1488,8 @@
         mInactivityTracker = new ChromeInactivityTracker(
                 ChromePreferenceKeys.TABBED_ACTIVITY_LAST_BACKGROUNDED_TIME_MS_PREF);
         PaintPreviewHelper.initialize(
-                this, getTabModelSelector(), () -> getToolbarManager().getProgressBarCoordinator());
+                this, getTabModelSelector(), () -> getToolbarManager() == null ? null :
+                 getToolbarManager().getProgressBarCoordinator());
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewHelper.java
index 2612be83..9bcf59a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewHelper.java
@@ -41,9 +41,9 @@
     private static boolean sHasAttemptedToShowOnRestore;
 
     /**
-     * A map for keeping Activity-specific variables and classes. New entries are added on calls
-     * to {@link #initialize(ChromeActivity, TabModelSelector)}. Entries are automatically removed
-     * when their respective Activity is destroyed.
+     * A map for keeping Activity-specific variables and classes. New entries are added on calls to
+     * {@link #initialize(ChromeActivity, TabModelSelector)}. Entries are automatically removed when
+     * their respective Activity is destroyed.
      */
     private static Map<WindowAndroid, PaintPreviewWindowAndroidHelper> sWindowAndroidHelperMap =
             new HashMap<>();
@@ -51,7 +51,8 @@
     /**
      * Initializes the logic required for the Paint Preview on startup feature. Mainly, observes a
      * {@link TabModelSelector} to monitor for initialization completion.
-     * @param activity The ChromeActivity that corresponds to the tabModelSelector.
+     *
+     * @param activity         The ChromeActivity that corresponds to the tabModelSelector.
      * @param tabModelSelector The TabModelSelector to observe.
      */
     public static void initialize(ChromeActivity<?> activity, TabModelSelector tabModelSelector,
@@ -99,13 +100,17 @@
         player.setBrowserVisibilityDelegate(
                 windowAndroidHelper.getBrowserControlsManager().getBrowserVisibilityDelegate());
         player.setProgressSimulatorNeededCallback(
-                ()
-                        -> windowAndroidHelper.getLoadProgressCoordinator()
-                                   .simulateLoadProgressCompletion());
+                () -> {
+                    if (windowAndroidHelper.getLoadProgressCoordinator() == null) return;
+                    windowAndroidHelper.getLoadProgressCoordinator()
+                            .simulateLoadProgressCompletion();
+                });
         player.setProgressbarUpdatePreventionCallback(
-                (preventProgressbar)
-                        -> windowAndroidHelper.getLoadProgressCoordinator().setPreventUpdates(
-                                preventProgressbar));
+                (preventProgressbar) -> {
+                    if (windowAndroidHelper.getLoadProgressCoordinator() == null) return;
+                    windowAndroidHelper.getLoadProgressCoordinator().setPreventUpdates(
+                            preventProgressbar);
+                });
         PageLoadMetrics.Observer observer = new PageLoadMetrics.Observer() {
             @Override
             public void onFirstMeaningfulPaint(WebContents webContents, long navigationId,
@@ -115,9 +120,9 @@
         };
 
         if (!player.maybeShow(()
-                                      -> PageLoadMetrics.removeObserver(observer),
-                    windowAndroidHelper.getActivityCreationTime(),
-                    () -> UmaUtils.hasComeToForeground() && !UmaUtils.hasComeToBackground())) {
+                        -> PageLoadMetrics.removeObserver(observer),
+                windowAndroidHelper.getActivityCreationTime(),
+                () -> UmaUtils.hasComeToForeground() && !UmaUtils.hasComeToBackground())) {
             return;
         }
 
diff --git a/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java b/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java
index 495d7ec0..02dc488 100644
--- a/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java
+++ b/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java
@@ -121,9 +121,7 @@
         public void onHidden(Tab tab, @TabHidingType int hidingType) {
             releasePersistentToolbar();
             dismissSnackbar();
-            if (mProgressSimulatorNeededCallback != null) {
-                mProgressPreventionCallback.onResult(false);
-            }
+            setProgressPreventionNeeded(false);
 
             if (mPlayerManager == null || !isShowingAndNeedsBadge()) return;
 
@@ -138,9 +136,7 @@
             if (!isShowingAndNeedsBadge()) return;
 
             showToolbarPersistent();
-            if (mProgressSimulatorNeededCallback != null) {
-                mProgressPreventionCallback.onResult(true);
-            }
+            setProgressPreventionNeeded(true);
         }
     }
 
@@ -318,6 +314,12 @@
         SnackbarManagerProvider.from(mTab.getWindowAndroid()).dismissSnackbars(mSnackbarController);
     }
 
+    private void setProgressPreventionNeeded(boolean progressPrevention) {
+        if (mProgressPreventionCallback == null) return;
+
+        mProgressPreventionCallback.onResult(progressPrevention);
+    }
+
     public boolean isShowingAndNeedsBadge() {
         if (mTab == null) return false;
 
@@ -363,14 +365,14 @@
     @Override
     public void onShown() {
         showToolbarPersistent();
-        if (mProgressSimulatorNeededCallback != null) mProgressPreventionCallback.onResult(true);
+        setProgressPreventionNeeded(true);
     }
 
     @Override
     public void onHidden() {
         releasePersistentToolbar();
         dismissSnackbar();
-        if (mProgressSimulatorNeededCallback != null) mProgressPreventionCallback.onResult(false);
+        setProgressPreventionNeeded(false);
     }
 
     @Override