Commit c5823691 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: Fix NPE around FullscreenManager

TabBrowserControlsOffsetHelper is Tab UserData which should not
be accessed after the tab is destroyed. This was not taken
into account when referenced in ChromeFullscreenManager. This CL
adds the missing check against Tab for its state, and also
ensures the tab reference in the manager is set to null on
its destruction.

Bug: 897922
Change-Id: I20f0c5e87de1b3c7025d88ccfc00b7d157c6975c
Reviewed-on: https://chromium-review.googlesource.com/c/1297856
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#603412}
parent 53905b31
...@@ -1301,11 +1301,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -1301,11 +1301,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
mBottomSheet = null; mBottomSheet = null;
} }
if (mTabModelsInitialized) {
TabModelSelector selector = getTabModelSelector();
if (selector != null) selector.destroy();
}
if (mDidAddPolicyChangeListener) { if (mDidAddPolicyChangeListener) {
CombinedPolicyProvider.get().removePolicyChangeListener(this); CombinedPolicyProvider.get().removePolicyChangeListener(this);
mDidAddPolicyChangeListener = false; mDidAddPolicyChangeListener = false;
...@@ -1328,6 +1323,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -1328,6 +1323,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
mFullscreenManager = null; mFullscreenManager = null;
} }
if (mTabModelsInitialized) {
TabModelSelector selector = getTabModelSelector();
if (selector != null) selector.destroy();
}
AccessibilityManager manager = (AccessibilityManager) AccessibilityManager manager = (AccessibilityManager)
getBaseContext().getSystemService(Context.ACCESSIBILITY_SERVICE); getBaseContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
manager.removeAccessibilityStateChangeListener(this); manager.removeAccessibilityStateChangeListener(this);
......
...@@ -570,9 +570,16 @@ public class ChromeFullscreenManager ...@@ -570,9 +570,16 @@ public class ChromeFullscreenManager
if (mHidingTokenHolder.hasTokens()) { if (mHidingTokenHolder.hasTokens()) {
return false; return false;
} }
if (getTab() != null
&& TabBrowserControlsOffsetHelper.from(getTab()).isControlsOffsetOverridden()) { Tab tab = getTab();
return true; if (tab != null) {
if (tab.isInitialized()) {
if (TabBrowserControlsOffsetHelper.from(tab).isControlsOffsetOverridden()) {
return true;
}
} else {
assert false : "Accessing a destroyed tab, setTab should have been called";
}
} }
boolean showControls = !drawControlsAsTexture(); boolean showControls = !drawControlsAsTexture();
......
...@@ -192,5 +192,7 @@ public abstract class FullscreenManager { ...@@ -192,5 +192,7 @@ public abstract class FullscreenManager {
/** /**
* Destroys the FullscreenManager * Destroys the FullscreenManager
*/ */
public void destroy() {} public void destroy() {
setTab(null);
}
} }
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