diff options
| author | Jeff Sharkey <jsharkey@google.com> | 2018-04-20 02:38:01 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-04-20 02:38:01 +0000 |
| commit | ddb15c471c708fd2eedc7193099ec80dd205065f (patch) | |
| tree | 541178c37faa6ef6f06edbd27b957803f81cbad0 /core/java/android | |
| parent | 6d9f7943fb1ce93c12b1c7c710d9dbbbd761ab0a (diff) | |
| parent | 0ad6283da79c5f5e7cda0dd10030b9d4be2cb6e8 (diff) | |
Merge "Protect usage data with OP_GET_USAGE_STATS." into pi-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/ApplicationPackageManager.java | 2 | ||||
| -rw-r--r-- | core/java/android/content/pm/dex/ArtManager.java | 25 | ||||
| -rw-r--r-- | core/java/android/content/pm/dex/IArtManager.aidl | 6 |
3 files changed, 19 insertions, 14 deletions
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 1084b425ea92..0e4483312fd2 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -2831,7 +2831,7 @@ public class ApplicationPackageManager extends PackageManager { synchronized (mLock) { if (mArtManager == null) { try { - mArtManager = new ArtManager(mPM.getArtManager()); + mArtManager = new ArtManager(mContext, mPM.getArtManager()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/content/pm/dex/ArtManager.java b/core/java/android/content/pm/dex/ArtManager.java index 41293981102f..b0970f4878db 100644 --- a/core/java/android/content/pm/dex/ArtManager.java +++ b/core/java/android/content/pm/dex/ArtManager.java @@ -16,12 +16,16 @@ package android.content.pm.dex; +import static android.Manifest.permission.PACKAGE_USAGE_STATS; +import static android.Manifest.permission.READ_RUNTIME_PROFILES; + import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.content.Context; import android.os.Environment; import android.os.ParcelFileDescriptor; import android.os.RemoteException; @@ -62,13 +66,14 @@ public class ArtManager { @Retention(RetentionPolicy.SOURCE) public @interface ProfileType {} - - private IArtManager mArtManager; + private final Context mContext; + private final IArtManager mArtManager; /** * @hide */ - public ArtManager(@NonNull IArtManager manager) { + public ArtManager(@NonNull Context context, @NonNull IArtManager manager) { + mContext = context; mArtManager = manager; } @@ -99,7 +104,7 @@ public class ArtManager { * @param callback the callback which should be used for the result * @param executor the executor which should be used to post the result */ - @RequiresPermission(android.Manifest.permission.READ_RUNTIME_PROFILES) + @RequiresPermission(allOf = { READ_RUNTIME_PROFILES, PACKAGE_USAGE_STATS }) public void snapshotRuntimeProfile(@ProfileType int profileType, @Nullable String packageName, @Nullable String codePath, @NonNull @CallbackExecutor Executor executor, @NonNull SnapshotRuntimeProfileCallback callback) { @@ -108,9 +113,10 @@ public class ArtManager { SnapshotRuntimeProfileCallbackDelegate delegate = new SnapshotRuntimeProfileCallbackDelegate(callback, executor); try { - mArtManager.snapshotRuntimeProfile(profileType, packageName, codePath, delegate); + mArtManager.snapshotRuntimeProfile(profileType, packageName, codePath, delegate, + mContext.getOpPackageName()); } catch (RemoteException e) { - e.rethrowAsRuntimeException(); + throw e.rethrowAsRuntimeException(); } } @@ -122,14 +128,13 @@ public class ArtManager { * @param profileType can be either {@link ArtManager#PROFILE_APPS} * or {@link ArtManager#PROFILE_BOOT_IMAGE} */ - @RequiresPermission(android.Manifest.permission.READ_RUNTIME_PROFILES) + @RequiresPermission(allOf = { READ_RUNTIME_PROFILES, PACKAGE_USAGE_STATS }) public boolean isRuntimeProfilingEnabled(@ProfileType int profileType) { try { - return mArtManager.isRuntimeProfilingEnabled(profileType); + return mArtManager.isRuntimeProfilingEnabled(profileType, mContext.getOpPackageName()); } catch (RemoteException e) { - e.rethrowAsRuntimeException(); + throw e.rethrowAsRuntimeException(); } - return false; } /** diff --git a/core/java/android/content/pm/dex/IArtManager.aidl b/core/java/android/content/pm/dex/IArtManager.aidl index 6abfdbab6e26..7f0de7ec09b4 100644 --- a/core/java/android/content/pm/dex/IArtManager.aidl +++ b/core/java/android/content/pm/dex/IArtManager.aidl @@ -44,8 +44,8 @@ interface IArtManager { * {@link ArtManager#isRuntimeProfilingEnabled(int)} does not return true for the given * {@code profileType}. */ - oneway void snapshotRuntimeProfile(int profileType, in String packageName, - in String codePath, in ISnapshotRuntimeProfileCallback callback); + void snapshotRuntimeProfile(int profileType, in String packageName, + in String codePath, in ISnapshotRuntimeProfileCallback callback, String callingPackage); /** * Returns true if runtime profiles are enabled for the given type, false otherwise. @@ -54,5 +54,5 @@ interface IArtManager { * * @param profileType */ - boolean isRuntimeProfilingEnabled(int profileType); + boolean isRuntimeProfilingEnabled(int profileType, String callingPackage); } |
