Bug 1861709 replace AudioCallbackDriver::ThreadRunning() assertions that mean to...
[gecko.git] / netwerk / ipc / NeckoCommon.cpp
blobc08faa5747f8ab7ae04cdcd61a5c5a71cac8e0ff
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set sw=2 ts=8 et tw=80 : */
4 /* This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
8 #include "NeckoCommon.h"
10 #include "nsIInputStream.h"
11 #include "nsIMultiPartChannel.h"
12 #include "nsIParentChannel.h"
13 #include "nsStringStream.h"
15 namespace mozilla::net {
17 nsresult ForwardStreamListenerFunctions(
18 nsTArray<StreamListenerFunction>& aCalls, nsIStreamListener* aParent) {
19 nsresult rv = NS_OK;
20 for (auto& variant : aCalls) {
21 variant.match(
22 [&](const OnStartRequestParams& aParams) {
23 rv = aParent->OnStartRequest(aParams.request);
24 if (NS_FAILED(rv)) {
25 aParams.request->Cancel(rv);
28 [&](const OnDataAvailableParams& aParams) {
29 // Don't deliver OnDataAvailable if we've
30 // already failed.
31 if (NS_FAILED(rv)) {
32 return;
34 nsCOMPtr<nsIInputStream> stringStream;
35 rv = NS_NewByteInputStream(
36 getter_AddRefs(stringStream),
37 Span<const char>(aParams.data.get(), aParams.count),
38 NS_ASSIGNMENT_DEPEND);
39 if (NS_SUCCEEDED(rv)) {
40 rv = aParent->OnDataAvailable(aParams.request, stringStream,
41 aParams.offset, aParams.count);
43 if (NS_FAILED(rv)) {
44 aParams.request->Cancel(rv);
47 [&](const OnStopRequestParams& aParams) {
48 if (NS_SUCCEEDED(rv)) {
49 aParent->OnStopRequest(aParams.request, aParams.status);
50 } else {
51 aParent->OnStopRequest(aParams.request, rv);
53 rv = NS_OK;
55 [&](const OnAfterLastPartParams& aParams) {
56 nsCOMPtr<nsIMultiPartChannelListener> multiListener =
57 do_QueryInterface(aParent);
58 if (multiListener) {
59 if (NS_SUCCEEDED(rv)) {
60 multiListener->OnAfterLastPart(aParams.status);
61 } else {
62 multiListener->OnAfterLastPart(rv);
65 });
67 return rv;
70 } // namespace mozilla::net