Index: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/DocumentTabModelImpl.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/DocumentTabModelImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/DocumentTabModelImpl.java |
index 052e55d8b82bc15c32ae6c89d96464e7e0e3b790..5a67c3768b88b981525eaeb8244235883b1aa328 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/DocumentTabModelImpl.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/DocumentTabModelImpl.java |
@@ -25,7 +25,9 @@ import org.chromium.base.ThreadUtils; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.chrome.browser.Tab; |
import org.chromium.chrome.browser.TabState; |
+import org.chromium.chrome.browser.document.DocumentMetricIds; |
import org.chromium.chrome.browser.document.IncognitoNotificationManager; |
+import org.chromium.chrome.browser.tabmodel.TabCreatorManager; |
import org.chromium.chrome.browser.tabmodel.TabList; |
import org.chromium.chrome.browser.tabmodel.TabModel; |
import org.chromium.chrome.browser.tabmodel.TabModelJniBridge; |
@@ -34,6 +36,7 @@ import org.chromium.chrome.browser.tabmodel.TabModelUtils; |
import org.chromium.chrome.browser.tabmodel.document.DocumentTabModelInfo.DocumentEntry; |
import org.chromium.chrome.browser.tabmodel.document.DocumentTabModelInfo.DocumentList; |
import org.chromium.chrome.browser.util.MathUtils; |
+import org.chromium.content_public.browser.LoadUrlParams; |
import org.chromium.content_public.browser.WebContents; |
import java.io.File; |
@@ -117,7 +120,7 @@ public class DocumentTabModelImpl extends TabModelJniBridge implements DocumentT |
private final StorageDelegate mStorageDelegate; |
/** Delegate that provides Tabs to the DocumentTabModel. */ |
- private final TabDelegate mTabDelegate; |
+ private final TabCreatorManager mTabCreatorManager; |
/** ID of a Tab whose state should be loaded immediately, if it belongs to this TabList. */ |
private final int mPrioritizedTabId; |
@@ -140,13 +143,13 @@ public class DocumentTabModelImpl extends TabModelJniBridge implements DocumentT |
/** |
* Construct a DocumentTabModelImpl. |
* @param activityDelegate Used to interact with DocumentActivities. |
- * @param tabDelegate Used to create/get Tabs. |
+ * @param tabCreatorManager Used to create/get Tabs. |
* @param isIncognito Whether or not the TabList is managing incognito tabs. |
* @param prioritizedTabId ID of the tab to prioritize when loading. |
*/ |
- public DocumentTabModelImpl(ActivityDelegate activityDelegate, TabDelegate tabDelegate, |
- boolean isIncognito, int prioritizedTabId) { |
- this(activityDelegate, new StorageDelegate(), tabDelegate, isIncognito, |
+ public DocumentTabModelImpl(ActivityDelegate activityDelegate, |
+ TabCreatorManager tabCreatorManager, boolean isIncognito, int prioritizedTabId) { |
+ this(activityDelegate, new StorageDelegate(), tabCreatorManager, isIncognito, |
prioritizedTabId, ApplicationStatus.getApplicationContext()); |
} |
@@ -162,11 +165,12 @@ public class DocumentTabModelImpl extends TabModelJniBridge implements DocumentT |
* TODO(dfalcantara): Reduce visibility once DocumentMigrationHelper is upstreamed. |
*/ |
public DocumentTabModelImpl(ActivityDelegate activityDelegate, StorageDelegate storageDelegate, |
- TabDelegate tabDelegate, boolean isIncognito, int prioritizedTabId, Context context) { |
+ TabCreatorManager tabCreatorManager, boolean isIncognito, int prioritizedTabId, |
+ Context context) { |
super(isIncognito); |
mActivityDelegate = activityDelegate; |
mStorageDelegate = storageDelegate; |
- mTabDelegate = tabDelegate; |
+ mTabCreatorManager = tabCreatorManager; |
mPrioritizedTabId = prioritizedTabId; |
mContext = context; |
@@ -271,8 +275,8 @@ public class DocumentTabModelImpl extends TabModelJniBridge implements DocumentT |
int tabId = mTabIdList.get(index); |
List<WeakReference<Activity>> activities = ApplicationStatus.getRunningActivities(); |
for (WeakReference<Activity> activityRef : activities) { |
- Tab tab = mTabDelegate.getActivityTab( |
- isIncognito(), mActivityDelegate, activityRef.get()); |
+ Tab tab = getTabDelegate(isIncognito()).getActivityTab( |
+ mActivityDelegate, activityRef.get()); |
int documentId = tab == null ? Tab.INVALID_TAB_ID : tab.getId(); |
if (documentId == tabId) return tab; |
} |
@@ -289,7 +293,8 @@ public class DocumentTabModelImpl extends TabModelJniBridge implements DocumentT |
// Create a frozen Tab if we are capable, or if the previous Tab is just a placeholder. |
if (entry.getTabState() != null && isNativeInitialized() |
&& (entry.placeholderTab == null || !entry.placeholderTab.isInitialized())) { |
- entry.placeholderTab = mTabDelegate.createFrozenTab(entry); |
+ entry.placeholderTab = getTabDelegate(isIncognito()).createFrozenTab( |
+ entry.getTabState(), entry.tabId, TabModel.INVALID_TAB_INDEX); |
entry.placeholderTab.initializeNative(); |
} |
@@ -345,14 +350,20 @@ public class DocumentTabModelImpl extends TabModelJniBridge implements DocumentT |
@Override |
protected Tab createTabWithWebContents( |
boolean isIncognito, WebContents webContents, int parentTabId) { |
- mTabDelegate.createTabWithWebContents(isIncognito, webContents, parentTabId); |
- return null; |
+ // Tabs created along this pathway are currently only created via JNI, which includes |
+ // session restore tabs. Differs from TabModelImpl because we explicitly open tabs in the |
+ // foreground -- opening tabs in affiliated mode is disallowed by ChromeLauncherActivity |
+ // when a WebContents has already been created. |
+ return getTabDelegate(isIncognito).createTabWithWebContents( |
+ webContents, parentTabId, TabLaunchType.FROM_LONGPRESS_FOREGROUND, |
+ DocumentMetricIds.STARTED_BY_CHROME_HOME_RECENT_TABS); |
} |
@Override |
protected Tab createNewTabForDevTools(String url) { |
- mTabDelegate.createTabForDevTools(url); |
- return null; |
+ // TODO(dfalcantara): Move upwards once we delete ChromeShellTabModel. |
+ return getTabDelegate(false).createNewTab(new LoadUrlParams(url), |
+ TabModel.TabLaunchType.FROM_MENU_OR_OVERVIEW, null); |
} |
@Override |
@@ -958,4 +969,8 @@ public class DocumentTabModelImpl extends TabModelJniBridge implements DocumentT |
} |
return false; |
} |
+ |
+ private TabDelegate getTabDelegate(boolean incognito) { |
+ return (TabDelegate) mTabCreatorManager.getTabCreator(incognito); |
+ } |
} |