Redact Account info from getCurrentSyncs am: f39549e389 am: 1a0aed3257

am: 0e7cd0a9fb

* commit '0e7cd0a9fbdcb48c551d54627eb964364dd946d0':
  Redact Account info from getCurrentSyncs
This commit is contained in:
Matthew Williams
2016-01-20 11:41:23 +00:00
committed by android-build-merger
3 changed files with 35 additions and 5 deletions

View File

@@ -24,6 +24,13 @@ import android.os.Parcelable;
* Information about the sync operation that is currently underway.
*/
public class SyncInfo implements Parcelable {
/**
* Used when the caller receiving this object doesn't have permission to access the accounts
* on device.
* @See Manifest.permission.GET_ACCOUNTS
*/
private static final Account REDACTED_ACCOUNT = new Account("*****", "*****");
/** @hide */
public final int authorityId;
@@ -44,6 +51,17 @@ public class SyncInfo implements Parcelable {
*/
public final long startTime;
/**
* Creates a SyncInfo object with an unusable Account. Used when the caller receiving this
* object doesn't have access to the accounts on the device.
* @See Manifest.permission.GET_ACCOUNTS
* @hide
*/
public static SyncInfo createAccountRedacted(
int authorityId, String authority, long startTime) {
return new SyncInfo(authorityId, REDACTED_ACCOUNT, authority, startTime);
}
/** @hide */
public SyncInfo(int authorityId, Account account, String authority, long startTime) {
this.authorityId = authorityId;

View File

@@ -772,9 +772,13 @@ public final class ContentService extends IContentService.Stub {
mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_STATS,
"no permission to read the sync stats");
final boolean canAccessAccounts =
mContext.checkCallingOrSelfPermission(Manifest.permission.GET_ACCOUNTS)
== PackageManager.PERMISSION_GRANTED;
long identityToken = clearCallingIdentity();
try {
return getSyncManager().getSyncStorageEngine().getCurrentSyncsCopy(userId);
return getSyncManager().getSyncStorageEngine()
.getCurrentSyncsCopy(userId, canAccessAccounts);
} finally {
restoreCallingIdentity(identityToken);
}

View File

@@ -1426,15 +1426,23 @@ public class SyncStorageEngine extends Handler {
}
/**
* @return a copy of the current syncs data structure. Will not return
* null.
* @param userId Id of user to return current sync info.
* @param canAccessAccounts Determines whether to redact Account information from the result.
* @return a copy of the current syncs data structure. Will not return null.
*/
public List<SyncInfo> getCurrentSyncsCopy(int userId) {
public List<SyncInfo> getCurrentSyncsCopy(int userId, boolean canAccessAccounts) {
synchronized (mAuthorities) {
final List<SyncInfo> syncs = getCurrentSyncsLocked(userId);
final List<SyncInfo> syncsCopy = new ArrayList<SyncInfo>();
for (SyncInfo sync : syncs) {
syncsCopy.add(new SyncInfo(sync));
SyncInfo copy;
if (!canAccessAccounts) {
copy = SyncInfo.createAccountRedacted(
sync.authorityId, sync.authority, sync.startTime);
} else {
copy = new SyncInfo(sync);
}
syncsCopy.add(copy);
}
return syncsCopy;
}