Commit c60a8cd2 authored by Filip Gorski's avatar Filip Gorski Committed by Commit Bot

[Omnibox] Fixing NPE when LocationBarLayout gets focus post destroy

In this fix we check for presence of mAutocompleteCoordinator when
running a lambda handling focus change.

We also need to prevent a case of double destroy, which happens in test.

Alternative considered was to have a boolean: mIsDestroyed and check
that where necessary. Choosing a more specific solution as that is more
consistent with the other code we have.

Bug: 1094242
Change-Id: Iba32f931e1ccec76357c551fddd72acddcd1d5df
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2243258Reviewed-by: default avatarPatrick Noland <pnoland@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Filip Gorski <fgorski@chromium.org>
Cr-Commit-Position: refs/heads/master@{#777941}
parent 048cc0f3
......@@ -231,9 +231,11 @@ public class LocationBarLayout extends FrameLayout
@Override
public void destroy() {
removeUrlFocusChangeListener(mAutocompleteCoordinator);
mAutocompleteCoordinator.destroy();
mAutocompleteCoordinator = null;
if (mAutocompleteCoordinator != null) {
removeUrlFocusChangeListener(mAutocompleteCoordinator);
mAutocompleteCoordinator.destroy();
mAutocompleteCoordinator = null;
}
if (mAssistantVoiceSearchService != null) {
mAssistantVoiceSearchService.destroy();
......@@ -1175,8 +1177,11 @@ public class LocationBarLayout extends FrameLayout
mStatusViewCoordinator.setUseDarkColors(useDarkColors);
mStatusViewCoordinator.setIncognitoBadgeVisibility(
mToolbarDataProvider.isIncognito() && !mIsTablet);
mAutocompleteCoordinator.updateVisualsForState(
useDarkColors, mToolbarDataProvider.isIncognito());
if (mAutocompleteCoordinator != null) {
mAutocompleteCoordinator.updateVisualsForState(
useDarkColors, mToolbarDataProvider.isIncognito());
}
}
@Override
......
......@@ -611,6 +611,18 @@ public class LocationBarLayoutTest {
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE, softInputModeCallable));
}
/** Test NPE when focus callback triggers after LocationBarLayout is destroyed. */
@Test
@MediumTest
@Feature("Omnibox")
public void testAutocompleteCoordinatorNpeWhenFocusedAfterDestroy() {
LocationBarLayout locationBar = getLocationBar();
TestThreadUtils.runOnUiThreadBlocking(() -> {
locationBar.destroy();
locationBar.onUrlFocusChange(false);
});
}
/** Load a new URL and also update the locaiton bar models. */
private Tab loadUrlInNewTabAndUpdateModels(
String url, boolean incognito, LocationBarLayout locationBar) {
......
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