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 = [ include_rules = [
"+chrome/browser/android/lifecycle", "+chrome/browser/android/lifecycle",
"+chrome/browser/profiles/android/java", "+chrome/browser/profiles/android/java",
"+chrome/browser/tab/java",
"+chrome/browser/ui/android/favicon/java", "+chrome/browser/ui/android/favicon/java",
"+chrome/browser/ui/messages/android/java", "+chrome/browser/ui/messages/android/java",
"+components/browser_ui/styles/android", "+components/browser_ui/styles/android",
......
...@@ -37,6 +37,7 @@ import org.chromium.chrome.browser.fullscreen.BrowserControlsStateProvider; ...@@ -37,6 +37,7 @@ import org.chromium.chrome.browser.fullscreen.BrowserControlsStateProvider;
import org.chromium.chrome.browser.init.FirstDrawDetector; import org.chromium.chrome.browser.init.FirstDrawDetector;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabCreationState; 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.tab.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver; import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabList; import org.chromium.chrome.browser.tabmodel.TabList;
...@@ -215,6 +216,13 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView ...@@ -215,6 +216,13 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
} }
if (!mContainerViewModel.get(IS_VISIBLE)) return; if (!mContainerViewModel.get(IS_VISIBLE)) return;
mResetHandler.resetWithTabList(currentTabModelFilter, false, mShowTabsInMruOrder); 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); mTabModelSelector.addObserver(mTabModelSelectorObserver);
......
include_rules = [ include_rules = [
"+chrome/browser/android/lifecycle", "+chrome/browser/android/lifecycle",
"+chrome/browser/profiles/android/java", "+chrome/browser/profiles/android/java",
"+chrome/browser/tab/java",
"+content/public/android/java/src/org/chromium/content_public/browser", "+content/public/android/java/src/org/chromium/content_public/browser",
"+components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement", "+components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement",
"+components/search_engines/android/java/src/org/chromium/components/search_engines", "+components/search_engines/android/java/src/org/chromium/components/search_engines",
......
...@@ -19,6 +19,7 @@ import static org.mockito.Mockito.doReturn; ...@@ -19,6 +19,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
...@@ -47,7 +48,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; ...@@ -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.flags.ChromeFeatureList;
import org.chromium.chrome.browser.fullscreen.BrowserControlsStateProvider; import org.chromium.chrome.browser.fullscreen.BrowserControlsStateProvider;
import org.chromium.chrome.browser.tab.Tab; 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.tab.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelFilter; import org.chromium.chrome.browser.tabmodel.TabModelFilter;
...@@ -131,9 +132,9 @@ public class TabSwitcherMediatorUnitTest { ...@@ -131,9 +132,9 @@ public class TabSwitcherMediatorUnitTest {
private ArgumentCaptor<BrowserControlsStateProvider.Observer> private ArgumentCaptor<BrowserControlsStateProvider.Observer>
mBrowserControlsStateProviderObserverCaptor; mBrowserControlsStateProviderObserverCaptor;
private TabImpl mTab1; private Tab mTab1;
private TabImpl mTab2; private Tab mTab2;
private TabImpl mTab3; private Tab mTab3;
private TabSwitcherMediator mMediator; private TabSwitcherMediator mMediator;
private PropertyModel mModel; private PropertyModel mModel;
...@@ -402,6 +403,38 @@ public class TabSwitcherMediatorUnitTest { ...@@ -402,6 +403,38 @@ public class TabSwitcherMediatorUnitTest {
assertThat(mModel.get(TabListContainerProperties.IS_VISIBLE), equalTo(false)); 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 @Test
public void updatesMarginWithBottomBarChanges() { public void updatesMarginWithBottomBarChanges() {
initAndAssertAllProperties(); initAndAssertAllProperties();
...@@ -580,7 +613,7 @@ public class TabSwitcherMediatorUnitTest { ...@@ -580,7 +613,7 @@ public class TabSwitcherMediatorUnitTest {
public void openDialogButton_TabGroup_NotEmpty() { public void openDialogButton_TabGroup_NotEmpty() {
mMediator.setTabGridDialogController(mTabGridDialogController); mMediator.setTabGridDialogController(mTabGridDialogController);
// Set up a tab group. // 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)); List<Tab> tabs = new ArrayList<>(Arrays.asList(mTab1, newTab));
doReturn(tabs).when(mTabModelFilter).getRelatedTabList(TAB1_ID); doReturn(tabs).when(mTabModelFilter).getRelatedTabList(TAB1_ID);
...@@ -658,8 +691,8 @@ public class TabSwitcherMediatorUnitTest { ...@@ -658,8 +691,8 @@ public class TabSwitcherMediatorUnitTest {
equalTo(CONTROL_HEIGHT_DEFAULT)); equalTo(CONTROL_HEIGHT_DEFAULT));
} }
private TabImpl prepareTab(int id, String title) { private Tab prepareTab(int id, String title) {
TabImpl tab = mock(TabImpl.class); Tab tab = mock(Tab.class);
when(tab.getView()).thenReturn(mock(View.class)); when(tab.getView()).thenReturn(mock(View.class));
when(tab.getUserDataHost()).thenReturn(new UserDataHost()); when(tab.getUserDataHost()).thenReturn(new UserDataHost());
doReturn(id).when(tab).getId(); 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