| Index: chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
|
| index 5f1fd4f3c6b97fc347dd8b0bc67d3a6bf4de0fb4..79f80d557c54d4b636ecb30cce2a5f8e84fafe68 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
|
| @@ -43,6 +43,8 @@ import org.chromium.chrome.browser.tab.Tab;
|
| import org.chromium.chrome.browser.util.UrlUtilities;
|
| import org.chromium.chrome.browser.webapps.WebappActivity;
|
| import org.chromium.content_public.browser.LoadUrlParams;
|
| +import org.chromium.content_public.browser.NavigationController;
|
| +import org.chromium.content_public.browser.NavigationEntry;
|
| import org.chromium.content_public.common.Referrer;
|
| import org.chromium.ui.base.PageTransition;
|
| import org.chromium.ui.base.WindowAndroid;
|
| @@ -560,9 +562,23 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
|
| }
|
|
|
| @Override
|
| + public boolean isSerpReferrer(String referrerUrl, Tab tab) {
|
| + if (referrerUrl == null || !referrerUrl.contains("www.google")) return false;
|
| +
|
| + NavigationController nController = tab.getWebContents().getNavigationController();
|
| + int index = nController.getLastCommittedEntryIndex();
|
| + if (index == -1) return false;
|
| +
|
| + NavigationEntry entry = nController.getEntryAtIndex(index);
|
| + if (entry == null) return false;
|
| +
|
| + return UrlUtilities.nativeIsGoogleSearchUrl(entry.getUrl());
|
| + }
|
| +
|
| + @Override
|
| public boolean maybeLaunchInstantApp(Tab tab, String url, String referrerUrl,
|
| boolean isIncomingRedirect) {
|
| - if (tab == null) return false;
|
| + if (tab == null || tab.getWebContents() == null) return false;
|
|
|
| InstantAppsHandler handler = InstantAppsHandler.getInstance();
|
| Intent intent = tab.getTabRedirectHandler() != null
|
| @@ -576,6 +592,8 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
|
| return handler.handleIncomingIntent(getAvailableContext(), resolvedIntent,
|
| ChromeLauncherActivity.isCustomTabIntent(resolvedIntent));
|
| } else if (!isIncomingRedirect) {
|
| + // Check if the navigation is coming from SERP and skip instant app handling.
|
| + if (isSerpReferrer(referrerUrl, tab)) return false;
|
| return handler.handleNavigation(
|
| getAvailableContext(), url,
|
| TextUtils.isEmpty(referrerUrl) ? null : Uri.parse(referrerUrl),
|
|
|