diff options
| author | 2024-02-26 22:51:27 +0000 | |
|---|---|---|
| committer | 2024-02-28 22:09:28 +0000 | |
| commit | d5304a0fffd51274f74e10923ea3d41916971c46 (patch) | |
| tree | 063d6e1c2cfbab6f2e72a31370dfd5cc98cdb5e5 | |
| parent | 60b4c24d9e9f7caac332d391864a39fa2736d22d (diff) | |
[Autofill Framework] Add in intent filter check after autofill service
updates.
Bug: b/324874908
Test: atest CtsAutofillServiceTestCases
Change-Id: I45cdfb2e4a78aa60942bd2874e17e4f994878045
| -rw-r--r-- | services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index e1291e5f75ec..285e54c30167 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -33,8 +33,10 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManagerInternal; import android.content.ComponentName; +import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.graphics.Rect; import android.metrics.LogMaker; @@ -251,6 +253,26 @@ final class AutofillManagerServiceImpl @Override // from PerUserSystemService protected ServiceInfo newServiceInfoLocked(@NonNull ComponentName serviceComponent) throws NameNotFoundException { + final List<ResolveInfo> resolveInfos = + getContext().getPackageManager().queryIntentServicesAsUser( + new Intent(AutofillService.SERVICE_INTERFACE), + PackageManager.GET_META_DATA, + mUserId); + boolean currentPackageStillHasAutofillIntentFilter = false; + for (ResolveInfo resolveInfo : resolveInfos) { + final ServiceInfo serviceInfo = resolveInfo.serviceInfo; + if (serviceInfo.getComponentName().equals(serviceComponent)) { + currentPackageStillHasAutofillIntentFilter = true; + break; + } + } + if (!currentPackageStillHasAutofillIntentFilter) { + Slog.w(TAG, + "Autofill service from '" + serviceComponent.getPackageName() + "' does" + + "not have intent filter " + AutofillService.SERVICE_INTERFACE); + throw new SecurityException("Service does not declare intent filter " + + AutofillService.SERVICE_INTERFACE); + } mInfo = new AutofillServiceInfo(getContext(), serviceComponent, mUserId); return mInfo.getServiceInfo(); } |