Commit 6ebc659c authored by Henrique Nakashima's avatar Henrique Nakashima Committed by Commit Bot

Create TabModelFilterFactory and pass an implementation into .tabmodel

ChromeTabModelFilterFactory is the implementation passed in, and
provides either TabGroupModelFilter or EmptyTabModelFilter, depending
on flags and DFM availability.

This breaks the dependency from TabModelFilterProvider and allows it
to be moved to the tabmodel modules.

Bug: 1090033
Change-Id: Ibb19abca6b4224e7c24f23c4e187d20f268bd3fe
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2231743Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarMei Liang <meiliang@chromium.org>
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Cr-Commit-Position: refs/heads/master@{#776505}
parent f1b01452
...@@ -80,6 +80,7 @@ chrome_java_sources = [ ...@@ -80,6 +80,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java", "java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java",
"java/src/org/chromium/chrome/browser/app/tab_activity_glue/ReparentingDelegateFactory.java", "java/src/org/chromium/chrome/browser/app/tab_activity_glue/ReparentingDelegateFactory.java",
"java/src/org/chromium/chrome/browser/app/tab_activity_glue/ReparentingTask.java", "java/src/org/chromium/chrome/browser/app/tab_activity_glue/ReparentingTask.java",
"java/src/org/chromium/chrome/browser/app/tabmodel/ChromeTabModelFilterFactory.java",
"java/src/org/chromium/chrome/browser/autofill/AutofillExpirationDateFixFlowBridge.java", "java/src/org/chromium/chrome/browser/autofill/AutofillExpirationDateFixFlowBridge.java",
"java/src/org/chromium/chrome/browser/autofill/AutofillExpirationDateFixFlowPrompt.java", "java/src/org/chromium/chrome/browser/autofill/AutofillExpirationDateFixFlowPrompt.java",
"java/src/org/chromium/chrome/browser/autofill/AutofillLogger.java", "java/src/org/chromium/chrome/browser/autofill/AutofillLogger.java",
......
include_rules = [
"+chrome/browser/tabmodel",
]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.app.tabmodel;
import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelFilter;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelFilter;
import org.chromium.chrome.browser.tabmodel.TabModelFilterFactory;
import org.chromium.chrome.browser.tasks.tab_management.TabManagementDelegate;
import org.chromium.chrome.browser.tasks.tab_management.TabManagementModuleProvider;
import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
import javax.inject.Inject;
/**
* Glue code that decides which concrete {@link TabModelFilterFactory} should be used.
*/
@ActivityScope
public class ChromeTabModelFilterFactory implements TabModelFilterFactory {
@Inject
public ChromeTabModelFilterFactory() {}
/**
* Return a {@link TabModelFilter} based on feature flags. This can return either:
* - A filter that implements tab groups.
* - A canonical {@link EmptyTabModelFilter}.
*
* @param model The {@link TabModel} that the {@link TabModelFilter} acts on.
* @return a {@link TabModelFilter}.
*/
@Override
public TabModelFilter createTabModelFilter(TabModel model) {
if (TabUiFeatureUtilities.isTabGroupsAndroidEnabled()) {
TabManagementDelegate tabManagementDelegate = TabManagementModuleProvider.getDelegate();
if (tabManagementDelegate != null) {
return tabManagementDelegate.createTabGroupModelFilter(model);
}
}
return new EmptyTabModelFilter(model);
}
}
include_rules = [ include_rules = [
"+chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/Profile.java", "+chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/Profile.java",
] "+chrome/browser/tabmodel",
\ No newline at end of file ]
...@@ -13,6 +13,7 @@ import org.chromium.base.Callback; ...@@ -13,6 +13,7 @@ import org.chromium.base.Callback;
import org.chromium.base.IntentUtils; import org.chromium.base.IntentUtils;
import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.app.tabmodel.ChromeTabModelFilterFactory;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider; import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.customtabs.CustomTabDelegateFactory; import org.chromium.chrome.browser.customtabs.CustomTabDelegateFactory;
import org.chromium.chrome.browser.customtabs.CustomTabTabPersistencePolicy; import org.chromium.chrome.browser.customtabs.CustomTabTabPersistencePolicy;
...@@ -23,6 +24,7 @@ import org.chromium.chrome.browser.tab.TabBuilder; ...@@ -23,6 +24,7 @@ import org.chromium.chrome.browser.tab.TabBuilder;
import org.chromium.chrome.browser.tab.TabDelegateFactory; import org.chromium.chrome.browser.tab.TabDelegateFactory;
import org.chromium.chrome.browser.tab.TabLaunchType; import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.ChromeTabCreator; import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
import org.chromium.chrome.browser.tabmodel.TabModelFilterFactory;
import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl; import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
...@@ -40,6 +42,7 @@ import dagger.Lazy; ...@@ -40,6 +42,7 @@ import dagger.Lazy;
public class CustomTabActivityTabFactory { public class CustomTabActivityTabFactory {
private final ChromeActivity<?> mActivity; private final ChromeActivity<?> mActivity;
private final CustomTabTabPersistencePolicy mPersistencePolicy; private final CustomTabTabPersistencePolicy mPersistencePolicy;
private final TabModelFilterFactory mTabModelFilterFactory;
private final Lazy<ActivityWindowAndroid> mActivityWindowAndroid; private final Lazy<ActivityWindowAndroid> mActivityWindowAndroid;
private final Lazy<CustomTabDelegateFactory> mCustomTabDelegateFactory; private final Lazy<CustomTabDelegateFactory> mCustomTabDelegateFactory;
private final BrowserServicesIntentDataProvider mIntentDataProvider; private final BrowserServicesIntentDataProvider mIntentDataProvider;
...@@ -53,12 +56,14 @@ public class CustomTabActivityTabFactory { ...@@ -53,12 +56,14 @@ public class CustomTabActivityTabFactory {
@Inject @Inject
public CustomTabActivityTabFactory(ChromeActivity<?> activity, public CustomTabActivityTabFactory(ChromeActivity<?> activity,
CustomTabTabPersistencePolicy persistencePolicy, CustomTabTabPersistencePolicy persistencePolicy,
ChromeTabModelFilterFactory tabModelFilterFactory,
Lazy<ActivityWindowAndroid> activityWindowAndroid, Lazy<ActivityWindowAndroid> activityWindowAndroid,
Lazy<CustomTabDelegateFactory> customTabDelegateFactory, Lazy<CustomTabDelegateFactory> customTabDelegateFactory,
BrowserServicesIntentDataProvider intentDataProvider, BrowserServicesIntentDataProvider intentDataProvider,
@Nullable StartupTabPreloader startupTabPreloader) { @Nullable StartupTabPreloader startupTabPreloader) {
mActivity = activity; mActivity = activity;
mPersistencePolicy = persistencePolicy; mPersistencePolicy = persistencePolicy;
mTabModelFilterFactory = tabModelFilterFactory;
mActivityWindowAndroid = activityWindowAndroid; mActivityWindowAndroid = activityWindowAndroid;
mCustomTabDelegateFactory = customTabDelegateFactory; mCustomTabDelegateFactory = customTabDelegateFactory;
mIntentDataProvider = intentDataProvider; mIntentDataProvider = intentDataProvider;
...@@ -67,8 +72,8 @@ public class CustomTabActivityTabFactory { ...@@ -67,8 +72,8 @@ public class CustomTabActivityTabFactory {
/** Creates a {@link TabModelSelector} for the custom tab. */ /** Creates a {@link TabModelSelector} for the custom tab. */
public TabModelSelectorImpl createTabModelSelector() { public TabModelSelectorImpl createTabModelSelector() {
mTabModelSelector = new TabModelSelectorImpl( mTabModelSelector = new TabModelSelectorImpl(mActivity, mActivity, mPersistencePolicy,
mActivity, mActivity, mPersistencePolicy, false, false, false); mTabModelFilterFactory, false, false, false);
return mTabModelSelector; return mTabModelSelector;
} }
......
...@@ -4,10 +4,6 @@ ...@@ -4,10 +4,6 @@
package org.chromium.chrome.browser.tabmodel; package org.chromium.chrome.browser.tabmodel;
import org.chromium.chrome.browser.tasks.tab_management.TabManagementDelegate;
import org.chromium.chrome.browser.tasks.tab_management.TabManagementModuleProvider;
import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
...@@ -22,10 +18,10 @@ public class TabModelFilterProvider extends EmptyTabModelSelectorObserver { ...@@ -22,10 +18,10 @@ public class TabModelFilterProvider extends EmptyTabModelSelectorObserver {
TabModelFilterProvider() {} TabModelFilterProvider() {}
TabModelFilterProvider(List<TabModel> tabModels) { TabModelFilterProvider(TabModelFilterFactory tabModelFilterFactory, List<TabModel> tabModels) {
List<TabModelFilter> filters = new ArrayList<>(); List<TabModelFilter> filters = new ArrayList<>();
for (int i = 0; i < tabModels.size(); i++) { for (int i = 0; i < tabModels.size(); i++) {
filters.add(createTabModelFilter(tabModels.get(i))); filters.add(tabModelFilterFactory.createTabModelFilter(tabModels.get(i)));
} }
mTabModelFilterList = Collections.unmodifiableList(filters); mTabModelFilterList = Collections.unmodifiableList(filters);
...@@ -89,21 +85,6 @@ public class TabModelFilterProvider extends EmptyTabModelSelectorObserver { ...@@ -89,21 +85,6 @@ public class TabModelFilterProvider extends EmptyTabModelSelectorObserver {
} }
} }
/**
* Return a {@link TabModelFilter} based on feature flags.
* @param model The {@link TabModel} that the {@link TabModelFilter} acts on.
* @return a {@link TabModelFilter}.
*/
private TabModelFilter createTabModelFilter(TabModel model) {
if (TabUiFeatureUtilities.isTabGroupsAndroidEnabled()) {
TabManagementDelegate tabManagementDelegate = TabManagementModuleProvider.getDelegate();
if (tabManagementDelegate != null) {
return tabManagementDelegate.createTabGroupModelFilter(model);
}
}
return new EmptyTabModelFilter(model);
}
private void markTabStateInitialized() { private void markTabStateInitialized() {
for (TabModelFilter filter : mTabModelFilterList) { for (TabModelFilter filter : mTabModelFilterList) {
filter.markTabStateInitialized(); filter.markTabStateInitialized();
......
...@@ -32,6 +32,7 @@ public abstract class TabModelSelectorBase implements TabModelSelector { ...@@ -32,6 +32,7 @@ public abstract class TabModelSelectorBase implements TabModelSelector {
*/ */
private TabModelFilterProvider mTabModelFilterProvider = new TabModelFilterProvider(); private TabModelFilterProvider mTabModelFilterProvider = new TabModelFilterProvider();
private final TabModelFilterFactory mTabModelFilterFactory;
private int mActiveModelIndex; private int mActiveModelIndex;
private final ObserverList<TabModelSelectorObserver> mObservers = new ObserverList<>(); private final ObserverList<TabModelSelectorObserver> mObservers = new ObserverList<>();
private boolean mTabStateInitialized; private boolean mTabStateInitialized;
...@@ -40,8 +41,10 @@ public abstract class TabModelSelectorBase implements TabModelSelector { ...@@ -40,8 +41,10 @@ public abstract class TabModelSelectorBase implements TabModelSelector {
private final TabCreatorManager mTabCreatorManager; private final TabCreatorManager mTabCreatorManager;
protected TabModelSelectorBase(TabCreatorManager tabCreatorManager, boolean startIncognito) { protected TabModelSelectorBase(TabCreatorManager tabCreatorManager,
TabModelFilterFactory tabModelFilterFactory, boolean startIncognito) {
mTabCreatorManager = tabCreatorManager; mTabCreatorManager = tabCreatorManager;
mTabModelFilterFactory = tabModelFilterFactory;
mStartIncognito = startIncognito; mStartIncognito = startIncognito;
} }
...@@ -53,7 +56,7 @@ public abstract class TabModelSelectorBase implements TabModelSelector { ...@@ -53,7 +56,7 @@ public abstract class TabModelSelectorBase implements TabModelSelector {
Collections.addAll(mTabModels, models); Collections.addAll(mTabModels, models);
mActiveModelIndex = getModelIndex(mStartIncognito); mActiveModelIndex = getModelIndex(mStartIncognito);
assert mActiveModelIndex != MODEL_NOT_FOUND; assert mActiveModelIndex != MODEL_NOT_FOUND;
mTabModelFilterProvider = new TabModelFilterProvider(mTabModels); mTabModelFilterProvider = new TabModelFilterProvider(mTabModelFilterFactory, mTabModels);
addObserver(mTabModelFilterProvider); addObserver(mTabModelFilterProvider);
TabModelObserver tabModelObserver = new TabModelObserver() { TabModelObserver tabModelObserver = new TabModelObserver() {
......
...@@ -56,16 +56,16 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod ...@@ -56,16 +56,16 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod
/** /**
* Builds a {@link TabModelSelectorImpl} instance. * Builds a {@link TabModelSelectorImpl} instance.
* * @param activity An {@link Activity} instance.
* @param activity An {@link Activity} instance.
* @param tabCreatorManager A {@link TabCreatorManager} instance. * @param tabCreatorManager A {@link TabCreatorManager} instance.
* @param persistencePolicy A {@link TabPersistencePolicy} instance. * @param persistencePolicy A {@link TabPersistencePolicy} instance.
* @param tabModelFilterFactory
* @param supportUndo Whether a tab closure can be undone. * @param supportUndo Whether a tab closure can be undone.
*/ */
public TabModelSelectorImpl(Activity activity, TabCreatorManager tabCreatorManager, public TabModelSelectorImpl(Activity activity, TabCreatorManager tabCreatorManager,
TabPersistencePolicy persistencePolicy, boolean supportUndo, boolean isTabbedActivity, TabPersistencePolicy persistencePolicy, TabModelFilterFactory tabModelFilterFactory,
boolean startIncognito) { boolean supportUndo, boolean isTabbedActivity, boolean startIncognito) {
super(tabCreatorManager, startIncognito); super(tabCreatorManager, tabModelFilterFactory, startIncognito);
mUma = new TabModelSelectorUma(activity); mUma = new TabModelSelectorUma(activity);
final TabPersistentStoreObserver persistentStoreObserver = final TabPersistentStoreObserver persistentStoreObserver =
new TabPersistentStoreObserver() { new TabPersistentStoreObserver() {
......
...@@ -15,6 +15,7 @@ import org.chromium.base.ApplicationStatus; ...@@ -15,6 +15,7 @@ import org.chromium.base.ApplicationStatus;
import org.chromium.base.ApplicationStatus.ActivityStateListener; import org.chromium.base.ApplicationStatus.ActivityStateListener;
import org.chromium.base.ThreadUtils; import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.VerifiesOnN; import org.chromium.base.annotations.VerifiesOnN;
import org.chromium.chrome.browser.app.tabmodel.ChromeTabModelFilterFactory;
import org.chromium.chrome.browser.multiwindow.MultiInstanceManager; import org.chromium.chrome.browser.multiwindow.MultiInstanceManager;
import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
...@@ -232,8 +233,9 @@ public class TabWindowManager implements ActivityStateListener { ...@@ -232,8 +233,9 @@ public class TabWindowManager implements ActivityStateListener {
} }
TabPersistencePolicy persistencePolicy = new TabbedModeTabPersistencePolicy( TabPersistencePolicy persistencePolicy = new TabbedModeTabPersistencePolicy(
selectorIndex, mergeTabs); selectorIndex, mergeTabs);
return new TabModelSelectorImpl( TabModelFilterFactory tabModelFilterFactory = new ChromeTabModelFilterFactory();
activity, tabCreatorManager, persistencePolicy, true, true, false); return new TabModelSelectorImpl(activity, tabCreatorManager, persistencePolicy,
tabModelFilterFactory, true, true, false);
} }
} }
} }
...@@ -33,6 +33,7 @@ import org.chromium.base.test.util.AdvancedMockContext; ...@@ -33,6 +33,7 @@ import org.chromium.base.test.util.AdvancedMockContext;
import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.app.tabmodel.ChromeTabModelFilterFactory;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.tab.MockTab; import org.chromium.chrome.browser.tab.MockTab;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
...@@ -463,8 +464,9 @@ public class CustomTabTabPersistencePolicyTest { ...@@ -463,8 +464,9 @@ public class CustomTabTabPersistencePolicyTest {
CustomTabActivity activity = new CustomTabActivity(); CustomTabActivity activity = new CustomTabActivity();
ApplicationStatus.onStateChangeForTesting(activity, ActivityState.CREATED); ApplicationStatus.onStateChangeForTesting(activity, ActivityState.CREATED);
TabModelSelectorImpl selector = new TabModelSelectorImpl( TabModelSelectorImpl selector =
activity, activity, buildTestPersistencePolicy(), false, false, false); new TabModelSelectorImpl(activity, activity, buildTestPersistencePolicy(),
new ChromeTabModelFilterFactory(), false, false, false);
selector.initializeForTesting(normalTabModel, incognitoTabModel); selector.initializeForTesting(normalTabModel, incognitoTabModel);
ApplicationStatus.onStateChangeForTesting(activity, ActivityState.DESTROYED); ApplicationStatus.onStateChangeForTesting(activity, ActivityState.DESTROYED);
return selector; return selector;
......
...@@ -22,6 +22,7 @@ import org.chromium.base.test.params.ParameterizedRunner; ...@@ -22,6 +22,7 @@ import org.chromium.base.test.params.ParameterizedRunner;
import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Feature;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.app.tabmodel.ChromeTabModelFilterFactory;
import org.chromium.chrome.browser.firstrun.FirstRunStatus; import org.chromium.chrome.browser.firstrun.FirstRunStatus;
import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.flags.ChromeSwitches;
...@@ -77,10 +78,11 @@ public class ContextMenuLoadUrlParamsTest { ...@@ -77,10 +78,11 @@ public class ContextMenuLoadUrlParamsTest {
return super.openNewTab(loadUrlParams, type, parent, incognito); return super.openNewTab(loadUrlParams, type, parent, incognito);
} }
public RecordingTabModelSelector( public RecordingTabModelSelector(Activity activity, TabCreatorManager tabCreatorManager,
Activity activity, TabCreatorManager tabCreatorManager, int selectorIndex) { TabModelFilterFactory tabModelFilterFactory, int selectorIndex) {
super(activity, tabCreatorManager, super(activity, tabCreatorManager,
new TabbedModeTabPersistencePolicy(selectorIndex, false), false, false, false); new TabbedModeTabPersistencePolicy(selectorIndex, false), tabModelFilterFactory,
false, false, false);
} }
} }
...@@ -104,8 +106,8 @@ public class ContextMenuLoadUrlParamsTest { ...@@ -104,8 +106,8 @@ public class ContextMenuLoadUrlParamsTest {
@Override @Override
public TabModelSelector buildSelector(Activity activity, public TabModelSelector buildSelector(Activity activity,
TabCreatorManager tabCreatorManager, int selectorIndex) { TabCreatorManager tabCreatorManager, int selectorIndex) {
return new RecordingTabModelSelector( return new RecordingTabModelSelector(activity, tabCreatorManager,
activity, tabCreatorManager, selectorIndex); new ChromeTabModelFilterFactory(), selectorIndex);
} }
}); });
}); });
......
...@@ -58,7 +58,7 @@ public class TabModelSelectorObserverTestRule extends ChromeBrowserTestRule { ...@@ -58,7 +58,7 @@ public class TabModelSelectorObserverTestRule extends ChromeBrowserTestRule {
} }
private void initialize() { private void initialize() {
mSelector = new TabModelSelectorBase(null, false) { mSelector = new TabModelSelectorBase(null, EmptyTabModelFilter::new, false) {
@Override @Override
public Tab openNewTab(LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent, public Tab openNewTab(LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent,
boolean incognito) { boolean incognito) {
......
...@@ -65,7 +65,7 @@ public class TabModelSelectorTabModelObserverTest { ...@@ -65,7 +65,7 @@ public class TabModelSelectorTabModelObserverTest {
@UiThreadTest @UiThreadTest
@SmallTest @SmallTest
public void testUninitializedSelector() throws TimeoutException { public void testUninitializedSelector() throws TimeoutException {
mSelector = new TabModelSelectorBase(null, false) { mSelector = new TabModelSelectorBase(null, EmptyTabModelFilter::new, false) {
@Override @Override
public Tab openNewTab(LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent, public Tab openNewTab(LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent,
boolean incognito) { boolean incognito) {
......
...@@ -112,7 +112,8 @@ public class TabModelSelectorTabObserverTest { ...@@ -112,7 +112,8 @@ public class TabModelSelectorTabObserverTest {
@Test @Test
@SmallTest @SmallTest
public void testObserverAddedBeforeInitialize() { public void testObserverAddedBeforeInitialize() {
TabModelSelectorBase selector = new TabModelSelectorBase(null, false) { TabModelSelectorBase selector = new TabModelSelectorBase(
null, EmptyTabModelFilter::new, false) {
@Override @Override
public Tab openNewTab(LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent, public Tab openNewTab(LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent,
boolean incognito) { boolean incognito) {
......
...@@ -27,6 +27,7 @@ import org.chromium.base.test.util.Feature; ...@@ -27,6 +27,7 @@ import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout; import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout;
import org.chromium.chrome.browser.app.tabmodel.ChromeTabModelFilterFactory;
import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelper; import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelper;
import org.chromium.chrome.browser.flags.ActivityType; import org.chromium.chrome.browser.flags.ActivityType;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
...@@ -86,7 +87,7 @@ public class TabPersistentStoreTest { ...@@ -86,7 +87,7 @@ public class TabPersistentStoreTest {
private final TabModelOrderController mTabModelOrderController; private final TabModelOrderController mTabModelOrderController;
public TestTabModelSelector() throws Exception { public TestTabModelSelector() throws Exception {
super(new MockTabCreatorManager(), false); super(new MockTabCreatorManager(), new ChromeTabModelFilterFactory(), false);
((MockTabCreatorManager) getTabCreatorManager()).initialize(this); ((MockTabCreatorManager) getTabCreatorManager()).initialize(this);
mTabPersistentStoreObserver = new MockTabPersistentStoreObserver(); mTabPersistentStoreObserver = new MockTabPersistentStoreObserver();
mTabPersistentStore = mTabPersistentStore =
......
...@@ -37,6 +37,8 @@ public class TabModelSelectorImplTest { ...@@ -37,6 +37,8 @@ public class TabModelSelectorImplTest {
@Mock @Mock
TabPersistencePolicy mMockTabPersistencePolicy; TabPersistencePolicy mMockTabPersistencePolicy;
@Mock @Mock
TabModelFilterFactory mMockTabModelFilterFactory;
@Mock
TabContentManager mMockTabContentManager; TabContentManager mMockTabContentManager;
@Mock @Mock
TabDelegateFactory mTabDelegateFactory; TabDelegateFactory mTabDelegateFactory;
...@@ -56,8 +58,8 @@ public class TabModelSelectorImplTest { ...@@ -56,8 +58,8 @@ public class TabModelSelectorImplTest {
mTabCreatorManager = new MockTabCreatorManager(); mTabCreatorManager = new MockTabCreatorManager();
mTabModelSelector = new TabModelSelectorImpl(mActivity, mTabCreatorManager, mTabModelSelector = new TabModelSelectorImpl(mActivity, mTabCreatorManager,
mMockTabPersistencePolicy, mMockTabPersistencePolicy, mMockTabModelFilterFactory,
/*supportUndo=*/false, /*isTabbedActivity=*/false, /*startIncognito=*/false); /*supportUndo=*//*isTabbedActivity=*/false, /*startIncognito=*/false, false);
mTabCreatorManager.initialize(mTabModelSelector); mTabCreatorManager.initialize(mTabModelSelector);
mTabModelSelector.onNativeLibraryReadyInternal(mMockTabContentManager, mTabModelSelector.onNativeLibraryReadyInternal(mMockTabContentManager,
new MockTabModel(false, null), new MockTabModel(true, null)); new MockTabModel(false, null), new MockTabModel(true, null));
......
...@@ -11,6 +11,7 @@ android_library("java") { ...@@ -11,6 +11,7 @@ android_library("java") {
"android/java/src/org/chromium/chrome/browser/tabmodel/TabList.java", "android/java/src/org/chromium/chrome/browser/tabmodel/TabList.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModel.java", "android/java/src/org/chromium/chrome/browser/tabmodel/TabModel.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelFilter.java", "android/java/src/org/chromium/chrome/browser/tabmodel/TabModelFilter.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelFilterFactory.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelObserver.java", "android/java/src/org/chromium/chrome/browser/tabmodel/TabModelObserver.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelUtils.java", "android/java/src/org/chromium/chrome/browser/tabmodel/TabModelUtils.java",
] ]
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.tabmodel;
/**
* A factory that creates {@link TabModelFilter} instances for {@link TabModel}s.
*/
public interface TabModelFilterFactory {
/**
* @param model The {@link TabModel} to serve as base for the new filter.
* @return A new {@link TabModelFilter} for {@code model}.
*/
TabModelFilter createTabModelFilter(TabModel model);
}
...@@ -6,6 +6,7 @@ package org.chromium.chrome.test.util.browser.tabmodel; ...@@ -6,6 +6,7 @@ package org.chromium.chrome.test.util.browser.tabmodel;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType; import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelFilter;
import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorBase; import org.chromium.chrome.browser.tabmodel.TabModelSelectorBase;
...@@ -23,7 +24,7 @@ public class MockTabModelSelector extends TabModelSelectorBase { ...@@ -23,7 +24,7 @@ public class MockTabModelSelector extends TabModelSelectorBase {
public MockTabModelSelector( public MockTabModelSelector(
int tabCount, int incognitoTabCount, MockTabModel.MockTabModelDelegate delegate) { int tabCount, int incognitoTabCount, MockTabModel.MockTabModelDelegate delegate) {
super(null, false); super(null, EmptyTabModelFilter::new, false);
initialize(new MockTabModel(false, delegate), new MockTabModel(true, delegate)); initialize(new MockTabModel(false, delegate), new MockTabModel(true, delegate));
for (int i = 0; i < tabCount; i++) { for (int i = 0; i < tabCount; i++) {
addMockTab(); addMockTab();
......
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