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 c011fcd41d7eb8ffad494f1c07aa9e2ed96b0fb2..81823bc302a5a2c3122413b3ddb33b7c85b3d7f1 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 |
| @@ -10,9 +10,13 @@ import android.content.Intent; |
| import android.net.Uri; |
| import android.os.Bundle; |
| import android.provider.Browser; |
| +import android.support.customtabs.CustomTabsIntent; |
| import org.chromium.base.ApiCompatibilityUtils; |
| +import org.chromium.base.ApplicationStatus; |
| import org.chromium.base.ContextUtils; |
| +import org.chromium.chrome.R; |
| +import org.chromium.chrome.browser.ChromeActivity; |
| import org.chromium.chrome.browser.IntentHandler; |
| import org.chromium.chrome.browser.ServiceTabLauncher; |
| import org.chromium.chrome.browser.TabState; |
| @@ -23,6 +27,7 @@ import org.chromium.chrome.browser.tab.TabIdManager; |
| import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager; |
| import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator; |
| import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
| +import org.chromium.components.url_formatter.UrlFormatter; |
| import org.chromium.content_public.browser.LoadUrlParams; |
| import org.chromium.content_public.browser.WebContents; |
| import org.chromium.ui.base.PageTransition; |
| @@ -94,6 +99,48 @@ public class TabDelegate extends TabCreator { |
| activity.startActivity(intent); |
| } |
| + /** |
| + * Creates a popup custom tab to open the url. The new tab is displayed over the tab showing |
| + * redirectUrl. |
| + * |
| + * @param requestId The tab launch request ID from the {@link ServiceTabLauncher}. |
| + * @param redirectUrl The url of the background tab showing. |
| + * @param url The url to open in the new tab. |
| + */ |
| + public boolean createPopupCustomTab(int requestId, String redirectUrl, String url) { |
|
please use gerrit instead
2017/06/01 17:50:37
Let's be clear when this method would be called: i
gogerald1
2017/06/02 03:33:11
Acknowledged.
|
| + // The activity that contains the background tab must be active, otherwise do not open the |
| + // new tab. |
| + Activity lastTrackedActivity = ApplicationStatus.getLastTrackedFocusedActivity(); |
| + if (!(lastTrackedActivity instanceof ChromeActivity)) return false; |
| + WebContents webcontents = |
| + ((ChromeActivity) lastTrackedActivity).getActivityTab().getWebContents(); |
| + if (webcontents == null) return false; |
| + |
| + // Do not open new tab if the foreground web page is not showing redirect_url. |
| + // TODO(gogerald): Match url instead of origin after passed in redirect_url is changed in |
| + // PaymentRequestEvent::openWindow. |
| + String redirectOrigin = UrlFormatter.formatUrlForSecurityDisplay(redirectUrl, true); |
| + if (!redirectOrigin.equals(UrlFormatter.formatUrlForSecurityDisplay( |
|
please use gerrit instead
2017/06/01 17:50:37
I don't think this check is useful, because the us
gogerald1
2017/06/02 03:33:11
Done.
|
| + webcontents.getLastCommittedUrl(), true))) { |
| + return false; |
| + } |
| + |
| + CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); |
| + builder.setShowTitle(true); |
| + builder.setStartAnimations(lastTrackedActivity, R.anim.slide_in_up, 0); |
| + builder.setExitAnimations(lastTrackedActivity, 0, R.anim.slide_out_down); |
| + CustomTabsIntent customTabsIntent = builder.build(); |
| + customTabsIntent.intent.setPackage(ContextUtils.getApplicationContext().getPackageName()); |
| + customTabsIntent.intent.putExtra(ServiceTabLauncher.LAUNCH_REQUEST_ID_EXTRA, requestId); |
| + customTabsIntent.intent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, mIsIncognito); |
| + customTabsIntent.intent.putExtra(Browser.EXTRA_APPLICATION_ID, |
| + ContextUtils.getApplicationContext().getPackageName()); |
| + |
| + customTabsIntent.launchUrl(lastTrackedActivity, Uri.parse(url)); |
| + |
| + return true; |
| + } |
| + |
| @Override |
| public Tab launchUrl(String url, TabLaunchType type) { |
| return createNewTab(new LoadUrlParams(url), type, null); |