in AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/local/DigitalAssetLinksRepository.java [86:158]
public void checkValid(DalCheckRequirement dalCheckRequirement, DalInfo dalInfo,
DataCallback<DalCheck> dalCheckDataCallback) {
if (dalCheckRequirement.equals(Disabled)) {
DalCheck dalCheck = new DalCheck();
dalCheck.linked = true;
dalCheckDataCallback.onLoaded(dalCheck);
return;
}
DalCheck dalCheck = mCache.get(dalInfo);
if (dalCheck != null) {
dalCheckDataCallback.onLoaded(dalCheck);
return;
}
String packageName = dalInfo.getPackageName();
String webDomain = dalInfo.getWebDomain();
final String fingerprint;
try {
PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName,
PackageManager.GET_SIGNATURES);
fingerprint = SecurityHelper.getFingerprint(packageInfo, packageName);
} catch (Exception e) {
dalCheckDataCallback.onDataNotAvailable("Error getting fingerprint for %s",
packageName);
return;
}
logd("validating domain %s for pkg %s and fingerprint %s.", webDomain,
packageName, fingerprint);
mDalService.check(webDomain, PERMISSION_GET_LOGIN_CREDS, packageName, fingerprint).enqueue(
new Callback<DalCheck>() {
@Override
public void onResponse(@NonNull Call<DalCheck> call,
@NonNull Response<DalCheck> response) {
DalCheck dalCheck = response.body();
if (dalCheck == null || !dalCheck.linked) {
// get_login_creds check failed, so try handle_all_urls check
if (dalCheckRequirement.equals(LoginOnly)) {
dalCheckDataCallback.onDataNotAvailable(
"DAL: Login creds check failed.");
} else if (dalCheckRequirement.equals(AllUrls)) {
mDalService.check(webDomain, PERMISSION_HANDLE_ALL_URLS,
packageName, fingerprint).enqueue(new Callback<DalCheck>() {
@Override
public void onResponse(@NonNull Call<DalCheck> call,
@NonNull Response<DalCheck> response) {
DalCheck dalCheck = response.body();
mCache.put(dalInfo, dalCheck);
dalCheckDataCallback.onLoaded(dalCheck);
}
@Override
public void onFailure(@NonNull Call<DalCheck> call,
@NonNull Throwable t) {
dalCheckDataCallback.onDataNotAvailable(t.getMessage());
}
});
}
} else {
// get_login_creds check succeeded, so we're finished.
mCache.put(dalInfo, dalCheck);
dalCheckDataCallback.onLoaded(dalCheck);
}
}
@Override
public void onFailure(@NonNull Call<DalCheck> call, @NonNull Throwable t) {
// get_login_creds check failed, so try handle_all_urls check.
mDalService.check(webDomain, PERMISSION_HANDLE_ALL_URLS, packageName,
fingerprint);
}
});
}