Merge changes I322ff9d3,I97907147
* changes: Fix a data race Remove dead code (8/n)
This commit is contained in:
@@ -811,10 +811,16 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
@GuardedBy("mProtectedBroadcasts")
|
||||
final ArraySet<String> mProtectedBroadcasts = new ArraySet<>();
|
||||
|
||||
/** List of packages waiting for verification. */
|
||||
/**
|
||||
* List of packages waiting for verification.
|
||||
* Handler thread only!
|
||||
*/
|
||||
final SparseArray<PackageVerificationState> mPendingVerification = new SparseArray<>();
|
||||
|
||||
/** List of packages waiting for rollback to be enabled. */
|
||||
/**
|
||||
* List of packages waiting for rollback to be enabled.
|
||||
* Handler thread only!
|
||||
*/
|
||||
final SparseArray<VerificationParams> mPendingEnableRollback = new SparseArray<>();
|
||||
|
||||
final PackageInstallerService mInstallerService;
|
||||
@@ -835,10 +841,16 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
// Cache of users who need badging.
|
||||
private final SparseBooleanArray mUserNeedsBadging = new SparseBooleanArray();
|
||||
|
||||
/** Token for keys in mPendingVerification. */
|
||||
/**
|
||||
* Token for keys in mPendingVerification.
|
||||
* Handler thread only!
|
||||
*/
|
||||
int mPendingVerificationToken = 0;
|
||||
|
||||
/** Token for keys in mPendingEnableRollback. */
|
||||
/**
|
||||
* Token for keys in mPendingEnableRollback.
|
||||
* Handler thread only!
|
||||
*/
|
||||
int mPendingEnableRollbackToken = 0;
|
||||
|
||||
@Watched(manual = true)
|
||||
@@ -6347,25 +6359,28 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
android.Manifest.permission.PACKAGE_VERIFICATION_AGENT,
|
||||
"Only package verification agents can extend verification timeouts");
|
||||
|
||||
final PackageVerificationState state = mPendingVerification.get(id);
|
||||
final PackageVerificationResponse response = new PackageVerificationResponse(
|
||||
verificationCodeAtTimeout, Binder.getCallingUid());
|
||||
mHandler.post(() -> {
|
||||
final PackageVerificationState state = mPendingVerification.get(id);
|
||||
final PackageVerificationResponse response = new PackageVerificationResponse(
|
||||
verificationCodeAtTimeout, Binder.getCallingUid());
|
||||
|
||||
if (millisecondsToDelay > PackageManager.MAXIMUM_VERIFICATION_TIMEOUT) {
|
||||
millisecondsToDelay = PackageManager.MAXIMUM_VERIFICATION_TIMEOUT;
|
||||
}
|
||||
if (millisecondsToDelay < 0) {
|
||||
millisecondsToDelay = 0;
|
||||
}
|
||||
long delay = millisecondsToDelay;
|
||||
if (delay > PackageManager.MAXIMUM_VERIFICATION_TIMEOUT) {
|
||||
delay = PackageManager.MAXIMUM_VERIFICATION_TIMEOUT;
|
||||
}
|
||||
if (delay < 0) {
|
||||
delay = 0;
|
||||
}
|
||||
|
||||
if ((state != null) && !state.timeoutExtended()) {
|
||||
state.extendTimeout();
|
||||
if ((state != null) && !state.timeoutExtended()) {
|
||||
state.extendTimeout();
|
||||
|
||||
final Message msg = mHandler.obtainMessage(PACKAGE_VERIFIED);
|
||||
msg.arg1 = id;
|
||||
msg.obj = response;
|
||||
mHandler.sendMessageDelayed(msg, millisecondsToDelay);
|
||||
}
|
||||
final Message msg = mHandler.obtainMessage(PACKAGE_VERIFIED);
|
||||
msg.arg1 = id;
|
||||
msg.obj = response;
|
||||
mHandler.sendMessageDelayed(msg, delay);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setEnableRollbackCode(int token, int enableRollbackCode) {
|
||||
|
||||
@@ -527,26 +527,6 @@ public class StagingManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns id of a committed and non-finalized stated session that contains same
|
||||
* {@code packageName}, or {@code -1} if no sessions have this {@code packageName} staged.
|
||||
*/
|
||||
int getSessionIdByPackageName(@NonNull String packageName) {
|
||||
synchronized (mStagedSessions) {
|
||||
for (int i = 0; i < mStagedSessions.size(); i++) {
|
||||
StagedSession stagedSession = mStagedSessions.valueAt(i);
|
||||
if (!stagedSession.isCommitted() || stagedSession.isDestroyed()
|
||||
|| stagedSession.isInTerminalState()) {
|
||||
continue;
|
||||
}
|
||||
if (stagedSession.getPackageName().equals(packageName)) {
|
||||
return stagedSession.sessionId();
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void createSession(@NonNull StagedSession sessionInfo) {
|
||||
synchronized (mStagedSessions) {
|
||||
|
||||
@@ -453,66 +453,6 @@ public class StagingManagerTest {
|
||||
assertThat(apkSession.getErrorMessage()).isEqualTo("Another apex session failed");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSessionIdByPackageName() throws Exception {
|
||||
FakeStagedSession session = new FakeStagedSession(239);
|
||||
session.setCommitted(true);
|
||||
session.setSessionReady();
|
||||
session.setPackageName("com.foo");
|
||||
|
||||
mStagingManager.createSession(session);
|
||||
assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(239);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSessionIdByPackageName_appliedSession_ignores() throws Exception {
|
||||
FakeStagedSession session = new FakeStagedSession(37);
|
||||
session.setCommitted(true);
|
||||
session.setSessionApplied();
|
||||
session.setPackageName("com.foo");
|
||||
|
||||
mStagingManager.createSession(session);
|
||||
assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSessionIdByPackageName_failedSession_ignores() throws Exception {
|
||||
FakeStagedSession session = new FakeStagedSession(73);
|
||||
session.setCommitted(true);
|
||||
session.setSessionFailed(1, "whatevs");
|
||||
session.setPackageName("com.foo");
|
||||
|
||||
mStagingManager.createSession(session);
|
||||
assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSessionIdByPackageName_destroyedSession_ignores() throws Exception {
|
||||
FakeStagedSession session = new FakeStagedSession(23);
|
||||
session.setCommitted(true);
|
||||
session.setDestroyed(true);
|
||||
session.setPackageName("com.foo");
|
||||
|
||||
mStagingManager.createSession(session);
|
||||
assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSessionIdByPackageName_noSessions() throws Exception {
|
||||
assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSessionIdByPackageName_noSessionHasThisPackage() throws Exception {
|
||||
FakeStagedSession session = new FakeStagedSession(37);
|
||||
session.setCommitted(true);
|
||||
session.setSessionApplied();
|
||||
session.setPackageName("com.foo");
|
||||
|
||||
mStagingManager.createSession(session);
|
||||
assertThat(mStagingManager.getSessionIdByPackageName("com.bar")).isEqualTo(-1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getStagedApexInfos_validatePreConditions() throws Exception {
|
||||
// Invalid session: null session
|
||||
|
||||
Reference in New Issue
Block a user