Commit 776a75bf authored by Brandon Wylie's avatar Brandon Wylie Committed by Commit Bot

Hide the selected tab when switching to an empty incognito tab model

Bug: 1082612
Change-Id: Iaf0a6c5e9aad9a7e12bfbc72e4c392cfdcd4b645
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2212454Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarMei Liang <meiliang@chromium.org>
Commit-Queue: Brandon Wylie <wylieb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#773740}
parent b0b3f579
include_rules = [
"+chrome/browser/android/lifecycle",
"+chrome/browser/profiles/android/java",
"+chrome/browser/tab/java",
"+chrome/browser/ui/android/favicon/java",
"+chrome/browser/ui/messages/android/java",
"+components/browser_ui/styles/android",
......
......@@ -37,6 +37,7 @@ import org.chromium.chrome.browser.fullscreen.BrowserControlsStateProvider;
import org.chromium.chrome.browser.init.FirstDrawDetector;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabCreationState;
import org.chromium.chrome.browser.tab.TabHidingType;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabList;
......@@ -215,6 +216,13 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
}
if (!mContainerViewModel.get(IS_VISIBLE)) return;
mResetHandler.resetWithTabList(currentTabModelFilter, false, mShowTabsInMruOrder);
// Hide the currently selected tab when moving to an empty incognito model.
// TODO(crbug.com/1082612): If the need arises, generalize this solution in the
// IncognitoTabModel.
if (newModel.isIncognito() && newModel.getCount() == 0 && oldModel.getCount() > 0) {
oldModel.getTabAt(oldModel.index()).hide(TabHidingType.CHANGED_TABS);
}
}
};
mTabModelSelector.addObserver(mTabModelSelectorObserver);
......
include_rules = [
"+chrome/browser/android/lifecycle",
"+chrome/browser/profiles/android/java",
"+chrome/browser/tab/java",
"+content/public/android/java/src/org/chromium/content_public/browser",
"+components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement",
"+components/search_engines/android/java/src/org/chromium/components/search_engines",
......
......@@ -19,6 +19,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
......@@ -47,7 +48,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.fullscreen.BrowserControlsStateProvider;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabHidingType;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelFilter;
......@@ -131,9 +132,9 @@ public class TabSwitcherMediatorUnitTest {
private ArgumentCaptor<BrowserControlsStateProvider.Observer>
mBrowserControlsStateProviderObserverCaptor;
private TabImpl mTab1;
private TabImpl mTab2;
private TabImpl mTab3;
private Tab mTab1;
private Tab mTab2;
private Tab mTab3;
private TabSwitcherMediator mMediator;
private PropertyModel mModel;
......@@ -402,6 +403,38 @@ public class TabSwitcherMediatorUnitTest {
assertThat(mModel.get(TabListContainerProperties.IS_VISIBLE), equalTo(false));
}
@Test
public void hidesPreviouslySelectedTabAfterNewTabModelSelected_regularToEmptyIncognito() {
initAndAssertAllProperties();
mModel.set(TabListContainerProperties.IS_VISIBLE, true);
TabModel incognitoTabModel = mock(TabModel.class);
doReturn(0).when(incognitoTabModel).getCount();
doReturn(true).when(incognitoTabModel).isIncognito();
mTabModelSelectorObserverCaptor.getValue().onTabModelSelected(incognitoTabModel, mTabModel);
verify(/* mTab3 is the current tab. */ mTab3).hide(TabHidingType.CHANGED_TABS);
}
@Test
public void noHidesPreviouslySelectedTabAfterNewTabModelSelected_incognitoToEmptyRegular() {
// The tab shouldn't be hidden when moving from incognito to the regular tab switcher.
initAndAssertAllProperties();
mModel.set(TabListContainerProperties.IS_VISIBLE, true);
Tab tab = mock(Tab.class);
TabModel incognitoTabModel = mock(TabModel.class);
doReturn(0).when(mTabModel).getCount();
doReturn(0).when(mTabModel).index();
doReturn(1).when(incognitoTabModel).getCount();
doReturn(0).when(mTabModel).index();
doReturn(true).when(incognitoTabModel).isIncognito();
doReturn(tab).when(incognitoTabModel).getTabAt(0);
mTabModelSelectorObserverCaptor.getValue().onTabModelSelected(incognitoTabModel, mTabModel);
verify(/* mTab3 is the current tab. */ mTab3, times(0)).hide(TabHidingType.CHANGED_TABS);
}
@Test
public void updatesMarginWithBottomBarChanges() {
initAndAssertAllProperties();
......@@ -580,7 +613,7 @@ public class TabSwitcherMediatorUnitTest {
public void openDialogButton_TabGroup_NotEmpty() {
mMediator.setTabGridDialogController(mTabGridDialogController);
// Set up a tab group.
TabImpl newTab = prepareTab(TAB4_ID, TAB4_TITLE);
Tab newTab = prepareTab(TAB4_ID, TAB4_TITLE);
List<Tab> tabs = new ArrayList<>(Arrays.asList(mTab1, newTab));
doReturn(tabs).when(mTabModelFilter).getRelatedTabList(TAB1_ID);
......@@ -658,8 +691,8 @@ public class TabSwitcherMediatorUnitTest {
equalTo(CONTROL_HEIGHT_DEFAULT));
}
private TabImpl prepareTab(int id, String title) {
TabImpl tab = mock(TabImpl.class);
private Tab prepareTab(int id, String title) {
Tab tab = mock(Tab.class);
when(tab.getView()).thenReturn(mock(View.class));
when(tab.getUserDataHost()).thenReturn(new UserDataHost());
doReturn(id).when(tab).getId();
......
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