Commit 53d0ad6a authored by Mehran Mahmoudi's avatar Mehran Mahmoudi Committed by Commit Bot

[Paint Preview] Fix NullPointerException crash

Bug: 1135054
Change-Id: Idec0ddfab4877137e6a7deca395370b6619a9206
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2450717
Commit-Queue: Mehran Mahmoudi <mahmoudi@chromium.org>
Commit-Queue: Michael Thiessen <mthiesse@chromium.org>
Reviewed-by: default avatarMichael Thiessen <mthiesse@chromium.org>
Reviewed-by: default avatarCalder Kitagawa <ckitagawa@chromium.org>
Auto-Submit: Mehran Mahmoudi <mahmoudi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#813948}
parent 13f1e95c
......@@ -1497,7 +1497,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
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
......
......@@ -41,9 +41,9 @@ public class PaintPreviewHelper {
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 @@ public class PaintPreviewHelper {
/**
* 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 @@ public class PaintPreviewHelper {
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 @@ public class PaintPreviewHelper {
};
if (!player.maybeShow(()
-> PageLoadMetrics.removeObserver(observer),
windowAndroidHelper.getActivityCreationTime(),
() -> UmaUtils.hasComeToForeground() && !UmaUtils.hasComeToBackground())) {
-> PageLoadMetrics.removeObserver(observer),
windowAndroidHelper.getActivityCreationTime(),
() -> UmaUtils.hasComeToForeground() && !UmaUtils.hasComeToBackground())) {
return;
}
......
......@@ -121,9 +121,7 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData {
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 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData {
if (!isShowingAndNeedsBadge()) return;
showToolbarPersistent();
if (mProgressSimulatorNeededCallback != null) {
mProgressPreventionCallback.onResult(true);
}
setProgressPreventionNeeded(true);
}
}
......@@ -318,6 +314,12 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData {
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 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData {
@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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment