Merge "Fix potential NPE in autofill Session" into rvc-dev am: 35193303a6 am: 265d3aaccf

Change-Id: Ic1350a47c0f7d480a5b9f4c3952799fe26cf40e5
This commit is contained in:
TreeHugger Robot
2020-03-19 01:22:54 +00:00
committed by Automerger Merge Worker

View File

@@ -311,6 +311,10 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
*/
private final AssistDataReceiverImpl mAssistReceiver = new AssistDataReceiverImpl();
/**
* TODO(b/151867668): improve how asynchronous data dependencies are handled, without using
* CountDownLatch.
*/
private final class AssistDataReceiverImpl extends IAssistDataReceiver.Stub {
@GuardedBy("mLock")
@@ -318,7 +322,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
@GuardedBy("mLock")
private FillRequest mPendingFillRequest;
@GuardedBy("mLock")
private CountDownLatch mCountDownLatch;
private CountDownLatch mCountDownLatch = new CountDownLatch(0);
@Nullable Consumer<InlineSuggestionsRequest> newAutofillRequestLocked(
boolean isInlineRequest) {
@@ -327,6 +331,9 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
mPendingInlineSuggestionsRequest = null;
return isInlineRequest ? (inlineSuggestionsRequest) -> {
synchronized (mLock) {
if (mCountDownLatch.getCount() == 0) {
return;
}
mPendingInlineSuggestionsRequest = inlineSuggestionsRequest;
mCountDownLatch.countDown();
maybeRequestFillLocked();
@@ -335,8 +342,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
void maybeRequestFillLocked() {
if (mCountDownLatch == null || mCountDownLatch.getCount() > 0
|| mPendingFillRequest == null) {
if (mCountDownLatch.getCount() > 0 || mPendingFillRequest == null) {
return;
}
if (mPendingInlineSuggestionsRequest != null) {
@@ -347,7 +353,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
mRemoteFillService.onFillRequest(mPendingFillRequest);
mPendingInlineSuggestionsRequest = null;
mPendingFillRequest = null;
mCountDownLatch = null;
}
@Override
@@ -447,9 +452,15 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
request = new FillRequest(requestId, contexts, mClientState, flags,
/*inlineSuggestionsRequest=*/null);
mPendingFillRequest = request;
mCountDownLatch.countDown();
maybeRequestFillLocked();
if (mCountDownLatch.getCount() > 0) {
mPendingFillRequest = request;
mCountDownLatch.countDown();
maybeRequestFillLocked();
} else {
// TODO(b/151867668): ideally this case should not happen, but it was
// observed, we should figure out why and fix.
mRemoteFillService.onFillRequest(request);
}
}
if (mActivityToken != null) {