Commit f25ecf79 authored by Brandon Wylie's avatar Brandon Wylie Committed by Commit Bot

Fix IllegalStateException for incognito Tab Reparenting

When the browser is recreated after a theme swap, the current model
isn't necessarily the same before/after recreate() is called.

Bug: 1042565
Change-Id: Icc63273b1690ec0fc5101c0abd252e0eef816469
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2006269Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Commit-Queue: Brandon Wylie <wylieb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#732979}
parent 23c2ddf8
...@@ -62,10 +62,17 @@ public class NightModeReparentingController ...@@ -62,10 +62,17 @@ public class NightModeReparentingController
final ReparentingTask reparentingTask = final ReparentingTask reparentingTask =
ReparentingTask.get(reparentingParams.getTabToReparent()); ReparentingTask.get(reparentingParams.getTabToReparent());
if (reparentingTask == null) continue; if (reparentingTask == null) continue;
final TabModel tabModel = mDelegate.getTabModelSelector().getModel(
reparentingParams.getTabToReparent().isIncognito());
if (tabModel == null) {
AsyncTabParamsManager.remove(tabId);
return;
}
reparentingTask.finish(mReparentingDelegate, () -> { reparentingTask.finish(mReparentingDelegate, () -> {
mDelegate.getTabModelSelector().getCurrentModel().addTab( tabModel.addTab(reparentingParams.getTabToReparent(),
reparentingParams.getTabToReparent(), reparentingParams.getTabIndex(), reparentingParams.getTabIndex(), TabLaunchType.FROM_REPARENTING);
TabLaunchType.FROM_REPARENTING);
AsyncTabParamsManager.remove(tabId); AsyncTabParamsManager.remove(tabId);
}); });
} }
...@@ -80,6 +87,7 @@ public class NightModeReparentingController ...@@ -80,6 +87,7 @@ public class NightModeReparentingController
Tab tabToDetach = mDelegate.getActivityTabProvider().get(); Tab tabToDetach = mDelegate.getActivityTabProvider().get();
if (tabToDetach == null) return; if (tabToDetach == null) return;
TabModel currentTabModel = mDelegate.getTabModelSelector().getCurrentModel(); TabModel currentTabModel = mDelegate.getTabModelSelector().getCurrentModel();
if (currentTabModel == null) return;
TabReparentingParams params = new TabReparentingParams(tabToDetach, null, null); TabReparentingParams params = new TabReparentingParams(tabToDetach, null, null);
params.setTabIndex(currentTabModel.indexOf(tabToDetach)); params.setTabIndex(currentTabModel.indexOf(tabToDetach));
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.night_mode; package org.chromium.chrome.browser.night_mode;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyObject; import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
...@@ -61,6 +62,7 @@ public class NightModeReparentingControllerTest { ...@@ -61,6 +62,7 @@ public class NightModeReparentingControllerTest {
// setup // setup
mTabModelSelector = Mockito.mock(TabModelSelector.class); mTabModelSelector = Mockito.mock(TabModelSelector.class);
doReturn(getCurrentTabModel()).when(mTabModelSelector).getCurrentModel(); doReturn(getCurrentTabModel()).when(mTabModelSelector).getCurrentModel();
doReturn(getCurrentTabModel()).when(mTabModelSelector).getModel(anyBoolean());
} }
return mTabModelSelector; return mTabModelSelector;
...@@ -125,6 +127,18 @@ public class NightModeReparentingControllerTest { ...@@ -125,6 +127,18 @@ public class NightModeReparentingControllerTest {
verify(mTask, times(1)).finish(anyObject(), anyObject()); verify(mTask, times(1)).finish(anyObject(), anyObject());
} }
@Test
public void testReparenting_singleTab_currentModelNullOnStart() {
createAndAddMockTab(1, 0);
mController.onNightModeStateChanged();
doReturn(null).when(mDelegate.getTabModelSelector()).getModel(anyBoolean());
mController.onStartWithNative();
AsyncTabParams params = AsyncTabParamsManager.getAsyncTabParams().get(1);
Assert.assertNull(params);
}
@Test @Test
public void testReparenting_multipleTabs_onlyOneIsReparented() { public void testReparenting_multipleTabs_onlyOneIsReparented() {
createAndAddMockTab(1, 0); createAndAddMockTab(1, 0);
......
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