Merge "Ensure we clear mPackagesWithShareRequests when a remote exception happens at write() or start()." into sc-qpr1-dev am: 7207d8d032

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16174880

Change-Id: I445ec2b15559d4d346e7f3331fffd53a2a9071d5
This commit is contained in:
TreeHugger Robot
2021-11-03 11:49:11 +00:00
committed by Automerger Merge Worker

View File

@@ -1072,26 +1072,18 @@ public final class ContentCaptureManagerService extends
ParcelFileDescriptor sourceOut = servicePipe.second; ParcelFileDescriptor sourceOut = servicePipe.second;
ParcelFileDescriptor sinkOut = servicePipe.first; ParcelFileDescriptor sinkOut = servicePipe.first;
synchronized (mParentService.mLock) {
mParentService.mPackagesWithShareRequests.add(mDataShareRequest.getPackageName()); mParentService.mPackagesWithShareRequests.add(mDataShareRequest.getPackageName());
try {
mClientAdapter.write(sourceIn);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to call write() the client operation", e);
sendErrorSignal(mClientAdapter, serviceAdapter,
ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
logServiceEvent(
CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_CLIENT_PIPE_FAIL);
return;
} }
try {
serviceAdapter.start(sinkOut); if (!setUpSharingPipeline(mClientAdapter, serviceAdapter, sourceIn, sinkOut)) {
} catch (RemoteException e) {
Slog.e(TAG, "Failed to call start() the service operation", e);
sendErrorSignal(mClientAdapter, serviceAdapter, sendErrorSignal(mClientAdapter, serviceAdapter,
ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN); ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
logServiceEvent( bestEffortCloseFileDescriptors(sourceIn, sinkIn, sourceOut, sinkOut);
CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_SERVICE_PIPE_FAIL); synchronized (mParentService.mLock) {
mParentService.mPackagesWithShareRequests
.remove(mDataShareRequest.getPackageName());
}
return; return;
} }
@@ -1184,6 +1176,32 @@ public final class ContentCaptureManagerService extends
} }
} }
private boolean setUpSharingPipeline(
IDataShareWriteAdapter clientAdapter,
IDataShareReadAdapter serviceAdapter,
ParcelFileDescriptor sourceIn,
ParcelFileDescriptor sinkOut) {
try {
clientAdapter.write(sourceIn);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to call write() the client operation", e);
logServiceEvent(
CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_CLIENT_PIPE_FAIL);
return false;
}
try {
serviceAdapter.start(sinkOut);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to call start() the service operation", e);
logServiceEvent(
CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_SERVICE_PIPE_FAIL);
return false;
}
return true;
}
private void enforceDataSharingTtl(ParcelFileDescriptor sourceIn, private void enforceDataSharingTtl(ParcelFileDescriptor sourceIn,
ParcelFileDescriptor sinkIn, ParcelFileDescriptor sinkIn,
ParcelFileDescriptor sourceOut, ParcelFileDescriptor sourceOut,