Skip to content
Snippets Groups Projects
Commit 51d64705 authored by Haoran Zhang's avatar Haoran Zhang
Browse files

[DO NOT MERGE][Autofill Framework] Add in check for intent filter when

setting/updating service

For test, I registered two tests around on ABTD. CtsAutoFillServiceTestCases module is passing except three known failures:

Test run link:
- https://android-build.corp.google.com/builds/abtd/run/L33300030002610600
- https://android-build.corp.google.com/builds/abtd/run/L58100030002616607


Bug: b/324874908
Test: atest CtsAutoFillServiceTestCases
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:141d9d050346bfc4673c429382deb1b3d210f6ad)
Merged-In: I51c2e3788ac29ff4d6b86aa2a735ff2ea1463a77
Change-Id: I51c2e3788ac29ff4d6b86aa2a735ff2ea1463a77
parent c2a58a3b
No related branches found
No related tags found
No related merge requests found
......@@ -30,8 +30,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;
......@@ -236,6 +238,31 @@ 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),
// The MATCH_INSTANT flag is added because curret autofill CTS module is
// defined in one apk, which makes the test autofill service installed in a
// instant app when the CTS tests are running in instant app mode.
// TODO: Remove MATCH_INSTANT flag after completing refactoring the CTS module
// to make the test autofill service a separate apk.
PackageManager.GET_META_DATA | PackageManager.MATCH_INSTANT,
mUserId);
boolean serviceHasAutofillIntentFilter = false;
for (ResolveInfo resolveInfo : resolveInfos) {
final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
if (serviceInfo.getComponentName().equals(serviceComponent)) {
serviceHasAutofillIntentFilter = true;
break;
}
}
if (!serviceHasAutofillIntentFilter) {
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();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment