[RESTRICT AUTOMERGE] Disallow PINNED in setLaunchWindowingMode
- Throw security exception if setLaunchWindowingMode is called with
WINDOWING_MODE_PINNED
- Deprecated also test cases that are irrelevant after this change
Flag: EXEMPT security fix
Bug: 388029380
Test: atest PinnedStackTests \
SafeActivityOptionsTest \
TaskLaunchParamsModifierTests
Change-Id: I9d37d41af3d86f785fd5d85503b544552b39cac4
diff --git a/services/core/java/com/android/server/wm/SafeActivityOptions.java b/services/core/java/com/android/server/wm/SafeActivityOptions.java
index 6d1b5fa..e43fe14 100644
--- a/services/core/java/com/android/server/wm/SafeActivityOptions.java
+++ b/services/core/java/com/android/server/wm/SafeActivityOptions.java
@@ -24,6 +24,7 @@
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
+import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.activityTypeToString;
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -371,6 +372,17 @@
throw new SecurityException(msg);
}
+ // setLaunchWindowingMode(PINNED) is not allowed, use ActivityOptions#makeLaunchIntoPip
+ // instead which is a public API.
+ if (options.getLaunchWindowingMode() == WINDOWING_MODE_PINNED) {
+ final String msg = "Permission Denial: starting " + getIntentString(intent)
+ + " from " + callerApp + " (pid=" + callingPid
+ + ", uid=" + callingUid + ") with"
+ + " setLaunchWindowingMode=PINNED";
+ Slog.w(TAG, msg);
+ throw new SecurityException(msg);
+ }
+
final int activityType = options.getLaunchActivityType();
if (activityType != ACTIVITY_TYPE_UNDEFINED
&& !isSystemOrSystemUI(callingPid, callingUid)) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
index 1188f49..6f7cd1e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
@@ -612,42 +612,6 @@
WINDOWING_MODE_FULLSCREEN);
}
-
- @Test
- public void testKeepsPictureInPictureLaunchModeInOptions() {
- final TestDisplayContent freeformDisplay = createNewDisplayContent(
- WINDOWING_MODE_FREEFORM);
-
- final ActivityOptions options = ActivityOptions.makeBasic();
- options.setLaunchWindowingMode(WINDOWING_MODE_PINNED);
-
- mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
-
- assertEquals(RESULT_CONTINUE,
- new CalculateRequestBuilder().setOptions(options).calculate());
-
- assertEquivalentWindowingMode(WINDOWING_MODE_PINNED, mResult.mWindowingMode,
- WINDOWING_MODE_FREEFORM);
- }
-
- @Test
- public void testKeepsPictureInPictureLaunchModeWithBoundsInOptions() {
- final TestDisplayContent freeformDisplay = createNewDisplayContent(
- WINDOWING_MODE_FREEFORM);
-
- final ActivityOptions options = ActivityOptions.makeBasic();
- options.setLaunchWindowingMode(WINDOWING_MODE_PINNED);
- options.setLaunchBounds(new Rect(0, 0, 100, 100));
-
- mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
-
- assertEquals(RESULT_CONTINUE,
- new CalculateRequestBuilder().setOptions(options).calculate());
-
- assertEquivalentWindowingMode(WINDOWING_MODE_PINNED, mResult.mWindowingMode,
- WINDOWING_MODE_FREEFORM);
- }
-
@Test
public void testKeepsFullscreenLaunchModeInOptionsOnNonFreeformDisplay() {
final ActivityOptions options = ActivityOptions.makeBasic();