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

Commit e1077751 authored by Chris Li's avatar Chris Li Committed by Automerger Merge Worker
Browse files

Merge "Don't trigger DisplayAreaOrganizer events for untrusted display" into sc-dev am: bb62a307

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13533680

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ie01a3e170d5236362d7aa2db0ce2153368c1017e
parents aa03589d bb62a307
Loading
Loading
Loading
Loading
+6 −30
Original line number Diff line number Diff line
@@ -811,12 +811,6 @@
      "group": "WM_DEBUG_RECENTS_ANIMATIONS",
      "at": "com\/android\/server\/wm\/RecentsAnimation.java"
    },
    "-1144293044": {
      "message": "SURFACE SET FREEZE LAYER: %s",
      "level": "INFO",
      "group": "WM_SHOW_TRANSACTIONS",
      "at": "com\/android\/server\/wm\/WindowStateAnimator.java"
    },
    "-1142279614": {
      "message": "Looking for focus: %s, flags=%d, canReceive=%b, reason=%s",
      "level": "VERBOSE",
@@ -1261,12 +1255,6 @@
      "group": "WM_DEBUG_STATES",
      "at": "com\/android\/server\/wm\/ActivityTaskSupervisor.java"
    },
    "-639305784": {
      "message": "Could not report config changes to the window token client.",
      "level": "WARN",
      "group": "WM_ERROR",
      "at": "com\/android\/server\/wm\/WindowToken.java"
    },
    "-639217716": {
      "message": "setFocusedApp %s displayId=%d Callers=%s",
      "level": "INFO",
@@ -1417,12 +1405,6 @@
      "group": "WM_DEBUG_KEEP_SCREEN_ON",
      "at": "com\/android\/server\/wm\/RootWindowContainer.java"
    },
    "-477481651": {
      "message": "SURFACE DESTROY PENDING: %s. %s",
      "level": "INFO",
      "group": "WM_SHOW_SURFACE_ALLOC",
      "at": "com\/android\/server\/wm\/WindowStateAnimator.java"
    },
    "-463348344": {
      "message": "Removing and adding activity %s to root task at top callers=%s",
      "level": "INFO",
@@ -1903,12 +1885,6 @@
      "group": "WM_DEBUG_FOCUS_LIGHT",
      "at": "com\/android\/server\/wm\/WindowManagerService.java"
    },
    "123161180": {
      "message": "SEVER CHILDREN",
      "level": "INFO",
      "group": "WM_SHOW_TRANSACTIONS",
      "at": "com\/android\/server\/wm\/WindowSurfaceController.java"
    },
    "140319294": {
      "message": "IME target changed within ActivityRecord",
      "level": "DEBUG",
@@ -2569,12 +2545,6 @@
      "group": "WM_DEBUG_REMOTE_ANIMATIONS",
      "at": "com\/android\/server\/wm\/RemoteAnimationController.java"
    },
    "838570988": {
      "message": "Could not report token removal to the window token client.",
      "level": "WARN",
      "group": "WM_ERROR",
      "at": "com\/android\/server\/wm\/WindowToken.java"
    },
    "872933199": {
      "message": "Changing focus from %s to %s displayId=%d Callers=%s",
      "level": "DEBUG",
@@ -3235,6 +3205,12 @@
      "group": "WM_DEBUG_SYNC_ENGINE",
      "at": "com\/android\/server\/wm\/BLASTSyncEngine.java"
    },
    "1699269281": {
      "message": "Don't organize or trigger events for untrusted displayId=%d",
      "level": "WARN",
      "group": "WM_DEBUG_WINDOW_ORGANIZER",
      "at": "com\/android\/server\/wm\/DisplayAreaOrganizerController.java"
    },
    "1720229827": {
      "message": "Creating animation bounds layer",
      "level": "INFO",
+4 −0
Original line number Diff line number Diff line
@@ -429,6 +429,10 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> {

    void setOrganizer(IDisplayAreaOrganizer organizer, boolean skipDisplayAreaAppeared) {
        if (mOrganizer == organizer) return;
        if (mDisplayContent == null || !mDisplayContent.isTrusted()) {
            throw new IllegalStateException(
                    "Don't organize or trigger events for unavailable or untrusted display.");
        }
        IDisplayAreaOrganizer lastOrganizer = mOrganizer;
        // Update the new display area organizer before calling sendDisplayAreaVanished since it
        // could result in a new SurfaceControl getting created that would notify the old organizer
+16 −4
Original line number Diff line number Diff line
@@ -100,11 +100,19 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl
                }

                final List<DisplayAreaAppearedInfo> displayAreaInfos = new ArrayList<>();
                mService.mRootWindowContainer.forAllDisplayAreas((da) -> {
                mService.mRootWindowContainer.forAllDisplays(dc -> {
                    if (!dc.isTrusted()) {
                        ProtoLog.w(WM_DEBUG_WINDOW_ORGANIZER,
                                "Don't organize or trigger events for untrusted displayId=%d",
                                dc.getDisplayId());
                        return;
                    }
                    dc.forAllDisplayAreas((da) -> {
                        if (da.mFeatureId != feature) return;
                        displayAreaInfos.add(organizeDisplayArea(organizer, da,
                                "DisplayAreaOrganizerController.registerOrganizer"));
                    });
                });

                mOrganizersByFeatureIds.put(feature, organizer);
                return new ParceledListSlice<>(displayAreaInfos);
@@ -148,6 +156,10 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl
                    throw new IllegalArgumentException("createTaskDisplayArea unknown displayId="
                            + displayId);
                }
                if (!display.isTrusted()) {
                    throw new IllegalArgumentException("createTaskDisplayArea untrusted displayId="
                            + displayId);
                }

                // The parentFeatureId can be either a RootDisplayArea or a TaskDisplayArea.
                // Check if there is a RootDisplayArea with the given parentFeatureId.
+21 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -117,6 +118,19 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase {
                () -> registerMockOrganizer(FEATURE_VENDOR_FIRST));
    }

    @Test
    public void testRegisterOrganizer_ignoreUntrustedDisplay() throws RemoteException {
        doReturn(false).when(mDisplayContent).isTrusted();

        final IDisplayAreaOrganizer organizer = createMockOrganizer(new Binder());
        List<DisplayAreaAppearedInfo> infos = mOrganizerController
                .registerOrganizer(organizer, FEATURE_VENDOR_FIRST).getList();

        assertThat(infos).isEmpty();
        verify(organizer, never()).onDisplayAreaAppeared(any(DisplayAreaInfo.class),
                any(SurfaceControl.class));
    }

    @Test
    public void testCreateTaskDisplayArea_topBelowRoot() {
        final String newTdaName = "testTda";
@@ -186,13 +200,20 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase {
    @Test
    public void testCreateTaskDisplayArea_invalidDisplayAndRoot() {
        final IDisplayAreaOrganizer organizer = createMockOrganizer(new Binder());

        assertThrows(IllegalArgumentException.class, () ->
                mOrganizerController.createTaskDisplayArea(
                        organizer, SystemServicesTestRule.sNextDisplayId + 1, FEATURE_ROOT,
                        "testTda"));

        assertThrows(IllegalArgumentException.class, () ->
                mOrganizerController.createTaskDisplayArea(
                        organizer, DEFAULT_DISPLAY, FEATURE_ROOT - 1, "testTda"));

        doReturn(false).when(mDisplayContent).isTrusted();
        assertThrows(IllegalArgumentException.class, () ->
                mOrganizerController.createTaskDisplayArea(
                        organizer, DEFAULT_DISPLAY, FEATURE_ROOT, "testTda"));
    }

    @Test