From 16539f33785b59fa809295ec7def782983664489 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Wed, 8 Mar 2017 12:18:20 -0800 Subject: [PATCH] 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 --- .../server/autofill/AutoFillManagerServiceImpl.java | 8 ++++++++ .../com/android/server/autofill/RemoteFillService.java | 8 ++++---- .../java/com/android/server/autofill/ui/AutoFillUI.java | 4 ++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java index c4d06488f7b5b..aa0840ca074df 100644 --- a/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java @@ -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) { diff --git a/services/autofill/java/com/android/server/autofill/RemoteFillService.java b/services/autofill/java/com/android/server/autofill/RemoteFillService.java index 7058248b28024..d9f97213d0b47 100644 --- a/services/autofill/java/com/android/server/autofill/RemoteFillService.java +++ b/services/autofill/java/com/android/server/autofill/RemoteFillService.java @@ -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; + } } } diff --git a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java index c86a8828d0b10..599bbfe55c327 100644 --- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java +++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java @@ -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); });