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

Commit c429127d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add calling package name into PACKAGE_CHANGED broadcast trace data." into main

parents 2c01a0d1 8302b982
Loading
Loading
Loading
Loading
+17 −10
Original line number Diff line number Diff line
@@ -360,13 +360,17 @@ public final class BroadcastHelper {
            @Nullable SparseArray<int[]> broadcastAllowList,
            @NonNull AndroidPackage pkg,
            @NonNull String[] sharedUidPackages,
            @NonNull String reasonForTrace) {
            @NonNull String reasonForTrace,
            int callingUidForTrace) {
        final boolean isForWholeApp = componentNames.contains(packageName);
        final String callingPackageNameForTrace = mContext.getPackageManager().getNameForUid(
                callingUidForTrace);
        if (isForWholeApp || !android.content.pm.Flags.reduceBroadcastsForComponentStateChanges()) {
            tracePackageChangedBroadcastEvent(
                    android.content.pm.Flags.reduceBroadcastsForComponentStateChanges(),
                    reasonForTrace, packageName, "<implicit>" /* targetPackageName */,
                    "whole" /* targetComponent */, componentNames.size());
                    "whole" /* targetComponent */, componentNames.size(),
                    callingPackageNameForTrace);
            sendPackageChangedBroadcastWithPermissions(packageName, dontKillApp, componentNames,
                    packageUid, reason, userIds, instantUserIds, broadcastAllowList,
                    null /* targetPackageName */, null /* requiredPermissions */);
@@ -390,7 +394,7 @@ public final class BroadcastHelper {
            if (!TextUtils.equals(packageName, "android")) {
                tracePackageChangedBroadcastEvent(true /* applyFlag */, reasonForTrace, packageName,
                        "android" /* targetPackageName */, "notExported" /* targetComponent */,
                        notExportedComponentNames.size());
                        notExportedComponentNames.size(), callingPackageNameForTrace);
                sendPackageChangedBroadcastWithPermissions(packageName, dontKillApp,
                        notExportedComponentNames, packageUid, reason, userIds, instantUserIds,
                        broadcastAllowList, "android" /* targetPackageName */,
@@ -401,7 +405,7 @@ public final class BroadcastHelper {
            // Second, send the PACKAGE_CHANGED broadcast to the application itself.
            tracePackageChangedBroadcastEvent(true /* applyFlag */, reasonForTrace, packageName,
                    packageName /* targetPackageName */, "notExported" /* targetComponent */,
                    notExportedComponentNames.size());
                    notExportedComponentNames.size(), callingPackageNameForTrace);
            sendPackageChangedBroadcastWithPermissions(packageName, dontKillApp,
                    notExportedComponentNames, packageUid, reason, userIds, instantUserIds,
                    broadcastAllowList, packageName /* targetPackageName */,
@@ -415,7 +419,7 @@ public final class BroadcastHelper {
                }
                tracePackageChangedBroadcastEvent(true /* applyFlag */, reasonForTrace, packageName,
                        sharedPackage /* targetPackageName */, "notExported" /* targetComponent */,
                        notExportedComponentNames.size());
                        notExportedComponentNames.size(), callingPackageNameForTrace);
                sendPackageChangedBroadcastWithPermissions(packageName, dontKillApp,
                        notExportedComponentNames, packageUid, reason, userIds, instantUserIds,
                        broadcastAllowList, sharedPackage /* targetPackageName */,
@@ -427,7 +431,7 @@ public final class BroadcastHelper {
        if (!exportedComponentNames.isEmpty()) {
            tracePackageChangedBroadcastEvent(true /* applyFlag */, reasonForTrace, packageName,
                    "<implicit>" /* targetPackageName */, "exported" /* targetComponent */,
                    exportedComponentNames.size());
                    exportedComponentNames.size(), callingPackageNameForTrace);
            sendPackageChangedBroadcastWithPermissions(packageName, dontKillApp,
                    exportedComponentNames, packageUid, reason, userIds, instantUserIds,
                    broadcastAllowList, null /* targetPackageName */,
@@ -770,7 +774,8 @@ public final class BroadcastHelper {
                            dontKillApp,
                            new ArrayList<>(Collections.singletonList(pkg.getPackageName())),
                            pkg.getUid(), null /* reason */,
                            "static_shared_library_changed" /* reasonForTrace */);
                            "static_shared_library_changed" /* reasonForTrace */,
                            Process.SYSTEM_UID);
                }
            }
        }
@@ -962,7 +967,8 @@ public final class BroadcastHelper {
                                     @NonNull ArrayList<String> componentNames,
                                     int packageUid,
                                     @NonNull String reason,
                                     @NonNull String reasonForTrace) {
                                     @NonNull String reasonForTrace,
                                     int callingUidForTrace) {
        PackageStateInternal setting = snapshot.getPackageStateInternal(packageName,
                Process.SYSTEM_UID);
        if (setting == null || setting.getPkg() == null) {
@@ -980,7 +986,7 @@ public final class BroadcastHelper {
        mHandler.post(() -> sendPackageChangedBroadcastInternal(
                packageName, dontKillApp, componentNames, packageUid, reason, userIds,
                instantUserIds, broadcastAllowList, setting.getPkg(),
                sharedUserPackages, reasonForTrace));
                sharedUserPackages, reasonForTrace, callingUidForTrace));
        mPackageMonitorCallbackHelper.notifyPackageChanged(packageName, dontKillApp, componentNames,
                packageUid, reason, userIds, instantUserIds, broadcastAllowList, mHandler);
    }
@@ -1277,7 +1283,7 @@ public final class BroadcastHelper {
    private static void tracePackageChangedBroadcastEvent(boolean applyFlag,
            @NonNull String reasonForTrace, @Nullable String packageName,
            @Nullable String targetPackageName, @Nullable String targetComponent,
            int componentSize) {
            int componentSize, @Nullable String callingPackageNameForTrace) {

        if (!Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) {
            return;
@@ -1291,6 +1297,7 @@ public final class BroadcastHelper {
        builder.append(",tpn="); builder.append(targetPackageName);
        builder.append(",tc="); builder.append(targetComponent);
        builder.append(",cs="); builder.append(componentSize);
        builder.append(",cpnft="); builder.append(callingPackageNameForTrace);

        Trace.instant(Trace.TRACE_TAG_SYSTEM_SERVER, builder.toString());
    }
+2 −2
Original line number Diff line number Diff line
@@ -2983,7 +2983,7 @@ final class InstallPackageHelper {
        }
    }

    public void sendPendingBroadcasts(String reasonForTrace) {
    public void sendPendingBroadcasts(String reasonForTrace, int callingUidForTrace) {
        String[] packages;
        ArrayList<String>[] components;
        int numBroadcasts = 0, numUsers;
@@ -3028,7 +3028,7 @@ final class InstallPackageHelper {
        for (int i = 0; i < numBroadcasts; i++) {
            mBroadcastHelper.sendPackageChangedBroadcast(snapshot, packages[i],
                    true /* dontKillApp */, components[i], uids[i], null /* reason */,
                    reasonForTrace);
                    reasonForTrace, callingUidForTrace);
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ final class PackageHandler extends Handler {
    void doHandleMessage(Message msg) {
        switch (msg.what) {
            case SEND_PENDING_BROADCAST: {
                mPm.sendPendingBroadcasts((String) msg.obj);
                mPm.sendPendingBroadcasts((String) msg.obj, msg.arg1);
                break;
            }
            case POST_INSTALL: {
+21 −15
Original line number Diff line number Diff line
@@ -3503,7 +3503,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
     * if the resetEnabledSettingsOnAppDataCleared is {@code true}.
     */
    @GuardedBy("mLock")
    private void resetComponentEnabledSettingsIfNeededLPw(String packageName, int userId) {
    private void resetComponentEnabledSettingsIfNeededLPw(String packageName, int userId,
            int callingUid) {
        final AndroidPackage pkg = packageName != null ? mPackages.get(packageName) : null;
        if (pkg == null || !pkg.isResetEnabledSettingsOnAppDataCleared()) {
            return;
@@ -3542,9 +3543,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        mPendingBroadcasts.addComponents(userId, packageName, updatedComponents);
        if (!mHandler.hasMessages(SEND_PENDING_BROADCAST)) {
            mHandler.sendMessageDelayed(
                    mHandler.obtainMessage(SEND_PENDING_BROADCAST,
                            "reset_component_state_changed" /* obj */),
                    BROADCAST_DELAY);
                    mHandler.obtainMessage(SEND_PENDING_BROADCAST, callingUid, 0 /* arg2 */,
                            "reset_component_state_changed" /* obj */), BROADCAST_DELAY);
        }
    }

@@ -3841,7 +3841,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        mPendingBroadcasts.addComponent(userId, componentPkgName, componentName.getClassName());

        if (!mHandler.hasMessages(SEND_PENDING_BROADCAST)) {
            mHandler.sendMessageDelayed(mHandler.obtainMessage(SEND_PENDING_BROADCAST,
            mHandler.sendMessageDelayed(
                    mHandler.obtainMessage(SEND_PENDING_BROADCAST, callingUid, 0 /* arg2 */,
                            "component_label_icon_changed" /* obj */), BROADCAST_DELAY);
        }
    }
@@ -4101,8 +4102,10 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                    final long broadcastDelay = SystemClock.uptimeMillis() > mServiceStartWithDelay
                            ? BROADCAST_DELAY
                            : BROADCAST_DELAY_DURING_STARTUP;
                    mHandler.sendMessageDelayed(mHandler.obtainMessage(SEND_PENDING_BROADCAST,
                            "component_state_changed" /* obj */), broadcastDelay);
                    mHandler.sendMessageDelayed(
                            mHandler.obtainMessage(SEND_PENDING_BROADCAST, callingUid,
                                    0 /* arg2 */, "component_state_changed" /* obj */),
                            broadcastDelay);
                }
            }
        }
@@ -4121,7 +4124,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                        userId, pkgSettings.get(packageName).getAppId());
                mBroadcastHelper.sendPackageChangedBroadcast(newSnapshot, packageName,
                        false /* dontKillApp */, components, packageUid, null /* reason */,
                        "component_state_changed" /* reasonForTrace */);
                        "component_state_changed" /* reasonForTrace */, callingUid);
            }
        } finally {
            Binder.restoreCallingIdentity(callingId);
@@ -4349,7 +4352,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                        true /* dontKillApp */,
                        new ArrayList<>(Collections.singletonList(pkg.getPackageName())),
                        pkg.getUid(),
                        Intent.ACTION_OVERLAY_CHANGED, "overlay_changed" /* reasonForTrace */);
                        Intent.ACTION_OVERLAY_CHANGED, "overlay_changed" /* reasonForTrace */,
                        Process.SYSTEM_UID);
            }
        }, overlayFilter);

@@ -4847,7 +4851,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                        mInstantAppRegistry.deleteInstantApplicationMetadata(packageName, userId);
                        synchronized (mLock) {
                            if (succeeded) {
                                resetComponentEnabledSettingsIfNeededLPw(packageName, userId);
                                resetComponentEnabledSettingsIfNeededLPw(packageName, userId,
                                        callingUid);
                            }
                        }
                    }
@@ -6357,7 +6362,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        @Override
        public void setMimeGroup(String packageName, String mimeGroup, List<String> mimeTypes) {
            final Computer snapshot = snapshotComputer();
            enforceOwnerRights(snapshot, packageName, Binder.getCallingUid());
            final int callingUid = Binder.getCallingUid();
            enforceOwnerRights(snapshot, packageName, callingUid);
            mimeTypes = CollectionUtils.emptyIfNull(mimeTypes);
            for (int i = 0; i < mimeTypes.size(); i++) {
                if (mimeTypes.get(i).length() > 255) {
@@ -6401,7 +6407,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                            final int packageUid = UserHandle.getUid(userIds[i], appId);
                            mBroadcastHelper.sendPackageChangedBroadcast(snapShot, packageName,
                                    true /* dontKillApp */, components, packageUid, reason,
                                    "mime_group_changed" /* reasonForTrace */);
                                    "mime_group_changed" /* reasonForTrace */, callingUid);
                        }
                    }
                });
@@ -8196,8 +8202,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        mRemovePackageHelper.cleanUpForMoveInstall(volumeUuid, packageName, fromCodePath);
    }

    void sendPendingBroadcasts(String reasonForTrace) {
        mInstallPackageHelper.sendPendingBroadcasts(reasonForTrace);
    void sendPendingBroadcasts(String reasonForTrace, int callingUidForTrace) {
        mInstallPackageHelper.sendPendingBroadcasts(reasonForTrace, callingUidForTrace);
    }

    void handlePackagePostInstall(@NonNull InstallRequest request, boolean launchedForRestore) {
+3 −1
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.os.Handler;
import android.os.Message;
import android.os.UserHandle;
@@ -233,6 +234,7 @@ public class BroadcastHelperTest {

        mBroadcastHelper.sendPackageChangedBroadcast(mMockSnapshot,
                PACKAGE_CHANGED_TEST_PACKAGE_NAME, true /* dontKillApp */, componentNames,
                UserHandle.USER_SYSTEM, "test" /* reason */, "test" /* reasonForTrace */);
                UserHandle.USER_SYSTEM, "test" /* reason */, "test" /* reasonForTrace */,
                Binder.getCallingUid());
    }
}