Commit ebf94067 authored by Yue Zhang's avatar Yue Zhang Committed by Commit Bot

Fix add tab misbehavior when there is no tab in dialog

Currently when user clicks to add a new tab in TabGridDialog, we try to
create a new tab which takes the last tab in this group as parent.
However, this can be problematic when all tabs are closed in this group.
This CL fixes this issue.

Bug: 987885
Change-Id: I1a6c83f9bfe8e55669ed5424cb7f096e277a91e1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1726413Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Commit-Queue: Yue Zhang <yuezhanggg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#682367}
parent 896fe356
...@@ -229,6 +229,11 @@ public class TabGridDialogMediator { ...@@ -229,6 +229,11 @@ public class TabGridDialogMediator {
return view -> { return view -> {
hideDialog(false); hideDialog(false);
Tab currentTab = mTabModelSelector.getTabById(mCurrentTabId); Tab currentTab = mTabModelSelector.getTabById(mCurrentTabId);
if (currentTab == null) {
mTabCreatorManager.getTabCreator(mTabModelSelector.isIncognitoSelected())
.launchNTP();
return;
}
List<Tab> relatedTabs = getRelatedTabs(currentTab.getId()); List<Tab> relatedTabs = getRelatedTabs(currentTab.getId());
assert relatedTabs.size() > 0; assert relatedTabs.size() > 0;
......
...@@ -9,6 +9,8 @@ import static org.hamcrest.CoreMatchers.instanceOf; ...@@ -9,6 +9,8 @@ import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
...@@ -45,6 +47,7 @@ import org.chromium.chrome.browser.tabmodel.TabSelectionType; ...@@ -45,6 +47,7 @@ import org.chromium.chrome.browser.tabmodel.TabSelectionType;
import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilter; import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilter;
import org.chromium.chrome.browser.widget.ScrimView; import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.test.util.browser.Features; import org.chromium.chrome.test.util.browser.Features;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.testing.local.LocalRobolectricTestRunner; import org.chromium.testing.local.LocalRobolectricTestRunner;
import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModel;
...@@ -177,7 +180,7 @@ public class TabGridDialogMediatorUnitTest { ...@@ -177,7 +180,7 @@ public class TabGridDialogMediatorUnitTest {
} }
@Test @Test
public void onClickAdd() { public void onClickAdd_HasCurrentTab() {
// Mock that the animation source Rect is not null. // Mock that the animation source Rect is not null.
mModel.set(TabGridSheetProperties.ANIMATION_SOURCE_RECT, mRect); mModel.set(TabGridSheetProperties.ANIMATION_SOURCE_RECT, mRect);
mMediator.setCurrentTabIdForTest(TAB1_ID); mMediator.setCurrentTabIdForTest(TAB1_ID);
...@@ -187,6 +190,19 @@ public class TabGridDialogMediatorUnitTest { ...@@ -187,6 +190,19 @@ public class TabGridDialogMediatorUnitTest {
assertThat(mModel.get(TabGridSheetProperties.ANIMATION_SOURCE_RECT), equalTo(null)); assertThat(mModel.get(TabGridSheetProperties.ANIMATION_SOURCE_RECT), equalTo(null));
verify(mDialogResetHandler).resetWithListOfTabs(null); verify(mDialogResetHandler).resetWithListOfTabs(null);
verify(mTabCreator)
.createNewTab(
isA(LoadUrlParams.class), eq(TabLaunchType.FROM_CHROME_UI), eq(mTab1));
}
@Test
public void onClickAdd_NoCurrentTab() {
mMediator.setCurrentTabIdForTest(Tab.INVALID_TAB_ID);
View.OnClickListener listener = mModel.get(TabGridSheetProperties.ADD_CLICK_LISTENER);
listener.onClick(mView);
verify(mTabCreator).launchNTP();
} }
@Test @Test
......
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