Commit 6ac5e08d authored by Xi Han's avatar Xi Han Committed by Commit Bot

[Instant Start] Pass TabModelSelector in StaticLayout's constructor.

The crash is caused by mTabModelSelector is null when
StaticLayout#show() is called. However, the TabModelSelector should have
been created before StaticLayout is created in LayoutManager#Init().
This CL refactors the StaticLayout by passing the TabModelSelector
object to its constructor, rather than a TabModelSelectorSupplier.

Bug: 1123448
Change-Id: I5184b23316690313fc27684d71f0766df47b007c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2385980
Commit-Queue: Xi Han <hanxi@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#803685}
parent 03235b76
......@@ -160,8 +160,6 @@ public class LayoutManager implements LayoutUpdateHost, LayoutProvider,
*/
private ObservableSupplierImpl<Tab> mCurrentTabSupplier;
private final ObservableSupplierImpl<TabModelSelector> mTabModelSelectorSupplier =
new ObservableSupplierImpl<>();
private final ObservableSupplierImpl<TabContentManager> mTabContentManagerSupplier =
new ObservableSupplierImpl<>();
private final ObservableSupplierImpl<BrowserControlsStateProvider>
......@@ -418,8 +416,7 @@ public class LayoutManager implements LayoutUpdateHost, LayoutProvider,
// Build Layouts
mStaticLayout = new StaticLayout(mContext, this, renderHost, mHost, mFrameRequestSupplier,
mTabModelSelectorSupplier, mTabContentManagerSupplier,
mBrowserControlsStateProviderSupplier);
selector, mTabContentManagerSupplier, mBrowserControlsStateProviderSupplier);
// Set up layout parameters
mStaticLayout.setLayoutHandlesTabLifecycles(true);
......@@ -472,9 +469,10 @@ public class LayoutManager implements LayoutUpdateHost, LayoutProvider,
}
}
// TODO(hanxi): Passes the TabModelSelectorSupplier in the constructor since the
// mTabModelSelector should only be set once.
public void setTabModelSelector(TabModelSelector selector) {
mTabModelSelector = selector;
mTabModelSelectorSupplier.set(selector);
mCurrentTabSupplier.set(selector.getCurrentTab());
mTabModelSelectorTabObserver = new TabModelSelectorTabObserver(mTabModelSelector) {
@Override
......
......@@ -110,7 +110,7 @@ public class StaticLayout extends Layout {
public StaticLayout(Context context, LayoutUpdateHost updateHost, LayoutRenderHost renderHost,
LayoutManagerHost viewHost,
CompositorModelChangeProcessor.FrameRequestSupplier requestSupplier,
ObservableSupplier<TabModelSelector> tabModelSelectoSupplier,
TabModelSelector tabModelSelector,
ObservableSupplier<TabContentManager> tabContentManagerSupplier,
ObservableSupplier<BrowserControlsStateProvider> browserControlsStateProviderSupplier) {
super(context, updateHost, renderHost);
......@@ -118,13 +118,8 @@ public class StaticLayout extends Layout {
mViewHost = viewHost;
mRequestSupplier = requestSupplier;
tabModelSelectoSupplier.addObserver(new Callback<TabModelSelector>() {
@Override
public void onResult(TabModelSelector tabModelSelector) {
setTabModelSelector(tabModelSelector);
tabModelSelectoSupplier.removeObserver(this);
}
});
assert tabModelSelector != null;
setTabModelSelector(tabModelSelector);
tabContentManagerSupplier.addObserver(new Callback<TabContentManager>() {
@Override
......
......@@ -117,8 +117,6 @@ public class StaticLayoutUnitTest {
private ArgumentCaptor<TabObserver> mTabObserverCaptor;
private CompositorAnimationHandler mCompositorAnimationHandler;
private ObservableSupplierImpl<TabModelSelector> mTabModelSelectoSupplier =
new ObservableSupplierImpl<>();
private ObservableSupplierImpl<TabContentManager> mTabContentManagerSupplier =
new ObservableSupplierImpl<>();
private ObservableSupplierImpl<BrowserControlsStateProvider>
......@@ -165,7 +163,7 @@ public class StaticLayoutUnitTest {
doReturn(mCompositorAnimationHandler).when(mUpdateHost).getAnimationHandler();
mStaticLayout = new StaticLayout(mContext, mUpdateHost, mRenderHost, mViewHost,
mRequestSupplier, mTabModelSelectoSupplier, mTabContentManagerSupplier,
mRequestSupplier, mTabModelSelector, mTabContentManagerSupplier,
mBrowserControlsStateProviderSupplier);
mModel = mStaticLayout.getModelForTesting();
......@@ -195,10 +193,6 @@ public class StaticLayoutUnitTest {
}
private void initAndAssertAllDependencies() {
assertNull(mStaticLayout.getTabModelSelectorForTesting());
mTabModelSelectoSupplier.set(mTabModelSelector);
assertEquals(mTabModelSelector, mStaticLayout.getTabModelSelectorForTesting());
assertNull(mStaticLayout.getTabContentManagerForTesting());
mTabContentManagerSupplier.set(mTabContentManager);
assertEquals(mTabContentManager, mStaticLayout.getTabContentManagerForTesting());
......
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