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; ...@@ -31,7 +31,6 @@ import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.ActivityTabProvider.ActivityTabTabObserver; 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.EmptyOverviewModeObserver;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior; import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
import org.chromium.chrome.browser.document.ChromeIntentUtil; import org.chromium.chrome.browser.document.ChromeIntentUtil;
...@@ -52,7 +51,9 @@ import org.chromium.chrome.browser.query_tiles.QueryTileUtils; ...@@ -52,7 +51,9 @@ import org.chromium.chrome.browser.query_tiles.QueryTileUtils;
import org.chromium.chrome.browser.share.ShareDelegate; import org.chromium.chrome.browser.share.ShareDelegate;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
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.TabModelUtils; import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import org.chromium.chrome.browser.tabmodel.TabWindowManager;
import org.chromium.chrome.browser.toolbar.ToolbarDataProvider; import org.chromium.chrome.browser.toolbar.ToolbarDataProvider;
import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.components.query_tiles.QueryTile; import org.chromium.components.query_tiles.QueryTile;
...@@ -579,7 +580,8 @@ class AutocompleteMediator implements OnSuggestionsReceivedListener, StartStopWi ...@@ -579,7 +580,8 @@ class AutocompleteMediator implements OnSuggestionsReceivedListener, StartStopWi
@Override @Override
public void onSwitchToTab(OmniboxSuggestion suggestion, int position) { public void onSwitchToTab(OmniboxSuggestion suggestion, int position) {
Tab tab = mAutocomplete.findMatchingTabWithUrl(suggestion.getUrl()); Tab tab = mAutocomplete.findMatchingTabWithUrl(suggestion.getUrl());
if (tab == null) { TabWindowManager tabWindowManager = TabWindowManager.getInstance();
if (tab == null || tabWindowManager == null) {
onSelection(suggestion, position); onSelection(suggestion, position);
return; return;
} }
...@@ -589,16 +591,11 @@ class AutocompleteMediator implements OnSuggestionsReceivedListener, StartStopWi ...@@ -589,16 +591,11 @@ class AutocompleteMediator implements OnSuggestionsReceivedListener, StartStopWi
// animation since Android will show the animation for switching apps. // animation since Android will show the animation for switching apps.
if (tab.getWindowAndroid().getActivityState() != ActivityState.STOPPED if (tab.getWindowAndroid().getActivityState() != ActivityState.STOPPED
&& tab.getWindowAndroid().getActivityState() != ActivityState.DESTROYED) { && tab.getWindowAndroid().getActivityState() != ActivityState.DESTROYED) {
// TODO(1097292): Do not use Activity to get TabModelSelector. TabModel tabModel = tabWindowManager.getTabModelForTab(tab);
assert tab.getWindowAndroid().getActivity().get() instanceof ChromeActivity; assert tabModel != null;
ChromeActivity chromeActivity = int tabIndex = TabModelUtils.getTabIndexById(tabModel, tab.getId());
(ChromeActivity) tab.getWindowAndroid().getActivity().get(); tabModel.setIndex(tabIndex, TabSelectionType.FROM_OMNIBOX);
int tabIndex = TabModelUtils.getTabIndexById(
chromeActivity.getTabModelSelector().getModel(tab.isIncognito()), tab.getId());
chromeActivity.getTabModelSelector()
.getModel(tab.isIncognito())
.setIndex(tabIndex, TabSelectionType.FROM_OMNIBOX);
} else { } else {
// Browser is in background, bring to to foreground and switch to the tab. // Browser is in background, bring to to foreground and switch to the tab.
Intent newIntent = ChromeIntentUtil.createBringTabToFrontIntent(tab.getId()); Intent newIntent = ChromeIntentUtil.createBringTabToFrontIntent(tab.getId());
......
...@@ -170,6 +170,24 @@ public class TabWindowManager implements ActivityStateListener { ...@@ -170,6 +170,24 @@ public class TabWindowManager implements ActivityStateListener {
return getTabById(tabId) != null; 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. * @param tabId The ID of the tab in question.
* @return Specified {@link Tab} or {@code null} if the {@link Tab} is not found. * @return Specified {@link Tab} or {@code null} if the {@link Tab} is not found.
......
...@@ -343,4 +343,33 @@ public class TabWindowManagerTest { ...@@ -343,4 +343,33 @@ public class TabWindowManagerTest {
asyncTabParamsManager.getAsyncTabParams().clear(); 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