mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 12:51:06 +00:00
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:
parent
61b99402eb
commit
aa6fe46883
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user