diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/FeatureAndTrustDetection.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/FeatureAndTrustDetection.kt index fdd862ad..c268e755 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/FeatureAndTrustDetection.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/FeatureAndTrustDetection.kt @@ -141,7 +141,7 @@ private fun getBrowserSaveFlag(appPackage: String): Int? = BROWSER_SAVE_FLAG[app data class BrowserAutofillSupportInfo( val multiOriginMethod: BrowserMultiOriginMethod, - val saveFlag: Int? + val saveFlags: Int? ) @RequiresApi(Build.VERSION_CODES.O) @@ -152,7 +152,7 @@ fun getBrowserAutofillSupportInfoIfTrusted( if (!isTrustedBrowser(context, appPackage)) return null return BrowserAutofillSupportInfo( multiOriginMethod = getBrowserMultiOriginMethod(appPackage), - saveFlag = getBrowserSaveFlag(appPackage) + saveFlags = getBrowserSaveFlag(appPackage) ) } @@ -175,7 +175,7 @@ private fun getBrowserAutofillSupportLevel( val browserInfo = getBrowserAutofillSupportInfoIfTrusted(context, appPackage) return when { browserInfo == null -> BrowserAutofillSupportLevel.None - browserInfo.saveFlag != null -> BrowserAutofillSupportLevel.FillAndSave + browserInfo.saveFlags != null -> BrowserAutofillSupportLevel.FillAndSave appPackage in FLAKY_BROWSERS -> BrowserAutofillSupportLevel.FlakyFill else -> BrowserAutofillSupportLevel.Fill } diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/Form.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/Form.kt index 6e405005..df8b037a 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/Form.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/Form.kt @@ -81,15 +81,9 @@ private class Form(context: Context, structure: AssistStructure, isManualRequest private var appPackage = structure.activityComponent.packageName - private val browserAutofillSupportInfo = + private val trustedBrowserInfo = getBrowserAutofillSupportInfoIfTrusted(context, appPackage) - private val isTrustedBrowser = browserAutofillSupportInfo != null - - private val browserMultiOriginMethod = - browserAutofillSupportInfo?.multiOriginMethod ?: BrowserMultiOriginMethod.None - private val singleOriginMode = browserMultiOriginMethod == BrowserMultiOriginMethod.None - - val saveFlags = browserAutofillSupportInfo?.saveFlag + val saveFlags = trustedBrowserInfo?.saveFlags private val webOrigins = mutableSetOf() @@ -114,7 +108,7 @@ private class Form(context: Context, structure: AssistStructure, isManualRequest private fun visitFormNode(node: AssistStructure.ViewNode, inheritedWebOrigin: String? = null) { trackOrigin(node) val field = - if (browserMultiOriginMethod == BrowserMultiOriginMethod.WebView) { + if (trustedBrowserInfo?.multiOriginMethod == BrowserMultiOriginMethod.WebView) { FormField(node, fieldIndex, true, inheritedWebOrigin) } else { check(inheritedWebOrigin == null) @@ -135,12 +129,12 @@ private class Form(context: Context, structure: AssistStructure, isManualRequest private fun detectFieldsToFill(isManualRequest: Boolean) = autofillStrategy.match( relevantFields, - singleOriginMode = singleOriginMode, + singleOriginMode = trustedBrowserInfo?.multiOriginMethod == BrowserMultiOriginMethod.None, isManualRequest = isManualRequest ) private fun trackOrigin(node: AssistStructure.ViewNode) { - if (!isTrustedBrowser) return + if (trustedBrowserInfo == null) return node.webOrigin?.let { if (it !in webOrigins) { d { "Origin encountered: $it" } @@ -159,14 +153,14 @@ private class Form(context: Context, structure: AssistStructure, isManualRequest private fun determineFormOrigin(context: Context): FormOrigin? { if (scenario == null) return null - if (!isTrustedBrowser || webOrigins.isEmpty()) { + if (trustedBrowserInfo == null || webOrigins.isEmpty()) { // Security assumption: If a trusted browser includes no web origin in the provided // AssistStructure, then the form is a native browser form (e.g. for a sync password). // TODO: Support WebViews in apps via Digital Asset Links // See: https://developer.android.com/reference/android/service/autofill/AutofillService#web-security return FormOrigin.App(appPackage) } - return when (browserMultiOriginMethod) { + return when (trustedBrowserInfo.multiOriginMethod) { BrowserMultiOriginMethod.None -> { // Security assumption: If a browser is trusted but does not support tracking // multiple origins, it is expected to annotate a single field, in most cases its