Commit 167a1aee authored by Xi Han's avatar Xi Han Committed by Commit Bot

[Instant Start] Resume Chrome should show start surface.

When calling setInitialOverviewState(), it shouldn't check whether
Instant Start is enabled, but check whether the state has been set or
not.

Bug: 1137963
Change-Id: Ib1e099a1409291002eef962346dbb97d048f14e8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2514462
Commit-Queue: Xi Han <hanxi@chromium.org>
Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#825999}
parent eec8089c
...@@ -43,6 +43,7 @@ import static org.chromium.chrome.test.util.ViewUtils.waitForView; ...@@ -43,6 +43,7 @@ import static org.chromium.chrome.test.util.ViewUtils.waitForView;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.support.test.InstrumentationRegistry; import android.support.test.InstrumentationRegistry;
import android.support.test.uiautomator.UiDevice;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -94,6 +95,7 @@ import org.chromium.chrome.start_surface.R; ...@@ -94,6 +95,7 @@ import org.chromium.chrome.start_surface.R;
import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ChromeApplicationTestUtils;
import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.chrome.test.util.OverviewModeBehaviorWatcher; import org.chromium.chrome.test.util.OverviewModeBehaviorWatcher;
import org.chromium.chrome.test.util.browser.Features.EnableFeatures; import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
...@@ -167,6 +169,12 @@ public class StartSurfaceTest { ...@@ -167,6 +169,12 @@ public class StartSurfaceTest {
return CachedFeatureFlags.isEnabled(ChromeFeatureList.INSTANT_START) && mImmediateReturn; return CachedFeatureFlags.isEnabled(ChromeFeatureList.INSTANT_START) && mImmediateReturn;
} }
private void pressHome() {
UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
device.pressHome();
ChromeApplicationTestUtils.waitUntilChromeInBackground();
}
@Before @Before
public void setUp() throws IOException { public void setUp() throws IOException {
// Scrolling tests need more tabs. // Scrolling tests need more tabs.
...@@ -784,6 +792,41 @@ public class StartSurfaceTest { ...@@ -784,6 +792,41 @@ public class StartSurfaceTest {
hideWatcher.waitForBehavior(); hideWatcher.waitForBehavior();
} }
@Test
@MediumTest
@Feature({"StartSurface"})
@CommandLineFlags.Add({BASE_PARAMS + "/single/exclude_mv_tiles/true"
+ "/show_last_active_tab_only/true/show_stack_tab_switcher/true"})
public void
testShow_SingleAsHomepageV2_FromResumeShowStart() throws ExecutionException {
// clang-format on
if (!mImmediateReturn) return;
ChromeTabbedActivity cta = mActivityTestRule.getActivity();
CriteriaHelper.pollUiThread(
() -> cta.getLayoutManager() != null && cta.getLayoutManager().overviewVisible());
waitForTabModel();
TestThreadUtils.runOnUiThreadBlocking(
() -> { cta.getTabModelSelector().getModel(false).closeAllTabs(); });
TabUiTestHelper.verifyTabModelTabCount(cta, 0, 0);
assertTrue(cta.getLayoutManager().overviewVisible());
TestThreadUtils.runOnUiThreadBlocking(
() -> cta.getTabCreator(true /*incognito*/).launchNTP());
TabUiTestHelper.verifyTabModelTabCount(cta, 0, 1);
// Simulates pressing the Android's home button and bringing Chrome to the background.
pressHome();
// Simulates pressing Chrome's icon and launching Chrome from warm start.
startMainActivityFromLauncher();
CriteriaHelper.pollUiThread(
() -> cta.getLayoutManager() != null && cta.getLayoutManager().overviewVisible());
waitForTabModel();
assertFalse(cta.getTabModelSelector().getCurrentModel().isIncognito());
assertThat(cta.getTabModelSelector().getCurrentModel().getCount(), equalTo(0));
}
@Test @Test
@MediumTest @MediumTest
@Feature({"StartSurface"}) @Feature({"StartSurface"})
......
...@@ -268,6 +268,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent ...@@ -268,6 +268,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
// Whether or not the initial tab is being created. // Whether or not the initial tab is being created.
private boolean mPendingInitialTabCreation; private boolean mPendingInitialTabCreation;
// Whether {@link setInitialOverviewState()} has been called within the current onStart/onStop
// session.
private boolean mHasDeterminedOverviewStateForCurrentSession;
/** /**
* Keeps track of the pref for the last time since this activity was stopped. * Keeps track of the pref for the last time since this activity was stopped.
*/ */
...@@ -848,6 +851,7 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent ...@@ -848,6 +851,7 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
super.onStopWithNative(); super.onStopWithNative();
mTabModelSelectorImpl.saveState(); mTabModelSelectorImpl.saveState();
mHasDeterminedOverviewStateForCurrentSession = false;
} }
@Override @Override
...@@ -857,9 +861,7 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent ...@@ -857,9 +861,7 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
// Don't call setInitialOverviewState if we're waiting for the tab's creation or we risk // Don't call setInitialOverviewState if we're waiting for the tab's creation or we risk
// showing a glimpse of the tab selector during start up. // showing a glimpse of the tab selector during start up.
if (!mPendingInitialTabCreation if (!mPendingInitialTabCreation) {
&& !(TabUiFeatureUtilities.supportInstantStart(isTablet())
&& shouldShowTabSwitcherOnStart() && !hadWarmStart())) {
setInitialOverviewState(); setInitialOverviewState();
} }
...@@ -953,6 +955,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent ...@@ -953,6 +955,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
} }
private void setInitialOverviewState() { private void setInitialOverviewState() {
if (mHasDeterminedOverviewStateForCurrentSession) return;
mHasDeterminedOverviewStateForCurrentSession = true;
boolean isOverviewVisible = mOverviewModeController.overviewVisible(); boolean isOverviewVisible = mOverviewModeController.overviewVisible();
if (shouldShowTabSwitcherOnStart() && !isOverviewVisible) { if (shouldShowTabSwitcherOnStart() && !isOverviewVisible) {
...@@ -1168,11 +1173,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent ...@@ -1168,11 +1173,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
getTabCreator(false).launchUrl(url, TabLaunchType.FROM_STARTUP); getTabCreator(false).launchUrl(url, TabLaunchType.FROM_STARTUP);
} }
// If we didn't call setInitialOverviewState() in startWithNative() because // If we didn't call setInitialOverviewState() in onStartWithNative() because
// mPendingInitialTabCreation was true then do so now. // mPendingInitialTabCreation was true then do so now.
if (hasStartWithNativeBeenCalled() if (hasStartWithNativeBeenCalled()) {
&& !(TabUiFeatureUtilities.supportInstantStart(isTablet())
&& shouldShowTabSwitcherOnStart() && !hadWarmStart())) {
setInitialOverviewState(); setInitialOverviewState();
} }
} }
...@@ -1580,6 +1583,7 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent ...@@ -1580,6 +1583,7 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
if (shouldShowTabSwitcherOnStart()) { if (shouldShowTabSwitcherOnStart()) {
mLayoutManager.setTabModelSelector(mTabModelSelectorImpl); mLayoutManager.setTabModelSelector(mTabModelSelectorImpl);
mIsAccessibilityTabSwitcherEnabled = DeviceClassManager.enableAccessibilityLayout(); mIsAccessibilityTabSwitcherEnabled = DeviceClassManager.enableAccessibilityLayout();
assert !mHasDeterminedOverviewStateForCurrentSession;
setInitialOverviewState(); setInitialOverviewState();
} }
} }
......
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