Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java

Issue 2951883003: android: Stricter android-app:// referrer handling. (Closed)
Patch Set: . Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/IntentHandlerTest.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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());
}
/**
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/IntentHandlerTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698