Index: chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java |
index 31e60622eb19b56d0a0f81aeeb2797d2c3baad6f..ffed54cf382a64c01078bbfdfff31448f2896f94 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java |
@@ -417,7 +417,7 @@ public class IntentHandler { |
IntentUtils.safeGetIntExtra(intent, EXTRA_REFERRER_ID, 0)); |
if (!TextUtils.isEmpty(referrerUrl)) { |
return referrerUrl; |
- } else if (isValidReferrerHeader(referrerExtra.toString())) { |
+ } else if (isValidReferrerHeader(referrerExtra)) { |
return referrerExtra.toString(); |
} else if (IntentHandler.isIntentChromeOrFirstParty(intent)) { |
return referrerExtra.toString(); |
@@ -441,8 +441,9 @@ public class IntentHandler { |
if (bundleExtraHeaders == null) return null; |
for (String key : bundleExtraHeaders.keySet()) { |
String value = bundleExtraHeaders.getString(key); |
- if ("referer".equals(key.toLowerCase(Locale.US)) && isValidReferrerHeader(value)) { |
- return value; |
+ if (value != null && "referer".equals(key.toLowerCase(Locale.US))) { |
+ Uri referrer = Uri.parse(value).normalizeScheme(); |
+ if (isValidReferrerHeader(referrer)) return referrer.toString(); |
} |
} |
return null; |
@@ -467,9 +468,11 @@ public class IntentHandler { |
* @return Whether that the given referrer is of the format that Chrome allows external |
* apps to specify. |
*/ |
- private static boolean isValidReferrerHeader(String referrer) { |
- return referrer != null |
- && referrer.toLowerCase(Locale.US).startsWith(ANDROID_APP_REFERRER_SCHEME + "://"); |
+ private static boolean isValidReferrerHeader(Uri referrer) { |
+ if (referrer == null) return false; |
+ Uri normalized = referrer.normalizeScheme(); |
+ return TextUtils.equals(normalized.getScheme(), ANDROID_APP_REFERRER_SCHEME) |
+ && !TextUtils.isEmpty(normalized.getHost()); |
} |
/** |