Skip to content
Snippets Groups Projects
Commit 09e85086 authored by Nate Myren's avatar Nate Myren Committed by Automerger Merge Worker
Browse files

Merge "Store trusted AttributionSources without token" into udc-dev am: f0ebf508

parents 021ef967 f0ebf508
No related branches found
No related tags found
No related merge requests found
......@@ -211,6 +211,11 @@ public final class AttributionSource implements Parcelable {
token, mAttributionSourceState.renouncedPermissions, getNext());
}
/** @hide */
public AttributionSource withDefaultToken() {
return withToken(sDefaultToken);
}
/** @hide */
public AttributionSource withPid(int pid) {
return new AttributionSource(getUid(), pid, getPackageName(), getAttributionTag(),
......@@ -520,16 +525,28 @@ public final class AttributionSource implements Parcelable {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AttributionSource that = (AttributionSource) o;
return mAttributionSourceState.uid == that.mAttributionSourceState.uid
return equalsExceptToken(that) && Objects.equals(
mAttributionSourceState.token, that.mAttributionSourceState.token);
}
/**
* We store trusted attribution sources without their token (the token is the key to the map)
* to avoid having a strong reference to the token. This means, when checking the equality of a
* supplied AttributionSource in PermissionManagerService.isTrustedAttributionSource, we want to
* compare everything except the token.
*
* @hide
*/
public boolean equalsExceptToken(@Nullable AttributionSource o) {
if (o == null) return false;
return mAttributionSourceState.uid == o.mAttributionSourceState.uid
&& Objects.equals(mAttributionSourceState.packageName,
that.mAttributionSourceState.packageName)
o.mAttributionSourceState.packageName)
&& Objects.equals(mAttributionSourceState.attributionTag,
that.mAttributionSourceState.attributionTag)
&& Objects.equals(mAttributionSourceState.token,
that.mAttributionSourceState.token)
o.mAttributionSourceState.attributionTag)
&& Arrays.equals(mAttributionSourceState.renouncedPermissions,
that.mAttributionSourceState.renouncedPermissions)
&& Objects.equals(getNext(), that.getNext());
o.mAttributionSourceState.renouncedPermissions)
&& Objects.equals(getNext(), o.getNext());
}
@Override
......
......@@ -1001,7 +1001,9 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
synchronized (mLock) {
mAttributions.put(source.getToken(), source);
// Change the token for the AttributionSource we're storing, so that we don't store
// a strong reference to the original token inside the map itself.
mAttributions.put(source.getToken(), source.withDefaultToken());
}
}
......@@ -1009,7 +1011,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
synchronized (mLock) {
final AttributionSource cachedSource = mAttributions.get(source.getToken());
if (cachedSource != null) {
return cachedSource.equals(source);
return cachedSource.equalsExceptToken(source);
}
return false;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment