diff options
author | 2023-02-14 06:13:57 +0000 | |
---|---|---|
committer | 2023-02-14 06:13:57 +0000 | |
commit | d87ae0e5e14274198775fd80bb9fab95758f09ac (patch) | |
tree | 79237812a85672f20447fb3bdfb9312a7ddecdeb | |
parent | 308659946e4c316e06fa7b24a1d2ea7e2e2d2fb0 (diff) | |
parent | e8e4974e9ab4bcf7d90ff82ca121ccbdc3d3952b (diff) |
Merge "Remove SessionParams USE_FULL_SCREEN_INTENT auto grant"
5 files changed, 17 insertions, 63 deletions
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index 8f864f4f9a79..cfd291f3fa5f 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -30,8 +30,6 @@ import static android.content.pm.PackageInfo.INSTALL_LOCATION_AUTO; import static android.content.pm.PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY; import static android.content.pm.PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL; -import static com.android.internal.util.XmlUtils.writeStringAttribute; - import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.CurrentTimeMillisLong; @@ -84,7 +82,6 @@ import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.ExceptionUtils; -import android.util.Log; import com.android.internal.content.InstallLocationUtils; import com.android.internal.util.ArrayUtils; @@ -92,7 +89,6 @@ import com.android.internal.util.DataClass; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.internal.util.function.pooled.PooledLambda; -import com.android.modules.utils.TypedXmlSerializer; import java.io.Closeable; import java.io.File; @@ -2313,11 +2309,6 @@ public class PackageInstaller { private final ArrayMap<String, Integer> mPermissionStates; /** - * @see #getFinalPermissionStates() - */ - private ArrayMap<String, Integer> mFinalPermissionStates; - - /** * Construct parameters for a new package install session. * * @param mode one of {@link #MODE_FULL_INSTALL} or @@ -2563,11 +2554,6 @@ public class PackageInstaller { + (permissionName == null ? "null" : "empty")); } - if (mFinalPermissionStates != null) { - Log.wtf(TAG, "Requested permission " + permissionName + " but final permissions" - + " were already decided for this session: " + mFinalPermissionStates); - } - switch (state) { case PERMISSION_STATE_DEFAULT: mPermissionStates.remove(permissionName); @@ -3008,48 +2994,10 @@ public class PackageInstaller { } } - /** - * This is only for use by system server. If you need the actual grant state, use - * {@link #getFinalPermissionStates()}. - * <p/> - * This is implemented here to avoid exposing the raw permission sets to external callers, - * so that enforcement done in the either of the final methods is the single source of truth - * for default grant/deny policy. - * - * @hide - */ - public void writePermissionStateXml(@NonNull TypedXmlSerializer out, - @NonNull String grantTag, @NonNull String denyTag, @NonNull String attrName) - throws IOException { - for (int index = 0; index < mPermissionStates.size(); index++) { - var permissionName = mPermissionStates.keyAt(index); - var state = mPermissionStates.valueAt(index); - String tag = state == PERMISSION_STATE_GRANTED ? grantTag : denyTag; - out.startTag(null, tag); - writeStringAttribute(out, attrName, permissionName); - out.endTag(null, tag); - } - } - - /** - * Snapshot of final permission states taken when this method is first called, to separate - * what the caller wanted and the effective state that should be applied to the session. - * - * This prevents someone from adding more permissions after the fact. - * - * @hide - */ + /** @hide */ @NonNull - public ArrayMap<String, Integer> getFinalPermissionStates() { - if (mFinalPermissionStates == null) { - mFinalPermissionStates = new ArrayMap<>(mPermissionStates); - if (!mFinalPermissionStates.containsKey( - Manifest.permission.USE_FULL_SCREEN_INTENT)) { - mFinalPermissionStates.put(Manifest.permission.USE_FULL_SCREEN_INTENT, - PERMISSION_STATE_GRANTED); - } - } - return mFinalPermissionStates; + public ArrayMap<String, Integer> getPermissionStates() { + return mPermissionStates; } /** @hide */ diff --git a/services/core/java/com/android/server/pm/InstallingSession.java b/services/core/java/com/android/server/pm/InstallingSession.java index f989f6f5b169..c3cc3929d56d 100644 --- a/services/core/java/com/android/server/pm/InstallingSession.java +++ b/services/core/java/com/android/server/pm/InstallingSession.java @@ -153,7 +153,7 @@ class InstallingSession { mInstallSource = installSource; mVolumeUuid = sessionParams.volumeUuid; mPackageAbiOverride = sessionParams.abiOverride; - mPermissionStates = sessionParams.getFinalPermissionStates(); + mPermissionStates = sessionParams.getPermissionStates(); mAllowlistedRestrictedPermissions = sessionParams.whitelistedRestrictedPermissions; mAutoRevokePermissionsMode = sessionParams.autoRevokePermissionsMode; mSigningDetails = signingDetails; diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index ed9d370fd9e3..08972899e9ef 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -804,7 +804,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements + " PackageManager.INSTALL_GRANT_ALL_REQUESTED_PERMISSIONS flag"); } - var permissionStates = params.getFinalPermissionStates(); + var permissionStates = params.getPermissionStates(); if (!permissionStates.isEmpty()) { if (!hasInstallGrantRuntimePermissions) { for (int index = 0; index < permissionStates.size(); index++) { diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 3ad3af3e1c2b..39519039e95b 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -4878,7 +4878,16 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { private static void writePermissionsLocked(@NonNull TypedXmlSerializer out, @NonNull SessionParams params) throws IOException { - params.writePermissionStateXml(out, TAG_GRANT_PERMISSION, TAG_DENY_PERMISSION, ATTR_NAME); + var permissionStates = params.getPermissionStates(); + for (int index = 0; index < permissionStates.size(); index++) { + var permissionName = permissionStates.keyAt(index); + var state = permissionStates.valueAt(index); + String tag = state == SessionParams.PERMISSION_STATE_GRANTED ? TAG_GRANT_PERMISSION + : TAG_DENY_PERMISSION; + out.startTag(null, tag); + writeStringAttribute(out, ATTR_NAME, permissionName); + out.endTag(null, tag); + } } private static void writeWhitelistedRestrictedPermissionsLocked(@NonNull TypedXmlSerializer out, diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageInstallerSessionTest.kt b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageInstallerSessionTest.kt index d760dc7c1a66..811b0860ea64 100644 --- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageInstallerSessionTest.kt +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageInstallerSessionTest.kt @@ -15,7 +15,6 @@ */ package com.android.server.pm -import android.Manifest import android.content.Context import android.content.pm.PackageInstaller import android.content.pm.PackageInstaller.SessionParams @@ -122,12 +121,10 @@ class PackageInstallerSessionTest { writeRestoreAssert(sessions).single().params.run { assertThat(legacyGrantedRuntimePermissions).asList() .containsExactly("grantPermission", "denyToGrantPermission") - assertThat(finalPermissionStates) + assertThat(permissionStates) .containsExactlyEntriesIn(mapOf( "grantPermission" to PERMISSION_STATE_GRANTED, "denyToGrantPermission" to PERMISSION_STATE_GRANTED, - // Fullscreen Intent is auto-granted if the caller has no opinion - Manifest.permission.USE_FULL_SCREEN_INTENT to PERMISSION_STATE_GRANTED, "denyPermission" to PERMISSION_STATE_DENIED, "grantToDenyPermission" to PERMISSION_STATE_DENIED, )) @@ -282,7 +279,7 @@ class PackageInstallerSessionTest { assertThat(expected.referrerUri).isEqualTo(actual.referrerUri) assertThat(expected.abiOverride).isEqualTo(actual.abiOverride) assertThat(expected.volumeUuid).isEqualTo(actual.volumeUuid) - assertThat(expected.finalPermissionStates).isEqualTo(actual.finalPermissionStates) + assertThat(expected.permissionStates).isEqualTo(actual.permissionStates) assertThat(expected.installerPackageName).isEqualTo(actual.installerPackageName) assertThat(expected.isMultiPackage).isEqualTo(actual.isMultiPackage) assertThat(expected.isStaged).isEqualTo(actual.isStaged) |