Commit 5495d0e9 authored by Wei-Yin Chen (陳威尹)'s avatar Wei-Yin Chen (陳威尹) Committed by Commit Bot

Resume native init in InstantStartTest

After pre-native tests, resume native initialization and make sure the
test doesn't crash.

Bug: 1065314
Change-Id: I0ecf3b4b5b9925169f35f1b719671f0d0faa0750
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2143611Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarXi Han <hanxi@chromium.org>
Commit-Queue: Wei-Yin Chen (陳威尹) <wychen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#760725}
parent 903403ff
...@@ -22,6 +22,7 @@ import org.junit.rules.TestRule; ...@@ -22,6 +22,7 @@ import org.junit.rules.TestRule;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.CommandLine;
import org.chromium.base.library_loader.LibraryLoader; import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Feature;
...@@ -307,6 +308,31 @@ public class InstantStartTest { ...@@ -307,6 +308,31 @@ public class InstantStartTest {
Criteria.equals(true, () -> allCardsHaveThumbnail(recyclerView))); Criteria.equals(true, () -> allCardsHaveThumbnail(recyclerView)));
mRenderTestRule.render(mActivityTestRule.getActivity().findViewById(R.id.tab_list_view), mRenderTestRule.render(mActivityTestRule.getActivity().findViewById(R.id.tab_list_view),
"tabSwitcher_3tabs"); "tabSwitcher_3tabs");
// Resume native initialization and make sure it doesn't crash.
// TODO(crbug.com/1065314): emulate realistic pre-native to post-native transition
// with real tab models, and make sure the GTS looks the same.
// Right now the real tab model is empty despite of our fake state file.
Assert.assertFalse(LibraryLoader.getInstance().isInitialized());
CommandLine.getInstance().removeSwitch(ChromeSwitches.DISABLE_NATIVE_INITIALIZATION);
TestThreadUtils.runOnUiThreadBlocking(
() -> mActivityTestRule.getActivity().startDelayedNativeInitializationForTests());
CriteriaHelper.pollUiThread(() -> {
return mActivityTestRule.getActivity()
.getTabModelSelector()
.getTabModelFilterProvider()
.getCurrentTabModelFilter()
!= null
&& mActivityTestRule.getActivity()
.getTabModelSelector()
.getTabModelFilterProvider()
.getCurrentTabModelFilter()
.isTabModelRestored();
});
Assert.assertTrue(LibraryLoader.getInstance().isInitialized());
mRenderTestRule.render(mActivityTestRule.getActivity().findViewById(R.id.tab_list_view),
"tabSwitcher_empty");
} }
@Test @Test
......
...@@ -325,7 +325,22 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView ...@@ -325,7 +325,22 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
mFullscreenManager.addListener(mFullscreenListener); mFullscreenManager.addListener(mFullscreenListener);
if (!mTabModelSelector.getModels().isEmpty()) { if (mTabModelSelector.getModels().isEmpty()) {
TabModelSelectorObserver selectorObserver = new EmptyTabModelSelectorObserver() {
@Override
public void onChange() {
assert !mTabModelSelector.getModels().isEmpty();
assert mTabModelSelector.getTabModelFilterProvider().getTabModelFilter(false)
!= null;
assert mTabModelSelector.getTabModelFilterProvider().getTabModelFilter(true)
!= null;
mTabModelSelector.removeObserver(this);
mTabModelSelector.getTabModelFilterProvider().addTabModelFilterObserver(
mTabModelObserver);
}
};
mTabModelSelector.addObserver(selectorObserver);
} else {
mTabModelSelector.getTabModelFilterProvider().addTabModelFilterObserver( mTabModelSelector.getTabModelFilterProvider().addTabModelFilterObserver(
mTabModelObserver); mTabModelObserver);
} }
......
...@@ -374,6 +374,12 @@ public abstract class AsyncInitializationActivity extends ChromeBaseAppCompatAct ...@@ -374,6 +374,12 @@ public abstract class AsyncInitializationActivity extends ChromeBaseAppCompatAct
if (mFirstDrawComplete) onFirstDrawComplete(); if (mFirstDrawComplete) onFirstDrawComplete();
} }
@VisibleForTesting
public void startDelayedNativeInitializationForTests() {
mStartupDelayed = true;
startDelayedNativeInitialization();
}
/** /**
* @return Whether the native library initialization is delayed at this point. * @return Whether the native library initialization is delayed at this point.
*/ */
......
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