Chromium Code Reviews| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/document/TabDelegateImpl.java |
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/document/TabDelegateImpl.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/document/TabDelegateImpl.java |
| index a22b3133e614fda25efe25e139750358a731f824..debca9c4ee789d2ee677759c56452a08555da57a 100644 |
| --- a/chrome/android/java_staging/src/org/chromium/chrome/browser/document/TabDelegateImpl.java |
| +++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/document/TabDelegateImpl.java |
| @@ -6,11 +6,13 @@ package org.chromium.chrome.browser.document; |
| import android.app.Activity; |
| +import org.chromium.chrome.browser.ChromeMobileApplication; |
| import org.chromium.chrome.browser.Tab; |
| import org.chromium.chrome.browser.TabState; |
| +import org.chromium.chrome.browser.UrlConstants; |
| import org.chromium.chrome.browser.tab.ChromeTab; |
| +import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
| import org.chromium.chrome.browser.tabmodel.document.ActivityDelegate; |
| -import org.chromium.chrome.browser.tabmodel.document.DocumentTabModel.Entry; |
| import org.chromium.chrome.browser.tabmodel.document.TabDelegate; |
| import org.chromium.content_public.browser.LoadUrlParams; |
| import org.chromium.content_public.browser.WebContents; |
| @@ -21,47 +23,106 @@ import org.chromium.ui.base.PageTransition; |
| * TODO(dfalcantara): delete or refactor this after upstreaming. |
| */ |
| public class TabDelegateImpl implements TabDelegate { |
| + private boolean mIsIncognito; |
| + |
| + /** |
| + * Creates a TabDelegate. |
| + * @param incognito Whether or not the TabDelegate handles the creation of incognito tabs. |
| + */ |
| + public TabDelegateImpl(boolean incognito) { |
| + mIsIncognito = incognito; |
| + } |
| + |
| @Override |
| - public Tab getActivityTab( |
| - boolean incognito, ActivityDelegate activityDelegate, Activity activity) { |
| + public Tab getActivityTab(ActivityDelegate activityDelegate, Activity activity) { |
| if (!(activity instanceof DocumentActivity) |
| - || !activityDelegate.isValidActivity(incognito, activity.getIntent())) return null; |
| + || !activityDelegate.isValidActivity(mIsIncognito, activity.getIntent())) { |
| + return null; |
| + } |
| return ((DocumentActivity) activity).getActivityTab(); |
| } |
| + /** |
| + * Creates a frozen Tab. This Tab is not meant to be used or unfrozen -- it is only used as a |
| + * placeholder until the real Tab can be created. |
| + * The index is ignored in DocumentMode because Android handles the ordering of Tabs. |
| + */ |
| @Override |
| - public void createTabInForeground(Activity parentActivity, boolean incognito, |
| - LoadUrlParams loadUrlParams, PendingDocumentData documentParams) { |
| - ChromeLauncherActivity.launchDocumentInstance(parentActivity, incognito, |
| - ChromeLauncherActivity.LAUNCH_MODE_FOREGROUND, loadUrlParams.getUrl(), |
| - DocumentMetricIds.STARTED_BY_WINDOW_OPEN, |
| - loadUrlParams.getTransitionType(), false, documentParams); |
| + public Tab createFrozenTab(TabState state, int id, int index) { |
| + return ChromeTab.createFrozenTabFromState(id, null, state.isIncognito(), null, |
| + Tab.INVALID_TAB_ID, state); |
| } |
| @Override |
| - public Tab createFrozenTab(Entry entry) { |
| - TabState state = entry.getTabState(); |
| - assert state != null; |
| - return ChromeTab.createFrozenTabFromState(entry.tabId, null, state.isIncognito(), null, |
| - Tab.INVALID_TAB_ID, state); |
| + public Tab createTabWithWebContents( |
| + WebContents webContents, int parentId, TabLaunchType type) { |
| + return createTabWithWebContents( |
| + webContents, parentId, type, DocumentMetricIds.STARTED_BY_WINDOW_OPEN); |
| } |
| @Override |
| - public void createTabWithWebContents( |
| - boolean isIncognito, WebContents webContents, int parentTabId) { |
| + public Tab createTabWithWebContents( |
| + WebContents webContents, int parentId, TabLaunchType type, int startedBy) { |
| + // Tabs can't be launched in affiliated mode when a webcontents exists. |
| + assert type != TabLaunchType.FROM_LONGPRESS_BACKGROUND; |
| + |
| PendingDocumentData data = new PendingDocumentData(); |
| data.webContents = webContents; |
| - ChromeLauncherActivity.launchDocumentInstance( |
| - null, isIncognito, ChromeLauncherActivity.LAUNCH_MODE_FOREGROUND, null, |
| - DocumentMetricIds.STARTED_BY_CHROME_HOME_RECENT_TABS, |
| - PageTransition.RELOAD, false, data); |
| + data.webContentsPaused = startedBy != DocumentMetricIds.STARTED_BY_CHROME_HOME_RECENT_TABS; |
|
Maria
2015/06/11 23:08:49
this is a little scary. How about a TODO to get th
gone
2015/06/12 00:12:19
Added a TODO. I couldn't get web workers to go th
|
| + |
| + String url = webContents.getUrl(); |
| + if (url == null) url = ""; |
| + |
| + // Determine information about the parent Activity. |
| + Tab parentTab = parentId == Tab.INVALID_TAB_ID |
| + ? null : ChromeMobileApplication.getDocumentTabModelSelector().getTabById(parentId); |
| + Activity activity = getActivityFromTab(parentTab); |
| + |
| + int pageTransition = startedBy == DocumentMetricIds.STARTED_BY_CHROME_HOME_RECENT_TABS |
| + ? PageTransition.RELOAD : PageTransition.AUTO_TOPLEVEL; |
| + ChromeLauncherActivity.launchDocumentInstance(activity, mIsIncognito, |
| + ChromeLauncherActivity.LAUNCH_MODE_FOREGROUND, url, startedBy, pageTransition, |
| + false, data); |
| + |
| + return null; |
| + } |
| + |
| + @Override |
| + public Tab launchUrl(String url, TabLaunchType type) { |
| + return createNewTab(new LoadUrlParams(url), type, null); |
| + } |
| + |
| + @Override |
| + public Tab launchNTP() { |
| + return launchUrl(UrlConstants.NTP_URL, TabLaunchType.FROM_MENU_OR_OVERVIEW); |
| } |
| @Override |
| - public void createTabForDevTools(String url) { |
| + public Tab createNewTab(LoadUrlParams loadUrlParams, TabLaunchType type, Tab parent) { |
| + PendingDocumentData params = null; |
| + if (loadUrlParams.getPostData() != null |
| + || loadUrlParams.getVerbatimHeaders() != null |
| + || loadUrlParams.getReferrer() != null) { |
| + params = new PendingDocumentData(); |
| + params.postData = loadUrlParams.getPostData(); |
| + params.extraHeaders = loadUrlParams.getVerbatimHeaders(); |
| + params.referrer = loadUrlParams.getReferrer(); |
| + } |
| + |
| + // TODO(dfalcantara): Is this really only triggered via NTP/Recent Tabs? |
| + Activity parentActivity = getActivityFromTab(parent); |
| + int launchMode = type == TabLaunchType.FROM_LONGPRESS_BACKGROUND && !mIsIncognito |
| + ? ChromeLauncherActivity.LAUNCH_MODE_AFFILIATED |
| + : ChromeLauncherActivity.LAUNCH_MODE_FOREGROUND; |
| ChromeLauncherActivity.launchDocumentInstance( |
| - null, false, ChromeLauncherActivity.LAUNCH_MODE_FOREGROUND, url, |
| + parentActivity, mIsIncognito, launchMode, loadUrlParams.getUrl(), |
| DocumentMetricIds.STARTED_BY_CHROME_HOME_RECENT_TABS, |
| - PageTransition.RELOAD, false, null); |
| + PageTransition.RELOAD, false, params); |
| + return null; |
| + } |
| + |
| + private Activity getActivityFromTab(Tab tab) { |
| + return tab == null || tab.getWindowAndroid() == null |
| + ? null : tab.getWindowAndroid().getActivity().get(); |
| } |
| } |