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

Commit dd04535e authored by Winson's avatar Winson
Browse files

Wire up DomainVerificationService to PackageManagerService

Sets up the callback and the actual service initialization so that
future domain verification changes can access PackageManager APIs.

Exempt-From-Owner-Approval: Already approved by owners on main branch

Bug: 163565712

Test: none, device boots, tested implicitly as part of other changes

Change-Id: Ie75ad0ee002ae92c21387777ff41c2504c69b836
parent 9056557d
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -69,6 +69,9 @@ import android.content.pm.IShortcutService;
import android.content.pm.LauncherApps;
import android.content.pm.PackageManager;
import android.content.pm.ShortcutManager;
import android.content.pm.domain.verify.DomainVerificationManager;
import android.content.pm.domain.verify.DomainVerificationManagerImpl;
import android.content.pm.domain.verify.IDomainVerificationManager;
import android.content.res.Resources;
import android.content.rollback.RollbackManagerFrameworkInitializer;
import android.debug.AdbManager;
@@ -1388,6 +1391,20 @@ public final class SystemServiceRegistry {
                    }
                });

        // TODO(b/159952358): Only register this service for the domain verification agent?
        registerService(Context.DOMAIN_VERIFICATION_SERVICE, DomainVerificationManager.class,
                new CachedServiceFetcher<DomainVerificationManager>() {
                    @Override
                    public DomainVerificationManager createService(ContextImpl context)
                            throws ServiceNotFoundException {
                        IBinder binder = ServiceManager.getServiceOrThrow(
                                Context.DOMAIN_VERIFICATION_SERVICE);
                        IDomainVerificationManager service =
                                IDomainVerificationManager.Stub.asInterface(binder);
                        return new DomainVerificationManagerImpl(context, service);
                    }
                });

        sInitializing = true;
        try {
            // Note: the following functions need to be @SystemApis, once they become mainline
+34 −2
Original line number Diff line number Diff line
@@ -377,6 +377,8 @@ import com.android.server.pm.dex.DexManager;
import com.android.server.pm.dex.DexoptOptions;
import com.android.server.pm.dex.PackageDexUsage;
import com.android.server.pm.dex.ViewCompiler;
import com.android.server.pm.domain.verify.DomainVerificationManagerInternal;
import com.android.server.pm.domain.verify.DomainVerificationService;
import com.android.server.pm.intent.verify.legacy.IntentFilterVerificationManager;
import com.android.server.pm.intent.verify.legacy.IntentFilterVerificationParams;
import com.android.server.pm.intent.verify.legacy.IntentVerifierProxy;
@@ -1071,6 +1073,8 @@ public class PackageManagerService extends IPackageManager.Stub
        private final Singleton<ModuleInfoProvider> mModuleInfoProviderProducer;
        private final Singleton<IntentFilterVerificationManager>
                mIntentFilterVerificationManagerProducer;
        private final Singleton<DomainVerificationManagerInternal>
                mDomainVerificationManagerInternalProducer;
        private final Singleton<Handler> mHandlerProducer;
        Injector(Context context, Object lock, Installer installer,
@@ -1101,6 +1105,8 @@ public class PackageManagerService extends IPackageManager.Stub
                Producer<ModuleInfoProvider> moduleInfoProviderProducer,
                Producer<LegacyPermissionManagerInternal> legacyPermissionManagerInternalProducer,
                Producer<IntentFilterVerificationManager> intentFilterVerificationManagerProducer,
                Producer<DomainVerificationManagerInternal>
                        domainVerificationManagerInternalProducer,
                Producer<Handler> handlerProducer,
                SystemWrapper systemWrapper,
                ServiceProducer getLocalServiceProducer,
@@ -1141,6 +1147,8 @@ public class PackageManagerService extends IPackageManager.Stub
            mGetSystemServiceProducer = getSystemServiceProducer;
            mIntentFilterVerificationManagerProducer =
                    new Singleton<>(intentFilterVerificationManagerProducer);
            mDomainVerificationManagerInternalProducer =
                    new Singleton<>(domainVerificationManagerInternalProducer);
            mHandlerProducer = new Singleton<>(handlerProducer);
        }
@@ -1292,6 +1300,10 @@ public class PackageManagerService extends IPackageManager.Stub
            return mIntentFilterVerificationManagerProducer.get(this, mPackageManager);
        }
        public DomainVerificationManagerInternal getDomainVerificationManagerInternal() {
            return mDomainVerificationManagerInternalProducer.get(this, mPackageManager);
        }
        public Handler getHandler() {
            return mHandlerProducer.get(this, mPackageManager);
        }
@@ -1471,7 +1483,11 @@ public class PackageManagerService extends IPackageManager.Stub
    boolean mResolverReplaced = false;
    private final @NonNull IntentFilterVerificationManager mIntentFilterVerificationManager;
    @NonNull
    private final IntentFilterVerificationManager mIntentFilterVerificationManager;
    @NonNull
    private final DomainVerificationManagerInternal mDomainVerificationManager;
    /** The service connection to the ephemeral resolver */
    final InstantAppResolverConnection mInstantAppResolverConnection;
@@ -1801,6 +1817,13 @@ public class PackageManagerService extends IPackageManager.Stub
                }
            };
    private final DomainVerificationConnection mDomainVerificationConnection =
            new DomainVerificationConnection();
    private class DomainVerificationConnection implements
            DomainVerificationService.Connection {
    }
    /**
     * Invalidate the package info cache, which includes updating the cached computer.
     * @hide
@@ -5837,7 +5860,8 @@ public class PackageManagerService extends IPackageManager.Stub
    }
    public static PackageManagerService main(Context context, Installer installer,
            boolean factoryTest, boolean onlyCore) {
            @NonNull DomainVerificationService domainVerificationService, boolean factoryTest,
            boolean onlyCore) {
        // Self-check for initial settings.
        PackageManagerServiceCompilerMapping.checkProperties();
        final TimingsTraceAndSlog t = new TimingsTraceAndSlog(TAG + "Timing",
@@ -5897,6 +5921,7 @@ public class PackageManagerService extends IPackageManager.Stub
                (i, pm) -> new IntentFilterVerificationManager(pm.mContext, i.getHandler(),
                        pm.mIntentFilterVerificationConnection, SystemConfig.getInstance(),
                        i.getUserManagerService()),
                (i, pm) -> domainVerificationService,
                (i, pm) -> {
                    HandlerThread thread = new ServiceThread(TAG,
                            Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/);
@@ -6075,6 +6100,7 @@ public class PackageManagerService extends IPackageManager.Stub
        mSettings = injector.getSettings();
        mUserManager = injector.getUserManagerService();
        mIntentFilterVerificationManager = injector.getIntentFilterVerificationManager();
        mDomainVerificationManager = injector.getDomainVerificationManagerInternal();
        mHandler = injector.getHandler();
        mApexManager = testParams.apexManager;
@@ -6322,6 +6348,7 @@ public class PackageManagerService extends IPackageManager.Stub
            mProcessLoggingHandler = new ProcessLoggingHandler();
            Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT);
            mIntentFilterVerificationManager = injector.getIntentFilterVerificationManager();
            mDomainVerificationManager = injector.getDomainVerificationManagerInternal();
            ArrayMap<String, SystemConfig.SharedLibraryEntry> libConfig
                    = systemConfig.getSharedLibraries();
@@ -27935,6 +27962,11 @@ public class PackageManagerService extends IPackageManager.Stub
                duration);
        return bOptions;
    }
    @NonNull
    public DomainVerificationService.Connection getDomainVerificationConnection() {
        return mDomainVerificationConnection;
    }
}
interface PackageSender {
+6 −3
Original line number Diff line number Diff line
@@ -1067,8 +1067,10 @@ public final class SystemServer implements Dumpable {
                mSystemContext, new Singleton<DomainVerificationService.Connection>() {
            @Override
            protected DomainVerificationService.Connection create() {
                // TODO(b/159952358): Hook up to PackageManagerService
                return null;
                // Deferred retrieval from PackageManagerService, since PMS is initialized after
                // DVS. The alternative would be to expose this through the PackageManagerInternal
                // local service, but making it visible to consumers of that interface isn't useful.
                return mPackageManagerService.getDomainVerificationConnection();
            }
        });
        mSystemServiceManager.startService(domainVerificationService);
@@ -1078,7 +1080,8 @@ public final class SystemServer implements Dumpable {
        try {
            Watchdog.getInstance().pauseWatchingCurrentThread("packagemanagermain");
            mPackageManagerService = PackageManagerService.main(mSystemContext, installer,
                    mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);
                    domainVerificationService, mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF,
                    mOnlyCore);
        } finally {
            Watchdog.getInstance().resumeWatchingCurrentThread("packagemanagermain");
        }
+7 −0
Original line number Diff line number Diff line
@@ -59,11 +59,13 @@ import com.android.server.SystemServerInitThreadPool
import com.android.server.compat.PlatformCompat
import com.android.server.extendedtestutils.wheneverStatic
import com.android.server.pm.dex.DexManager
import com.android.server.pm.domain.verify.DomainVerificationManagerInternal
import com.android.server.pm.parsing.PackageParser2
import com.android.server.pm.parsing.pkg.AndroidPackage
import com.android.server.pm.parsing.pkg.PackageImpl
import com.android.server.pm.parsing.pkg.ParsedPackage
import com.android.server.pm.permission.PermissionManagerServiceInternal
import com.android.server.testutils.TestHandler
import com.android.server.testutils.mock
import com.android.server.testutils.nullable
import com.android.server.testutils.whenever
@@ -183,6 +185,8 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) {
        val dexManager: DexManager = mock()
        val installer: Installer = mock()
        val displayMetrics: DisplayMetrics = mock()
        val domainVerificationManagerInternal: DomainVerificationManagerInternal = mock()
        val handler = TestHandler(null)
    }

    companion object {
@@ -258,6 +262,9 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) {
        whenever(mocks.injector.userManagerInternal).thenReturn(mocks.userManagerInternal)
        whenever(mocks.injector.installer).thenReturn(mocks.installer)
        whenever(mocks.injector.displayMetrics).thenReturn(mocks.displayMetrics)
        whenever(mocks.injector.domainVerificationManagerInternal)
            .thenReturn(mocks.domainVerificationManagerInternal)
        whenever(mocks.injector.handler) { mocks.handler }
        wheneverStatic { SystemConfig.getInstance() }.thenReturn(mocks.systemConfig)
        whenever(mocks.systemConfig.availableFeatures).thenReturn(DEFAULT_AVAILABLE_FEATURES_MAP)
        whenever(mocks.systemConfig.sharedLibraries).thenReturn(DEFAULT_SHARED_LIBRARIES_LIST)