diff options
| author | Felipe Leme <felipeal@google.com> | 2018-08-10 16:48:21 -0700 |
|---|---|---|
| committer | Felipe Leme <felipeal@google.com> | 2018-08-17 13:40:54 -0700 |
| commit | cf02e8aff5857ef3720c2f897e5fa1a05c401ffd (patch) | |
| tree | 51c551a52227f006feb6bfc9a753766bd8c6bf94 | |
| parent | 804574644849ef39d63d6515497469ee3b33b1d8 (diff) | |
Changed UriGrantsManagerService so it lazy-loads PackageManageInternal.
Test: atest android.appsecurity.cts.ScopedDirectoryAccessTest#testResetDoNotAskAgain
Fixes: 112091705
Change-Id: Icd02fde2483ca2f7d3925377a42afc12d33c689c
| -rw-r--r-- | services/core/java/com/android/server/uri/UriGrantsManagerService.java | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/uri/UriGrantsManagerService.java b/services/core/java/com/android/server/uri/UriGrantsManagerService.java index a731e9b01f56..9a7e75e548af 100644 --- a/services/core/java/com/android/server/uri/UriGrantsManagerService.java +++ b/services/core/java/com/android/server/uri/UriGrantsManagerService.java @@ -30,6 +30,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.Process.ROOT_UID; import static android.os.Process.SYSTEM_UID; import static android.os.Process.myUid; + import static com.android.internal.util.XmlUtils.readBooleanAttribute; import static com.android.internal.util.XmlUtils.readIntAttribute; import static com.android.internal.util.XmlUtils.readLongAttribute; @@ -37,6 +38,7 @@ import static com.android.internal.util.XmlUtils.writeBooleanAttribute; import static com.android.internal.util.XmlUtils.writeIntAttribute; import static com.android.internal.util.XmlUtils.writeLongAttribute; import static com.android.server.uri.UriGrantsManagerService.H.PERSIST_URI_GRANTS_MSG; + import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT; import static org.xmlpull.v1.XmlPullParser.START_TAG; @@ -73,15 +75,19 @@ import android.util.AtomicFile; import android.util.Slog; import android.util.SparseArray; import android.util.Xml; + import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.Preconditions; import com.android.server.IoThread; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.SystemServiceManager; + import com.google.android.collect.Lists; import com.google.android.collect.Maps; +import libcore.io.IoUtils; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; @@ -98,8 +104,6 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import libcore.io.IoUtils; - /** Manages uri grants. */ public class UriGrantsManagerService extends IUriGrantsManager.Stub { private static final boolean DEBUG = false; @@ -150,7 +154,6 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub { void onActivityManagerInternalAdded() { mAmInternal = LocalServices.getService(ActivityManagerInternal.class); - mPmInternal = LocalServices.getService(PackageManagerInternal.class); } public static final class Lifecycle extends SystemService { @@ -296,7 +299,7 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub { if (toPackage != null) { mAmInternal.enforceCallingPermission(FORCE_PERSISTABLE_URI_PERMISSIONS, "takePersistableUriPermission"); - uid = mPmInternal.getPackageUid(toPackage, 0, userId); + uid = getPmInternal().getPackageUid(toPackage, 0, userId); } else { enforceNotIsolatedCaller("takePersistableUriPermission"); uid = Binder.getCallingUid(); @@ -361,7 +364,7 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub { if (toPackage != null) { mAmInternal.enforceCallingPermission(FORCE_PERSISTABLE_URI_PERMISSIONS, "releasePersistableUriPermission"); - uid = mPmInternal.getPackageUid(toPackage, 0, userId); + uid = getPmInternal().getPackageUid(toPackage, 0, userId); } else { enforceNotIsolatedCaller("releasePersistableUriPermission"); uid = Binder.getCallingUid(); @@ -1266,6 +1269,14 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub { } } + private PackageManagerInternal getPmInternal() { + // Don't need to synchonize; worst-case scenario LocalServices will be called twice. + if (mPmInternal == null) { + mPmInternal = LocalServices.getService(PackageManagerInternal.class); + } + return mPmInternal; + } + final class H extends Handler { static final int PERSIST_URI_GRANTS_MSG = 1; |
