Commit bdbeca36 authored by Mei Liang's avatar Mei Liang Committed by Commit Bot

Fix TabGroupModelFilter casting exception

TabUiFeatureUtilities.isTabGroupsAndroidEnabled() does not guarantee
TabModelFilterProvider().getTabModelFilter() returns
TabGroupModelFilter. It can return null before
TabModelSelectorBase#initialize() is called. This CL early returns when
TabModelFilterProvider().getTabModelFilter() is not a
TabGroupModelFilter to avoid the casting exception.

This CL is gated by Finch parameter "enable_launch_polish" under flag
"enable-tab-grid-layout", with gate function
TabUiFeatureUtilities#isLaunchPolishEnabled.

Bug: 1133922
Change-Id: I9766d4f0f54c954f8205866aa0c514b508d7a5a0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2442479
Commit-Queue: Mei Liang <meiliang@chromium.org>
Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812865}
parent f2ea5fac
......@@ -23,6 +23,7 @@ import org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver;
import org.chromium.chrome.browser.metrics.UmaSessionStats;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.state.CriticalPersistedTabData;
import org.chromium.chrome.browser.tabmodel.TabModelFilter;
import org.chromium.chrome.browser.tabmodel.TabModelFilterProvider;
import org.chromium.chrome.browser.tabmodel.TabModelObserver;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
......@@ -126,7 +127,7 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T
mActivityLifecycleDispatcher = activity.getLifecycleDispatcher();
mActivityLifecycleDispatcher.register(this);
// TODO(meiliang): Potential leak if the observer is added after restoreCompleted. Fix it.
// Record the group count after all tabs are being restored. This only happen once per life
// cycle, therefore remove the observer after recording. We only focus on normal tab model
// because we don't restore tabs in incognito tab model.
......@@ -214,6 +215,22 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T
private void recordTabGroupCount() {
TabModelFilterProvider provider =
mActivity.getTabModelSelector().getTabModelFilterProvider();
if (TabUiFeatureUtilities.isLaunchPolishEnabled()) {
TabModelFilter normalTabModelFilter = provider.getTabModelFilter(false);
if (!(normalTabModelFilter instanceof TabGroupModelFilter)) {
String actualType = normalTabModelFilter == null
? "null"
: normalTabModelFilter.getClass().getName();
assert false
: "Please file bug, this is unexpected. Expected TabGroupModelFilter, but was "
+ actualType;
return;
}
}
TabGroupModelFilter normalFilter = (TabGroupModelFilter) provider.getTabModelFilter(false);
TabGroupModelFilter incognitoFilter =
(TabGroupModelFilter) provider.getTabModelFilter(true);
......
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