Bug 1843752 - Explicitly transfer ownership of queued-up OnDataAvailableParams data buffers, r=necko-reviewers,kershaw

Differential Revision: https://phabricator.services.mozilla.com/D198189
This commit is contained in:
Nika Layzell 2024-01-25 17:18:48 +00:00
parent 61b99402eb
commit aa6fe46883
4 changed files with 15 additions and 17 deletions

View File

@ -1470,7 +1470,7 @@ bool DocumentLoadListener::ResumeSuspendedChannel(
streamListenerFunctions.Clear();
}
ForwardStreamListenerFunctions(streamListenerFunctions, aListener);
ForwardStreamListenerFunctions(std::move(streamListenerFunctions), aListener);
// We don't expect to get new stream listener functions added
// via re-entrancy. If this ever happens, we should understand
@ -2703,7 +2703,7 @@ DocumentLoadListener::OnDataAvailable(nsIRequest* aRequest,
mStreamListenerFunctions.AppendElement(StreamListenerFunction{
VariantIndex<1>{},
OnDataAvailableParams{aRequest, data, aOffset, aCount}});
OnDataAvailableParams{aRequest, std::move(data), aOffset, aCount}});
return NS_OK;
}

View File

@ -14,28 +14,26 @@
namespace mozilla::net {
nsresult ForwardStreamListenerFunctions(
nsTArray<StreamListenerFunction>& aCalls, nsIStreamListener* aParent) {
nsresult ForwardStreamListenerFunctions(nsTArray<StreamListenerFunction> aCalls,
nsIStreamListener* aParent) {
nsresult rv = NS_OK;
for (auto& variant : aCalls) {
variant.match(
[&](const OnStartRequestParams& aParams) {
[&](OnStartRequestParams& aParams) {
rv = aParent->OnStartRequest(aParams.request);
if (NS_FAILED(rv)) {
aParams.request->Cancel(rv);
}
},
[&](const OnDataAvailableParams& aParams) {
[&](OnDataAvailableParams& aParams) {
// Don't deliver OnDataAvailable if we've
// already failed.
if (NS_FAILED(rv)) {
return;
}
nsCOMPtr<nsIInputStream> stringStream;
rv = NS_NewByteInputStream(
getter_AddRefs(stringStream),
Span<const char>(aParams.data.get(), aParams.count),
NS_ASSIGNMENT_DEPEND);
rv = NS_NewCStringInputStream(getter_AddRefs(stringStream),
std::move(aParams.data));
if (NS_SUCCEEDED(rv)) {
rv = aParent->OnDataAvailable(aParams.request, stringStream,
aParams.offset, aParams.count);
@ -44,7 +42,7 @@ nsresult ForwardStreamListenerFunctions(
aParams.request->Cancel(rv);
}
},
[&](const OnStopRequestParams& aParams) {
[&](OnStopRequestParams& aParams) {
if (NS_SUCCEEDED(rv)) {
aParent->OnStopRequest(aParams.request, aParams.status);
} else {
@ -52,7 +50,7 @@ nsresult ForwardStreamListenerFunctions(
}
rv = NS_OK;
},
[&](const OnAfterLastPartParams& aParams) {
[&](OnAfterLastPartParams& aParams) {
nsCOMPtr<nsIMultiPartChannelListener> multiListener =
do_QueryInterface(aParent);
if (multiListener) {

View File

@ -135,8 +135,8 @@ using StreamListenerFunction =
mozilla::Variant<OnStartRequestParams, OnDataAvailableParams,
OnStopRequestParams, OnAfterLastPartParams>;
nsresult ForwardStreamListenerFunctions(
nsTArray<StreamListenerFunction>& aCalls, nsIStreamListener* aParent);
nsresult ForwardStreamListenerFunctions(nsTArray<StreamListenerFunction> aCalls,
nsIStreamListener* aParent);
} // namespace net
} // namespace mozilla

View File

@ -582,7 +582,7 @@ void EarlyHintPreloader::InvokeStreamListenerFunctions() {
nsTArray<StreamListenerFunction> streamListenerFunctions =
std::move(mStreamListenerFunctions);
ForwardStreamListenerFunctions(streamListenerFunctions, mParent);
ForwardStreamListenerFunctions(std::move(streamListenerFunctions), mParent);
// We don't expect to get new stream listener functions added
// via re-entrancy. If this ever happens, we should understand
@ -696,8 +696,8 @@ EarlyHintPreloader::OnDataAvailable(nsIRequest* aRequest,
nsresult rv = NS_ReadInputStreamToString(aInputStream, data, aCount);
NS_ENSURE_SUCCESS(rv, rv);
mStreamListenerFunctions.AppendElement(
AsVariant(OnDataAvailableParams{aRequest, data, aOffset, aCount}));
mStreamListenerFunctions.AppendElement(AsVariant(
OnDataAvailableParams{aRequest, std::move(data), aOffset, aCount}));
return NS_OK;
}