Loading services/core/java/com/android/server/pm/verify/domain/DomainVerificationCollector.java +20 −11 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ public class DomainVerificationCollector { @NonNull public ArraySet<String> collectAllWebDomains(@NonNull AndroidPackage pkg) { return collectDomains(pkg, false); return collectDomains(pkg, false /* checkAutoVerify */, true /* valid */); } /** Loading @@ -92,20 +92,29 @@ public class DomainVerificationCollector { * IntentFilter#getAutoVerify()} == true. */ @NonNull public ArraySet<String> collectAutoVerifyDomains(@NonNull AndroidPackage pkg) { return collectDomains(pkg, true); public ArraySet<String> collectValidAutoVerifyDomains(@NonNull AndroidPackage pkg) { return collectDomains(pkg, true /* checkAutoVerify */, true /* valid */); } /** * Returns all the domains that are configured to be auto verified, but aren't actually valid * HTTP domains, per {@link #DOMAIN_NAME_WITH_WILDCARD}. */ @NonNull public ArraySet<String> collectInvalidAutoVerifyDomains(@NonNull AndroidPackage pkg) { return collectDomains(pkg, true /* checkAutoVerify */, false /* valid */); } @NonNull private ArraySet<String> collectDomains(@NonNull AndroidPackage pkg, boolean checkAutoVerify) { boolean checkAutoVerify, boolean valid) { boolean restrictDomains = DomainVerificationUtils.isChangeEnabled(mPlatformCompat, pkg, RESTRICT_DOMAINS); if (restrictDomains) { return collectDomainsInternal(pkg, checkAutoVerify); return collectDomainsInternal(pkg, checkAutoVerify, valid); } else { return collectDomainsLegacy(pkg, checkAutoVerify); return collectDomainsLegacy(pkg, checkAutoVerify, valid); } } Loading @@ -113,10 +122,10 @@ public class DomainVerificationCollector { * @see #RESTRICT_DOMAINS */ private ArraySet<String> collectDomainsLegacy(@NonNull AndroidPackage pkg, boolean checkAutoVerify) { boolean checkAutoVerify, boolean valid) { if (!checkAutoVerify) { // Per-domain user selection state doesn't have a V1 equivalent on S, so just use V2 return collectDomainsInternal(pkg, false); return collectDomainsInternal(pkg, false /* checkAutoVerify */, true /* valid */); } List<ParsedActivity> activities = pkg.getActivities(); Loading Loading @@ -157,7 +166,7 @@ public class DomainVerificationCollector { int authorityCount = intent.countDataAuthorities(); for (int index = 0; index < authorityCount; index++) { String host = intent.getDataAuthority(index).getHost(); if (isValidHost(host)) { if (isValidHost(host) == valid) { totalSize += byteSizeOf(host); underMaxSize = totalSize < MAX_DOMAINS_BYTE_SIZE; domains.add(host); Loading @@ -174,7 +183,7 @@ public class DomainVerificationCollector { * @see #RESTRICT_DOMAINS */ private ArraySet<String> collectDomainsInternal(@NonNull AndroidPackage pkg, boolean checkAutoVerify) { boolean checkAutoVerify, boolean valid) { ArraySet<String> domains = new ArraySet<>(); int totalSize = 0; boolean underMaxSize = true; Loading Loading @@ -214,7 +223,7 @@ public class DomainVerificationCollector { int authorityCount = intent.countDataAuthorities(); for (int index = 0; index < authorityCount && underMaxSize; index++) { String host = intent.getDataAuthority(index).getHost(); if (isValidHost(host)) { if (isValidHost(host) == valid) { totalSize += byteSizeOf(host); underMaxSize = totalSize < MAX_DOMAINS_BYTE_SIZE; domains.add(host); Loading services/core/java/com/android/server/pm/verify/domain/DomainVerificationDebug.java +12 −1 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ public class DomainVerificationDebug { reusedMap.clear(); reusedMap.putAll(pkgState.getStateMap()); ArraySet<String> declaredDomains = mCollector.collectAutoVerifyDomains(pkg); ArraySet<String> declaredDomains = mCollector.collectValidAutoVerifyDomains(pkg); int declaredSize = declaredDomains.size(); for (int declaredIndex = 0; declaredIndex < declaredSize; declaredIndex++) { String domain = declaredDomains.valueAt(declaredIndex); Loading @@ -132,6 +132,17 @@ public class DomainVerificationDebug { } writer.increaseIndent(); final ArraySet<String> invalidDomains = mCollector.collectInvalidAutoVerifyDomains(pkg); if (!invalidDomains.isEmpty()) { writer.println("Invalid autoVerify domains:"); writer.increaseIndent(); int size = invalidDomains.size(); for (int index = 0; index < size; index++) { writer.println(invalidDomains.valueAt(index)); } writer.decreaseIndent(); } writer.println("Domain verification state:"); writer.increaseIndent(); int stateSize = reusedMap.size(); Loading services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java +12 −10 Original line number Diff line number Diff line Loading @@ -256,7 +256,7 @@ public class DomainVerificationService extends SystemService Map<String, Integer> hostToStateMap = new ArrayMap<>(pkgState.getStateMap()); // TODO(b/159952358): Should the domain list be cached? ArraySet<String> domains = mCollector.collectAutoVerifyDomains(pkg); ArraySet<String> domains = mCollector.collectValidAutoVerifyDomains(pkg); if (domains.isEmpty()) { return null; } Loading Loading @@ -354,7 +354,8 @@ public class DomainVerificationService extends SystemService validDomains.clear(); ArraySet<String> autoVerifyDomains = mCollector.collectAutoVerifyDomains(pkg); ArraySet<String> autoVerifyDomains = mCollector.collectValidAutoVerifyDomains(pkg); if (domains == null) { validDomains.addAll(autoVerifyDomains); } else { Loading @@ -379,9 +380,9 @@ public class DomainVerificationService extends SystemService AndroidPackage pkg = pkgSetting.getPkg(); if (domains == null) { domains = mCollector.collectAutoVerifyDomains(pkg); domains = mCollector.collectValidAutoVerifyDomains(pkg); } else { domains.retainAll(mCollector.collectAutoVerifyDomains(pkg)); domains.retainAll(mCollector.collectValidAutoVerifyDomains(pkg)); } setDomainVerificationStatusInternal(pkgState, state, domains); Loading Loading @@ -811,7 +812,8 @@ public class DomainVerificationService extends SystemService } ArrayMap<String, Integer> oldStateMap = oldPkgState.getStateMap(); ArraySet<String> newAutoVerifyDomains = mCollector.collectAutoVerifyDomains(newPkg); ArraySet<String> newAutoVerifyDomains = mCollector.collectValidAutoVerifyDomains(newPkg); int newDomainsSize = newAutoVerifyDomains.size(); for (int newDomainsIndex = 0; newDomainsIndex < newDomainsSize; newDomainsIndex++) { Loading Loading @@ -840,7 +842,7 @@ public class DomainVerificationService extends SystemService oldPkgState.getUserSelectionStates(); int oldUserStatesSize = oldUserStates.size(); if (oldUserStatesSize > 0) { ArraySet<String> newWebDomains = mCollector.collectAutoVerifyDomains(newPkg); ArraySet<String> newWebDomains = mCollector.collectValidAutoVerifyDomains(newPkg); for (int oldUserStatesIndex = 0; oldUserStatesIndex < oldUserStatesSize; oldUserStatesIndex++) { int userId = oldUserStates.keyAt(oldUserStatesIndex); Loading Loading @@ -893,7 +895,7 @@ public class DomainVerificationService extends SystemService } AndroidPackage pkg = newPkgSetting.getPkg(); ArraySet<String> domains = mCollector.collectAutoVerifyDomains(pkg); ArraySet<String> domains = mCollector.collectValidAutoVerifyDomains(pkg); boolean hasAutoVerifyDomains = !domains.isEmpty(); boolean isPendingOrRestored = pkgState != null; if (isPendingOrRestored) { Loading Loading @@ -1157,7 +1159,7 @@ public class DomainVerificationService extends SystemService } AndroidPackage pkg = pkgSetting.getPkg(); ArraySet<String> declaredDomains = forAutoVerify ? mCollector.collectAutoVerifyDomains(pkg) ? mCollector.collectValidAutoVerifyDomains(pkg) : mCollector.collectAllWebDomains(pkg); if (domains.retainAll(declaredDomains)) { Loading Loading @@ -1289,7 +1291,7 @@ public class DomainVerificationService extends SystemService } } applyImmutableState(pkgState, mCollector.collectAutoVerifyDomains(pkg)); applyImmutableState(pkgState, mCollector.collectValidAutoVerifyDomains(pkg)); } @Override Loading Loading @@ -1559,7 +1561,7 @@ public class DomainVerificationService extends SystemService // To allow an instant app to immediately open domains after being installed by the // user, auto approve them for any declared autoVerify domains. if (pkgSetting.getInstantApp(userId) && mCollector.collectAutoVerifyDomains(pkg).contains(host)) { && mCollector.collectValidAutoVerifyDomains(pkg).contains(host)) { return APPROVAL_LEVEL_INSTANT_APP; } } Loading services/core/java/com/android/server/pm/verify/domain/proxy/DomainVerificationProxyV1.java +1 −1 Original line number Diff line number Diff line Loading @@ -276,7 +276,7 @@ public class DomainVerificationProxyV1 implements DomainVerificationProxy { private String buildHostsString(@NonNull AndroidPackage pkg) { // The collector itself handles the v1 vs v2 behavior, which is based on targetSdkVersion, // not the version of the verification agent on device. ArraySet<String> domains = mCollector.collectAutoVerifyDomains(pkg); ArraySet<String> domains = mCollector.collectValidAutoVerifyDomains(pkg); // v1 doesn't handle wildcard domains, so transform them here to the root StringBuilder builder = new StringBuilder(); Loading services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationCollectorTest.kt +32 −8 Original line number Diff line number Diff line Loading @@ -52,8 +52,10 @@ class DomainVerificationCollectorTest { val collector = mockCollector() assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)) assertThat(collector.collectValidAutoVerifyDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com", "example4.com") assertThat(collector.collectInvalidAutoVerifyDomains(pkg)) .containsExactly("invalid1", "invalid2", "invalid3", "invalid4") } @Test Loading @@ -62,7 +64,8 @@ class DomainVerificationCollectorTest { val collector = mockCollector() assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectValidAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectInvalidAutoVerifyDomains(pkg)).isEmpty() } @Test Loading @@ -71,8 +74,10 @@ class DomainVerificationCollectorTest { val collector = mockCollector(linkedApps = setOf(TEST_PKG_NAME)) assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)) assertThat(collector.collectValidAutoVerifyDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com", "example4.com") assertThat(collector.collectInvalidAutoVerifyDomains(pkg)) .containsExactly("invalid1", "invalid2", "invalid3", "invalid4") } @Test Loading @@ -92,6 +97,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example1.com", null) addDataAuthority("invalid1", null) } ) }, Loading @@ -111,6 +117,7 @@ class DomainVerificationCollectorTest { addDataScheme("nonWebScheme") addDataPath("/sub", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example2.com", null) addDataAuthority("invalid2", null) } ) }, Loading @@ -122,7 +129,8 @@ class DomainVerificationCollectorTest { val collector = mockCollector() assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com") assertThat(collector.collectAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectValidAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectInvalidAutoVerifyDomains(pkg)).isEmpty() } @Test Loading @@ -132,8 +140,10 @@ class DomainVerificationCollectorTest { assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)) assertThat(collector.collectValidAutoVerifyDomains(pkg)) .containsExactly("example1.com", "example3.com") assertThat(collector.collectInvalidAutoVerifyDomains(pkg)) .containsExactly("invalid1", "invalid3") } @Test Loading @@ -143,7 +153,8 @@ class DomainVerificationCollectorTest { assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectValidAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectInvalidAutoVerifyDomains(pkg)).isEmpty() } @Test Loading @@ -153,7 +164,8 @@ class DomainVerificationCollectorTest { assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectValidAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectInvalidAutoVerifyDomains(pkg)).isEmpty() } private fun mockCollector(linkedApps: Set<String> = emptySet()): DomainVerificationCollector { Loading @@ -178,6 +190,7 @@ class DomainVerificationCollectorTest { <data android:scheme="https"/> <data android:path="/sub"/> <data android:host="example1.com"/> <data android:host="invalid1"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> Loading @@ -186,6 +199,7 @@ class DomainVerificationCollectorTest { <data android:scheme="http"/> <data android:path="/sub2"/> <data android:host="example2.com"/> <data android:host="invalid2."/> </intent-filter> <intent-filter android:autoVerify="$autoVerify"> <action android:name="android.intent.action.VIEW"/> Loading @@ -194,6 +208,7 @@ class DomainVerificationCollectorTest { <data android:scheme="https"/> <data android:path="/sub3"/> <data android:host="example3.com"/> <data android:host=".invalid3"/> </intent-filter> <intent-filter android:autoVerify="$autoVerify"> <action android:name="android.intent.action.VIEW"/> Loading @@ -201,6 +216,7 @@ class DomainVerificationCollectorTest { <data android:scheme="https"/> <data android:path="/sub4"/> <data android:host="example4.com"/> <data android:host="invalid4"/> </intent-filter> <intent-filter android:autoVerify="$autoVerify"> <action android:name="android.intent.action.VIEW"/> Loading @@ -208,6 +224,7 @@ class DomainVerificationCollectorTest { <data android:scheme="https"/> <data android:path="/sub5"/> <data android:host="example5.com"/> <data android:host="invalid5"/> </intent-filter> <intent-filter android:autoVerify="$autoVerify"> <category android:name="android.intent.category.BROWSABLE"/> Loading @@ -215,11 +232,12 @@ class DomainVerificationCollectorTest { <data android:scheme="https"/> <data android:path="/sub5"/> <data android:host="example5.com"/> <data android:host="invalid5"/> </intent-filter> </xml> """.trimIndent() return mockThrowOnUnmocked<AndroidPackage> { return mockThrowOnUnmocked { whenever(packageName) { TEST_PKG_NAME } whenever(targetSdkVersion) { if (useV2) Build.VERSION_CODES.S else Build.VERSION_CODES.R Loading @@ -238,6 +256,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example1.com", null) addDataAuthority("invalid1", null) } ) addIntent( Loading @@ -248,6 +267,7 @@ class DomainVerificationCollectorTest { addDataScheme("http") addDataPath("/sub2", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example2.com", null) addDataAuthority("invalid2", null) } ) }, Loading @@ -261,6 +281,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub3", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example3.com", null) addDataAuthority("invalid3", null) } ) }, Loading @@ -273,6 +294,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub4", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example4.com", null) addDataAuthority("invalid4", null) } ) addIntent( Loading @@ -283,6 +305,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub5", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example5.com", null) addDataAuthority("invalid5", null) } ) addIntent( Loading @@ -293,6 +316,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub6", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example6.com", null) addDataAuthority("invalid6", null) } ) }, Loading Loading
services/core/java/com/android/server/pm/verify/domain/DomainVerificationCollector.java +20 −11 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ public class DomainVerificationCollector { @NonNull public ArraySet<String> collectAllWebDomains(@NonNull AndroidPackage pkg) { return collectDomains(pkg, false); return collectDomains(pkg, false /* checkAutoVerify */, true /* valid */); } /** Loading @@ -92,20 +92,29 @@ public class DomainVerificationCollector { * IntentFilter#getAutoVerify()} == true. */ @NonNull public ArraySet<String> collectAutoVerifyDomains(@NonNull AndroidPackage pkg) { return collectDomains(pkg, true); public ArraySet<String> collectValidAutoVerifyDomains(@NonNull AndroidPackage pkg) { return collectDomains(pkg, true /* checkAutoVerify */, true /* valid */); } /** * Returns all the domains that are configured to be auto verified, but aren't actually valid * HTTP domains, per {@link #DOMAIN_NAME_WITH_WILDCARD}. */ @NonNull public ArraySet<String> collectInvalidAutoVerifyDomains(@NonNull AndroidPackage pkg) { return collectDomains(pkg, true /* checkAutoVerify */, false /* valid */); } @NonNull private ArraySet<String> collectDomains(@NonNull AndroidPackage pkg, boolean checkAutoVerify) { boolean checkAutoVerify, boolean valid) { boolean restrictDomains = DomainVerificationUtils.isChangeEnabled(mPlatformCompat, pkg, RESTRICT_DOMAINS); if (restrictDomains) { return collectDomainsInternal(pkg, checkAutoVerify); return collectDomainsInternal(pkg, checkAutoVerify, valid); } else { return collectDomainsLegacy(pkg, checkAutoVerify); return collectDomainsLegacy(pkg, checkAutoVerify, valid); } } Loading @@ -113,10 +122,10 @@ public class DomainVerificationCollector { * @see #RESTRICT_DOMAINS */ private ArraySet<String> collectDomainsLegacy(@NonNull AndroidPackage pkg, boolean checkAutoVerify) { boolean checkAutoVerify, boolean valid) { if (!checkAutoVerify) { // Per-domain user selection state doesn't have a V1 equivalent on S, so just use V2 return collectDomainsInternal(pkg, false); return collectDomainsInternal(pkg, false /* checkAutoVerify */, true /* valid */); } List<ParsedActivity> activities = pkg.getActivities(); Loading Loading @@ -157,7 +166,7 @@ public class DomainVerificationCollector { int authorityCount = intent.countDataAuthorities(); for (int index = 0; index < authorityCount; index++) { String host = intent.getDataAuthority(index).getHost(); if (isValidHost(host)) { if (isValidHost(host) == valid) { totalSize += byteSizeOf(host); underMaxSize = totalSize < MAX_DOMAINS_BYTE_SIZE; domains.add(host); Loading @@ -174,7 +183,7 @@ public class DomainVerificationCollector { * @see #RESTRICT_DOMAINS */ private ArraySet<String> collectDomainsInternal(@NonNull AndroidPackage pkg, boolean checkAutoVerify) { boolean checkAutoVerify, boolean valid) { ArraySet<String> domains = new ArraySet<>(); int totalSize = 0; boolean underMaxSize = true; Loading Loading @@ -214,7 +223,7 @@ public class DomainVerificationCollector { int authorityCount = intent.countDataAuthorities(); for (int index = 0; index < authorityCount && underMaxSize; index++) { String host = intent.getDataAuthority(index).getHost(); if (isValidHost(host)) { if (isValidHost(host) == valid) { totalSize += byteSizeOf(host); underMaxSize = totalSize < MAX_DOMAINS_BYTE_SIZE; domains.add(host); Loading
services/core/java/com/android/server/pm/verify/domain/DomainVerificationDebug.java +12 −1 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ public class DomainVerificationDebug { reusedMap.clear(); reusedMap.putAll(pkgState.getStateMap()); ArraySet<String> declaredDomains = mCollector.collectAutoVerifyDomains(pkg); ArraySet<String> declaredDomains = mCollector.collectValidAutoVerifyDomains(pkg); int declaredSize = declaredDomains.size(); for (int declaredIndex = 0; declaredIndex < declaredSize; declaredIndex++) { String domain = declaredDomains.valueAt(declaredIndex); Loading @@ -132,6 +132,17 @@ public class DomainVerificationDebug { } writer.increaseIndent(); final ArraySet<String> invalidDomains = mCollector.collectInvalidAutoVerifyDomains(pkg); if (!invalidDomains.isEmpty()) { writer.println("Invalid autoVerify domains:"); writer.increaseIndent(); int size = invalidDomains.size(); for (int index = 0; index < size; index++) { writer.println(invalidDomains.valueAt(index)); } writer.decreaseIndent(); } writer.println("Domain verification state:"); writer.increaseIndent(); int stateSize = reusedMap.size(); Loading
services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java +12 −10 Original line number Diff line number Diff line Loading @@ -256,7 +256,7 @@ public class DomainVerificationService extends SystemService Map<String, Integer> hostToStateMap = new ArrayMap<>(pkgState.getStateMap()); // TODO(b/159952358): Should the domain list be cached? ArraySet<String> domains = mCollector.collectAutoVerifyDomains(pkg); ArraySet<String> domains = mCollector.collectValidAutoVerifyDomains(pkg); if (domains.isEmpty()) { return null; } Loading Loading @@ -354,7 +354,8 @@ public class DomainVerificationService extends SystemService validDomains.clear(); ArraySet<String> autoVerifyDomains = mCollector.collectAutoVerifyDomains(pkg); ArraySet<String> autoVerifyDomains = mCollector.collectValidAutoVerifyDomains(pkg); if (domains == null) { validDomains.addAll(autoVerifyDomains); } else { Loading @@ -379,9 +380,9 @@ public class DomainVerificationService extends SystemService AndroidPackage pkg = pkgSetting.getPkg(); if (domains == null) { domains = mCollector.collectAutoVerifyDomains(pkg); domains = mCollector.collectValidAutoVerifyDomains(pkg); } else { domains.retainAll(mCollector.collectAutoVerifyDomains(pkg)); domains.retainAll(mCollector.collectValidAutoVerifyDomains(pkg)); } setDomainVerificationStatusInternal(pkgState, state, domains); Loading Loading @@ -811,7 +812,8 @@ public class DomainVerificationService extends SystemService } ArrayMap<String, Integer> oldStateMap = oldPkgState.getStateMap(); ArraySet<String> newAutoVerifyDomains = mCollector.collectAutoVerifyDomains(newPkg); ArraySet<String> newAutoVerifyDomains = mCollector.collectValidAutoVerifyDomains(newPkg); int newDomainsSize = newAutoVerifyDomains.size(); for (int newDomainsIndex = 0; newDomainsIndex < newDomainsSize; newDomainsIndex++) { Loading Loading @@ -840,7 +842,7 @@ public class DomainVerificationService extends SystemService oldPkgState.getUserSelectionStates(); int oldUserStatesSize = oldUserStates.size(); if (oldUserStatesSize > 0) { ArraySet<String> newWebDomains = mCollector.collectAutoVerifyDomains(newPkg); ArraySet<String> newWebDomains = mCollector.collectValidAutoVerifyDomains(newPkg); for (int oldUserStatesIndex = 0; oldUserStatesIndex < oldUserStatesSize; oldUserStatesIndex++) { int userId = oldUserStates.keyAt(oldUserStatesIndex); Loading Loading @@ -893,7 +895,7 @@ public class DomainVerificationService extends SystemService } AndroidPackage pkg = newPkgSetting.getPkg(); ArraySet<String> domains = mCollector.collectAutoVerifyDomains(pkg); ArraySet<String> domains = mCollector.collectValidAutoVerifyDomains(pkg); boolean hasAutoVerifyDomains = !domains.isEmpty(); boolean isPendingOrRestored = pkgState != null; if (isPendingOrRestored) { Loading Loading @@ -1157,7 +1159,7 @@ public class DomainVerificationService extends SystemService } AndroidPackage pkg = pkgSetting.getPkg(); ArraySet<String> declaredDomains = forAutoVerify ? mCollector.collectAutoVerifyDomains(pkg) ? mCollector.collectValidAutoVerifyDomains(pkg) : mCollector.collectAllWebDomains(pkg); if (domains.retainAll(declaredDomains)) { Loading Loading @@ -1289,7 +1291,7 @@ public class DomainVerificationService extends SystemService } } applyImmutableState(pkgState, mCollector.collectAutoVerifyDomains(pkg)); applyImmutableState(pkgState, mCollector.collectValidAutoVerifyDomains(pkg)); } @Override Loading Loading @@ -1559,7 +1561,7 @@ public class DomainVerificationService extends SystemService // To allow an instant app to immediately open domains after being installed by the // user, auto approve them for any declared autoVerify domains. if (pkgSetting.getInstantApp(userId) && mCollector.collectAutoVerifyDomains(pkg).contains(host)) { && mCollector.collectValidAutoVerifyDomains(pkg).contains(host)) { return APPROVAL_LEVEL_INSTANT_APP; } } Loading
services/core/java/com/android/server/pm/verify/domain/proxy/DomainVerificationProxyV1.java +1 −1 Original line number Diff line number Diff line Loading @@ -276,7 +276,7 @@ public class DomainVerificationProxyV1 implements DomainVerificationProxy { private String buildHostsString(@NonNull AndroidPackage pkg) { // The collector itself handles the v1 vs v2 behavior, which is based on targetSdkVersion, // not the version of the verification agent on device. ArraySet<String> domains = mCollector.collectAutoVerifyDomains(pkg); ArraySet<String> domains = mCollector.collectValidAutoVerifyDomains(pkg); // v1 doesn't handle wildcard domains, so transform them here to the root StringBuilder builder = new StringBuilder(); Loading
services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationCollectorTest.kt +32 −8 Original line number Diff line number Diff line Loading @@ -52,8 +52,10 @@ class DomainVerificationCollectorTest { val collector = mockCollector() assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)) assertThat(collector.collectValidAutoVerifyDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com", "example4.com") assertThat(collector.collectInvalidAutoVerifyDomains(pkg)) .containsExactly("invalid1", "invalid2", "invalid3", "invalid4") } @Test Loading @@ -62,7 +64,8 @@ class DomainVerificationCollectorTest { val collector = mockCollector() assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectValidAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectInvalidAutoVerifyDomains(pkg)).isEmpty() } @Test Loading @@ -71,8 +74,10 @@ class DomainVerificationCollectorTest { val collector = mockCollector(linkedApps = setOf(TEST_PKG_NAME)) assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)) assertThat(collector.collectValidAutoVerifyDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com", "example4.com") assertThat(collector.collectInvalidAutoVerifyDomains(pkg)) .containsExactly("invalid1", "invalid2", "invalid3", "invalid4") } @Test Loading @@ -92,6 +97,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example1.com", null) addDataAuthority("invalid1", null) } ) }, Loading @@ -111,6 +117,7 @@ class DomainVerificationCollectorTest { addDataScheme("nonWebScheme") addDataPath("/sub", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example2.com", null) addDataAuthority("invalid2", null) } ) }, Loading @@ -122,7 +129,8 @@ class DomainVerificationCollectorTest { val collector = mockCollector() assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com") assertThat(collector.collectAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectValidAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectInvalidAutoVerifyDomains(pkg)).isEmpty() } @Test Loading @@ -132,8 +140,10 @@ class DomainVerificationCollectorTest { assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)) assertThat(collector.collectValidAutoVerifyDomains(pkg)) .containsExactly("example1.com", "example3.com") assertThat(collector.collectInvalidAutoVerifyDomains(pkg)) .containsExactly("invalid1", "invalid3") } @Test Loading @@ -143,7 +153,8 @@ class DomainVerificationCollectorTest { assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectValidAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectInvalidAutoVerifyDomains(pkg)).isEmpty() } @Test Loading @@ -153,7 +164,8 @@ class DomainVerificationCollectorTest { assertThat(collector.collectAllWebDomains(pkg)) .containsExactly("example1.com", "example2.com", "example3.com") assertThat(collector.collectAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectValidAutoVerifyDomains(pkg)).isEmpty() assertThat(collector.collectInvalidAutoVerifyDomains(pkg)).isEmpty() } private fun mockCollector(linkedApps: Set<String> = emptySet()): DomainVerificationCollector { Loading @@ -178,6 +190,7 @@ class DomainVerificationCollectorTest { <data android:scheme="https"/> <data android:path="/sub"/> <data android:host="example1.com"/> <data android:host="invalid1"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> Loading @@ -186,6 +199,7 @@ class DomainVerificationCollectorTest { <data android:scheme="http"/> <data android:path="/sub2"/> <data android:host="example2.com"/> <data android:host="invalid2."/> </intent-filter> <intent-filter android:autoVerify="$autoVerify"> <action android:name="android.intent.action.VIEW"/> Loading @@ -194,6 +208,7 @@ class DomainVerificationCollectorTest { <data android:scheme="https"/> <data android:path="/sub3"/> <data android:host="example3.com"/> <data android:host=".invalid3"/> </intent-filter> <intent-filter android:autoVerify="$autoVerify"> <action android:name="android.intent.action.VIEW"/> Loading @@ -201,6 +216,7 @@ class DomainVerificationCollectorTest { <data android:scheme="https"/> <data android:path="/sub4"/> <data android:host="example4.com"/> <data android:host="invalid4"/> </intent-filter> <intent-filter android:autoVerify="$autoVerify"> <action android:name="android.intent.action.VIEW"/> Loading @@ -208,6 +224,7 @@ class DomainVerificationCollectorTest { <data android:scheme="https"/> <data android:path="/sub5"/> <data android:host="example5.com"/> <data android:host="invalid5"/> </intent-filter> <intent-filter android:autoVerify="$autoVerify"> <category android:name="android.intent.category.BROWSABLE"/> Loading @@ -215,11 +232,12 @@ class DomainVerificationCollectorTest { <data android:scheme="https"/> <data android:path="/sub5"/> <data android:host="example5.com"/> <data android:host="invalid5"/> </intent-filter> </xml> """.trimIndent() return mockThrowOnUnmocked<AndroidPackage> { return mockThrowOnUnmocked { whenever(packageName) { TEST_PKG_NAME } whenever(targetSdkVersion) { if (useV2) Build.VERSION_CODES.S else Build.VERSION_CODES.R Loading @@ -238,6 +256,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example1.com", null) addDataAuthority("invalid1", null) } ) addIntent( Loading @@ -248,6 +267,7 @@ class DomainVerificationCollectorTest { addDataScheme("http") addDataPath("/sub2", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example2.com", null) addDataAuthority("invalid2", null) } ) }, Loading @@ -261,6 +281,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub3", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example3.com", null) addDataAuthority("invalid3", null) } ) }, Loading @@ -273,6 +294,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub4", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example4.com", null) addDataAuthority("invalid4", null) } ) addIntent( Loading @@ -283,6 +305,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub5", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example5.com", null) addDataAuthority("invalid5", null) } ) addIntent( Loading @@ -293,6 +316,7 @@ class DomainVerificationCollectorTest { addDataScheme("https") addDataPath("/sub6", PatternMatcher.PATTERN_LITERAL) addDataAuthority("example6.com", null) addDataAuthority("invalid6", null) } ) }, Loading