summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Winson <chiuwinson@google.com> 2021-02-19 15:32:30 -0800
committer Winson <chiuwinson@google.com> 2021-02-19 15:47:01 -0800
commit907ad40dae5b3d58da4722857e70e59a445cf7ea (patch)
treeb38f84ce602c3fc5eee5ea9fdf43d408968fdee3
parentdb9ef8e719c3b8a2c97f04070b05d0e4fd8d8ac3 (diff)
Fix domain verification shell command "all" params
Iterates the user IDs from UserManager when USER_ALL is passed, and also adds support for "all" domains to set-app-links-user-selection. Bug: 180753593 Test: manual, run commands with changes Change-Id: Ib2c8886ae475ac4b6f2a0b77959bb735b4ce34f2
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java5
-rw-r--r--services/core/java/com/android/server/pm/verify/domain/DomainVerificationManagerInternal.java3
-rw-r--r--services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java42
-rw-r--r--services/core/java/com/android/server/pm/verify/domain/DomainVerificationShell.java8
4 files changed, 36 insertions, 22 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index e6789d4ba8ac..8d0a78547e52 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -1755,6 +1755,11 @@ public class PackageManagerService extends IPackageManager.Stub
public boolean filterAppAccess(String packageName, int callingUid, int userId) {
return mPmInternal.filterAppAccess(packageName, callingUid, userId);
}
+
+ @Override
+ public int[] getAllUserIds() {
+ return mUserManager.getUserIds();
+ }
}
/**
diff --git a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationManagerInternal.java b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationManagerInternal.java
index 5d4370ae5dd4..b6ea901ecd6b 100644
--- a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationManagerInternal.java
+++ b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationManagerInternal.java
@@ -358,5 +358,8 @@ public interface DomainVerificationManagerInternal extends DomainVerificationMan
@Nullable
AndroidPackage getPackageLocked(@NonNull String pkgName);
+
+ @UserIdInt
+ int[] getAllUserIds();
}
}
diff --git a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java
index e5ed774fcaa8..8e5aead05f96 100644
--- a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java
+++ b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java
@@ -423,12 +423,8 @@ public class DomainVerificationService extends SystemService
for (int pkgStateIndex = 0; pkgStateIndex < pkgStateSize; pkgStateIndex++) {
DomainVerificationPkgState pkgState = mAttachedPkgStates.valueAt(pkgStateIndex);
if (userId == UserHandle.USER_ALL) {
- SparseArray<DomainVerificationUserState> userStates =
- pkgState.getUserSelectionStates();
- int userStatesSize = userStates.size();
- for (int userStateIndex = 0; userStateIndex < userStatesSize;
- userStateIndex++) {
- userStates.valueAt(userStateIndex)
+ for (int aUserId : mConnection.getAllUserIds()) {
+ pkgState.getOrCreateUserSelectionState(aUserId)
.setLinkHandlingAllowed(allowed);
}
} else {
@@ -436,7 +432,6 @@ public class DomainVerificationService extends SystemService
.setLinkHandlingAllowed(allowed);
}
}
-
}
} else {
synchronized (mLock) {
@@ -500,28 +495,33 @@ public class DomainVerificationService extends SystemService
@Override
public void setDomainVerificationUserSelectionInternal(@UserIdInt int userId,
- @Nullable String packageName, boolean enabled, @NonNull ArraySet<String> domains)
+ @Nullable String packageName, boolean enabled, @Nullable ArraySet<String> domains)
throws NameNotFoundException {
mEnforcer.assertInternal(mConnection.getCallingUid());
+
if (packageName == null) {
synchronized (mLock) {
Set<String> validDomains = new ArraySet<>();
-
int size = mAttachedPkgStates.size();
for (int index = 0; index < size; index++) {
DomainVerificationPkgState pkgState = mAttachedPkgStates.valueAt(index);
String pkgName = pkgState.getPackageName();
PackageSetting pkgSetting = mConnection.getPackageSettingLocked(pkgName);
- if (pkgSetting == null || pkgSetting.getPkg() == null) {
+ AndroidPackage pkg = pkgSetting == null ? null : pkgSetting.getPkg();
+ if (pkg == null) {
continue;
}
- validDomains.clear();
- validDomains.addAll(domains);
+ if (domains == null) {
+ validDomains = mCollector.collectAllWebDomains(pkg);
+ } else {
+ validDomains.clear();
+ validDomains.addAll(domains);
+ }
setDomainVerificationUserSelectionInternal(userId, pkgState,
- pkgSetting.getPkg(), enabled, validDomains);
+ pkg, enabled, validDomains);
}
}
} else {
@@ -532,12 +532,16 @@ public class DomainVerificationService extends SystemService
}
PackageSetting pkgSetting = mConnection.getPackageSettingLocked(packageName);
- if (pkgSetting == null || pkgSetting.getPkg() == null) {
+ AndroidPackage pkg = pkgSetting == null ? null : pkgSetting.getPkg();
+ if (pkg == null) {
throw DomainVerificationUtils.throwPackageUnavailable(packageName);
}
+ Set<String> validDomains =
+ domains == null ? mCollector.collectAllWebDomains(pkg) : domains;
+
setDomainVerificationUserSelectionInternal(userId, pkgState, pkgSetting.getPkg(),
- enabled, domains);
+ enabled, validDomains);
}
}
@@ -549,12 +553,10 @@ public class DomainVerificationService extends SystemService
boolean enabled, Set<String> domains) {
domains.retainAll(mCollector.collectAllWebDomains(pkg));
- SparseArray<DomainVerificationUserState> userStates =
- pkgState.getUserSelectionStates();
if (userId == UserHandle.USER_ALL) {
- int size = userStates.size();
- for (int index = 0; index < size; index++) {
- DomainVerificationUserState userState = userStates.valueAt(index);
+ for (int aUserId : mConnection.getAllUserIds()) {
+ DomainVerificationUserState userState =
+ pkgState.getOrCreateUserSelectionState(aUserId);
if (enabled) {
userState.addHosts(domains);
} else {
diff --git a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationShell.java b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationShell.java
index 7f9e75aa2926..d083d11cb2e2 100644
--- a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationShell.java
+++ b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationShell.java
@@ -250,6 +250,10 @@ public class DomainVerificationShell {
return false;
}
+ if (domains.size() == 1 && domains.contains("all")) {
+ domains = null;
+ }
+
try {
mCallback.setDomainVerificationUserSelectionInternal(userId,
packageName, enabled, domains);
@@ -446,10 +450,10 @@ public class DomainVerificationShell {
* @param packageName the package whose state to change, or all packages if non is
* specified
* @param enabled whether the domain is now approved by the user
- * @param domains the set of domains to change
+ * @param domains the set of domains to change, or null to affect all domains
*/
void setDomainVerificationUserSelectionInternal(@UserIdInt int userId,
- @Nullable String packageName, boolean enabled, @NonNull ArraySet<String> domains)
+ @Nullable String packageName, boolean enabled, @Nullable ArraySet<String> domains)
throws PackageManager.NameNotFoundException;
/**