Commit a09aaa9e authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: Package-private |Tab.initialize|

The public method |initialize| is deliberately separated from the constructor
as an initialization step that gets TabObserver-inherited objects notified
to do their own initialization.

This CL makes the API package-private and moves it into TabBuilder to reduce
its visibility. There is no functional change in the behavior.

Bug: 995903
Change-Id: Ibdde4bb257c532e5a29a1e6650329ef219374df2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1843994
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706783}
parent bf576b6d
......@@ -454,7 +454,6 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/sync/ui/PassphraseActivityTest.java",
"javatests/src/org/chromium/chrome/browser/sync/ui/PassphraseTypeDialogFragmentTest.java",
"javatests/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateTest.java",
"javatests/src/org/chromium/chrome/browser/tab/MockTab.java",
"javatests/src/org/chromium/chrome/browser/tab/RepostFormWarningTest.java",
"javatests/src/org/chromium/chrome/browser/tab/SadTabTest.java",
"javatests/src/org/chromium/chrome/browser/tab/TabIdManagerTest.java",
......
......@@ -91,14 +91,19 @@ public abstract class SingleTabActivity extends ChromeActivity {
tab = TabBuilder.createFromFrozenState()
.setId(tabId)
.setWindow(getWindowAndroid())
.setDelegateFactory(createTabDelegateFactory())
.setTabState(tabState)
.setUnfreeze(unfreeze)
.build();
} else {
tab = new TabBuilder()
.setWindow(getWindowAndroid())
.setLaunchType(TabLaunchType.FROM_CHROME_UI)
.setDelegateFactory(createTabDelegateFactory())
.setTabState(tabState)
.setUnfreeze(unfreeze)
.build();
}
tab.initialize(null, createTabDelegateFactory(), false, tabState, unfreeze);
return tab;
}
......
......@@ -117,8 +117,9 @@ public class HiddenTabHolder {
Tab tab = new TabBuilder()
.setWindow(new WindowAndroid(context))
.setLaunchType(TabLaunchType.FROM_SPECULATIVE_BACKGROUND_CREATION)
.setDelegateFactory(CustomTabDelegateFactory.createDummy())
.setInitiallyHidden(true)
.build();
tab.initialize(null, CustomTabDelegateFactory.createDummy(), true, null, false);
// Resize the webContent to avoid expensive post load resize when attaching the tab.
Rect bounds = ExternalPrerenderHandler.estimateContentSize(context, false);
......
......@@ -355,7 +355,7 @@ public class CustomTabActivityTabController implements InflationObserver, Native
private Tab createTab() {
WebContents webContents = takeWebContents();
Tab tab = mTabFactory.createTab();
Tab tab = mTabFactory.createTab(webContents, mCustomTabDelegateFactory.get());
int launchSource = mIntent.getIntExtra(
CustomTabIntentDataProvider.EXTRA_BROWSER_LAUNCH_SOURCE, LaunchSourceType.OTHER);
if (launchSource == LaunchSourceType.WEBAPK) {
......@@ -366,9 +366,6 @@ public class CustomTabActivityTabController implements InflationObserver, Native
mConnection.getClientPackageNameForSession(mSession));
}
tab.initialize(webContents, mCustomTabDelegateFactory.get(), false /*initiallyHidden*/,
null, false /*unfreeze*/);
if (mIntentDataProvider.shouldEnableEmbeddedMediaExperience()) {
if (tab.getWebContents() != null) tab.getWebContents().notifyRendererPreferenceUpdate();
}
......
......@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.tabmodel.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl;
import org.chromium.chrome.browser.util.IntentUtils;
import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.ActivityWindowAndroid;
import javax.inject.Inject;
......@@ -93,7 +94,7 @@ public class CustomTabActivityTabFactory {
}
/** Creates a new tab for a Custom Tab activity */
public Tab createTab() {
public Tab createTab(WebContents webContents, TabDelegateFactory delegateFactory) {
Intent intent = mIntentDataProvider.getIntent();
int assignedTabId =
IntentUtils.safeGetIntExtra(intent, IntentHandler.EXTRA_TAB_ID, Tab.INVALID_TAB_ID);
......@@ -106,6 +107,8 @@ public class CustomTabActivityTabFactory {
.setIncognito(mIntentDataProvider.isIncognito())
.setWindow(mActivityWindowAndroid.get())
.setLaunchType(TabLaunchType.FROM_EXTERNAL_APP)
.setWebContents(webContents)
.setDelegateFactory(delegateFactory)
.build();
}
......
......@@ -176,21 +176,18 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable
mLoadUrlParams.setReferrer(new Referrer(referrer, ReferrerPolicy.DEFAULT));
}
// Create a detached tab and navigate it.
// Create a detached tab, but don't add it to the tab model yet. We'll do that
// later if the loadUrlParams etc... match.
mTab = TabBuilder.createLiveTab(false)
.setIncognito(false)
.setLaunchType(TabLaunchType.FROM_EXTERNAL_APP)
.setWindow(mWindowAndroid)
.setWebContents(webContents)
.setDelegateFactory(chromeTabCreator.createDefaultTabDelegateFactory())
.build();
mObserver = new StartupTabObserver();
mTab.addObserver(mObserver);
// Create and load the tab, but don't add it to the tab model yet. We'll do that
// later if the loadUrlParams etc... match.
mTab.initialize(webContents, chromeTabCreator.createDefaultTabDelegateFactory(), false,
/* tabState */ null,
/* unfreeze */ false);
mTab.loadUrl(mLoadUrlParams);
}
......
......@@ -172,10 +172,6 @@ public class SearchActivity extends AsyncInitializationActivity
public void finishNativeInitialization() {
super.finishNativeInitialization();
mTab = new TabBuilder()
.setWindow(getWindowAndroid())
.setLaunchType(TabLaunchType.FROM_EXTERNAL_APP)
.build();
TabDelegateFactory factory = new TabDelegateFactory() {
@Override
public TabWebContentsDelegateAndroid createWebContentsDelegate(Tab tab) {
......@@ -218,8 +214,12 @@ public class SearchActivity extends AsyncInitializationActivity
return null;
}
};
mTab.initialize(
WebContentsFactory.createWebContents(false, false), factory, false, null, false);
mTab = new TabBuilder()
.setWindow(getWindowAndroid())
.setLaunchType(TabLaunchType.FROM_EXTERNAL_APP)
.setWebContents(WebContentsFactory.createWebContents(false, false))
.setDelegateFactory(factory)
.build();
mTab.loadUrl(new LoadUrlParams(ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL));
mSearchBoxDataProvider.onNativeLibraryReady(mTab);
......
......@@ -276,18 +276,13 @@ public class Tab {
*
* Package-private. Use {@link TabBuilder} to create an instance.
*
* @param id The id this tab should be identified with.
* @param parent The tab that caused this tab to be opened.
* @param incognito Whether or not this tab is incognito.
* @param window An instance of a {@link WindowAndroid}.
* @param launchType Type indicating how this tab was launched.
* @param creationState State in which the tab is created.
* @param loadUrlParams Parameters used for a lazily loaded Tab.
* @param id The id this tab should be identified with.
* @param parent The tab that caused this tab to be opened.
* @param incognito Whether or not this tab is incognito.
* @param launchType Type indicating how this tab was launched.
*/
@SuppressLint("HandlerLeak")
Tab(int id, Tab parent, boolean incognito, WindowAndroid window,
@Nullable @TabLaunchType Integer launchType,
@Nullable @TabCreationState Integer creationState, LoadUrlParams loadUrlParams) {
Tab(int id, Tab parent, boolean incognito, @Nullable @TabLaunchType Integer launchType) {
mId = TabIdManager.getInstance().generateValidId(id);
mIncognito = incognito;
if (parent == null) {
......@@ -308,13 +303,7 @@ public class Tab {
ContextUtils.getApplicationContext(), ChromeActivity.getThemeId(),
false /*nightMode*/);
mWindowAndroid = window;
mLaunchType = launchType;
mLaunchTypeAtCreation = launchType;
mPendingLoadParams = loadUrlParams;
if (loadUrlParams != null) mUrl = loadUrlParams.getUrl();
TabHelpers.initTabHelpers(this, parent, creationState);
mAttachStateChangeListener = new OnAttachStateChangeListener() {
@Override
......@@ -847,21 +836,30 @@ public class Tab {
/**
* Initializes {@link Tab} with {@code webContents}. If {@code webContents} is {@code null} a
* new {@link WebContents} will be created for this {@link Tab}.
* @param webContents A {@link WebContents} object or {@code null} if one should be
* created.
* @param delegateFactory The {@link TabDelegateFactory} to be used for delegate creation.
* @param initiallyHidden Only used if {@code webContents} is {@code null}. Determines
* whether or not the newly created {@link WebContents} will be hidden
* or not.
* @param tabState State containing information about this Tab, if it was persisted.
* @param unfreeze Whether there should be an attempt to restore state at the end of
* the initialization.
*/
public void initialize(WebContents webContents, @Nullable TabDelegateFactory delegateFactory,
boolean initiallyHidden, TabState tabState, boolean unfreeze) {
* @param parent The tab that caused this tab to be opened.
* @param creationState State in which the tab is created.
* @param loadUrlParams Parameters used for a lazily loaded Tab.
* @param webContents A {@link WebContents} object or {@code null} if one should be created.
* @param delegateFactory The {@link TabDelegateFactory} to be used for delegate creation.
* @param initiallyHidden Only used if {@code webContents} is {@code null}. Determines
* whether or not the newly created {@link WebContents} will be hidden or not.
* @param tabState State containing information about this Tab, if it was persisted.
* @param unfreeze Whether there should be an attempt to restore state at the end of
* the initialization.
*/
void initialize(Tab parent, @Nullable @TabCreationState Integer creationState,
LoadUrlParams loadUrlParams, WebContents webContents,
@Nullable TabDelegateFactory delegateFactory, boolean initiallyHidden,
TabState tabState, boolean unfreeze) {
try {
TraceEvent.begin("Tab.initialize");
mLaunchTypeAtCreation = mLaunchType;
mPendingLoadParams = loadUrlParams;
if (loadUrlParams != null) mUrl = loadUrlParams.getUrl();
TabHelpers.initTabHelpers(this, parent, creationState);
if (tabState != null) restoreFieldsFromState(tabState);
initializeNative();
......
......@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.tab;
import org.chromium.chrome.browser.tab.TabUma.TabCreationState;
import org.chromium.chrome.browser.tabmodel.TabLaunchType;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.WindowAndroid;
/**
......@@ -23,6 +24,12 @@ public class TabBuilder {
private boolean mFromFrozenState;
private LoadUrlParams mLoadUrlParams;
private WebContents mWebContents;
private TabDelegateFactory mDelegateFactory;
private boolean mInitiallyHidden;
private TabState mTabState;
private boolean mUnfreeze;
/**
* Sets the id with which the Tab to create should be identified.
* @param id The id of the Tab.
......@@ -73,6 +80,59 @@ public class TabBuilder {
return this;
}
/**
* Sets a {@link WebContents} object to be used on the Tab. If not set, a new one
* will be created.
* @param webContents {@link WebContents} object.
* @return {@link TabBuilder} creating the Tab.
*/
public TabBuilder setWebContents(WebContents webContents) {
mWebContents = webContents;
return this;
}
/**
* Sets a {@link TabDelegateFactory} object.
* @param delegateFactory The factory delegated to create various Tab-related objects.
* @return {@link TabBuilder} creating the Tab.
*/
public TabBuilder setDelegateFactory(TabDelegateFactory delegateFactory) {
mDelegateFactory = delegateFactory;
return this;
}
/**
* Sets a flag indicating whether the Tab should start as hidden. Only used if
* {@code webContents} is {@code null}.
* @param initiallyHidden {@code true} if the newly created {@link WebContents} will be hidden.
* @return {@link TabBuilder} creating the Tab.
*/
public TabBuilder setInitiallyHidden(boolean initiallyHidden) {
mInitiallyHidden = initiallyHidden;
return this;
}
/**
* Sets a {@link TabState} object containing information about this Tab, if it was persisted.
* @param tabState State object.
* @return {@link TabBuilder} creating the Tab.
*/
public TabBuilder setTabState(TabState tabState) {
mTabState = tabState;
return this;
}
/**
* Sets a flag indicating if there should be an attempt to restore state at the end of
* the initialization.
* @param unfreeze {@code true} if WebContents needs restoring from its saved state.
* @return {@link TabBuilder} creating the Tab.
*/
public TabBuilder setUnfreeze(boolean unfreeze) {
mUnfreeze = unfreeze;
return this;
}
public Tab build() {
// Pre-condition check
if (mCreationType != null) {
......@@ -86,8 +146,14 @@ public class TabBuilder {
if (mFromFrozenState) assert mLaunchType == TabLaunchType.FROM_RESTORE;
}
return new Tab(
mId, mParent, mIncognito, mWindow, mLaunchType, mCreationType, mLoadUrlParams);
Tab tab = new Tab(mId, mParent, mIncognito, mLaunchType);
tab.updateWindowAndroid(mWindow);
// Initializes Tab. Its user data objects are also initialized through the event
// |onInitialized| of TabObserver they register.
tab.initialize(mParent, mCreationType, mLoadUrlParams, mWebContents, mDelegateFactory,
mInitiallyHidden, mTabState, mUnfreeze);
return tab;
}
private TabBuilder setCreationType(@TabCreationState int type) {
......
......@@ -142,8 +142,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
.setIncognito(mIncognito)
.setWindow(mNativeWindow)
.setLaunchType(type)
.setWebContents(webContents)
.setDelegateFactory(delegateFactory)
.setInitiallyHidden(!openInForeground)
.build();
tab.initialize(webContents, delegateFactory, !openInForeground, null, false);
TabParentIntent.from(tab).set(parentIntent);
webContents.resumeLoadingCreatedWebContents();
} else if (!openInForeground && SysUtils.isLowEndDevice()) {
......@@ -155,8 +157,9 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
.setIncognito(mIncognito)
.setWindow(mNativeWindow)
.setLaunchType(type)
.setDelegateFactory(delegateFactory)
.setInitiallyHidden(!openInForeground)
.build();
tab.initialize(null, delegateFactory, !openInForeground, null, false);
} else {
tab = (mStartupTabPreloader != null)
? mStartupTabPreloader.takeTabIfMatchingOrDestroy(loadUrlParams, type)
......@@ -169,8 +172,9 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
.setIncognito(mIncognito)
.setWindow(mNativeWindow)
.setLaunchType(type)
.setDelegateFactory(delegateFactory)
.setInitiallyHidden(!openInForeground)
.build();
tab.initialize(null, delegateFactory, !openInForeground, null, false);
tab.loadUrl(loadUrlParams);
TraceEvent.end("ChromeTabCreator.loadUrl");
}
......@@ -209,8 +213,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
.setIncognito(mIncognito)
.setWindow(mNativeWindow)
.setLaunchType(type)
.setWebContents(webContents)
.setDelegateFactory(delegateFactory)
.setInitiallyHidden(!openInForeground)
.build();
tab.initialize(webContents, delegateFactory, !openInForeground, null, false);
mTabModel.addTab(tab, position, type);
return true;
}
......@@ -308,15 +314,17 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
public Tab createFrozenTab(TabState state, int id, int index) {
TabModelSelector selector = mActivity.getTabModelSelector();
Tab parent = selector != null ? selector.getTabById(state.parentId) : null;
boolean selectTab = mOrderController.willOpenInForeground(
TabLaunchType.FROM_RESTORE, state.isIncognito());
Tab tab = TabBuilder.createFromFrozenState()
.setId(id)
.setParent(parent)
.setIncognito(state.isIncognito())
.setWindow(mNativeWindow)
.setDelegateFactory(createDefaultTabDelegateFactory())
.setInitiallyHidden(!selectTab)
.setTabState(state)
.build();
boolean selectTab = mOrderController.willOpenInForeground(TabLaunchType.FROM_RESTORE,
state.isIncognito());
tab.initialize(null, createDefaultTabDelegateFactory(), !selectTab, state, false);
assert state.isIncognito() == mIncognito;
mTabModel.addTab(tab, index, TabLaunchType.FROM_RESTORE);
return tab;
......
......@@ -34,8 +34,8 @@ import org.chromium.chrome.browser.compositor.layouts.phone.StackLayout;
import org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack;
import org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab;
import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
import org.chromium.chrome.browser.tab.MockTab;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabBuilder;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelUtils;
......@@ -557,6 +557,6 @@ public class LayoutManagerTest implements MockTabModelDelegate {
@Override
public Tab createTab(int id, boolean incognito) {
return new TabBuilder().setId(id).setIncognito(incognito).build();
return MockTab.createAndInitialize(id, incognito);
}
}
......@@ -34,8 +34,8 @@ import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteDelegate;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionListEmbedder;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.MockTab;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabBuilder;
import org.chromium.chrome.browser.toolbar.ToolbarDataProvider;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
......@@ -434,7 +434,7 @@ public class LocationBarVoiceRecognitionHandlerTest {
TestThreadUtils.runOnUiThreadBlocking(() -> {
mWindowAndroid = new TestWindowAndroid(mActivityTestRule.getActivity());
mWindowAndroid.setAndroidPermissionDelegate(mPermissionDelegate);
mTab = new TabBuilder().setId(0).setWindow(mWindowAndroid).build();
mTab = new MockTab(0, false);
});
}
......
// Copyright 2019 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.tab;
/**
* Tab used for various testing purposes.
*/
public class MockTab extends Tab {
/**
* Constructor for id and incognito atrribute. Tests often need to initialize
* these two fields only.
*/
public MockTab(int id, boolean incognito) {
super(id, null, incognito, null, null, null, null);
}
}
......@@ -61,6 +61,10 @@ public class TabUmaTest {
mTestServer.stopAndDestroyServer();
}
private TabDelegateFactoryImpl createTabDelegateFactory() {
return new TabDelegateFactoryImpl(mActivityTestRule.getActivity());
}
/**
* Verify that Tab.StatusWhenSwitchedBackToForeground is correctly recording lazy loads.
*/
......@@ -74,9 +78,9 @@ public class TabUmaTest {
Tab bgTab = TabBuilder.createForLazyLoad(new LoadUrlParams(mTestUrl))
.setWindow(mActivityTestRule.getActivity().getWindowAndroid())
.setLaunchType(TabLaunchType.FROM_LONGPRESS_BACKGROUND)
.setDelegateFactory(createTabDelegateFactory())
.setInitiallyHidden(true)
.build();
bgTab.initialize(null, new TabDelegateFactoryImpl(mActivityTestRule.getActivity()),
true, null, false);
return bgTab;
}
});
......@@ -120,9 +124,9 @@ public class TabUmaTest {
Tab bgTab = TabBuilder.createLiveTab(true)
.setWindow(mActivityTestRule.getActivity().getWindowAndroid())
.setLaunchType(TabLaunchType.FROM_LONGPRESS_BACKGROUND)
.setDelegateFactory(createTabDelegateFactory())
.setInitiallyHidden(true)
.build();
bgTab.initialize(null, new TabDelegateFactoryImpl(mActivityTestRule.getActivity()),
true, null, false);
bgTab.loadUrl(new LoadUrlParams(mTestUrl));
bgTab.show(TabSelectionType.FROM_USER);
return bgTab;
......@@ -139,9 +143,9 @@ public class TabUmaTest {
Tab bgTab = TabBuilder.createLiveTab(true)
.setWindow(mActivityTestRule.getActivity().getWindowAndroid())
.setLaunchType(TabLaunchType.FROM_LONGPRESS_BACKGROUND)
.setDelegateFactory(createTabDelegateFactory())
.setInitiallyHidden(true)
.build();
bgTab.initialize(null, new TabDelegateFactoryImpl(mActivityTestRule.getActivity()),
true, null, false);
bgTab.loadUrl(new LoadUrlParams(mTestUrl));
// Simulate the renderer being killed by the OS.
ChromeTabUtils.simulateRendererKilledForTesting(bgTab, false);
......@@ -160,9 +164,9 @@ public class TabUmaTest {
Tab bgTab = TabBuilder.createForLazyLoad(new LoadUrlParams(mTestUrl))
.setWindow(mActivityTestRule.getActivity().getWindowAndroid())
.setLaunchType(TabLaunchType.FROM_LONGPRESS_BACKGROUND)
.setDelegateFactory(createTabDelegateFactory())
.setInitiallyHidden(true)
.build();
bgTab.initialize(null, new TabDelegateFactoryImpl(mActivityTestRule.getActivity()),
true, null, false);
bgTab.show(TabSelectionType.FROM_USER);
return bgTab;
}
......
......@@ -16,8 +16,8 @@ import org.junit.runner.RunWith;
import org.chromium.base.ObserverList.RewindableIterator;
import org.chromium.base.ThreadUtils;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.chrome.browser.tab.MockTab;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabBuilder;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.tab.TabTestUtils;
import org.chromium.content_public.browser.LoadUrlParams;
......@@ -135,9 +135,7 @@ public class TabModelSelectorTabObserverTest {
}
private Tab createTestTab(boolean incognito) {
return ThreadUtils.runOnUiThreadBlockingNoException(
new TabBuilder().setIncognito(incognito).setWindow(
mTestRule.getWindowAndroid())::build);
return ThreadUtils.runOnUiThreadBlockingNoException(() -> new MockTab(0, incognito));
}
private static void addTab(TabModel tabModel, Tab tab) {
......
......@@ -32,8 +32,8 @@ import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout
import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelper;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.snackbar.undo.UndoBarController;
import org.chromium.chrome.browser.tab.MockTab;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabBuilder;
import org.chromium.chrome.browser.tab.TabState;
import org.chromium.chrome.browser.tab.TabTestUtils;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
......@@ -101,10 +101,7 @@ public class TabPersistentStoreTest {
@Override
public Tab createNewTab(LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent) {
Tab tab = TabBuilder.createForLazyLoad(loadUrlParams)
.setIncognito(mIsIncognito)
.setLaunchType(TabLaunchType.FROM_LINK)
.build();
Tab tab = new MockTab(0, mIsIncognito, TabLaunchType.FROM_LINK);
mSelector.getModel(mIsIncognito).addTab(tab, TabModel.INVALID_TAB_INDEX, type);
storeTabInfo(null, tab.getId());
return tab;
......@@ -112,10 +109,7 @@ public class TabPersistentStoreTest {
@Override
public Tab createFrozenTab(TabState state, int id, int index) {
Tab tab = TabBuilder.createFromFrozenState()
.setId(id)
.setIncognito(state.isIncognito())
.build();
Tab tab = new MockTab(id, state.isIncognito(), TabLaunchType.FROM_RESTORE);
TabTestUtils.restoreFieldsFromState(tab, state);
mSelector.getModel(mIsIncognito).addTab(tab, index, TabLaunchType.FROM_RESTORE);
storeTabInfo(state, id);
......
......@@ -20,8 +20,8 @@ import org.chromium.base.ApplicationStatus;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.chrome.browser.tab.MockTab;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabBuilder;
import org.chromium.chrome.browser.tabmodel.TabWindowManager.TabModelSelectorFactory;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector;
......@@ -295,7 +295,7 @@ public class TabWindowManagerTest {
AsyncTabParamsManager.getAsyncTabParams().clear();
final int asyncTabId = 123;
final TabReparentingParams dummyParams =
new TabReparentingParams(new TabBuilder().setId(0).build(), null, null);
new TabReparentingParams(new MockTab(0, false), null, null);
Assert.assertFalse(manager.tabExistsInAnySelector(asyncTabId));
AsyncTabParamsManager.add(asyncTabId, dummyParams);
try {
......@@ -330,7 +330,7 @@ public class TabWindowManagerTest {
AsyncTabParamsManager.getAsyncTabParams().clear();
final int asyncTabId = 123;
final TabReparentingParams dummyParams =
new TabReparentingParams(new TabBuilder().setId(0).build(), null, null);
new TabReparentingParams(new MockTab(0, false), null, null);
Assert.assertNull(manager.getTabById(asyncTabId));
AsyncTabParamsManager.add(asyncTabId, dummyParams);
try {
......
......@@ -112,7 +112,7 @@ public class CustomTabActivityContentTestEnvironment extends TestWatcher {
when(intentDataProvider.getIntent()).thenReturn(intent);
when(intentDataProvider.getSession()).thenReturn(session);
when(intentDataProvider.getUrlToLoad()).thenReturn(INITIAL_URL);
when(tabFactory.createTab()).thenReturn(tabFromFactory);
when(tabFactory.createTab(webContentsCaptor.capture(), any())).thenReturn(tabFromFactory);
when(tabFactory.getTabModelSelector()).thenReturn(tabModelSelector);
when(tabModelSelector.getModel(anyBoolean())).thenReturn(tabModel);
when(connection.getSpeculatedUrl(any())).thenReturn(SPECULATED_URL);
......@@ -124,9 +124,6 @@ public class CustomTabActivityContentTestEnvironment extends TestWatcher {
doNothing().when(activityTabProvider).addObserverAndTrigger(
activityTabObserverCaptor.capture());
doNothing()
.when(tabFromFactory)
.initialize(webContentsCaptor.capture(), any(), anyBoolean(), any(), anyBoolean());
}
@Override
......
......@@ -81,7 +81,7 @@ public class CustomTabActivityTabControllerTest {
Tab savedTab = env.prepareTab();
env.saveTab(savedTab);
env.reachNativeInit(mTabController);
verify(env.tabFactory, never()).createTab();
verify(env.tabFactory, never()).createTab(any(), any());
}
@Test
......@@ -98,7 +98,7 @@ public class CustomTabActivityTabControllerTest {
clearInvocations(env.tabFactory);
mTabController.onFinishNativeInitialization();
verify(env.tabFactory, never()).createTab();
verify(env.tabFactory, never()).createTab(any(), any());
}
@Test
......
......@@ -73,7 +73,7 @@ public class TabUnitTest {
features.put("ShoppingAssist", true);
ChromeFeatureList.setTestFeatures(features);
mTab = new Tab(TAB1_ID, null, false, mWindowAndroid, null, null, mLoadUrlParams);
mTab = new Tab(TAB1_ID, null, false, null);
mTab.addObserver(mObserver);
}
......
......@@ -110,6 +110,7 @@ android_library("chrome_java_test_support") {
testonly = true
java_files = [
"javatests/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorTestUtils.java",
"javatests/src/org/chromium/chrome/browser/tab/MockTab.java",
"javatests/src/org/chromium/chrome/test/BottomSheetTestRule.java",
"javatests/src/org/chromium/chrome/test/ChromeActivityTestRule.java",
"javatests/src/org/chromium/chrome/test/ChromeBrowserTestRule.java",
......
// Copyright 2019 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.tab;
import androidx.annotation.Nullable;
import org.chromium.chrome.browser.tab.TabUma.TabCreationState;
import org.chromium.chrome.browser.tabmodel.TabLaunchType;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
/**
* Tab used for various testing purposes.
*/
public class MockTab extends Tab {
/**
* Create a new Tab for testing and initializes Tab UserData objects.
*/
public static Tab createAndInitialize(int id, boolean incognito) {
Tab tab = new MockTab(id, incognito);
tab.initialize(null, null, null, null, null, false, null, false);
return tab;
}
/**
* Constructor for id and incognito attribute. Tests often need to initialize
* these two fields only.
*/
public MockTab(int id, boolean incognito) {
super(id, null, incognito, null);
}
public MockTab(int id, boolean incognito, @TabLaunchType Integer type) {
super(id, null, incognito, type);
}
@Override
public void initialize(Tab parent, @Nullable @TabCreationState Integer creationState,
LoadUrlParams loadUrlParams, WebContents webContents,
@Nullable TabDelegateFactory delegateFactory, boolean initiallyHidden,
TabState tabState, boolean unfreeze) {
TabHelpers.initTabHelpers(this, parent, creationState);
}
}
......@@ -4,8 +4,8 @@
package org.chromium.chrome.test.util.browser.tabmodel;
import org.chromium.chrome.browser.tab.MockTab;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabBuilder;
import org.chromium.chrome.browser.tabmodel.EmptyTabModel;
import org.chromium.chrome.browser.tabmodel.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabModel;
......@@ -43,7 +43,7 @@ public class MockTabModel extends EmptyTabModel {
}
public Tab addTab(int id) {
Tab tab = mDelegate == null ? new TabBuilder().setId(id).setIncognito(isIncognito()).build()
Tab tab = mDelegate == null ? new MockTab(id, isIncognito())
: mDelegate.createTab(id, isIncognito());
mTabs.add(tab);
return tab;
......
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