Merge "Adds sanity checks to session commit and abandon" into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
116ca5db5b
@@ -1222,7 +1222,7 @@ public class PackageInstaller {
|
||||
try {
|
||||
mSession.addChildSessionId(sessionId);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1236,7 +1236,7 @@ public class PackageInstaller {
|
||||
try {
|
||||
mSession.removeChildSessionId(sessionId);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -841,6 +841,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
|
||||
@Override
|
||||
public void commit(@NonNull IntentSender statusReceiver, boolean forTransfer) {
|
||||
if (hasParentSessionId()) {
|
||||
throw new IllegalStateException(
|
||||
"Session " + sessionId + " is a child of multi-package session "
|
||||
+ mParentSessionId + " and may not be committed directly.");
|
||||
}
|
||||
if (!markAsCommitted(statusReceiver, forTransfer)) {
|
||||
return;
|
||||
}
|
||||
@@ -2037,6 +2042,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
|
||||
@Override
|
||||
public void abandon() {
|
||||
if (hasParentSessionId()) {
|
||||
throw new IllegalStateException(
|
||||
"Session " + sessionId + " is a child of multi-package session "
|
||||
+ mParentSessionId + " and may not be abandoned directly.");
|
||||
}
|
||||
synchronized (mLock) {
|
||||
assertCallerIsOwnerOrRootLocked();
|
||||
|
||||
@@ -2079,13 +2089,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addChildSessionId(int childSessionId) throws RemoteException {
|
||||
public void addChildSessionId(int childSessionId) {
|
||||
final PackageInstallerSession childSession = mSessionProvider.getSession(childSessionId);
|
||||
if (childSession == null) {
|
||||
throw new RemoteException("Unable to add child.",
|
||||
new PackageManagerException("Child session " + childSessionId
|
||||
+ " does not exist"),
|
||||
false, true).rethrowAsRuntimeException();
|
||||
if (childSession == null
|
||||
|| (childSession.hasParentSessionId() && childSession.mParentSessionId != sessionId)
|
||||
|| childSession.mCommitted
|
||||
|| childSession.mDestroyed) {
|
||||
throw new IllegalStateException("Unable to add child session " + childSessionId
|
||||
+ " as it does not exist or is in an invalid state.");
|
||||
}
|
||||
synchronized (mLock) {
|
||||
assertCallerIsOwnerOrRootLocked();
|
||||
@@ -2124,11 +2135,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
synchronized (mLock) {
|
||||
if (parentSessionId != SessionInfo.INVALID_ID
|
||||
&& mParentSessionId != SessionInfo.INVALID_ID) {
|
||||
throw new RemoteException("Unable to set parent session.",
|
||||
new PackageManagerException(
|
||||
"The parent of " + sessionId + " is" + " already set to "
|
||||
+ mParentSessionId), false,
|
||||
true).rethrowAsRuntimeException();
|
||||
throw new IllegalStateException("The parent of " + sessionId + " is" + " already"
|
||||
+ "set to " + mParentSessionId);
|
||||
}
|
||||
this.mParentSessionId = parentSessionId;
|
||||
}
|
||||
|
||||
@@ -487,7 +487,7 @@ public class StagingManager {
|
||||
}
|
||||
try {
|
||||
apkParentSession.addChildSessionId(apkChildSession.sessionId);
|
||||
} catch (RemoteException e) {
|
||||
} catch (IllegalStateException e) {
|
||||
Slog.e(TAG, "Failed to add a child session for installing the APK files", e);
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user