Commit f414566a authored by Xi Han's avatar Xi Han Committed by Chromium LUCI CQ

Set tab lists for StackLayoutBase after the TabModel is initialized.

The crash was caused by onTabCreated() which is called before the
|mStacks| is initialized. The missing of initialization might be caused
by setTabModelSelector() which is called before the TabModel is
initialized. In this CL, we add a TabModelSelectorObserver, and it will
set the tab lists after the TabModel is ready if it wasn't when the
setTabModelSelector() was called.

Bug: 1142858
Change-Id: I8f452195b7342a5d1a185517b5f6b58e1d1cd327
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2570131
Commit-Queue: Xi Han <hanxi@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#834230}
parent 4c348548
...@@ -14,9 +14,11 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; ...@@ -14,9 +14,11 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.compositor.layouts.phone.stack.NonOverlappingStack; import org.chromium.chrome.browser.compositor.layouts.phone.stack.NonOverlappingStack;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabList; import org.chromium.chrome.browser.tabmodel.TabList;
import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabModelUtils; import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -57,11 +59,26 @@ public class StackLayout extends StackLayoutBase { ...@@ -57,11 +59,26 @@ public class StackLayout extends StackLayoutBase {
public void setTabModelSelector(TabModelSelector modelSelector, TabContentManager manager) { public void setTabModelSelector(TabModelSelector modelSelector, TabContentManager manager) {
super.setTabModelSelector(modelSelector, manager); super.setTabModelSelector(modelSelector, manager);
if (modelSelector.getTabModelFilterProvider().getCurrentTabModelFilter() == null) { if (modelSelector.getTabModelFilterProvider().getCurrentTabModelFilter() == null) {
return; // Registers an observer of the TabModel's creation if it hasn't been created yet. Once
// the TabModel is ready, we will call setTablists() immediately.
// See https://crbug.com/1142858.
TabModelSelectorObserver selectorObserver = new EmptyTabModelSelectorObserver() {
@Override
public void onChange() {
mTabModelSelector.removeObserver(this);
setTablists();
}
};
mTabModelSelector.addObserver(selectorObserver);
} else {
setTablists();
} }
}
private void setTablists() {
ArrayList<TabList> tabLists = new ArrayList<TabList>(); ArrayList<TabList> tabLists = new ArrayList<TabList>();
tabLists.add(modelSelector.getTabModelFilterProvider().getTabModelFilter(false)); tabLists.add(mTabModelSelector.getTabModelFilterProvider().getTabModelFilter(false));
tabLists.add(modelSelector.getTabModelFilterProvider().getTabModelFilter(true)); tabLists.add(mTabModelSelector.getTabModelFilterProvider().getTabModelFilter(true));
setTabLists(tabLists); setTabLists(tabLists);
} }
......
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