| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser; | 5 package org.chromium.chrome.browser; |
| 6 | 6 |
| 7 import android.app.KeyguardManager; | 7 import android.app.KeyguardManager; |
| 8 import android.app.PendingIntent; | 8 import android.app.PendingIntent; |
| 9 import android.app.SearchManager; | 9 import android.app.SearchManager; |
| 10 import android.content.ComponentName; | 10 import android.content.ComponentName; |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 * @param intent The intent from which to extract the URL. | 410 * @param intent The intent from which to extract the URL. |
| 411 * @return The URL string or null if none should be used. | 411 * @return The URL string or null if none should be used. |
| 412 */ | 412 */ |
| 413 private static String getReferrerUrl(Intent intent) { | 413 private static String getReferrerUrl(Intent intent) { |
| 414 Uri referrerExtra = getReferrer(intent); | 414 Uri referrerExtra = getReferrer(intent); |
| 415 if (referrerExtra == null) return null; | 415 if (referrerExtra == null) return null; |
| 416 String referrerUrl = IntentHandler.getPendingReferrerUrl( | 416 String referrerUrl = IntentHandler.getPendingReferrerUrl( |
| 417 IntentUtils.safeGetIntExtra(intent, EXTRA_REFERRER_ID, 0)); | 417 IntentUtils.safeGetIntExtra(intent, EXTRA_REFERRER_ID, 0)); |
| 418 if (!TextUtils.isEmpty(referrerUrl)) { | 418 if (!TextUtils.isEmpty(referrerUrl)) { |
| 419 return referrerUrl; | 419 return referrerUrl; |
| 420 } else if (isValidReferrerHeader(referrerExtra.toString())) { | 420 } else if (isValidReferrerHeader(referrerExtra)) { |
| 421 return referrerExtra.toString(); | 421 return referrerExtra.toString(); |
| 422 } else if (IntentHandler.isIntentChromeOrFirstParty(intent)) { | 422 } else if (IntentHandler.isIntentChromeOrFirstParty(intent)) { |
| 423 return referrerExtra.toString(); | 423 return referrerExtra.toString(); |
| 424 } | 424 } |
| 425 return null; | 425 return null; |
| 426 } | 426 } |
| 427 | 427 |
| 428 /** | 428 /** |
| 429 * Gets the referrer, looking in the Intent extra and in the extra headers e
xtra. | 429 * Gets the referrer, looking in the Intent extra and in the extra headers e
xtra. |
| 430 * | 430 * |
| 431 * The referrer extra takes priority over the "extra headers" one. | 431 * The referrer extra takes priority over the "extra headers" one. |
| 432 * | 432 * |
| 433 * @param intent The Intent containing the extras. | 433 * @param intent The Intent containing the extras. |
| 434 * @return The referrer, or null. | 434 * @return The referrer, or null. |
| 435 */ | 435 */ |
| 436 public static String getReferrerUrlIncludingExtraHeaders(Intent intent) { | 436 public static String getReferrerUrlIncludingExtraHeaders(Intent intent) { |
| 437 String referrerUrl = getReferrerUrl(intent); | 437 String referrerUrl = getReferrerUrl(intent); |
| 438 if (referrerUrl != null) return referrerUrl; | 438 if (referrerUrl != null) return referrerUrl; |
| 439 | 439 |
| 440 Bundle bundleExtraHeaders = IntentUtils.safeGetBundleExtra(intent, Brows
er.EXTRA_HEADERS); | 440 Bundle bundleExtraHeaders = IntentUtils.safeGetBundleExtra(intent, Brows
er.EXTRA_HEADERS); |
| 441 if (bundleExtraHeaders == null) return null; | 441 if (bundleExtraHeaders == null) return null; |
| 442 for (String key : bundleExtraHeaders.keySet()) { | 442 for (String key : bundleExtraHeaders.keySet()) { |
| 443 String value = bundleExtraHeaders.getString(key); | 443 String value = bundleExtraHeaders.getString(key); |
| 444 if ("referer".equals(key.toLowerCase(Locale.US)) && isValidReferrerH
eader(value)) { | 444 if (value != null && "referer".equals(key.toLowerCase(Locale.US))) { |
| 445 return value; | 445 Uri referrer = Uri.parse(value).normalizeScheme(); |
| 446 if (isValidReferrerHeader(referrer)) return referrer.toString(); |
| 446 } | 447 } |
| 447 } | 448 } |
| 448 return null; | 449 return null; |
| 449 } | 450 } |
| 450 | 451 |
| 451 /** | 452 /** |
| 452 * Add referrer and extra headers to a {@link LoadUrlParams}, if we managed
to parse them from | 453 * Add referrer and extra headers to a {@link LoadUrlParams}, if we managed
to parse them from |
| 453 * the intent. | 454 * the intent. |
| 454 * @param params The {@link LoadUrlParams} to add referrer and headers. | 455 * @param params The {@link LoadUrlParams} to add referrer and headers. |
| 455 * @param intent The intent we use to parse the extras. | 456 * @param intent The intent we use to parse the extras. |
| 456 */ | 457 */ |
| 457 public static void addReferrerAndHeaders(LoadUrlParams params, Intent intent
) { | 458 public static void addReferrerAndHeaders(LoadUrlParams params, Intent intent
) { |
| 458 String referrer = getReferrerUrlIncludingExtraHeaders(intent); | 459 String referrer = getReferrerUrlIncludingExtraHeaders(intent); |
| 459 if (referrer != null) { | 460 if (referrer != null) { |
| 460 params.setReferrer(new Referrer(referrer, Referrer.REFERRER_POLICY_D
EFAULT)); | 461 params.setReferrer(new Referrer(referrer, Referrer.REFERRER_POLICY_D
EFAULT)); |
| 461 } | 462 } |
| 462 String headers = getExtraHeadersFromIntent(intent); | 463 String headers = getExtraHeadersFromIntent(intent); |
| 463 if (headers != null) params.setVerbatimHeaders(headers); | 464 if (headers != null) params.setVerbatimHeaders(headers); |
| 464 } | 465 } |
| 465 | 466 |
| 466 /** | 467 /** |
| 467 * @return Whether that the given referrer is of the format that Chrome allo
ws external | 468 * @return Whether that the given referrer is of the format that Chrome allo
ws external |
| 468 * apps to specify. | 469 * apps to specify. |
| 469 */ | 470 */ |
| 470 private static boolean isValidReferrerHeader(String referrer) { | 471 private static boolean isValidReferrerHeader(Uri referrer) { |
| 471 return referrer != null | 472 if (referrer == null) return false; |
| 472 && referrer.toLowerCase(Locale.US).startsWith(ANDROID_APP_REFERR
ER_SCHEME + "://"); | 473 Uri normalized = referrer.normalizeScheme(); |
| 474 return TextUtils.equals(normalized.getScheme(), ANDROID_APP_REFERRER_SCH
EME) |
| 475 && !TextUtils.isEmpty(normalized.getHost()); |
| 473 } | 476 } |
| 474 | 477 |
| 475 /** | 478 /** |
| 476 * Constructs a valid referrer using the given authority. | 479 * Constructs a valid referrer using the given authority. |
| 477 * @param authority The authority to use. | 480 * @param authority The authority to use. |
| 478 * @return Referrer with default policy that uses the valid android app sche
me. | 481 * @return Referrer with default policy that uses the valid android app sche
me. |
| 479 */ | 482 */ |
| 480 public static Referrer constructValidReferrerForAuthority(String authority)
{ | 483 public static Referrer constructValidReferrerForAuthority(String authority)
{ |
| 481 return new Referrer(new Uri.Builder().scheme(ANDROID_APP_REFERRER_SCHEME
) | 484 return new Referrer(new Uri.Builder().scheme(ANDROID_APP_REFERRER_SCHEME
) |
| 482 .authority(authority).build().toString(), Referrer.REFERRER_POLI
CY_DEFAULT); | 485 .authority(authority).build().toString(), Referrer.REFERRER_POLI
CY_DEFAULT); |
| (...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1041 } | 1044 } |
| 1042 | 1045 |
| 1043 /** | 1046 /** |
| 1044 * @param intent An Intent to be checked. | 1047 * @param intent An Intent to be checked. |
| 1045 * @return The launch type of the tab to be created. | 1048 * @return The launch type of the tab to be created. |
| 1046 */ | 1049 */ |
| 1047 public static TabLaunchType getTabLaunchType(Intent intent) { | 1050 public static TabLaunchType getTabLaunchType(Intent intent) { |
| 1048 return IntentUtils.safeGetSerializableExtra(intent, EXTRA_TAB_LAUNCH_TYP
E); | 1051 return IntentUtils.safeGetSerializableExtra(intent, EXTRA_TAB_LAUNCH_TYP
E); |
| 1049 } | 1052 } |
| 1050 } | 1053 } |
| OLD | NEW |