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

Commit ad476304 authored by Victor Hsieh's avatar Victor Hsieh
Browse files

Extract code into methods from recordMeasurementsForAllPackages

Bug: 265244016
Test: Manual
Change-Id: I993686a614624a6eca2fe71942ffd9a26594f9b7
parent 5c85be46
Loading
Loading
Loading
Loading
+89 −60
Original line number Diff line number Diff line
@@ -278,16 +278,54 @@ public class BinaryTransparencyService extends SystemService {
                    + " and is now updated to: " + currentTimeMs);
            mMeasurementsLastRecordedMs = currentTimeMs;

            PackageManager pm = mContext.getPackageManager();
            Set<String> packagesMeasured = new HashSet<>();

            // measure all APEXs first
            if (DEBUG) {
                Slog.d(TAG, "Measuring APEXs...");
            }
            for (PackageInfo packageInfo : getCurrentInstalledApexs()) {
                packagesMeasured.add(packageInfo.packageName);
            List<IBinaryTransparencyService.ApexInfo> allApexInfo = collectAllApexInfo();
            for (IBinaryTransparencyService.ApexInfo apexInfo : allApexInfo) {
                packagesMeasured.add(apexInfo.packageName);

                recordApexInfo(apexInfo);
            }
            if (DEBUG) {
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages after considering APEXs.");
            }

            // proceed with all preloaded apps
            List<IBinaryTransparencyService.AppInfo> allUpdatedPreloadInfo =
                    collectAllUpdatedPreloadInfo(packagesMeasured);
            for (IBinaryTransparencyService.AppInfo appInfo : allUpdatedPreloadInfo) {
                packagesMeasured.add(appInfo.packageName);
                writeAppInfoToLog(appInfo);
            }
            if (DEBUG) {
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages after considering preloads");
            }

            if (CompatChanges.isChangeEnabled(LOG_MBA_INFO)) {
                // lastly measure all newly installed MBAs
                List<IBinaryTransparencyService.AppInfo> allMbaInfo =
                        collectAllMbaInfo(packagesMeasured);
                for (IBinaryTransparencyService.AppInfo appInfo : allUpdatedPreloadInfo) {
                    packagesMeasured.add(appInfo.packageName);
                    writeAppInfoToLog(appInfo);
                }
            }
            if (DEBUG) {
                long timeSpentMeasuring = System.currentTimeMillis() - currentTimeMs;
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages altogether in " + timeSpentMeasuring + "ms");
            }
        }

        private List<IBinaryTransparencyService.ApexInfo> collectAllApexInfo() {
            var results = new ArrayList<IBinaryTransparencyService.ApexInfo>();
            for (PackageInfo packageInfo : getCurrentInstalledApexs()) {
                Bundle apexMeasurement = measurePackage(packageInfo);

                var apexInfo = new IBinaryTransparencyService.ApexInfo();
@@ -299,22 +337,21 @@ public class BinaryTransparencyService extends SystemService {
                apexInfo.signerDigests =
                        computePackageSignerSha256Digests(packageInfo.signingInfo);

                recordApexInfo(apexInfo);
                results.add(apexInfo);
            }
            if (DEBUG) {
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages after considering APEXs.");
            return results;
        }

            // proceed with all preloaded apps
        private List<IBinaryTransparencyService.AppInfo> collectAllUpdatedPreloadInfo(
                Set<String> packagesToSkip) {
            var results = new ArrayList<IBinaryTransparencyService.AppInfo>();
            PackageManager pm = mContext.getPackageManager();
            for (PackageInfo packageInfo : pm.getInstalledPackages(
                    PackageManager.PackageInfoFlags.of(PackageManager.MATCH_FACTORY_ONLY
                            | PackageManager.GET_SIGNING_CERTIFICATES))) {
                if (packagesMeasured.contains(packageInfo.packageName)) {
                if (packagesToSkip.contains(packageInfo.packageName)) {
                    continue;
                }
                packagesMeasured.add(packageInfo.packageName);

                int mbaStatus = MBA_STATUS_PRELOADED;
                if (packageInfo.signingInfo == null) {
                    Slog.d(TAG, "Preload " + packageInfo.packageName  + " at "
@@ -347,24 +384,21 @@ public class BinaryTransparencyService extends SystemService {
                            computePackageSignerSha256Digests(packageInfo.signingInfo);
                    appInfo.mbaStatus = mbaStatus;

                    writeAppInfoToLog(appInfo);
                    results.add(appInfo);
                }
            }
            if (DEBUG) {
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages after considering preloads");
            return results;
        }

            if (CompatChanges.isChangeEnabled(LOG_MBA_INFO)) {
                // lastly measure all newly installed MBAs
        private List<IBinaryTransparencyService.AppInfo> collectAllMbaInfo(
                Set<String> packagesToSkip) {
            var results = new ArrayList<IBinaryTransparencyService.AppInfo>();
            for (PackageInfo packageInfo : getNewlyInstalledMbas()) {
                    if (packagesMeasured.contains(packageInfo.packageName)) {
                if (packagesToSkip.contains(packageInfo.packageName)) {
                    continue;
                }
                    packagesMeasured.add(packageInfo.packageName);

                Bundle packageMeasurement = measurePackage(packageInfo);

                if (DEBUG) {
                    Slog.d(TAG,
                            "Extracting InstallSourceInfo for " + packageInfo.packageName);
@@ -394,14 +428,9 @@ public class BinaryTransparencyService extends SystemService {
                    appInfo.originator = installSourceInfo.getOriginatingPackageName();
                }

                    writeAppInfoToLog(appInfo);
                }
            }
            if (DEBUG) {
                long timeSpentMeasuring = System.currentTimeMillis() - currentTimeMs;
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages altogether in " + timeSpentMeasuring + "ms");
                results.add(appInfo);
            }
            return results;
        }

        private void recordApexInfo(IBinaryTransparencyService.ApexInfo apexInfo) {