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

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

Merge "Simplify unit test of activity launch ability on trusted display"

parents ac2206c5 22269d3a
Loading
Loading
Loading
Loading
+19 −48
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SECONDARY_
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.reset;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
@@ -38,13 +39,8 @@ import static org.mockito.ArgumentMatchers.eq;

import android.app.WaitResult;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
import android.media.ImageReader;
import android.platform.test.annotations.Presubmit;
import android.view.Display;
import android.view.DisplayInfo;

import androidx.test.filters.MediumTest;

@@ -180,53 +176,28 @@ public class ActivityStackSupervisorTests extends WindowTestsBase {
                eq(true) /* focused */);
    }

    /**
     * Ensures that a trusted display can launch arbitrary activity and an untrusted display can't.
     */
    @Test
    /** Ensures that a trusted virtual display can launch arbitrary activities. */
    public void testTrustedVirtualDisplayCanLaunchActivities() {
        final DisplayContent newDisplay = addNewDisplayContentAt(DisplayContent.POSITION_TOP);
        final Task stack = new StackBuilder(mRootWindowContainer)
                .setDisplay(newDisplay).build();
        final ActivityRecord unresizableActivity = stack.getTopNonFinishingActivity();
        VirtualDisplay virtualDisplay = createVirtualDisplay(true);
        final boolean allowed = mSupervisor.isCallerAllowedToLaunchOnDisplay(1234, 1234,
                virtualDisplay.getDisplay().getDisplayId(), unresizableActivity.info);

        assertThat(allowed).isTrue();

        virtualDisplay.release();
    }

    @Test
    /** Ensures that an untrusted virtual display cannot launch arbitrary activities. */
    public void testUntrustedVirtualDisplayCannotLaunchActivities() {
        final DisplayContent newDisplay = addNewDisplayContentAt(DisplayContent.POSITION_TOP);
        final Task stack = new StackBuilder(mRootWindowContainer)
                .setDisplay(newDisplay).build();
        final ActivityRecord unresizableActivity = stack.getTopNonFinishingActivity();
        VirtualDisplay virtualDisplay = createVirtualDisplay(false);
        final boolean allowed = mSupervisor.isCallerAllowedToLaunchOnDisplay(1234, 1234,
                virtualDisplay.getDisplay().getDisplayId(), unresizableActivity.info);

        assertThat(allowed).isFalse();
    public void testDisplayCanLaunchActivities() {
        final Display display = mDisplayContent.mDisplay;
        // An empty info without FLAG_ALLOW_EMBEDDED.
        final ActivityInfo activityInfo = new ActivityInfo();
        final int callingPid = 12345;
        final int callingUid = 12345;
        spyOn(display);

        virtualDisplay.release();
    }
        doReturn(true).when(display).isTrusted();
        final boolean allowedOnTrusted = mSupervisor.isCallerAllowedToLaunchOnDisplay(callingPid,
                callingUid, display.getDisplayId(), activityInfo);

    private VirtualDisplay createVirtualDisplay(boolean trusted) {
        final DisplayManager dm = mContext.getSystemService(DisplayManager.class);
        final DisplayInfo displayInfo = new DisplayInfo();
        final Display defaultDisplay = dm.getDisplay(Display.DEFAULT_DISPLAY);
        defaultDisplay.getDisplayInfo(displayInfo);
        int flags = DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC;
        if (trusted) {
            flags |= DisplayManager.VIRTUAL_DISPLAY_FLAG_TRUSTED;
        }
        assertThat(allowedOnTrusted).isTrue();

        final ImageReader imageReader = ImageReader.newInstance(
                displayInfo.logicalWidth, displayInfo.logicalHeight, PixelFormat.RGBA_8888, 2);
        doReturn(false).when(display).isTrusted();
        final boolean allowedOnUntrusted = mSupervisor.isCallerAllowedToLaunchOnDisplay(callingPid,
                callingUid, display.getDisplayId(), activityInfo);

        return dm.createVirtualDisplay("virtualDisplay", displayInfo.logicalWidth,
                displayInfo.logicalHeight,
                displayInfo.logicalDensityDpi, imageReader.getSurface(), flags);
        assertThat(allowedOnUntrusted).isFalse();
    }
}