Commit 73cea862 authored by Henrique Nakashima's avatar Henrique Nakashima Committed by Commit Bot

Move TabCreator out of TabCreatorManager to be a top level class

Bug: 1090052
Change-Id: I72acfedb44e88d099ed02cbb7732d2ad0388f145
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2305041Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790680}
parent 38238af9
......@@ -103,7 +103,7 @@ import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabStateExtractor;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver;
import org.chromium.chrome.browser.tasks.pseudotab.PseudoTab;
......@@ -1906,7 +1906,7 @@ public class StartSurfaceLayoutTest {
Tab parentTab = cta.getTabModelSelector().getCurrentTab();
// Create a tab whose parent tab is parentTab.
TabCreatorManager.TabCreator tabCreator = cta.getTabCreator(false);
TabCreator tabCreator = cta.getTabCreator(false);
LoadUrlParams loadUrlParams = new LoadUrlParams(mUrl);
TestThreadUtils.runOnUiThreadBlocking(
()
......@@ -1937,7 +1937,7 @@ public class StartSurfaceLayoutTest {
Tab parentTab = cta.getTabModelSelector().getCurrentTab();
// Create a tab whose parent tab is parentTab.
TabCreatorManager.TabCreator tabCreator = cta.getTabCreator(false);
TabCreator tabCreator = cta.getTabCreator(false);
LoadUrlParams loadUrlParams = new LoadUrlParams(mUrl);
TestThreadUtils.runOnUiThreadBlocking(
()
......
......@@ -72,7 +72,7 @@ import org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.infobar.InfoBarContainer;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tasks.ConditionalTabStripUtils;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
......@@ -671,7 +671,7 @@ public class ConditionalTabStripTest {
private void createBlankPageWithLaunchType(ChromeTabbedActivity cta, boolean isIncognito,
@TabLaunchType int type) throws ExecutionException {
TabCreatorManager.TabCreator tabCreator = cta.getTabCreator(isIncognito);
TabCreator tabCreator = cta.getTabCreator(isIncognito);
LoadUrlParams loadUrlParams = new LoadUrlParams(UrlConstants.CHROME_BLANK_URL);
TestThreadUtils.runOnUiThreadBlocking(
() -> tabCreator.createNewTab(loadUrlParams, type, null));
......
......@@ -50,6 +50,7 @@ import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tab.state.CriticalPersistedTabData;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelFilterProvider;
......@@ -106,7 +107,7 @@ public class TabGridDialogMediatorUnitTest {
@Mock
TabCreatorManager mTabCreatorManager;
@Mock
TabCreatorManager.TabCreator mTabCreator;
TabCreator mTabCreator;
@Mock
TabSwitcherMediator.ResetHandler mTabSwitcherResetHandler;
@Mock
......
......@@ -52,6 +52,7 @@ import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelFilter;
......@@ -104,7 +105,7 @@ public class TabGroupUiMediatorUnitTest {
@Mock
TabCreatorManager mTabCreatorManager;
@Mock
TabCreatorManager.TabCreator mTabCreator;
TabCreator mTabCreator;
@Mock
OverviewModeBehavior mOverviewModeBehavior;
@Mock
......
include_rules = [
"+chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java",
"+chrome/browser/profiles/android/java",
"+chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java",
"+chrome/browser/tabmodel/android/java",
"+components/browser_ui/notifications/android",
"+components/module_installer",
"+content/public/android/java/src/org/chromium/content_public",
......
......@@ -53,7 +53,7 @@ import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
......
......@@ -132,6 +132,7 @@ import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tab.TabState;
import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager;
import org.chromium.chrome.browser.tabmodel.EmptyTabModel;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
......@@ -225,8 +226,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
new ObservableSupplierImpl<>();
private TabModelSelector mTabModelSelector;
private TabModelSelectorTabObserver mTabModelSelectorTabObserver;
private TabCreatorManager.TabCreator mRegularTabCreator;
private TabCreatorManager.TabCreator mIncognitoTabCreator;
private TabCreator mRegularTabCreator;
private TabCreator mIncognitoTabCreator;
private TabContentManager mTabContentManager;
private UmaSessionStats mUmaSessionStats;
private ContextReporter mContextReporter;
......@@ -597,7 +598,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
/**
* Initialize the {@link TabModelSelector}, {@link TabModel}s, and
* {@link org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator} needed by
* {@link TabCreator} needed by
* this activity.
*/
public final void initializeTabModels() {
......@@ -666,7 +667,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
protected abstract TabModelSelector createTabModelSelector();
/**
* @return The {@link org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator}s owned
* @return The {@link TabCreator}s owned
* by this {@link ChromeActivity}. The first item in the Pair is the normal model tab
* creator, and the second is the tab creator for incognito tabs.
*/
......@@ -1549,7 +1550,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
}
@Override
public TabCreatorManager.TabCreator getTabCreator(boolean incognito) {
public TabCreator getTabCreator(boolean incognito) {
if (!mTabModelsInitialized) {
throw new IllegalStateException(
"Attempting to access TabCreator before initialization");
......@@ -1561,7 +1562,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
* Convenience method that returns a tab creator for the currently selected {@link TabModel}.
* @return A tab creator for the currently selected {@link TabModel}.
*/
public TabCreatorManager.TabCreator getCurrentTabCreator() {
public TabCreator getCurrentTabCreator() {
return getTabCreator(getTabModelSelector().isIncognitoSelected());
}
......
......@@ -36,7 +36,7 @@ import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import org.chromium.chrome.browser.webapps.WebDisplayMode;
......
......@@ -26,7 +26,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.ui.favicon.FaviconHelper;
import org.chromium.chrome.browser.ui.favicon.FaviconUtils;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
......
......@@ -37,7 +37,7 @@ import org.chromium.chrome.browser.compositor.layouts.components.VirtualView;
import org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller;
import org.chromium.chrome.browser.compositor.overlays.strip.TabLoadTracker.TabLoadTrackerCallback;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import org.chromium.ui.base.DeviceFormFactor;
......
......@@ -24,8 +24,8 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.chrome.browser.ui.system.StatusBarColorController;
......
......@@ -43,7 +43,7 @@ import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
import org.chromium.chrome.browser.signin.IdentityServicesProvider;
import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.ui.favicon.LargeIconBridge;
import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
......
......@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabBuilder;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.content_public.browser.LoadUrlParams;
......@@ -164,7 +165,7 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable
// The TabCreatorManager throws an IllegalStateException if it is not ready to provide a
// TabCreator.
TabCreatorManager.TabCreator tabCreator;
TabCreator tabCreator;
try {
tabCreator = mTabCreatorManager.getTabCreator(incognito);
} catch (IllegalStateException e) {
......
......@@ -41,7 +41,7 @@ import org.chromium.url.GURL;
/**
* This class creates various kinds of new tabs and adds them to the right {@link TabModel}.
*/
public class ChromeTabCreator extends TabCreatorManager.TabCreator {
public class ChromeTabCreator extends TabCreator {
/**Interface to handle showing overview instead of NTP if needed. */
public interface OverviewNTPCreator {
/**
......
......@@ -8,7 +8,6 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.incognito.IncognitoUtils;
import org.chromium.chrome.browser.tabmodel.IncognitoTabModel.IncognitoTabModelDelegate;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
/**
* Stores all the variables needed to create an Incognito TabModelImpl when it is needed.
......
......@@ -21,7 +21,6 @@ import org.chromium.chrome.browser.tab.TabCreationState;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
import org.chromium.components.external_intents.InterceptNavigationDelegateImpl;
import org.chromium.content_public.browser.LoadUrlParams;
......
......@@ -14,7 +14,6 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.common.ResourceRequestBody;
......
......@@ -28,7 +28,7 @@ import org.chromium.chrome.browser.tab.TabIdManager;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabState;
import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.PageTransition;
......
......@@ -16,7 +16,7 @@ import android.widget.ImageButton;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.ui.appmenu.AppMenuButtonHelper;
import org.chromium.chrome.browser.ui.appmenu.AppMenuHandler;
......
......@@ -19,7 +19,7 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabCreationState;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelObserver;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
......
......@@ -29,7 +29,7 @@ import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabbed_mode.TabbedRootUiCoordinator;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ChromeTabUtils;
......
......@@ -19,6 +19,7 @@ import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
......@@ -184,7 +185,7 @@ public class StartupTabPreloaderUnitTest {
private static class ChromeTabCreatorManager implements TabCreatorManager {
@Override
public TabCreatorManager.TabCreator getTabCreator(boolean incognito) {
public TabCreator getTabCreator(boolean incognito) {
Assert.assertFalse(incognito);
return new ChromeTabCreator(null, null, null, null, false, null);
}
......@@ -192,14 +193,14 @@ public class StartupTabPreloaderUnitTest {
private static class UninitializedChromeTabCreatorManager implements TabCreatorManager {
@Override
public TabCreatorManager.TabCreator getTabCreator(boolean incognito) {
public TabCreator getTabCreator(boolean incognito) {
throw new IllegalStateException("uninitialized for test");
}
}
private static class NonChromeTabCreatorManager implements TabCreatorManager {
@Override
public TabCreatorManager.TabCreator getTabCreator(boolean incognito) {
public TabCreator getTabCreator(boolean incognito) {
Assert.assertFalse(incognito);
// The important thing is this isn't ChromeTabCreator.
......
......@@ -31,7 +31,6 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabState;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabPersistentStore.TabPersistentStoreObserver;
import org.chromium.chrome.browser.tabmodel.TabPersistentStore.TabRestoreDetails;
import org.chromium.components.embedder_support.util.UrlConstants;
......
......@@ -10,6 +10,7 @@ android_library("java") {
"android/java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModelFilter.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModelSelectorObserver.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/NextTabPolicy.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabCreator.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabCreatorManager.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabList.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModel.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;
import androidx.annotation.Nullable;
import org.chromium.base.TraceEvent;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabState;
import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
/**
* Creates Tabs. If the TabCreator creates Tabs asynchronously, null pointers will be returned
* everywhere instead of a Tab.
*
* TODO(dfalcantara): Hunt down more places where we don't actually need to return a Tab.
*/
public abstract class TabCreator {
/**
* @return Whether the TabCreator creates Tabs asynchronously.
*/
public abstract boolean createsTabsAsynchronously();
/**
* Creates a new tab and posts to UI.
* @param loadUrlParams parameters of the url load.
* @param type Information about how the tab was launched.
* @param parent the parent tab, if present.
* @return The new tab or null if no tab was created.
*/
@Nullable
public abstract Tab createNewTab(
LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent);
/**
* On restore, allows us to create a frozen version of a tab using saved tab state we read
* from disk.
* @param state The tab state that the tab can be restored from.
* @param id The id to give the new tab.
* @param index The index for where to place the tab.
*/
public abstract Tab createFrozenTab(TabState state, int id, int index);
/**
* Creates a new tab and loads the specified URL in it. This is a convenience method for
* {@link #createNewTab} with the default {@link LoadUrlParams} and no parent tab.
*
* @param url the URL to open.
* @param type the type of action that triggered that launch. Determines how the tab is
* opened (for example, in the foreground or background).
* @return The new tab or null if no tab was created.
*/
@Nullable
public abstract Tab launchUrl(String url, @TabLaunchType int type);
/**
* Creates a Tab to host the given WebContents.
* @param parent The parent tab, if present.
* @param webContents The web contents to create a tab around.
* @param type The TabLaunchType describing how this tab was created.
* @param url URL to show in the Tab. (Needed only for asynchronous tab creation.)
* @return Whether a Tab was created successfully.
*/
public abstract boolean createTabWithWebContents(
@Nullable Tab parent, WebContents webContents, @TabLaunchType int type, String url);
/**
* Creates a tab around the native web contents pointer.
* @param parent The parent tab, if present.
* @param webContents The web contents to create a tab around.
* @param type The TabLaunchType describing how this tab was created.
* @return Whether a Tab was created successfully.
*/
public final boolean createTabWithWebContents(
Tab parent, WebContents webContents, @TabLaunchType int type) {
return createTabWithWebContents(
parent, webContents, type, webContents.getVisibleUrlString());
}
/**
* Creates a new tab and loads the NTP.
*/
public final void launchNTP() {
try {
TraceEvent.begin("TabCreator.launchNTP");
launchUrl(UrlConstants.NTP_URL, TabLaunchType.FROM_CHROME_UI);
} finally {
TraceEvent.end("TabCreator.launchNTP");
}
}
}
......@@ -4,101 +4,10 @@
package org.chromium.chrome.browser.tabmodel;
import androidx.annotation.Nullable;
import org.chromium.base.TraceEvent;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabState;
import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
/**
* An interface to return a {@link TabCreator} either for regular or incognito tabs.
*/
public interface TabCreatorManager {
/**
* Creates Tabs. If the TabCreator creates Tabs asynchronously, null pointers will be returned
* everywhere instead of a Tab.
*
* TODO(dfalcantara): Hunt down more places where we don't actually need to return a Tab.
*/
public abstract class TabCreator {
/**
* @return Whether the TabCreator creates Tabs asynchronously.
*/
public abstract boolean createsTabsAsynchronously();
/**
* Creates a new tab and posts to UI.
* @param loadUrlParams parameters of the url load.
* @param type Information about how the tab was launched.
* @param parent the parent tab, if present.
* @return The new tab or null if no tab was created.
*/
@Nullable
public abstract Tab createNewTab(
LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent);
/**
* On restore, allows us to create a frozen version of a tab using saved tab state we read
* from disk.
* @param state The tab state that the tab can be restored from.
* @param id The id to give the new tab.
* @param index The index for where to place the tab.
*/
public abstract Tab createFrozenTab(TabState state, int id, int index);
/**
* Creates a new tab and loads the specified URL in it. This is a convenience method for
* {@link #createNewTab} with the default {@link LoadUrlParams} and no parent tab.
*
* @param url the URL to open.
* @param type the type of action that triggered that launch. Determines how the tab is
* opened (for example, in the foreground or background).
* @return The new tab or null if no tab was created.
*/
@Nullable
public abstract Tab launchUrl(String url, @TabLaunchType int type);
/**
* Creates a Tab to host the given WebContents.
* @param parent The parent tab, if present.
* @param webContents The web contents to create a tab around.
* @param type The TabLaunchType describing how this tab was created.
* @param url URL to show in the Tab. (Needed only for asynchronous tab creation.)
* @return Whether a Tab was created successfully.
*/
public abstract boolean createTabWithWebContents(
@Nullable Tab parent, WebContents webContents, @TabLaunchType int type, String url);
/**
* Creates a tab around the native web contents pointer.
* @param parent The parent tab, if present.
* @param webContents The web contents to create a tab around.
* @param type The TabLaunchType describing how this tab was created.
* @return Whether a Tab was created successfully.
*/
public final boolean createTabWithWebContents(
Tab parent, WebContents webContents, @TabLaunchType int type) {
return createTabWithWebContents(
parent, webContents, type, webContents.getVisibleUrlString());
}
/**
* Creates a new tab and loads the NTP.
*/
public final void launchNTP() {
try {
TraceEvent.begin("TabCreator.launchNTP");
launchUrl(UrlConstants.NTP_URL, TabLaunchType.FROM_CHROME_UI);
} finally {
TraceEvent.end("TabCreator.launchNTP");
}
}
}
/**
* @return A {@link TabCreator} that will create either regular or incognito tabs.
* @param incognito True if the method should return the TabCreator for incognito tabs, false
......
......@@ -13,14 +13,14 @@ import org.chromium.chrome.browser.tab.TabCreationState;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabState;
import org.chromium.chrome.browser.tab.TabTestUtils;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
/** MockTabCreator for use in tests. */
public class MockTabCreator extends TabCreatorManager.TabCreator {
public class MockTabCreator extends TabCreator {
public final SparseArray<TabState> created;
public final CallbackHelper callback;
......
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