From 31d8199e5813b6cb03fda9f859cbd3ca5a1e8c7c Mon Sep 17 00:00:00 2001 From: TYM Tsai Date: Tue, 14 Mar 2023 23:54:19 +0000 Subject: [PATCH] Use permission to limit the app to use app's autofill Based on the feedback from 1p app, to limit the usage of the new Client Suggestions API so that apps don't degrade the current autofill experience. And introduce a permission that will be automatically granted to the browser role. So browsers can hold this permission to have an AutofillRequestCallback. Bug: 272398880 Test: atest PermissionPolicyTest#platformPermissionPolicyIsUnaltered atest android.autofillservice.cts.client.ClientSuggestionsInlineTest atest android.autofillservice.cts.client.ClientSuggestionsTest Change-Id: I32b58ca24d3e73735591fb6409ce34106896df4f --- core/api/current.txt | 3 ++- core/java/android/view/autofill/AutofillManager.java | 8 ++++++++ core/res/AndroidManifest.xml | 7 +++++++ .../java/com/android/server/autofill/Session.java | 9 +++++++-- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index 771d56cd1987f..3b8150cca082a 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -224,6 +224,7 @@ package android { field @Deprecated public static final String PERSISTENT_ACTIVITY = "android.permission.PERSISTENT_ACTIVITY"; field public static final String POST_NOTIFICATIONS = "android.permission.POST_NOTIFICATIONS"; field @Deprecated public static final String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS"; + field public static final String PROVIDE_OWN_AUTOFILL_SUGGESTIONS = "android.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS"; field public static final String PROVIDE_REMOTE_CREDENTIALS = "android.permission.PROVIDE_REMOTE_CREDENTIALS"; field public static final String QUERY_ALL_PACKAGES = "android.permission.QUERY_ALL_PACKAGES"; field public static final String READ_ASSISTANT_APP_SEARCH_DATA = "android.permission.READ_ASSISTANT_APP_SEARCH_DATA"; @@ -55072,7 +55073,7 @@ package android.view.autofill { method public void registerCallback(@Nullable android.view.autofill.AutofillManager.AutofillCallback); method public void requestAutofill(@NonNull android.view.View); method public void requestAutofill(@NonNull android.view.View, int, @NonNull android.graphics.Rect); - method public void setAutofillRequestCallback(@NonNull java.util.concurrent.Executor, @NonNull android.view.autofill.AutofillRequestCallback); + method @RequiresPermission(android.Manifest.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS) public void setAutofillRequestCallback(@NonNull java.util.concurrent.Executor, @NonNull android.view.autofill.AutofillRequestCallback); method public void setUserData(@Nullable android.service.autofill.UserData); method public boolean showAutofillDialog(@NonNull android.view.View); method public boolean showAutofillDialog(@NonNull android.view.View, int); diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index 0deaa76363106..ab0c4df9efc10 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -16,6 +16,7 @@ package android.view.autofill; +import static android.Manifest.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS; import static android.service.autofill.FillRequest.FLAG_IME_SHOWING; import static android.service.autofill.FillRequest.FLAG_MANUAL_REQUEST; import static android.service.autofill.FillRequest.FLAG_PASSWORD_INPUT_TYPE; @@ -34,6 +35,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresFeature; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; @@ -2223,8 +2225,14 @@ public final class AutofillManager { * @param executor specifies the thread upon which the callbacks will be invoked. * @param callback which handles autofill request to provide client's suggestions. */ + @RequiresPermission(PROVIDE_OWN_AUTOFILL_SUGGESTIONS) public void setAutofillRequestCallback(@NonNull @CallbackExecutor Executor executor, @NonNull AutofillRequestCallback callback) { + if (mContext.checkSelfPermission(PROVIDE_OWN_AUTOFILL_SUGGESTIONS) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException("Requires USE_APP_AUTOFILL permission!"); + } + synchronized (mLock) { mRequestCallbackExecutor = executor; mAutofillRequestCallback = callback; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 06e91c3bebfa8..89397fa42edac 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -7436,6 +7436,13 @@ + + +