Index: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappTabDelegate.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappTabDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappTabDelegate.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e3e1e9e9a2c74c14e48d61cf70a12c6cf87e00c1 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappTabDelegate.java |
@@ -0,0 +1,42 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+package org.chromium.chrome.browser.webapps; |
+ |
+import android.net.Uri; |
+import android.support.customtabs.CustomTabsIntent; |
+ |
+import org.chromium.chrome.browser.tab.Tab; |
+import org.chromium.chrome.browser.tab.TabIdManager; |
+import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager; |
+import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
+import org.chromium.chrome.browser.tabmodel.document.AsyncTabCreationParams; |
+import org.chromium.chrome.browser.tabmodel.document.TabDelegate; |
+ |
+/** |
+ * Asynchronously creates Tabs for navigation originating from an installed PWA. |
+ * |
+ * This is the same as the parent class with exception of opening a Custom Tab for |
+ * {@code _blank} links and {@code window.open(url)} calls instead of creating a new tab in Chrome. |
+ */ |
+public class WebappTabDelegate extends TabDelegate { |
+ private final WebappActivity mActivity; |
+ |
+ public WebappTabDelegate(WebappActivity activity, boolean incognito) { |
+ super(incognito); |
+ this.mActivity = activity; |
+ } |
+ |
+ @Override |
+ public void createNewTab(AsyncTabCreationParams asyncParams, TabLaunchType type, int parentId) { |
+ int assignedTabId = TabIdManager.getInstance().generateValidId(Tab.INVALID_TAB_ID); |
+ AsyncTabParamsManager.add(assignedTabId, asyncParams); |
+ |
+ CustomTabsIntent customTabIntent = |
+ new CustomTabsIntent.Builder().setShowTitle(true).build(); |
+ |
+ customTabIntent.intent.setPackage(mActivity.getPackageName()); |
+ addAsyncTabExtras(asyncParams, parentId, true, assignedTabId, customTabIntent.intent); |
+ customTabIntent.launchUrl(mActivity, Uri.parse(asyncParams.getLoadUrlParams().getUrl())); |
+ } |
+} |