Index: chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java |
index 16bfa081790315c94a8b32867de415234037712a..267d7001ebf1102b85cff784ff711eb7bdfc9472 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java |
@@ -21,6 +21,7 @@ import org.chromium.base.metrics.RecordHistogram; |
import org.chromium.chrome.browser.ChromeSwitches; |
import org.chromium.chrome.browser.IntentHandler; |
import org.chromium.chrome.browser.UrlConstants; |
+import org.chromium.chrome.browser.instantapps.InstantAppsHandler; |
import org.chromium.chrome.browser.tab.Tab; |
import org.chromium.chrome.browser.tab.TabRedirectHandler; |
import org.chromium.chrome.browser.util.IntentUtils; |
@@ -443,9 +444,20 @@ public class ExternalNavigationHandler { |
} |
} |
- boolean shouldProxyForInstantApps = isExternalProtocol |
- && SUPERVISOR_PKG.equals(intent.getPackage()) |
+ boolean isDirectInstantAppsIntent = isExternalProtocol |
+ && SUPERVISOR_PKG.equals(intent.getPackage()); |
+ boolean shouldProxyForInstantApps = isDirectInstantAppsIntent |
&& mDelegate.isSerpReferrer(params.getReferrerUrl(), params.getTab()); |
+ if (shouldProxyForInstantApps) { |
+ intent.putExtra(InstantAppsHandler.IS_GOOGLE_SEARCH_REFERRER, true); |
+ } else if (isDirectInstantAppsIntent) { |
+ // For security reasons, we disable all intent:// URLs to Instant Apps that are |
+ // not coming from SERP. |
+ return OverrideUrlLoadingResult.NO_OVERRIDE; |
+ } else { |
+ // Make sure this extra is not sent unless we've done the verification. |
+ intent.removeExtra(InstantAppsHandler.IS_GOOGLE_SEARCH_REFERRER); |
+ } |
try { |
if (params.isIncognito() && !mDelegate.willChromeHandleIntent(intent)) { |