Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(581)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java

Issue 1238053002: Move the WebContents to the AsyncTabCreationParams for tabbed mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: TabDelegate cleaning Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java
index 39a0b3549dff443f46c225c0c16fc7f08f1e0640..d9e905caf765baca4114fdaf5d461407ff2631de 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java
@@ -19,6 +19,7 @@ import org.chromium.chrome.browser.UrlConstants;
import org.chromium.chrome.browser.document.ChromeLauncherActivity;
import org.chromium.chrome.browser.document.DocumentMetricIds;
import org.chromium.chrome.browser.tab.ChromeTab;
+import org.chromium.chrome.browser.tab.TabIdManager;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
import org.chromium.chrome.browser.util.FeatureUtilities;
@@ -29,8 +30,6 @@ import org.chromium.ui.base.PageTransition;
import java.lang.ref.WeakReference;
-import javax.annotation.Nullable;
-
/**
* Asynchronously creates Tabs by creating/starting up Activities.
*/
@@ -78,42 +77,16 @@ public class TabDelegate extends TabCreator {
*/
public boolean createTabWithWebContents(
WebContents webContents, int parentId, TabLaunchType type, String url, int startedBy) {
- // Tabs can't be launched in affiliated mode when a webcontents exists.
- assert type != TabLaunchType.FROM_LONGPRESS_BACKGROUND;
-
if (url == null) url = "";
- Context context = ApplicationStatus.getApplicationContext();
+ // TODO(dfalcantara): Does this transition make sense? (crbug.com/509886)
int pageTransition = startedBy == DocumentMetricIds.STARTED_BY_CHROME_HOME_RECENT_TABS
? PageTransition.RELOAD : PageTransition.AUTO_TOPLEVEL;
- Activity parentActivity = getActivityForTabId(parentId);
-
- if (FeatureUtilities.isDocumentMode(context)) {
- AsyncTabCreationParams asyncParams =
- new AsyncTabCreationParams(new LoadUrlParams(url, pageTransition), webContents);
- asyncParams.setDocumentStartedBy(startedBy);
- ChromeLauncherActivity.launchDocumentInstance(
- parentActivity, mIsIncognito, asyncParams);
- } else {
- // TODO(dfalcantara): Unify the document-mode path with this path so that both go
- // through the ChromeLauncherActivity via an Intent.
- Intent tabbedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
- tabbedIntent.setClass(context, ChromeLauncherActivity.class);
- tabbedIntent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, mIsIncognito);
- tabbedIntent.putExtra(IntentHandler.EXTRA_WEB_CONTENTS, webContents);
- tabbedIntent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, pageTransition);
- tabbedIntent.putExtra(IntentHandler.EXTRA_PARENT_TAB_ID, parentId);
-
- if (parentActivity != null && parentActivity.getIntent() != null) {
- tabbedIntent.putExtra(
- IntentHandler.EXTRA_PARENT_INTENT, parentActivity.getIntent());
- }
-
- tabbedIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- IntentHandler.startActivityForTrustedIntent(tabbedIntent, context);
- }
-
+ AsyncTabCreationParams asyncParams =
David Trainor- moved to gerrit 2015/07/16 21:32:18 We should probably move this to the builder paradi
gone 2015/07/16 22:05:50 Was made this way specifically to prevent setting
+ new AsyncTabCreationParams(new LoadUrlParams(url, pageTransition), webContents);
+ asyncParams.setDocumentStartedBy(startedBy);
+ createNewTab(asyncParams, type, parentId);
return true;
}
@@ -151,7 +124,7 @@ public class TabDelegate extends TabCreator {
}
// Tab is created aysnchronously. Can't return anything, yet.
- createNewTab(asyncParams, type, parent);
+ createNewTab(asyncParams, type, parent == null ? Tab.INVALID_TAB_ID : parent.getId());
return null;
}
@@ -159,30 +132,36 @@ public class TabDelegate extends TabCreator {
* Creates a Tab to host the given WebContents asynchronously.
* @param asyncParams Parameters to create the Tab with, including the URL.
* @param type Information about how the tab was launched.
- * @param parent The parent tab, if it exists.
+ * @param parentId ID of the parent tab, if it exists.
*/
public void createNewTab(
- AsyncTabCreationParams asyncParams, TabLaunchType type, @Nullable Tab parent) {
+ AsyncTabCreationParams asyncParams, TabLaunchType type, int parentId) {
assert asyncParams != null;
- if (FeatureUtilities.isDocumentMode(ApplicationStatus.getApplicationContext())) {
+ // Tabs should't be launched in affiliated mode when a webcontents exists.
+ assert !(type == TabLaunchType.FROM_LONGPRESS_BACKGROUND
+ && asyncParams.getWebContents() != null);
+
+ Context context = ApplicationStatus.getApplicationContext();
+ Activity parentActivity = getActivityForTabId(parentId);
+
+ if (FeatureUtilities.isDocumentMode(context)) {
ChromeLauncherActivity.launchDocumentInstance(
- getActivityFromTab(parent), mIsIncognito, asyncParams);
+ parentActivity, mIsIncognito, asyncParams);
} else {
- // TODO(dfalcantara): Start parceling all of the LoadUrlParams when ChromeTabbedActivity
- // can use them. Use the same non-duplication mechanism as the
- // WebContents so that they don't get reused across process restarts.
- Context context = ApplicationStatus.getApplicationContext();
+ // TODO(dfalcantara): Is it possible to get rid of this conditional?
+ int assignedTabId = TabIdManager.getInstance().generateValidId(Tab.INVALID_TAB_ID);
+ AsyncTabCreationParamsManager.add(assignedTabId, asyncParams);
Intent intent = new Intent(
Intent.ACTION_VIEW, Uri.parse(asyncParams.getLoadUrlParams().getUrl()));
intent.setClass(context, ChromeLauncherActivity.class);
+ intent.putExtra(IntentHandler.EXTRA_TAB_ID, assignedTabId);
intent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, mIsIncognito);
- intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE,
- asyncParams.getLoadUrlParams().getTransitionType());
+ intent.putExtra(IntentHandler.EXTRA_PARENT_TAB_ID, parentId);
- if (parent != null) {
- intent.putExtra(IntentHandler.EXTRA_PARENT_TAB_ID, parent.getId());
+ if (parentActivity != null && parentActivity.getIntent() != null) {
+ intent.putExtra(IntentHandler.EXTRA_PARENT_INTENT, parentActivity.getIntent());
}
if (asyncParams.getRequestId() != null) {
@@ -195,11 +174,6 @@ public class TabDelegate extends TabCreator {
}
}
- private Activity getActivityFromTab(Tab tab) {
- return tab == null || tab.getWindowAndroid() == null
- ? null : tab.getWindowAndroid().getActivity().get();
- }
-
/** @return Running Activity that owns the given Tab, null if the Activity couldn't be found. */
private Activity getActivityForTabId(int id) {
if (id == Tab.INVALID_TAB_ID) return null;

Powered by Google App Engine
This is Rietveld 408576698