diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2022-02-11 07:09:24 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-02-11 07:09:24 +0000 |
commit | 12fb3fb9f60cf3ea4713f1c47e8387d1a584ad22 (patch) | |
tree | 10e6cd860cde07d869d1d9d0347914e0088a6ef6 | |
parent | b0cb54d59601ee0b3e921cce242f09f48b8ae2fd (diff) | |
parent | 6b2d0885cb1cd2598d24808042d6a21e31f3ee1f (diff) | |
download | base-12fb3fb9f60cf3ea4713f1c47e8387d1a584ad22.tar.gz |
Merge "Revert "[RESTRICT AUTOMERGE]Only allow system and same app to apply relinquishTaskIdentity"" into rvc-dev
-rw-r--r-- | services/core/java/com/android/server/wm/Task.java | 49 | ||||
-rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java | 46 |
2 files changed, 11 insertions, 84 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 9708c98fbb70..98df383579c9 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -119,7 +119,6 @@ import android.graphics.Point; import android.graphics.Rect; import android.os.Debug; import android.os.IBinder; -import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; import android.os.Trace; @@ -228,11 +227,6 @@ class Task extends WindowContainer<WindowContainer> { // Do not move the stack as a part of reparenting static final int REPARENT_LEAVE_STACK_IN_PLACE = 2; - /** - * Used to identify if the activity that is installed from device's system image. - */ - boolean mIsEffectivelySystemApp; - String affinity; // The affinity name for this task, or null; may change identity. String rootAffinity; // Initial base affinity, or null; does not change from initial root. String mWindowLayoutAffinity; // Launch param affinity of this task or null. Used when saving @@ -483,24 +477,11 @@ class Task extends WindowContainer<WindowContainer> { if (r.finishing) return false; - if (mRoot == null || mRoot.finishing) { - // Set this as the candidate root since it isn't finishing. - mRoot = r; - } - - final int uid = mRoot == r ? effectiveUid : r.info.applicationInfo.uid; - if (ignoreRelinquishIdentity - || (mRoot.info.flags & FLAG_RELINQUISH_TASK_IDENTITY) == 0 - || (mRoot.info.applicationInfo.uid != Process.SYSTEM_UID - && !mRoot.info.applicationInfo.isSystemApp() - && mRoot.info.applicationInfo.uid != uid)) { - // No need to relinquish identity, end search. - return true; - } - - // Relinquish to next activity + // Set this as the candidate root since it isn't finishing. mRoot = r; - return false; + + // Only end search if we are ignore relinquishing identity or we are not relinquishing. + return ignoreRelinquishIdentity || (r.info.flags & FLAG_RELINQUISH_TASK_IDENTITY) == 0; } } @@ -948,20 +929,10 @@ class Task extends WindowContainer<WindowContainer> { * @param info The activity info which could be different from {@code r.info} if set. */ void setIntent(ActivityRecord r, @Nullable Intent intent, @Nullable ActivityInfo info) { - boolean updateIdentity = false; - if (this.intent == null) { - updateIdentity = true; - } else if (!mNeverRelinquishIdentity) { - final ActivityInfo activityInfo = info != null ? info : r.info; - updateIdentity = (effectiveUid == Process.SYSTEM_UID || mIsEffectivelySystemApp - || effectiveUid == activityInfo.applicationInfo.uid); - } - if (updateIdentity) { - mCallingUid = r.launchedFromUid; - mCallingPackage = r.launchedFromPackage; - mCallingFeatureId = r.launchedFromFeatureId; - setIntent(intent != null ? intent : r.intent, info != null ? info : r.info); - } + mCallingUid = r.launchedFromUid; + mCallingPackage = r.launchedFromPackage; + mCallingFeatureId = r.launchedFromFeatureId; + setIntent(intent != null ? intent : r.intent, info != null ? info : r.info); setLockTaskAuth(r); final WindowContainer parent = getParent(); @@ -977,7 +948,8 @@ class Task extends WindowContainer<WindowContainer> { private void setIntent(Intent _intent, ActivityInfo info) { final boolean isLeaf = isLeafTask(); if (intent == null) { - mNeverRelinquishIdentity = (info.flags & FLAG_RELINQUISH_TASK_IDENTITY) == 0; + mNeverRelinquishIdentity = + (info.flags & FLAG_RELINQUISH_TASK_IDENTITY) == 0; } else if (mNeverRelinquishIdentity && isLeaf) { return; } @@ -990,7 +962,6 @@ class Task extends WindowContainer<WindowContainer> { rootAffinity = affinity; } effectiveUid = info.applicationInfo.uid; - mIsEffectivelySystemApp = info.applicationInfo.isSystemApp(); stringName = null; if (info.targetActivity == null) { diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java index 95784468efdd..fb24d868e970 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java @@ -591,14 +591,13 @@ public class TaskRecordTests extends ActivityTestsBase { // one above as finishing. final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; - task.effectiveUid = activity0.getUid(); final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); activity1.finishing = true; new ActivityBuilder(mService).setTask(task).build(); assertEquals("The first non-finishing activity and non-relinquishing task identity " + "must be reported.", task.getChildAt(2), task.getRootActivity( - false /*ignoreRelinquishIdentity*/, true /*setToBottomIfNone*/)); + false /*ignoreRelinquishIdentity*/, true /*setToBottomIfNone*/)); } /** @@ -626,7 +625,6 @@ public class TaskRecordTests extends ActivityTestsBase { // Set relinquishTaskIdentity for all activities in the task final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; - task.effectiveUid = activity0.getUid(); final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); activity1.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; @@ -779,7 +777,6 @@ public class TaskRecordTests extends ActivityTestsBase { // Make the current root activity relinquish task identity final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; - task.effectiveUid = activity0.getUid(); // Add an extra activity on top - this will be the new root final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); // Add one more on top @@ -874,47 +871,6 @@ public class TaskRecordTests extends ActivityTestsBase { verify(task).setIntent(eq(activity0)); } - /** - * Test {@link Task#updateEffectiveIntent()} when activity with relinquishTaskIdentity but - * another with different uid. This should make the task use the root activity when updating the - * intent. - */ - @Test - public void testUpdateEffectiveIntent_relinquishingWithDifferentUid() { - final ActivityRecord activity0 = new ActivityBuilder(mService) - .setActivityFlags(FLAG_RELINQUISH_TASK_IDENTITY).setCreateTask(true).build(); - final Task task = activity0.getTask(); - - // Add an extra activity on top - new ActivityBuilder(mService).setUid(11).setTask(task).build(); - - spyOn(task); - task.updateEffectiveIntent(); - verify(task).setIntent(eq(activity0)); - } - - /** - * Test {@link Task#updateEffectiveIntent()} with activities set as relinquishTaskIdentity. - * This should make the task use the topmost activity when updating the intent. - */ - @Test - public void testUpdateEffectiveIntent_relinquishingMultipleActivities() { - final ActivityRecord activity0 = new ActivityBuilder(mService) - .setActivityFlags(FLAG_RELINQUISH_TASK_IDENTITY).setCreateTask(true).build(); - final Task task = activity0.getTask(); - task.effectiveUid = activity0.getUid(); - // Add an extra activity on top - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); - activity1.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; - - // Add an extra activity on top - final ActivityRecord activity2 = new ActivityBuilder(mService).setTask(task).build(); - - spyOn(task); - task.updateEffectiveIntent(); - verify(task).setIntent(eq(activity2)); - } - @Test public void testSaveLaunchingStateWhenConfigurationChanged() { LaunchParamsPersister persister = mService.mStackSupervisor.mLaunchParamsPersister; |