Commit c11274ed authored by Rohit Agarwal's avatar Rohit Agarwal Committed by Commit Bot

Refactor TabModelImpl to take profile instead of boolean for incognito.

This CL refactors the TabModel related code and tests to support
passing profiles instead of boolean for incognito.

Bug: 1099642
Change-Id: I05eb4b036a32ed39b518c8034590e52a64cb6197
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2320276Reviewed-by: default avatarRohit Agarwal <roagarwal@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarFilip Gorski <fgorski@chromium.org>
Commit-Queue: Rohit Agarwal <roagarwal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#807877}
parent add84afc
...@@ -78,8 +78,8 @@ public class CustomTabActivityTabFactory { ...@@ -78,8 +78,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(mActivity, mActivity, mPersistencePolicy, mTabModelSelector = new TabModelSelectorImpl(mActivity, mActivityWindowAndroid::get,
mTabModelFilterFactory, mActivity, mPersistencePolicy, mTabModelFilterFactory,
() -> NextTabPolicy.LOCATIONAL, mAsyncTabParamsManager.get(), false, false, false); () -> NextTabPolicy.LOCATIONAL, mAsyncTabParamsManager.get(), false, false, false);
return mTabModelSelector; return mTabModelSelector;
} }
......
...@@ -4,9 +4,17 @@ ...@@ -4,9 +4,17 @@
package org.chromium.chrome.browser.tabmodel; package org.chromium.chrome.browser.tabmodel;
import static org.chromium.chrome.browser.incognito.IncognitoUtils.getNonPrimaryOTRProfileFromWindowAndroid;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tabmodel.IncognitoTabModelImpl.IncognitoTabModelDelegate; import org.chromium.chrome.browser.tabmodel.IncognitoTabModelImpl.IncognitoTabModelDelegate;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier; import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
import org.chromium.ui.base.WindowAndroid;
/** /**
* Stores all the variables needed to create an Incognito TabModelImpl when it is needed. * Stores all the variables needed to create an Incognito TabModelImpl when it is needed.
...@@ -22,12 +30,19 @@ class IncognitoTabModelImplCreator implements IncognitoTabModelDelegate { ...@@ -22,12 +30,19 @@ class IncognitoTabModelImplCreator implements IncognitoTabModelDelegate {
private final AsyncTabParamsManager mAsyncTabParamsManager; private final AsyncTabParamsManager mAsyncTabParamsManager;
private final TabModelDelegate mModelDelegate; private final TabModelDelegate mModelDelegate;
// This is passed in as null if the {@link WindowAndroid} instance doesn't belong to an
// incognito CustomTabActivity.
@Nullable
private final Supplier<WindowAndroid> mWindowAndroidSupplier;
/** /**
* Constructor for an IncognitoTabModelImplCreator, used by {@link IncognitoTabModelImpl}. * Constructor for an IncognitoTabModelImplCreator, used by {@link IncognitoTabModelImpl}.
* *
* Creating an instance of this class does not create the Incognito TabModelImpl immediately. * Creating an instance of this class does not create the Incognito TabModelImpl immediately.
* The {@link IncognitoTabModelImpl} will use this class to create the real TabModelImpl when it * The {@link IncognitoTabModelImpl} will use this class to create the real TabModelImpl when it
* will actually be used. * will actually be used.
*
* @param windowAndroidSupplier The supplier to the {@link WindowAndroid} instance.
* @param regularTabCreator Creates regular tabs. * @param regularTabCreator Creates regular tabs.
* @param incognitoTabCreator Creates incognito tabs. * @param incognitoTabCreator Creates incognito tabs.
* @param uma Handles UMA tracking for the model. * @param uma Handles UMA tracking for the model.
...@@ -38,11 +53,12 @@ class IncognitoTabModelImplCreator implements IncognitoTabModelDelegate { ...@@ -38,11 +53,12 @@ class IncognitoTabModelImplCreator implements IncognitoTabModelDelegate {
* @param asyncTabParamsManager An {@link AsyncTabParamsManager} instance. * @param asyncTabParamsManager An {@link AsyncTabParamsManager} instance.
* @param modelDelegate Delegate to handle external dependencies and interactions. * @param modelDelegate Delegate to handle external dependencies and interactions.
*/ */
public IncognitoTabModelImplCreator(TabCreator regularTabCreator, public IncognitoTabModelImplCreator(@Nullable Supplier<WindowAndroid> windowAndroidSupplier,
TabCreator incognitoTabCreator, TabModelSelectorUma uma, TabCreator regularTabCreator, TabCreator incognitoTabCreator, TabModelSelectorUma uma,
TabModelOrderController orderController, TabContentManager tabContentManager, TabModelOrderController orderController, TabContentManager tabContentManager,
TabPersistentStore tabSaver, NextTabPolicySupplier nextTabPolicySupplier, TabPersistentStore tabSaver, NextTabPolicySupplier nextTabPolicySupplier,
AsyncTabParamsManager asyncTabParamsManager, TabModelDelegate modelDelegate) { AsyncTabParamsManager asyncTabParamsManager, TabModelDelegate modelDelegate) {
mWindowAndroidSupplier = windowAndroidSupplier;
mRegularTabCreator = regularTabCreator; mRegularTabCreator = regularTabCreator;
mIncognitoTabCreator = incognitoTabCreator; mIncognitoTabCreator = incognitoTabCreator;
mUma = uma; mUma = uma;
...@@ -54,9 +70,26 @@ class IncognitoTabModelImplCreator implements IncognitoTabModelDelegate { ...@@ -54,9 +70,26 @@ class IncognitoTabModelImplCreator implements IncognitoTabModelDelegate {
mModelDelegate = modelDelegate; mModelDelegate = modelDelegate;
} }
private @NonNull Profile getOTRProfile() {
if (mWindowAndroidSupplier != null) {
Profile otrProfile =
getNonPrimaryOTRProfileFromWindowAndroid(mWindowAndroidSupplier.get());
// TODO(crbug.com/1023759): PaymentHandlerActivity is an exceptional case that uses the
// primary OTR profile. PaymentHandlerActivity would use incognito CCT when the
// Incognito CCT flag is enabled by default in which case we would return the non
// primary OTR profile.
if (otrProfile == null) {
return Profile.getLastUsedRegularProfile().getPrimaryOTRProfile();
}
}
return Profile.getLastUsedRegularProfile().getPrimaryOTRProfile();
}
@Override @Override
public TabModel createTabModel() { public TabModel createTabModel() {
return new TabModelImpl(true, false, mRegularTabCreator, mIncognitoTabCreator, mUma, Profile otrProfile = getOTRProfile();
return new TabModelImpl(otrProfile, false, mRegularTabCreator, mIncognitoTabCreator, mUma,
mOrderController, mTabContentManager, mTabSaver, mNextTabPolicySupplier, mOrderController, mTabContentManager, mTabSaver, mNextTabPolicySupplier,
mAsyncTabParamsManager, mModelDelegate, false); mAsyncTabParamsManager, mModelDelegate, false);
} }
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.tabmodel; package org.chromium.chrome.browser.tabmodel;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.chromium.base.MathUtils; import org.chromium.base.MathUtils;
...@@ -84,13 +85,13 @@ public class TabModelImpl extends TabModelJniBridge { ...@@ -84,13 +85,13 @@ public class TabModelImpl extends TabModelJniBridge {
*/ */
private boolean mIsUndoSupported = true; private boolean mIsUndoSupported = true;
public TabModelImpl(boolean incognito, boolean isTabbedActivity, TabCreator regularTabCreator, public TabModelImpl(@NonNull Profile profile, boolean isTabbedActivity,
TabCreator incognitoTabCreator, TabModelSelectorUma uma, TabCreator regularTabCreator, TabCreator incognitoTabCreator, TabModelSelectorUma uma,
TabModelOrderController orderController, TabContentManager tabContentManager, TabModelOrderController orderController, TabContentManager tabContentManager,
TabPersistentStore tabSaver, NextTabPolicySupplier nextTabPolicySupplier, TabPersistentStore tabSaver, NextTabPolicySupplier nextTabPolicySupplier,
AsyncTabParamsManager asyncTabParamsManager, TabModelDelegate modelDelegate, AsyncTabParamsManager asyncTabParamsManager, TabModelDelegate modelDelegate,
boolean supportUndo) { boolean supportUndo) {
super(incognito, isTabbedActivity); super(profile, isTabbedActivity);
mRegularTabCreator = regularTabCreator; mRegularTabCreator = regularTabCreator;
mIncognitoTabCreator = incognitoTabCreator; mIncognitoTabCreator = incognitoTabCreator;
mUma = uma; mUma = uma;
...@@ -103,10 +104,9 @@ public class TabModelImpl extends TabModelJniBridge { ...@@ -103,10 +104,9 @@ public class TabModelImpl extends TabModelJniBridge {
mIsUndoSupported = supportUndo; mIsUndoSupported = supportUndo;
mObservers = new ObserverList<TabModelObserver>(); mObservers = new ObserverList<TabModelObserver>();
// The call to initializeNative() should be as late as possible, as it results in calling // The call to initializeNative() should be as late as possible, as it results in calling
// observers on the native side, which may in turn call |addObserver()| on this object. This // observers on the native side, which may in turn call |addObserver()| on this object.
// needs to be before the call to getProfile() to ensure native is running. initializeNative(profile);
initializeNative(); mRecentlyClosedBridge = new RecentlyClosedBridge(profile);
mRecentlyClosedBridge = new RecentlyClosedBridge(getProfile());
} }
@Override @Override
......
...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.tabmodel; ...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.tabmodel;
import android.os.SystemClock; import android.os.SystemClock;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
...@@ -41,17 +42,14 @@ public abstract class TabModelJniBridge implements TabModel { ...@@ -41,17 +42,14 @@ public abstract class TabModelJniBridge implements TabModel {
*/ */
private boolean mIsTabbedActivityForSync; private boolean mIsTabbedActivityForSync;
public TabModelJniBridge(boolean isIncognito, boolean isTabbedActivity) { public TabModelJniBridge(@NonNull Profile profile, boolean isTabbedActivity) {
mIsIncognito = isIncognito; mIsIncognito = profile.isOffTheRecord();
mIsTabbedActivityForSync = isTabbedActivity; mIsTabbedActivityForSync = isTabbedActivity;
} }
/** Initializes the native-side counterpart to this class. */ /** Initializes the native-side counterpart to this class. */
protected void initializeNative() { protected void initializeNative(Profile profile) {
assert mNativeTabModelJniBridge == 0; assert mNativeTabModelJniBridge == 0;
// TODO(https://crbug.com/1099642): Pass the correct OTR profile.
Profile profile = Profile.getLastUsedRegularProfile();
if (mIsIncognito) profile = profile.getPrimaryOTRProfile();
mNativeTabModelJniBridge = TabModelJniBridgeJni.get().init( mNativeTabModelJniBridge = TabModelJniBridgeJni.get().init(
TabModelJniBridge.this, profile, mIsTabbedActivityForSync); TabModelJniBridge.this, profile, mIsTabbedActivityForSync);
} }
......
...@@ -10,7 +10,9 @@ import android.os.Handler; ...@@ -10,7 +10,9 @@ import android.os.Handler;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.SadTab; import org.chromium.chrome.browser.tab.SadTab;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabCreationState; import org.chromium.chrome.browser.tab.TabCreationState;
...@@ -56,9 +58,13 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod ...@@ -56,9 +58,13 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod
private CloseAllTabsDelegate mCloseAllTabsDelegate; private CloseAllTabsDelegate mCloseAllTabsDelegate;
private final Supplier<WindowAndroid> mWindowAndroidSupplier;
/** /**
* Builds a {@link TabModelSelectorImpl} instance. * Builds a {@link TabModelSelectorImpl} instance.
* @param activity An {@link Activity} instance. * @param activity An {@link Activity} instance.
* @param windowAndroidSupplier A supplier of {@link WindowAndroid} instance which is passed
* down to {@link IncognitoTabModelImplCreator} for creating {@link IncognitoTabModel}.
* @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 tabModelFilterFactory
...@@ -66,12 +72,15 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod ...@@ -66,12 +72,15 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod
* @param asyncTabParamsManager * @param asyncTabParamsManager
* @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,
TabPersistencePolicy persistencePolicy, TabModelFilterFactory tabModelFilterFactory, @Nullable Supplier<WindowAndroid> windowAndroidSupplier,
TabCreatorManager tabCreatorManager, TabPersistencePolicy persistencePolicy,
TabModelFilterFactory tabModelFilterFactory,
NextTabPolicySupplier nextTabPolicySupplier, NextTabPolicySupplier nextTabPolicySupplier,
AsyncTabParamsManager asyncTabParamsManager, boolean supportUndo, AsyncTabParamsManager asyncTabParamsManager, boolean supportUndo,
boolean isTabbedActivity, boolean startIncognito) { boolean isTabbedActivity, boolean startIncognito) {
super(tabCreatorManager, tabModelFilterFactory, startIncognito); super(tabCreatorManager, tabModelFilterFactory, startIncognito);
mWindowAndroidSupplier = windowAndroidSupplier;
mUma = new TabModelSelectorUma(activity); mUma = new TabModelSelectorUma(activity);
final TabPersistentStoreObserver persistentStoreObserver = final TabPersistentStoreObserver persistentStoreObserver =
new TabPersistentStoreObserver() { new TabPersistentStoreObserver() {
...@@ -128,14 +137,16 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod ...@@ -128,14 +137,16 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod
(ChromeTabCreator) getTabCreatorManager().getTabCreator(false); (ChromeTabCreator) getTabCreatorManager().getTabCreator(false);
ChromeTabCreator incognitoTabCreator = ChromeTabCreator incognitoTabCreator =
(ChromeTabCreator) getTabCreatorManager().getTabCreator(true); (ChromeTabCreator) getTabCreatorManager().getTabCreator(true);
TabModel normalModel = new TabModelImpl(false, mIsTabbedActivityForSync, regularTabCreator, TabModelImpl normalModel = new TabModelImpl(Profile.getLastUsedRegularProfile(),
incognitoTabCreator, mUma, mOrderController, mTabContentManager, mTabSaver, mIsTabbedActivityForSync, regularTabCreator, incognitoTabCreator, mUma,
mNextTabPolicySupplier, mAsyncTabParamsManager, this, mIsUndoSupported); mOrderController, mTabContentManager, mTabSaver, mNextTabPolicySupplier,
IncognitoTabModel incognitoModel = mAsyncTabParamsManager, this, mIsUndoSupported);
new IncognitoTabModelImpl(new IncognitoTabModelImplCreator(regularTabCreator, regularTabCreator.setTabModel(normalModel, mOrderController);
IncognitoTabModel incognitoModel = new IncognitoTabModelImpl(
new IncognitoTabModelImplCreator(mWindowAndroidSupplier, regularTabCreator,
incognitoTabCreator, mUma, mOrderController, mTabContentManager, mTabSaver, incognitoTabCreator, mUma, mOrderController, mTabContentManager, mTabSaver,
mNextTabPolicySupplier, mAsyncTabParamsManager, this)); mNextTabPolicySupplier, mAsyncTabParamsManager, this));
regularTabCreator.setTabModel(normalModel, mOrderController);
incognitoTabCreator.setTabModel(incognitoModel, mOrderController); incognitoTabCreator.setTabModel(incognitoModel, mOrderController);
onNativeLibraryReadyInternal(tabContentProvider, normalModel, incognitoModel); onNativeLibraryReadyInternal(tabContentProvider, normalModel, incognitoModel);
} }
......
...@@ -261,9 +261,9 @@ public class TabWindowManager implements ActivityStateListener { ...@@ -261,9 +261,9 @@ public class TabWindowManager implements ActivityStateListener {
TabPersistencePolicy persistencePolicy = new TabbedModeTabPersistencePolicy( TabPersistencePolicy persistencePolicy = new TabbedModeTabPersistencePolicy(
selectorIndex, mergeTabs); selectorIndex, mergeTabs);
TabModelFilterFactory tabModelFilterFactory = new ChromeTabModelFilterFactory(); TabModelFilterFactory tabModelFilterFactory = new ChromeTabModelFilterFactory();
return new TabModelSelectorImpl(activity, tabCreatorManager, persistencePolicy, return new TabModelSelectorImpl(activity, /*windowAndroidSupplier=*/null,
tabModelFilterFactory, nextTabPolicySupplier, tabCreatorManager, persistencePolicy, tabModelFilterFactory,
AsyncTabParamsManager.getInstance(), true, true, false); nextTabPolicySupplier, AsyncTabParamsManager.getInstance(), true, true, false);
} }
} }
} }
...@@ -39,6 +39,7 @@ import org.chromium.chrome.browser.tab.Tab; ...@@ -39,6 +39,7 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabStateFileManager; import org.chromium.chrome.browser.tab.TabStateFileManager;
import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager; import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy; import org.chromium.chrome.browser.tabmodel.NextTabPolicy;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
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.chrome.browser.tabmodel.TabPersistencePolicy; import org.chromium.chrome.browser.tabmodel.TabPersistencePolicy;
...@@ -454,10 +455,12 @@ public class CustomTabTabPersistencePolicyTest { ...@@ -454,10 +455,12 @@ 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(activity, activity,
buildTestPersistencePolicy(), new ChromeTabModelFilterFactory(), NextTabPolicySupplier nextTabPolicySupplier = () -> NextTabPolicy.LOCATIONAL;
()
-> NextTabPolicy.LOCATIONAL, TabModelSelectorImpl selector = new TabModelSelectorImpl(activity,
activity::getWindowAndroid, activity, buildTestPersistencePolicy(),
new ChromeTabModelFilterFactory(), nextTabPolicySupplier,
AsyncTabParamsManager.getInstance(), false, false, false); AsyncTabParamsManager.getInstance(), false, false, false);
selector.initializeForTesting(normalTabModel, incognitoTabModel); selector.initializeForTesting(normalTabModel, incognitoTabModel);
ApplicationStatus.onStateChangeForTesting(activity, ActivityState.DESTROYED); ApplicationStatus.onStateChangeForTesting(activity, ActivityState.DESTROYED);
......
...@@ -66,7 +66,7 @@ public class ContextMenuLoadUrlParamsTest { ...@@ -66,7 +66,7 @@ public class ContextMenuLoadUrlParamsTest {
public RecordingTabModelSelector(Activity activity, TabCreatorManager tabCreatorManager, public RecordingTabModelSelector(Activity activity, TabCreatorManager tabCreatorManager,
TabModelFilterFactory tabModelFilterFactory, int selectorIndex) { TabModelFilterFactory tabModelFilterFactory, int selectorIndex) {
super(activity, tabCreatorManager, super(activity, null, tabCreatorManager,
new TabbedModeTabPersistencePolicy(selectorIndex, false), tabModelFilterFactory, new TabbedModeTabPersistencePolicy(selectorIndex, false), tabModelFilterFactory,
() ()
-> NextTabPolicy.HIERARCHICAL, -> NextTabPolicy.HIERARCHICAL,
......
...@@ -11,6 +11,7 @@ import org.junit.runners.model.Statement; ...@@ -11,6 +11,7 @@ import org.junit.runners.model.Statement;
import org.chromium.base.CommandLine; import org.chromium.base.CommandLine;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.profiles.Profile;
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.tab.TabSelectionType; import org.chromium.chrome.browser.tab.TabSelectionType;
...@@ -116,13 +117,15 @@ public class TabModelSelectorObserverTestRule extends ChromeBrowserTestRule { ...@@ -116,13 +117,15 @@ public class TabModelSelectorObserverTestRule extends ChromeBrowserTestRule {
return false; return false;
} }
}; };
mNormalTabModel =
new TabModelSelectorTestTabModel(false, orderController, tabContentManager,
tabPersistentStore, nextTabPolicySupplier, asyncTabParamsManager, delegate);
mIncognitoTabModel = mNormalTabModel = new TabModelSelectorTestTabModel(Profile.getLastUsedRegularProfile(),
new TabModelSelectorTestIncognitoTabModel(orderController, tabContentManager, orderController, tabContentManager, tabPersistentStore, nextTabPolicySupplier,
tabPersistentStore, nextTabPolicySupplier, asyncTabParamsManager, delegate); asyncTabParamsManager, delegate);
mIncognitoTabModel = new TabModelSelectorTestIncognitoTabModel(
Profile.getLastUsedRegularProfile().getPrimaryOTRProfile(), orderController,
tabContentManager, tabPersistentStore, nextTabPolicySupplier, asyncTabParamsManager,
delegate);
mSelector.initialize(mNormalTabModel, mIncognitoTabModel); mSelector.initialize(mNormalTabModel, mIncognitoTabModel);
} }
...@@ -133,11 +136,11 @@ public class TabModelSelectorObserverTestRule extends ChromeBrowserTestRule { ...@@ -133,11 +136,11 @@ public class TabModelSelectorObserverTestRule extends ChromeBrowserTestRule {
public static class TabModelSelectorTestTabModel extends TabModelImpl { public static class TabModelSelectorTestTabModel extends TabModelImpl {
private Set<TabModelObserver> mObserverSet = new HashSet<>(); private Set<TabModelObserver> mObserverSet = new HashSet<>();
public TabModelSelectorTestTabModel(boolean incognito, public TabModelSelectorTestTabModel(Profile profile,
TabModelOrderController orderController, TabContentManager tabContentManager, TabModelOrderController orderController, TabContentManager tabContentManager,
TabPersistentStore tabPersistentStore, NextTabPolicySupplier nextTabPolicySupplier, TabPersistentStore tabPersistentStore, NextTabPolicySupplier nextTabPolicySupplier,
AsyncTabParamsManager asyncTabParamsManager, TabModelDelegate modelDelegate) { AsyncTabParamsManager asyncTabParamsManager, TabModelDelegate modelDelegate) {
super(incognito, false, null, null, null, orderController, tabContentManager, super(profile, false, null, null, null, orderController, tabContentManager,
tabPersistentStore, nextTabPolicySupplier, asyncTabParamsManager, modelDelegate, tabPersistentStore, nextTabPolicySupplier, asyncTabParamsManager, modelDelegate,
false); false);
} }
...@@ -164,12 +167,13 @@ public class TabModelSelectorObserverTestRule extends ChromeBrowserTestRule { ...@@ -164,12 +167,13 @@ public class TabModelSelectorObserverTestRule extends ChromeBrowserTestRule {
*/ */
public static class TabModelSelectorTestIncognitoTabModel public static class TabModelSelectorTestIncognitoTabModel
extends TabModelSelectorTestTabModel implements IncognitoTabModel { extends TabModelSelectorTestTabModel implements IncognitoTabModel {
public TabModelSelectorTestIncognitoTabModel(TabModelOrderController orderController, public TabModelSelectorTestIncognitoTabModel(Profile profile,
TabContentManager tabContentManager, TabPersistentStore tabPersistentStore, TabModelOrderController orderController, TabContentManager tabContentManager,
NextTabPolicySupplier nextTabPolicySupplier, TabPersistentStore tabPersistentStore, NextTabPolicySupplier nextTabPolicySupplier,
AsyncTabParamsManager asyncTabParamsManager, TabModelDelegate modelDelegate) { AsyncTabParamsManager asyncTabParamsManager, TabModelDelegate modelDelegate) {
super(true, orderController, tabContentManager, tabPersistentStore, super(Profile.getLastUsedRegularProfile().getPrimaryOTRProfile(), orderController,
nextTabPolicySupplier, asyncTabParamsManager, modelDelegate); tabContentManager, tabPersistentStore, nextTabPolicySupplier,
asyncTabParamsManager, modelDelegate);
} }
@Override @Override
......
...@@ -34,6 +34,7 @@ import org.chromium.chrome.browser.flags.ActivityType; ...@@ -34,6 +34,7 @@ import org.chromium.chrome.browser.flags.ActivityType;
import org.chromium.chrome.browser.fullscreen.BrowserControlsManager; import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.profiles.Profile;
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.tab.TabState; import org.chromium.chrome.browser.tab.TabState;
...@@ -110,27 +111,26 @@ public class TabPersistentStoreTest { ...@@ -110,27 +111,26 @@ public class TabPersistentStoreTest {
} }
}); });
mTabModelOrderController = new TabModelOrderControllerImpl(this); mTabModelOrderController = new TabModelOrderControllerImpl(this);
NextTabPolicySupplier nextTabPolicySupplier = () -> NextTabPolicy.HIERARCHICAL;
Callable<TabModelImpl> callable = new Callable<TabModelImpl>() { Callable<TabModelImpl> callable = new Callable<TabModelImpl>() {
@Override @Override
public TabModelImpl call() { public TabModelImpl call() {
return new TabModelImpl(false, false, return new TabModelImpl(Profile.getLastUsedRegularProfile(), false,
getTabCreatorManager().getTabCreator(false), getTabCreatorManager().getTabCreator(false),
getTabCreatorManager().getTabCreator(true), null, getTabCreatorManager().getTabCreator(true), null,
mTabModelOrderController, null, mTabPersistentStore, mTabModelOrderController, null, mTabPersistentStore,
() nextTabPolicySupplier, AsyncTabParamsManager.getInstance(),
-> NextTabPolicy.HIERARCHICAL, TestTabModelSelector.this, true);
AsyncTabParamsManager.getInstance(), TestTabModelSelector.this, true);
} }
}; };
TabModel regularTabModel = TestThreadUtils.runOnUiThreadBlocking(callable); TabModelImpl regularTabModel = TestThreadUtils.runOnUiThreadBlocking(callable);
IncognitoTabModel incognitoTabModel = new IncognitoTabModelImpl( IncognitoTabModel incognitoTabModel =
new IncognitoTabModelImplCreator(getTabCreatorManager().getTabCreator(false), new IncognitoTabModelImpl(new IncognitoTabModelImplCreator(null,
getTabCreatorManager().getTabCreator(false),
getTabCreatorManager().getTabCreator(true), null, getTabCreatorManager().getTabCreator(true), null,
mTabModelOrderController, null, mTabPersistentStore, mTabModelOrderController, null, mTabPersistentStore,
() nextTabPolicySupplier, AsyncTabParamsManager.getInstance(), this));
-> NextTabPolicy.HIERARCHICAL,
AsyncTabParamsManager.getInstance(), this));
initialize(regularTabModel, incognitoTabModel); initialize(regularTabModel, incognitoTabModel);
} }
......
...@@ -65,11 +65,10 @@ public class TabModelSelectorImplTest { ...@@ -65,11 +65,10 @@ public class TabModelSelectorImplTest {
.when(mMockTabModelFilterFactory) .when(mMockTabModelFilterFactory)
.createTabModelFilter(any()); .createTabModelFilter(any());
mTabCreatorManager = new MockTabCreatorManager(); mTabCreatorManager = new MockTabCreatorManager();
mTabModelSelector = new TabModelSelectorImpl(mActivity, mTabCreatorManager, mTabModelSelector = new TabModelSelectorImpl(mActivity, null, mTabCreatorManager,
mMockTabPersistencePolicy, mMockTabModelFilterFactory, mNextTabPolicySupplier, mMockTabPersistencePolicy, mMockTabModelFilterFactory, mNextTabPolicySupplier,
AsyncTabParamsManager.getInstance(), /*supportUndo=*/false, AsyncTabParamsManager.getInstance(), /*supportUndo=*/false,
/*isTabbedActivity=*/false, /*isTabbedActivity=*/false, /*startIncognito=*/false);
/*startIncognito=*/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));
......
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