Merge "Provide referrer package with respect to package visibility" into sc-qpr1-dev am: 40c778d3c2

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

Change-Id: If0e629f213bf7e6384cd4318fa1864a38d7f1493
This commit is contained in:
Riddle Hsu
2021-08-31 15:32:16 +00:00
committed by Automerger Merge Worker
4 changed files with 45 additions and 4 deletions

View File

@@ -4307,7 +4307,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// The activity now gets access to the data associated with this Intent.
mAtmService.mUgmInternal.grantUriPermissionUncheckedFromIntent(intentGrants,
getUriPermissionsLocked());
final ReferrerIntent rintent = new ReferrerIntent(intent, referrer);
final ReferrerIntent rintent = new ReferrerIntent(intent, getFilteredReferrer(referrer));
boolean unsent = true;
final boolean isTopActivityWhileSleeping = isTopRunningActivity() && isSleeping();
@@ -8814,6 +8814,19 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return launchedFromUid;
}
/**
* Gets the referrer package name with respect to package visibility. This method returns null
* if the given package is not visible to this activity.
*/
String getFilteredReferrer(String referrerPackage) {
if (referrerPackage == null || (!referrerPackage.equals(packageName)
&& mWmService.mPmInternal.filterAppAccess(
referrerPackage, info.applicationInfo.uid, mUserId))) {
return null;
}
return referrerPackage;
}
/**
* Determines whether this ActivityRecord can turn the screen on. It checks whether the flag
* {@link ActivityRecord#getTurnScreenOnFlag} is set and checks whether the ActivityRecord

View File

@@ -857,9 +857,9 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
// and override configs.
mergedConfiguration.getGlobalConfiguration(),
mergedConfiguration.getOverrideConfiguration(), r.compat,
r.launchedFromPackage, task.voiceInteractor, proc.getReportedProcState(),
r.getSavedState(), r.getPersistentSavedState(), results, newIntents,
r.takeOptions(), isTransitionForward,
r.getFilteredReferrer(r.launchedFromPackage), task.voiceInteractor,
proc.getReportedProcState(), r.getSavedState(), r.getPersistentSavedState(),
results, newIntents, r.takeOptions(), isTransitionForward,
proc.createProfilerInfoIfNeeded(), r.assistToken, activityClientController,
r.createFixedRotationAdjustmentsIfNeeded(), r.shareableActivityToken,
r.getLaunchedFromBubble(), fragmentToken));

View File

@@ -30,6 +30,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -40,8 +41,10 @@ import static org.mockito.Mockito.timeout;
import android.app.WaitResult;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.ConditionVariable;
import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
import android.view.Display;
@@ -190,6 +193,24 @@ public class ActivityTaskSupervisorTests extends WindowTestsBase {
verify(taskChangeNotifier, never()).notifyActivityDismissingDockedRootTask();
}
/** Ensures that the calling package name passed to client complies with package visibility. */
@Test
public void testFilteredReferred() {
final ActivityRecord activity = new ActivityBuilder(mAtm)
.setLaunchedFromPackage("other.package").setCreateTask(true).build();
assertNotNull(activity.launchedFromPackage);
try {
mSupervisor.realStartActivityLocked(activity, activity.app, false /* andResume */,
false /* checkConfig */);
} catch (RemoteException ignored) {
}
verify(activity).getFilteredReferrer(eq(activity.launchedFromPackage));
activity.deliverNewIntentLocked(ActivityBuilder.DEFAULT_FAKE_UID,
new Intent(), null /* intentGrants */, "other.package2");
verify(activity).getFilteredReferrer(eq("other.package2"));
}
/**
* Ensures that notify focus task changes.
*/

View File

@@ -878,6 +878,7 @@ class WindowTestsBase extends SystemServiceTestsBase {
private int mConfigChanges;
private int mLaunchedFromPid;
private int mLaunchedFromUid;
private String mLaunchedFromPackage;
private WindowProcessController mWpc;
private Bundle mIntentExtras;
private boolean mOnTop = false;
@@ -988,6 +989,11 @@ class WindowTestsBase extends SystemServiceTestsBase {
return this;
}
ActivityBuilder setLaunchedFromPackage(String packageName) {
mLaunchedFromPackage = packageName;
return this;
}
ActivityBuilder setUseProcess(WindowProcessController wpc) {
mWpc = wpc;
return this;
@@ -1077,6 +1083,7 @@ class WindowTestsBase extends SystemServiceTestsBase {
final ActivityRecord activity = new ActivityRecord.Builder(mService)
.setLaunchedFromPid(mLaunchedFromPid)
.setLaunchedFromUid(mLaunchedFromUid)
.setLaunchedFromPackage(mLaunchedFromPackage)
.setIntent(intent)
.setActivityInfo(aInfo)
.setActivityOptions(options)