[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