Bug 1970151 - Do not use afl and link parameter as fallback. a=dmeehan

Original Revision: https://phabricator.services.mozilla.com/D253746

Differential Revision: https://phabricator.services.mozilla.com/D253769
This commit is contained in:
Roger Yang
2025-06-16 13:05:43 +00:00
committed by dmeehan@mozilla.com
parent 0b06846bab
commit 57776c6589
2 changed files with 11 additions and 49 deletions

View File

@@ -26,8 +26,6 @@ import java.net.URISyntaxException
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
internal const val EXTRA_BROWSER_FALLBACK_URL = "browser_fallback_url"
internal const val PARAMS_ANDROID_FALLBACK_LINK = "afl" // From https://firebase.google.com/docs/dynamic-links/create-manually
internal const val PARAMS_FALLBACK_LINK = "link"
private const val MARKET_INTENT_URI_PACKAGE_PREFIX = "market://details?id="
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
@@ -202,24 +200,12 @@ class AppLinksUseCases(
return RedirectData(
appIntent = appIntent,
fallbackUrl = url.getHierarchicalUrl(),
fallbackUrl = null,
marketplaceIntent = marketplaceIntent,
resolveInfo = resolveInfo,
)
}
private fun String.getHierarchicalUrl(): String? {
val fallbackUrlFromUrlParams = this.toUri()
.takeIf { it.isHierarchical }
?.let { uriWithParams ->
uriWithParams.getQueryParameter(PARAMS_ANDROID_FALLBACK_LINK)
?: uriWithParams.getQueryParameter(PARAMS_FALLBACK_LINK)
}
return fallbackUrlFromUrlParams ?: safeParseUri(this, Intent.URI_INTENT_SCHEME)
?.getStringExtra(EXTRA_BROWSER_FALLBACK_URL)
}
private fun isPlayStoreURL(url: String): Boolean {
val playStoreUrlRegex = Regex("https?://play\\.google\\.com/store/.*")
return url.matches(playStoreUrlRegex)

View File

@@ -154,7 +154,7 @@ class AppLinksUseCasesTest {
val redirect = subject.interceptedAppLinkRedirect(appIntentWithPackageAndFallback)
assertFalse(redirect.hasMarketplaceIntent())
assertTrue(redirect.hasFallback())
assertFalse(redirect.hasFallback())
}
@Test
@@ -165,7 +165,7 @@ class AppLinksUseCasesTest {
val redirect = subject.interceptedAppLinkRedirect(appIntentWithPackageAndFallback)
assertFalse(redirect.hasExternalApp())
assertTrue(redirect.hasMarketplaceIntent())
assertTrue(redirect.hasFallback())
assertFalse(redirect.hasFallback())
}
@Test
@@ -348,9 +348,7 @@ class AppLinksUseCasesTest {
val redirect = subject.interceptedAppLinkRedirect(uri)
assertFalse(redirect.hasExternalApp())
assertTrue(redirect.hasFallback())
assertEquals("http://zxing.org", redirect.fallbackUrl)
assertFalse(redirect.hasFallback())
}
@Test
@@ -557,27 +555,6 @@ class AppLinksUseCasesTest {
assertTrue(redirect.appIntent?.flags?.and(Intent.FLAG_ACTIVITY_CLEAR_TASK) == 0)
}
@Test
fun `WHEN opening a app scheme uri WITH fallback URL THEN use fallback if needed`() {
val context = createContext(Triple(appIntentWithPackageAndFallback, appPackage, ""))
var subject = AppLinksUseCases(context, { false })
var redirect = subject.interceptedAppLinkRedirect(appIntentWithPackageAndFallback)
assertFalse(redirect.hasExternalApp())
assertTrue(redirect.hasFallback())
assertTrue(redirect.marketplaceIntent != null)
assertEquals(redirect.fallbackUrl, "https://example.com")
AppLinksUseCases.clearRedirectCache()
subject = AppLinksUseCases(context, { true })
redirect = subject.interceptedAppLinkRedirect(appIntentWithPackageAndFallback)
assertTrue(redirect.hasExternalApp())
assertTrue(redirect.hasFallback())
assertTrue(redirect.marketplaceIntent != null)
assertEquals(redirect.fallbackUrl, "https://example.com")
assertTrue(redirect.appIntent?.flags?.and(Intent.FLAG_ACTIVITY_CLEAR_TASK) == 0)
}
@Test
fun `WHEN opening a app scheme uri THEN tries to redirect`() {
val context = createContext(Triple(appIntent, appPackage, ""))
@@ -695,27 +672,26 @@ class AppLinksUseCasesTest {
val subject = AppLinksUseCases(context, { false })
val redirect = subject.interceptedAppLinkRedirect(appIntentWithPackageAndPlayStoreFallback)
assertFalse(redirect.hasExternalApp())
assertTrue(redirect.hasFallback())
assertEquals("https://play.google.com/store/abc", redirect.fallbackUrl)
assertFalse(redirect.hasFallback())
}
@Test
fun `WHEN A intent WITH android fallback link THEN fallback should be used`() {
fun `WHEN A intent WITH android fallback link THEN fallback should NOT be used`() {
val context = createContext()
val subject = AppLinksUseCases(context, { true })
val redirect = subject.interceptedAppLinkRedirect(urlWithAndroidFallbackLink)
assertNotNull(redirect.fallbackUrl)
assertTrue(redirect.hasFallback())
assertNull(redirect.fallbackUrl)
assertFalse(redirect.hasFallback())
}
@Test
fun `WHEN A intent WITH fallback link THEN fallback should be used`() {
fun `WHEN A intent WITH fallback link THEN fallback should NOT be used`() {
val context = createContext()
val subject = AppLinksUseCases(context, { true })
val redirect = subject.interceptedAppLinkRedirect(urlWithFallbackLink)
assertNotNull(redirect.fallbackUrl)
assertTrue(redirect.hasFallback())
assertNull(redirect.fallbackUrl)
assertFalse(redirect.hasFallback())
}
}