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, ...@@ -160,8 +160,6 @@ public class LayoutManager implements LayoutUpdateHost, LayoutProvider,
*/ */
private ObservableSupplierImpl<Tab> mCurrentTabSupplier; private ObservableSupplierImpl<Tab> mCurrentTabSupplier;
private final ObservableSupplierImpl<TabModelSelector> mTabModelSelectorSupplier =
new ObservableSupplierImpl<>();
private final ObservableSupplierImpl<TabContentManager> mTabContentManagerSupplier = private final ObservableSupplierImpl<TabContentManager> mTabContentManagerSupplier =
new ObservableSupplierImpl<>(); new ObservableSupplierImpl<>();
private final ObservableSupplierImpl<BrowserControlsStateProvider> private final ObservableSupplierImpl<BrowserControlsStateProvider>
...@@ -418,8 +416,7 @@ public class LayoutManager implements LayoutUpdateHost, LayoutProvider, ...@@ -418,8 +416,7 @@ public class LayoutManager implements LayoutUpdateHost, LayoutProvider,
// Build Layouts // Build Layouts
mStaticLayout = new StaticLayout(mContext, this, renderHost, mHost, mFrameRequestSupplier, mStaticLayout = new StaticLayout(mContext, this, renderHost, mHost, mFrameRequestSupplier,
mTabModelSelectorSupplier, mTabContentManagerSupplier, selector, mTabContentManagerSupplier, mBrowserControlsStateProviderSupplier);
mBrowserControlsStateProviderSupplier);
// Set up layout parameters // Set up layout parameters
mStaticLayout.setLayoutHandlesTabLifecycles(true); mStaticLayout.setLayoutHandlesTabLifecycles(true);
...@@ -472,9 +469,10 @@ public class LayoutManager implements LayoutUpdateHost, LayoutProvider, ...@@ -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) { public void setTabModelSelector(TabModelSelector selector) {
mTabModelSelector = selector; mTabModelSelector = selector;
mTabModelSelectorSupplier.set(selector);
mCurrentTabSupplier.set(selector.getCurrentTab()); mCurrentTabSupplier.set(selector.getCurrentTab());
mTabModelSelectorTabObserver = new TabModelSelectorTabObserver(mTabModelSelector) { mTabModelSelectorTabObserver = new TabModelSelectorTabObserver(mTabModelSelector) {
@Override @Override
......
...@@ -110,7 +110,7 @@ public class StaticLayout extends Layout { ...@@ -110,7 +110,7 @@ public class StaticLayout extends Layout {
public StaticLayout(Context context, LayoutUpdateHost updateHost, LayoutRenderHost renderHost, public StaticLayout(Context context, LayoutUpdateHost updateHost, LayoutRenderHost renderHost,
LayoutManagerHost viewHost, LayoutManagerHost viewHost,
CompositorModelChangeProcessor.FrameRequestSupplier requestSupplier, CompositorModelChangeProcessor.FrameRequestSupplier requestSupplier,
ObservableSupplier<TabModelSelector> tabModelSelectoSupplier, TabModelSelector tabModelSelector,
ObservableSupplier<TabContentManager> tabContentManagerSupplier, ObservableSupplier<TabContentManager> tabContentManagerSupplier,
ObservableSupplier<BrowserControlsStateProvider> browserControlsStateProviderSupplier) { ObservableSupplier<BrowserControlsStateProvider> browserControlsStateProviderSupplier) {
super(context, updateHost, renderHost); super(context, updateHost, renderHost);
...@@ -118,13 +118,8 @@ public class StaticLayout extends Layout { ...@@ -118,13 +118,8 @@ public class StaticLayout extends Layout {
mViewHost = viewHost; mViewHost = viewHost;
mRequestSupplier = requestSupplier; mRequestSupplier = requestSupplier;
tabModelSelectoSupplier.addObserver(new Callback<TabModelSelector>() { assert tabModelSelector != null;
@Override setTabModelSelector(tabModelSelector);
public void onResult(TabModelSelector tabModelSelector) {
setTabModelSelector(tabModelSelector);
tabModelSelectoSupplier.removeObserver(this);
}
});
tabContentManagerSupplier.addObserver(new Callback<TabContentManager>() { tabContentManagerSupplier.addObserver(new Callback<TabContentManager>() {
@Override @Override
......
...@@ -117,8 +117,6 @@ public class StaticLayoutUnitTest { ...@@ -117,8 +117,6 @@ public class StaticLayoutUnitTest {
private ArgumentCaptor<TabObserver> mTabObserverCaptor; private ArgumentCaptor<TabObserver> mTabObserverCaptor;
private CompositorAnimationHandler mCompositorAnimationHandler; private CompositorAnimationHandler mCompositorAnimationHandler;
private ObservableSupplierImpl<TabModelSelector> mTabModelSelectoSupplier =
new ObservableSupplierImpl<>();
private ObservableSupplierImpl<TabContentManager> mTabContentManagerSupplier = private ObservableSupplierImpl<TabContentManager> mTabContentManagerSupplier =
new ObservableSupplierImpl<>(); new ObservableSupplierImpl<>();
private ObservableSupplierImpl<BrowserControlsStateProvider> private ObservableSupplierImpl<BrowserControlsStateProvider>
...@@ -165,7 +163,7 @@ public class StaticLayoutUnitTest { ...@@ -165,7 +163,7 @@ public class StaticLayoutUnitTest {
doReturn(mCompositorAnimationHandler).when(mUpdateHost).getAnimationHandler(); doReturn(mCompositorAnimationHandler).when(mUpdateHost).getAnimationHandler();
mStaticLayout = new StaticLayout(mContext, mUpdateHost, mRenderHost, mViewHost, mStaticLayout = new StaticLayout(mContext, mUpdateHost, mRenderHost, mViewHost,
mRequestSupplier, mTabModelSelectoSupplier, mTabContentManagerSupplier, mRequestSupplier, mTabModelSelector, mTabContentManagerSupplier,
mBrowserControlsStateProviderSupplier); mBrowserControlsStateProviderSupplier);
mModel = mStaticLayout.getModelForTesting(); mModel = mStaticLayout.getModelForTesting();
...@@ -195,10 +193,6 @@ public class StaticLayoutUnitTest { ...@@ -195,10 +193,6 @@ public class StaticLayoutUnitTest {
} }
private void initAndAssertAllDependencies() { private void initAndAssertAllDependencies() {
assertNull(mStaticLayout.getTabModelSelectorForTesting());
mTabModelSelectoSupplier.set(mTabModelSelector);
assertEquals(mTabModelSelector, mStaticLayout.getTabModelSelectorForTesting());
assertNull(mStaticLayout.getTabContentManagerForTesting()); assertNull(mStaticLayout.getTabContentManagerForTesting());
mTabContentManagerSupplier.set(mTabContentManager); mTabContentManagerSupplier.set(mTabContentManager);
assertEquals(mTabContentManager, mStaticLayout.getTabContentManagerForTesting()); 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