Chromium Code Reviews| 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; |