summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Leme <felipeal@google.com>2018-08-10 16:48:21 -0700
committerFelipe Leme <felipeal@google.com>2018-08-17 13:40:54 -0700
commitcf02e8aff5857ef3720c2f897e5fa1a05c401ffd (patch)
tree51c551a52227f006feb6bfc9a753766bd8c6bf94
parent804574644849ef39d63d6515497469ee3b33b1d8 (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.java21
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;