summaryrefslogtreecommitdiff
path: root/services/contentcapture
diff options
context:
space:
mode:
authorSergey Volnov <volnov@google.com>2020-01-24 15:48:02 +0000
committerSergey Volnov <volnov@google.com>2020-01-24 16:57:35 +0000
commitd7e984444503b5d1bcaed9fb9c914651f80616f4 (patch)
tree67f1de22d95552001340d2273a7caa04b15a04e0 /services/contentcapture
parent6e049014a75aef84c6c76bfa8fcaf761f95a5d2d (diff)
Use cancellation signals for timeouts and cancel-by-CCService operations
Bug: 148264965 Test: built Android + manually tested Change-Id: I95f7ec2bb96b8b6d6ead106877f9d7128e3ec209
Diffstat (limited to 'services/contentcapture')
-rw-r--r--services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java24
1 files changed, 13 insertions, 11 deletions
diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
index eedc57e942ae..24aa32a273aa 100644
--- a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
+++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
@@ -646,6 +646,7 @@ public final class ContentCaptureManagerService extends
@Override
public void shareData(@NonNull DataShareRequest request,
+ @NonNull ICancellationSignal clientCancellationSignal,
@NonNull IDataShareWriteAdapter clientAdapter) {
Preconditions.checkNotNull(request);
Preconditions.checkNotNull(clientAdapter);
@@ -667,7 +668,8 @@ public final class ContentCaptureManagerService extends
}
service.onDataSharedLocked(request,
- new DataShareCallbackDelegate(request, clientAdapter));
+ new DataShareCallbackDelegate(request, clientCancellationSignal,
+ clientAdapter));
}
}
@@ -920,17 +922,20 @@ public final class ContentCaptureManagerService extends
private class DataShareCallbackDelegate extends IDataShareCallback.Stub {
@NonNull private final DataShareRequest mDataShareRequest;
+ @NonNull private final ICancellationSignal mClientCancellationSignal;
@NonNull private final IDataShareWriteAdapter mClientAdapter;
DataShareCallbackDelegate(@NonNull DataShareRequest dataShareRequest,
+ @NonNull ICancellationSignal clientCancellationSignal,
@NonNull IDataShareWriteAdapter clientAdapter) {
mDataShareRequest = dataShareRequest;
+ mClientCancellationSignal = clientCancellationSignal;
mClientAdapter = clientAdapter;
}
@Override
- public void accept(IDataShareReadAdapter serviceAdapter)
- throws RemoteException {
+ public void accept(ICancellationSignal serviceCancellationSignal,
+ IDataShareReadAdapter serviceAdapter) throws RemoteException {
Slog.i(mTag, "Data share request accepted by Content Capture service");
Pair<ParcelFileDescriptor, ParcelFileDescriptor> clientPipe = createPipe();
@@ -962,15 +967,12 @@ public final class ContentCaptureManagerService extends
mClientAdapter.write(source_in);
serviceAdapter.start(sink_out, cancellationSignalTransport);
- // TODO(b/148264965): use cancellation signals for timeouts and cancelling
CancellationSignal cancellationSignal =
CancellationSignal.fromTransport(cancellationSignalTransport);
cancellationSignal.setOnCancelListener(() -> {
try {
- // TODO(b/148264965): this should propagate with the cancellation signal to the
- // client
- mClientAdapter.error(DataShareWriteAdapter.ERROR_UNKNOWN);
+ mClientCancellationSignal.cancel();
} catch (RemoteException e) {
Slog.e(mTag, "Failed to propagate cancel operation to the caller", e);
}
@@ -1029,14 +1031,14 @@ public final class ContentCaptureManagerService extends
if (!finishedSuccessfully) {
try {
- mClientAdapter.error(DataShareWriteAdapter.ERROR_UNKNOWN);
+ mClientCancellationSignal.cancel();
} catch (RemoteException e) {
- Slog.e(mTag, "Failed to call error() to client", e);
+ Slog.e(mTag, "Failed to cancel() the client operation", e);
}
try {
- serviceAdapter.error(DataShareWriteAdapter.ERROR_UNKNOWN);
+ serviceCancellationSignal.cancel();
} catch (RemoteException e) {
- Slog.e(mTag, "Failed to call error() to service", e);
+ Slog.e(mTag, "Failed to cancel() the service operation", e);
}
}
}