/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
class MIMEStreamHeaderVisitor final : public nsIHttpHeaderVisitor { public: explicit MIMEStreamHeaderVisitor(
nsTArray<mozilla::ipc::HeaderEntry>& aHeaders)
: mHeaders(aHeaders) {}
// If we're serializing a MIME stream, ensure we preserve header data which // would not be preserved by a RemoteLazyInputStream wrapper. if (nsCOMPtr<nsIMIMEInputStream> mimeStream = do_QueryInterface(aStream)) {
MIMEInputStreamParams params;
params.startedReading() = false;
nsCOMPtr<nsIHttpHeaderVisitor> visitor = new MIMEStreamHeaderVisitor(params.headers()); if (NS_WARN_IF(NS_FAILED(mimeStream->VisitHeaders(visitor)))) { returnfalse;
}
nsCOMPtr<nsIInputStream> dataStream; if (NS_FAILED(mimeStream->GetData(getter_AddRefs(dataStream)))) { returnfalse;
} if (dataStream) {
IPCStream data; if (!SerializeLazyInputStream(dataStream, data)) { returnfalse;
}
params.optionalStream().emplace(std::move(data.stream()));
}
bool SerializeIPCStream(already_AddRefed<nsIInputStream> aInputStream,
IPCStream& aValue, bool aAllowLazy) {
nsCOMPtr<nsIInputStream> stream(std::move(aInputStream)); if (!stream) {
MOZ_ASSERT_UNREACHABLE( "Use the Maybe<...> overload to serialize optional nsIInputStreams"); returnfalse;
}
// When requesting a delayed start stream from the parent process, serialize // it as a remote lazy stream to avoid bloating payloads. if (aAllowLazy && XRE_IsParentProcess()) { return SerializeLazyInputStream(stream, aValue);
}
if (nsCOMPtr<nsIIPCSerializableInputStream> serializable =
do_QueryInterface(stream)) { // If you change this size, please also update the payload size in // test_reload_large_postdata.html. const uint64_t kTooLargeStream = 1024 * 1024;
if (aValue.stream().type() == InputStreamParams::T__None) {
MOZ_CRASH("Serialize failed!");
} returntrue;
}
InputStreamHelper::SerializeInputStreamAsPipe(stream, aValue.stream()); if (aValue.stream().type() == InputStreamParams::T__None) { // This can fail from OOM, etc. We will likely MOZ_CRASH now returnfalse;
} returntrue;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.