Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e29fc3b authored by Song Chun Fan's avatar Song Chun Fan
Browse files

[ADI][64/N] support user actions in multi-package installs

+ Support user actions in multi-package by preserving the
  CompletableFuture as part of the session state
+ Moved emergency bypass check back to per-child-session level
+ Improved merging logic by combining extension response and error
  messages from multiple child sessions
+ Code cleanup

FLAG: android.content.pm.verification_service
BUG: 360129657
Test: atest com.android.server.pm.PackageInstallerSessionTest
Test: atest CtsPackageInstallerCUJDeveloperVerificationTestCases
Test: atest CtsPackageInstallSessionTestCases android.packageinstaller.install.cts.SessionTest#confirmMultiPackageInstallation
Test: manually with "set-developer-verification-result" and "install-multi-package"

Change-Id: Idfb9925075cc3ca085af0a68ba294d45ad2a66d7
parent 2ef21e4c
Loading
Loading
Loading
Loading
+222 −202

File changed.

Preview size limit exceeded, changes collapsed.

+17 −17
Original line number Diff line number Diff line
@@ -171,17 +171,17 @@ class PackageInstallerSessionTest {
    fun testShouldAllowDeveloperVerificationEmergencyBypassReturnsFalseForNullPackageName() {
        // Test no package name
        val session = createSession()
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(
            null, mSnapshot)).isFalse()
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(null)).isFalse()
    }

    @Test
    fun testShouldAllowDeveloperVerificationEmergencyBypassReturnsFalseForNonVerifierPackageName() {
        val testPackageName = "testPackageName"
        // Test no verifier package name
        whenever(mMockDeveloperVerifierController.verifierPackageName).thenReturn(null)
        val session = createSession()
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(
            "testPackageName", mSnapshot)).isFalse()
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(testPackageName))
            .isFalse()
    }

    @Test
@@ -190,8 +190,8 @@ class PackageInstallerSessionTest {
        val session = createSession()
        whenever(mSnapshot.getPackageStateInternal(eq(testPackageName), eq(Process.SYSTEM_UID)))
            .thenReturn(null)
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(
            testPackageName, mSnapshot)).isFalse()
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(testPackageName))
            .isFalse()
    }

    @Test
@@ -202,8 +202,8 @@ class PackageInstallerSessionTest {
        whenever(mockPs.isSystem).thenReturn(false)
        whenever(mSnapshot.getPackageStateInternal(eq(testPackageName), eq(Process.SYSTEM_UID)))
            .thenReturn(mockPs)
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(
            testPackageName, mSnapshot)).isFalse()
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(testPackageName))
            .isFalse()
    }

    @Test
@@ -230,8 +230,8 @@ class PackageInstallerSessionTest {
        whenever(mSnapshot.checkUidPermission(anyString(), eq(updateOwnerUid)))
            .thenReturn(PackageManager.PERMISSION_GRANTED)
        val session = createSession(installerPackageName = updateOwnerName)
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(
            verifierPackageName, mSnapshot)).isTrue()
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(verifierPackageName))
            .isTrue()
    }

    @Test
@@ -248,8 +248,8 @@ class PackageInstallerSessionTest {
        whenever(mMockPackageManagerInternal.getSystemAppUpdateOwnerPackageName(
        eq(verifierPackageName))).thenReturn(null)
        val session = createSession(installerPackageName = updateOwnerName)
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(
            updateOwnerName, mSnapshot)).isFalse()
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(updateOwnerName))
            .isFalse()
    }

    @Test
@@ -272,8 +272,8 @@ class PackageInstallerSessionTest {
        whenever(mSnapshot.checkUidPermission(anyString(), eq(updateOwnerUid)))
            .thenReturn(PackageManager.PERMISSION_GRANTED)
        val session = createSession(installerPackageName = updateOwnerName)
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(
            updateOwnerName, mSnapshot)).isTrue()
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(updateOwnerName))
            .isTrue()
    }

    @Test
@@ -315,7 +315,7 @@ class PackageInstallerSessionTest {

        val session = createSession(installerPackageName = updateOwnerName)
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(
            emergencyInstallerPackageName, mSnapshot)).isTrue()
            emergencyInstallerPackageName)).isTrue()
    }

    @Test
@@ -356,8 +356,8 @@ class PackageInstallerSessionTest {
            .thenReturn(PackageManager.PERMISSION_GRANTED)

        val session = createSession(installerPackageName = emergencyInstallerPackageName)
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(
            updateOwnerName, mSnapshot)).isTrue()
        assertThat(session.shouldAllowDeveloperVerificationEmergencyBypass(updateOwnerName))
            .isTrue()
    }

    @RequiresFlagsEnabled(Flags.FLAG_VERIFICATION_SERVICE)