Two fixes on autofill save.

1.Fixed race condition on save request - if the service was unbound, it would
  mark the RemoteFillService as completed and the retry would be dropped.
2.Removed session when save request is canceled.

Change-Id: Ib71514cdcfecc38c07dd7656174d0db68ed758d1
Fixes: 36001206
Test: CtsAutoFillServiceTestCases pass
This commit is contained in:
Felipe Leme
2017-03-08 12:18:20 -08:00
parent 18f805e73d
commit 16539f3378
3 changed files with 16 additions and 4 deletions

View File

@@ -728,6 +728,14 @@ final class AutoFillManagerServiceImpl {
.sendToTarget();
}
// AutoFillUiCallback
@Override
public void cancelSave() {
mHandlerCaller.getHandler().post(() -> {
removeSelf();
});
}
// AutoFillUiCallback
@Override
public void onEvent(AutoFillId id, int event) {

View File

@@ -182,11 +182,8 @@ final class RemoteFillService implements DeathRecipient {
if (mDestroyed || mCompleted) {
return;
}
if (pendingRequest.isFinal()) {
mCompleted = true;
}
if (!isBound()) {
if (mPendingRequest != null) {
if (mPendingRequest != null && mPendingRequest != pendingRequest) {
mPendingRequest.cancel();
}
mPendingRequest = pendingRequest;
@@ -196,6 +193,9 @@ final class RemoteFillService implements DeathRecipient {
Slog.d(LOG_TAG, "[user: " + mUserId + "] handlePendingRequest()");
}
pendingRequest.run();
if (pendingRequest.isFinal()) {
mCompleted = true;
}
}
}

View File

@@ -65,6 +65,7 @@ public final class AutoFillUI {
void authenticate(@NonNull IntentSender intent);
void fill(@NonNull Dataset dataset);
void save();
void cancelSave();
void onEvent(AutoFillId id, int event);
}
@@ -220,6 +221,9 @@ public final class AutoFillUI {
+ listener, e);
}
}
if (mCallback != null) {
mCallback.cancelSave();
}
}
}, mSaveTimeoutMs);
});