summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
author Hongwei Wang <hwwang@google.com> 2025-06-25 14:52:39 -0700
committer Kampalus <kampalus@protonmail.ch> 2025-09-18 09:06:34 +0200
commit641ad004e1b9e6dae5eaa4182d35f7bd458b7436 (patch)
tree6707dee2439460f1656adc1f35505c01a2c0b017 /services
parent6fed4a4e7e0402ce99896dd8cb2fabed58a7fc89 (diff)
[SP 2025-09-01] [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
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/wm/SafeActivityOptions.java12
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java5
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java36
3 files changed, 17 insertions, 36 deletions
diff --git a/services/core/java/com/android/server/wm/SafeActivityOptions.java b/services/core/java/com/android/server/wm/SafeActivityOptions.java
index 88e534351e2e..73c1357c4a24 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.Manifest.permission.STATUS_BAR_SERVICE;
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;
@@ -372,6 +373,17 @@ public class SafeActivityOptions {
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/SafeActivityOptionsTest.java b/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
index a92fe3afbd78..76be76f85c39 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
@@ -17,6 +17,7 @@
package com.android.server.wm;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
+import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.view.Display.DEFAULT_DISPLAY;
@@ -197,6 +198,10 @@ public class SafeActivityOptionsTest {
activityOptions.setRemoteTransition(remoteTransition);
verifySecureExceptionThrown(activityOptions, taskSupervisor);
+ activityOptions = ActivityOptions.makeBasic();
+ activityOptions.setLaunchWindowingMode(WINDOWING_MODE_PINNED);
+ verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
verifySecureExceptionThrown(activityOptions, taskSupervisor,
mock(TaskDisplayArea.class));
} finally {
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 4568c77204a5..24ca929dd2cd 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
@@ -714,42 +714,6 @@ public class TaskLaunchParamsModifierTests extends
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();