Commit 41c4bbc1 authored by Brandon Wylie's avatar Brandon Wylie Committed by Commit Bot

Use TabWindowManager to set the tab index for SwitchToTab

Bug: 1123209
Change-Id: I9a0caa1bccf7e857703f5ad743b8de1197062bec
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2402111
Commit-Queue: Brandon Wylie <wylieb@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarGang Wu <gangwu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#805997}
parent 705d527a
......@@ -31,7 +31,6 @@ import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.ActivityTabProvider.ActivityTabTabObserver;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.compositor.layouts.EmptyOverviewModeObserver;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
import org.chromium.chrome.browser.document.ChromeIntentUtil;
......@@ -52,7 +51,9 @@ import org.chromium.chrome.browser.query_tiles.QueryTileUtils;
import org.chromium.chrome.browser.share.ShareDelegate;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import org.chromium.chrome.browser.tabmodel.TabWindowManager;
import org.chromium.chrome.browser.toolbar.ToolbarDataProvider;
import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.components.query_tiles.QueryTile;
......@@ -579,7 +580,8 @@ class AutocompleteMediator implements OnSuggestionsReceivedListener, StartStopWi
@Override
public void onSwitchToTab(OmniboxSuggestion suggestion, int position) {
Tab tab = mAutocomplete.findMatchingTabWithUrl(suggestion.getUrl());
if (tab == null) {
TabWindowManager tabWindowManager = TabWindowManager.getInstance();
if (tab == null || tabWindowManager == null) {
onSelection(suggestion, position);
return;
}
......@@ -589,16 +591,11 @@ class AutocompleteMediator implements OnSuggestionsReceivedListener, StartStopWi
// animation since Android will show the animation for switching apps.
if (tab.getWindowAndroid().getActivityState() != ActivityState.STOPPED
&& tab.getWindowAndroid().getActivityState() != ActivityState.DESTROYED) {
// TODO(1097292): Do not use Activity to get TabModelSelector.
assert tab.getWindowAndroid().getActivity().get() instanceof ChromeActivity;
ChromeActivity chromeActivity =
(ChromeActivity) tab.getWindowAndroid().getActivity().get();
int tabIndex = TabModelUtils.getTabIndexById(
chromeActivity.getTabModelSelector().getModel(tab.isIncognito()), tab.getId());
chromeActivity.getTabModelSelector()
.getModel(tab.isIncognito())
.setIndex(tabIndex, TabSelectionType.FROM_OMNIBOX);
TabModel tabModel = tabWindowManager.getTabModelForTab(tab);
assert tabModel != null;
int tabIndex = TabModelUtils.getTabIndexById(tabModel, tab.getId());
tabModel.setIndex(tabIndex, TabSelectionType.FROM_OMNIBOX);
} else {
// Browser is in background, bring to to foreground and switch to the tab.
Intent newIntent = ChromeIntentUtil.createBringTabToFrontIntent(tab.getId());
......
......@@ -170,6 +170,24 @@ public class TabWindowManager implements ActivityStateListener {
return getTabById(tabId) != null;
}
/**
* @param tab The tab to look for in each model.
* @return The TabModel containing the given Tab or null if one doesn't exist.
**/
public TabModel getTabModelForTab(Tab tab) {
if (tab == null) return null;
for (int i = 0; i < mSelectors.size(); i++) {
TabModelSelector selector = mSelectors.get(i);
if (selector != null) {
TabModel tabModel = selector.getModelForTabId(tab.getId());
if (tabModel != null) return tabModel;
}
}
return null;
}
/**
* @param tabId The ID of the tab in question.
* @return Specified {@link Tab} or {@code null} if the {@link Tab} is not found.
......
......@@ -343,4 +343,33 @@ public class TabWindowManagerTest {
asyncTabParamsManager.getAsyncTabParams().clear();
}
}
/**
* Tests that getTabModelForTab(...) functions properly.
*/
@Test
@SmallTest
@Feature({"Multiwindow"})
@UiThreadTest
public void getTabModelForTab() {
final TabWindowManager manager = TabWindowManager.getInstance();
ChromeActivity activity0 = buildActivity();
ChromeActivity activity1 = buildActivity();
MockTabModelSelector selector0 = requestSelector(activity0, 0);
MockTabModelSelector selector1 = requestSelector(activity1, 1);
Tab tab1 = selector0.addMockTab();
Tab tab2 = selector1.addMockTab();
Tab tab3 = selector0.addMockIncognitoTab();
Tab tab4 = selector1.addMockIncognitoTab();
Assert.assertEquals(
selector0.getModel(/* incognito= */ false), manager.getTabModelForTab(tab1));
Assert.assertEquals(
selector1.getModel(/* incognito= */ false), manager.getTabModelForTab(tab2));
Assert.assertEquals(
selector0.getModel(/* incognito= */ true), manager.getTabModelForTab(tab3));
Assert.assertEquals(
selector1.getModel(/* incognito= */ true), manager.getTabModelForTab(tab4));
}
}
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