| Index: chrome/android/java/src/org/chromium/chrome/browser/tab/TabRedirectHandler.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabRedirectHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabRedirectHandler.java
|
| index c65b17552a230a51194b50edd827248164df616b..eb366672fe6b88503d7e946517b51bf81a66913b 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabRedirectHandler.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabRedirectHandler.java
|
| @@ -12,6 +12,8 @@ import android.os.SystemClock;
|
| import android.provider.Browser;
|
| import android.text.TextUtils;
|
|
|
| +import org.chromium.chrome.browser.ChromeFeatureList;
|
| +import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider;
|
| import org.chromium.chrome.browser.document.ChromeLauncherActivity;
|
| import org.chromium.chrome.browser.util.IntentUtils;
|
| import org.chromium.ui.base.PageTransition;
|
| @@ -71,14 +73,19 @@ public class TabRedirectHandler {
|
| return;
|
| }
|
|
|
| - String chromePackageName = mContext.getPackageName();
|
| - // If an intent is heading explicitly to Chrome, we should stay in Chrome.
|
| - if (TextUtils.equals(chromePackageName, intent.getPackage())
|
| - || TextUtils.equals(chromePackageName, IntentUtils.safeGetStringExtra(intent,
|
| - Browser.EXTRA_APPLICATION_ID))) {
|
| - mIsInitialIntentHeadingToChrome = true;
|
| - }
|
| mIsCustomTabIntent = ChromeLauncherActivity.isCustomTabIntent(intent);
|
| + boolean checkIsToChrome = true;
|
| + // All custom tabs VIEW intents are by design explicit intents, so the presence of package
|
| + // name doesn't imply they have to be handled by Chrome explicitly. Check if external apps
|
| + // should be checked for handling the initial redirect chain.
|
| + if (mIsCustomTabIntent) {
|
| + boolean sendToExternalApps = IntentUtils.safeGetBooleanExtra(intent,
|
| + CustomTabIntentDataProvider.EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER, false);
|
| + checkIsToChrome = sendToExternalApps
|
| + && ChromeFeatureList.isEnabled(ChromeFeatureList.CCT_EXTERNAL_LINK_HANDLING);
|
| + }
|
| +
|
| + if (checkIsToChrome) mIsInitialIntentHeadingToChrome = isIntentToChrome(mContext, intent);
|
|
|
| // Copies minimum information to retrieve resolvers.
|
| mInitialIntent = new Intent(Intent.ACTION_VIEW);
|
| @@ -90,6 +97,13 @@ public class TabRedirectHandler {
|
| }
|
| }
|
|
|
| + private static boolean isIntentToChrome(Context context, Intent intent) {
|
| + String chromePackageName = context.getPackageName();
|
| + return TextUtils.equals(chromePackageName, intent.getPackage())
|
| + || TextUtils.equals(chromePackageName, IntentUtils.safeGetStringExtra(intent,
|
| + Browser.EXTRA_APPLICATION_ID));
|
| + }
|
| +
|
| private void clearIntentHistory() {
|
| mIsInitialIntentHeadingToChrome = false;
|
| mIsCustomTabIntent = false;
|
|
|