зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 3 changesets (bug 1697421) for causing mochitest failures on test_webassembly_compile.html. CLOSED TREE
Backed out changeset 65d4f5822383 (bug 1697421) Backed out changeset cda8626f9ccc (bug 1697421) Backed out changeset fe6151585dec (bug 1697421)
This commit is contained in:
Родитель
8b1a8bcc9b
Коммит
d8b071ca4d
|
@ -21,7 +21,6 @@
|
|||
#include "nsProxyRelease.h"
|
||||
|
||||
#include "mozilla/ErrorResult.h"
|
||||
#include "mozilla/dom/MimeType.h"
|
||||
#include "mozilla/dom/BindingDeclarations.h"
|
||||
#include "mozilla/dom/BodyConsumer.h"
|
||||
#include "mozilla/dom/Exceptions.h"
|
||||
|
@ -1260,40 +1259,20 @@ template already_AddRefed<Promise> FetchBody<EmptyBody>::ConsumeBody(
|
|||
template <class Derived>
|
||||
void FetchBody<Derived>::GetMimeType(nsACString& aMimeType,
|
||||
nsACString& aMixedCaseMimeType) {
|
||||
// Extract mime type.
|
||||
ErrorResult result;
|
||||
nsAutoCString contentTypeValues, contentTypeUtf8;
|
||||
nsCString contentTypeValues;
|
||||
MOZ_ASSERT(DerivedClass()->GetInternalHeaders());
|
||||
DerivedClass()->GetInternalHeaders()->Get("Content-Type"_ns,
|
||||
contentTypeValues, result);
|
||||
MOZ_ALWAYS_TRUE(!result.Failed());
|
||||
|
||||
nsCCharSeparatedTokenizer contentTypeTokens(contentTypeValues, ',');
|
||||
|
||||
// currently we extract the MIME-type from the first content type header
|
||||
// In order to fully comply with the fetch spec we must be able to
|
||||
// parse multiple content-type headers and extrace headers from it
|
||||
// To achieve this we need to modify CMimeType::Parse and implement the
|
||||
// algorithm https://fetch.spec.whatwg.org/#concept-header-extract-mime-type
|
||||
// This issue is tracked by
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1510180
|
||||
auto contentStr = contentTypeTokens.nextToken();
|
||||
|
||||
CopyLatin1toUTF8(contentStr, contentTypeUtf8);
|
||||
UniquePtr<CMimeType> contentTypeRecord = CMimeType::Parse(contentTypeUtf8);
|
||||
if (contentTypeRecord) {
|
||||
contentTypeRecord->Serialize(aMixedCaseMimeType);
|
||||
// validate invalid/empty parameter checks
|
||||
// according to https://mimesniff.spec.whatwg.org/#parsing-a-mime-type
|
||||
// CMimeType::Parse parses the parameters and discards ill-formed parameters
|
||||
// If we have invalid/illformed paramters we need to discard the parsed
|
||||
// mime-type
|
||||
if (contentStr.Contains(';') && !aMixedCaseMimeType.Contains(';')) {
|
||||
// parameters were discarded after parsing.
|
||||
// This should result in invalid MimeType
|
||||
aMixedCaseMimeType = "";
|
||||
}
|
||||
|
||||
aMimeType = aMixedCaseMimeType;
|
||||
// HTTP ABNF states Content-Type may have only one value.
|
||||
// This is from the "parse a header value" of the fetch spec.
|
||||
if (!contentTypeValues.IsVoid() && contentTypeValues.Find(",") == -1) {
|
||||
// Convert from a bytestring to a UTF8 CString.
|
||||
CopyLatin1toUTF8(contentTypeValues, aMimeType);
|
||||
aMixedCaseMimeType = aMimeType;
|
||||
ToLowerCase(aMimeType);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -437,15 +437,15 @@ void InternalHeaders::Fill(const Record<nsCString, nsCString>& aInit,
|
|||
|
||||
namespace {
|
||||
|
||||
class FillOriginalResponseHeaders final : public nsIHttpHeaderVisitor {
|
||||
class FillHeaders final : public nsIHttpHeaderVisitor {
|
||||
RefPtr<InternalHeaders> mInternalHeaders;
|
||||
|
||||
~FillOriginalResponseHeaders() = default;
|
||||
~FillHeaders() = default;
|
||||
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
explicit FillOriginalResponseHeaders(InternalHeaders* aInternalHeaders)
|
||||
explicit FillHeaders(InternalHeaders* aInternalHeaders)
|
||||
: mInternalHeaders(aInternalHeaders) {
|
||||
MOZ_DIAGNOSTIC_ASSERT(mInternalHeaders);
|
||||
}
|
||||
|
@ -457,34 +457,8 @@ class FillOriginalResponseHeaders final : public nsIHttpHeaderVisitor {
|
|||
}
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS(FillOriginalResponseHeaders, nsIHttpHeaderVisitor)
|
||||
NS_IMPL_ISUPPORTS(FillHeaders, nsIHttpHeaderVisitor)
|
||||
|
||||
class FillMissingResponseHeaders final : public nsIHttpHeaderVisitor {
|
||||
RefPtr<InternalHeaders> mInternalHeaders;
|
||||
|
||||
~FillMissingResponseHeaders() = default;
|
||||
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
explicit FillMissingResponseHeaders(InternalHeaders* aInternalHeaders)
|
||||
: mInternalHeaders(aInternalHeaders) {
|
||||
MOZ_DIAGNOSTIC_ASSERT(mInternalHeaders);
|
||||
}
|
||||
|
||||
NS_IMETHOD
|
||||
VisitHeader(const nsACString& aHeader, const nsACString& aValue) override {
|
||||
ErrorResult rv;
|
||||
|
||||
if (!mInternalHeaders->Has(aHeader, rv)) {
|
||||
MOZ_ASSERT(!rv.Failed());
|
||||
mInternalHeaders->Append(aHeader, aValue, IgnoreErrors());
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS(FillMissingResponseHeaders, nsIHttpHeaderVisitor)
|
||||
} // namespace
|
||||
|
||||
void InternalHeaders::FillResponseHeaders(nsIRequest* aRequest) {
|
||||
|
@ -493,23 +467,8 @@ void InternalHeaders::FillResponseHeaders(nsIRequest* aRequest) {
|
|||
return;
|
||||
}
|
||||
|
||||
RefPtr<FillOriginalResponseHeaders> visitor =
|
||||
new FillOriginalResponseHeaders(this);
|
||||
// response headers received from fetch requires extra processing
|
||||
// we need the response headers received in original formats and also include
|
||||
// any headers internally added
|
||||
// nsIHttpChannel does not have any implemenation to give both types of
|
||||
// headers hence, we fetch them seperately and merge them first step is to get
|
||||
// the original response header
|
||||
nsresult rv = httpChannel->VisitOriginalResponseHeaders(visitor);
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING("failed to fill headers");
|
||||
}
|
||||
|
||||
RefPtr<FillMissingResponseHeaders> visitMissingHeaders =
|
||||
new FillMissingResponseHeaders(this);
|
||||
rv = httpChannel->VisitResponseHeaders(visitMissingHeaders);
|
||||
|
||||
RefPtr<FillHeaders> visitor = new FillHeaders(this);
|
||||
nsresult rv = httpChannel->VisitResponseHeaders(visitor);
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING("failed to fill headers");
|
||||
}
|
||||
|
|
|
@ -1121,8 +1121,7 @@ void XMLHttpRequestMainThread::GetAllResponseHeaders(
|
|||
if (nsCOMPtr<nsIHttpChannel> httpChannel = GetCurrentHttpChannel()) {
|
||||
RefPtr<nsHeaderVisitor> visitor =
|
||||
new nsHeaderVisitor(*this, WrapNotNull(httpChannel));
|
||||
if (NS_SUCCEEDED(httpChannel->VisitOriginalResponseHeaders(visitor))) {
|
||||
visitor->MergeDuplicateHeaders();
|
||||
if (NS_SUCCEEDED(httpChannel->VisitResponseHeaders(visitor))) {
|
||||
aResponseHeaders = visitor->Headers();
|
||||
}
|
||||
return;
|
||||
|
@ -1157,38 +1156,6 @@ void XMLHttpRequestMainThread::GetAllResponseHeaders(
|
|||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
// used for parsing headers with duplicate entries
|
||||
class nsResponseHeaderVisitor final : public nsIHttpHeaderVisitor {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
nsResponseHeaderVisitor() = default;
|
||||
|
||||
NS_IMETHOD
|
||||
VisitHeader(const nsACString& aHeader, const nsACString& aValue) override {
|
||||
if (mIsHeaderPresent) {
|
||||
mValue.AppendLiteral(", ");
|
||||
}
|
||||
mValue.Append(aValue);
|
||||
mIsHeaderPresent = true;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void GetValue(nsACString& aValue) { aValue = mValue; }
|
||||
|
||||
private:
|
||||
nsCString mValue;
|
||||
|
||||
// indicates whether a header is already stored during parsing
|
||||
bool mIsHeaderPresent{false};
|
||||
|
||||
virtual ~nsResponseHeaderVisitor() = default;
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsResponseHeaderVisitor, nsIHttpHeaderVisitor)
|
||||
} // namespace
|
||||
|
||||
void XMLHttpRequestMainThread::GetResponseHeader(const nsACString& header,
|
||||
nsACString& _retval,
|
||||
ErrorResult& aRv) {
|
||||
|
@ -1249,16 +1216,11 @@ void XMLHttpRequestMainThread::GetResponseHeader(const nsACString& header,
|
|||
return;
|
||||
}
|
||||
|
||||
RefPtr<nsResponseHeaderVisitor> resposeHeaderVisitor =
|
||||
new nsResponseHeaderVisitor();
|
||||
|
||||
aRv = httpChannel->GetOriginalResponseHeader(header, resposeHeaderVisitor);
|
||||
aRv = httpChannel->GetResponseHeader(header, _retval);
|
||||
if (aRv.ErrorCodeIs(NS_ERROR_NOT_AVAILABLE)) {
|
||||
// Means no header
|
||||
_retval.SetIsVoid(true);
|
||||
aRv.SuppressException();
|
||||
} else if (!aRv.Failed()) {
|
||||
resposeHeaderVisitor->GetValue(_retval);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -571,36 +571,18 @@ class XMLHttpRequestMainThread final : public XMLHttpRequest,
|
|||
NS_DECL_NSIHTTPHEADERVISITOR
|
||||
nsHeaderVisitor(const XMLHttpRequestMainThread& aXMLHttpRequest,
|
||||
NotNull<nsIHttpChannel*> aHttpChannel);
|
||||
|
||||
void MergeDuplicateHeaders() {
|
||||
if (mHeaderList.IsEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mHeaders.Append(mHeaderList.ElementAt(0).mName);
|
||||
mHeaders.AppendLiteral(": ");
|
||||
mHeaders.Append(mHeaderList.ElementAt(0).mValue);
|
||||
|
||||
for (uint32_t i = 1; i < mHeaderList.Length(); i++) {
|
||||
const nsACString& Headers() {
|
||||
for (uint32_t i = 0; i < mHeaderList.Length(); i++) {
|
||||
HeaderEntry& header = mHeaderList.ElementAt(i);
|
||||
HeaderEntry& prevHeader = mHeaderList.ElementAt(i - 1);
|
||||
|
||||
if (header.mName != prevHeader.mName) {
|
||||
mHeaders.AppendLiteral("\r\n");
|
||||
mHeaders.Append(header.mName);
|
||||
mHeaders.AppendLiteral(": ");
|
||||
mHeaders.Append(header.mValue);
|
||||
} else {
|
||||
mHeaders.AppendLiteral(", ");
|
||||
mHeaders.Append(header.mValue);
|
||||
}
|
||||
mHeaders.Append(header.mName);
|
||||
mHeaders.AppendLiteral(": ");
|
||||
mHeaders.Append(header.mValue);
|
||||
mHeaders.AppendLiteral("\r\n");
|
||||
}
|
||||
|
||||
mHeaders.AppendLiteral("\r\n");
|
||||
return mHeaders;
|
||||
}
|
||||
|
||||
const nsACString& Headers() { return mHeaders; }
|
||||
|
||||
private:
|
||||
virtual ~nsHeaderVisitor();
|
||||
|
||||
|
|
|
@ -231,10 +231,6 @@ void nsHttpHeaderArray::ClearHeader(const nsHttpAtom& header) {
|
|||
}
|
||||
}
|
||||
|
||||
void nsHttpHeaderArray::PurgeHeaderEntries(const nsHttpAtom& header) {
|
||||
mHeaders.RemoveElementsBy(
|
||||
[header](const auto& entry) { return (entry.header == header); });
|
||||
}
|
||||
const char* nsHttpHeaderArray::PeekHeader(const nsHttpAtom& header) const {
|
||||
const nsEntry* entry = nullptr;
|
||||
LookupEntry(header, &entry);
|
||||
|
@ -448,16 +444,12 @@ void nsHttpHeaderArray::FlattenOriginalHeader(nsACString& buf) {
|
|||
}
|
||||
}
|
||||
|
||||
const char* nsHttpHeaderArray::PeekHeaderAt(uint32_t index, nsHttpAtom& header,
|
||||
nsACString& headerNameOriginal,
|
||||
HeaderVariety& variety,
|
||||
nsACString& val) const {
|
||||
const char* nsHttpHeaderArray::PeekHeaderAt(
|
||||
uint32_t index, nsHttpAtom& header, nsACString& headerNameOriginal) const {
|
||||
const nsEntry& entry = mHeaders[index];
|
||||
|
||||
header = entry.header;
|
||||
headerNameOriginal = entry.headerNameOriginal;
|
||||
variety = entry.variety;
|
||||
val = entry.value;
|
||||
return entry.value.get();
|
||||
}
|
||||
|
||||
|
|
|
@ -82,8 +82,6 @@ class nsHttpHeaderArray {
|
|||
nsIHttpHeaderVisitor* aVisitor);
|
||||
void ClearHeader(const nsHttpAtom& h);
|
||||
|
||||
void PurgeHeaderEntries(const nsHttpAtom& header);
|
||||
|
||||
// Find the location of the given header value, or null if none exists.
|
||||
const char* FindHeaderValue(const nsHttpAtom& header,
|
||||
const char* value) const {
|
||||
|
@ -119,8 +117,7 @@ class nsHttpHeaderArray {
|
|||
uint32_t Count() const { return mHeaders.Length(); }
|
||||
|
||||
const char* PeekHeaderAt(uint32_t i, nsHttpAtom& header,
|
||||
nsACString& headerNameOriginal,
|
||||
HeaderVariety& variety, nsACString& val) const;
|
||||
nsACString& headerNameOriginal) const;
|
||||
|
||||
void Clear();
|
||||
|
||||
|
|
|
@ -163,10 +163,12 @@ nsresult nsHttpResponseHead::SetHeader(const nsHttpAtom& hdr,
|
|||
return SetHeader_locked(hdr, ""_ns, val, merge);
|
||||
}
|
||||
|
||||
nsresult nsHttpResponseHead::SetHeader_locked(
|
||||
const nsHttpAtom& atom, const nsACString& hdr, const nsACString& val,
|
||||
bool merge, const nsHttpHeaderArray::HeaderVariety& variety) {
|
||||
nsresult rv = mHeaders.SetHeader(atom, hdr, val, merge, variety);
|
||||
nsresult nsHttpResponseHead::SetHeader_locked(const nsHttpAtom& atom,
|
||||
const nsACString& hdr,
|
||||
const nsACString& val,
|
||||
bool merge) {
|
||||
nsresult rv = mHeaders.SetHeader(atom, hdr, val, merge,
|
||||
nsHttpHeaderArray::eVarietyResponse);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
// respond to changes in these headers. we need to reparse the entire
|
||||
|
@ -891,95 +893,48 @@ bool nsHttpResponseHead::ExpiresInPast_locked() const {
|
|||
NS_SUCCEEDED(GetDateValue_locked(&dateVal)) && expiresVal < dateVal;
|
||||
}
|
||||
|
||||
void nsHttpResponseHead::UpdateOriginalHeaders(nsHttpResponseHead* aOther) {
|
||||
mRecursiveMutex.AssertCurrentThreadIn();
|
||||
aOther->mRecursiveMutex.AssertCurrentThreadIn();
|
||||
|
||||
uint32_t i, count = aOther->mHeaders.Count();
|
||||
|
||||
// container to maintain a list of entries purged
|
||||
nsTHashSet<nsCString> purgedEntries;
|
||||
|
||||
for (i = 0; i < count; ++i) {
|
||||
nsHttpAtom header;
|
||||
nsHttpHeaderArray::HeaderVariety variety;
|
||||
nsAutoCString headerNameOriginal;
|
||||
nsAutoCString val;
|
||||
|
||||
if (!aOther->mHeaders.PeekHeaderAt(i, header, headerNameOriginal, variety,
|
||||
val)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (CanIgnoreResponseHeaderTypes(header) ||
|
||||
!IsOriginalResponseHeader(variety)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// remove old response header entries as we have received updated
|
||||
// response headers from 304/206 response
|
||||
if (purgedEntries.EnsureInserted(header.val())) {
|
||||
mHeaders.PurgeHeaderEntries(header);
|
||||
}
|
||||
|
||||
DebugOnly<nsresult> rv =
|
||||
mHeaders.SetHeaderFromNet(header, headerNameOriginal, val, true);
|
||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
||||
}
|
||||
}
|
||||
|
||||
bool nsHttpResponseHead::CanIgnoreResponseHeaderTypes(
|
||||
const nsHttpAtom& header) const {
|
||||
return (header == nsHttp::Connection || header == nsHttp::Proxy_Connection ||
|
||||
header == nsHttp::Keep_Alive ||
|
||||
header == nsHttp::Proxy_Authenticate ||
|
||||
header == nsHttp::Proxy_Authorization ||
|
||||
// not a response header!
|
||||
header == nsHttp::TE || header == nsHttp::Trailer ||
|
||||
header == nsHttp::Transfer_Encoding || header == nsHttp::Upgrade ||
|
||||
// Ignore any non-modifiable headers...
|
||||
header == nsHttp::Content_Location || header == nsHttp::Content_MD5 ||
|
||||
header == nsHttp::ETag ||
|
||||
// Assume Cache-Control: "no-transform"
|
||||
header == nsHttp::Content_Encoding ||
|
||||
header == nsHttp::Content_Range || header == nsHttp::Content_Type ||
|
||||
// Ignore wacky headers too...
|
||||
// this one is for MS servers that send "Content-Length: 0"
|
||||
// on 304 responses
|
||||
header == nsHttp::Content_Length);
|
||||
}
|
||||
|
||||
void nsHttpResponseHead::UpdateHeaders(nsHttpResponseHead* aOther) {
|
||||
LOG(("nsHttpResponseHead::UpdateHeaders [this=%p]\n", this));
|
||||
|
||||
RecursiveMutexAutoLock monitor(mRecursiveMutex);
|
||||
RecursiveMutexAutoLock monitorOther(aOther->mRecursiveMutex);
|
||||
|
||||
UpdateOriginalHeaders(aOther);
|
||||
|
||||
uint32_t i, count = aOther->mHeaders.Count();
|
||||
|
||||
for (i = 0; i < count; ++i) {
|
||||
nsHttpAtom header;
|
||||
nsAutoCString headerNameOriginal;
|
||||
nsHttpHeaderArray::HeaderVariety variety;
|
||||
nsAutoCString val;
|
||||
|
||||
if (!aOther->mHeaders.PeekHeaderAt(i, header, headerNameOriginal, variety,
|
||||
val)) {
|
||||
if (!aOther->mHeaders.PeekHeaderAt(i, header, headerNameOriginal)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (CanIgnoreResponseHeaderTypes(header)) {
|
||||
nsAutoCString val;
|
||||
if (NS_FAILED(aOther->GetHeader(header, val))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ignore any hop-by-hop headers...
|
||||
if (header == nsHttp::Connection || header == nsHttp::Proxy_Connection ||
|
||||
header == nsHttp::Keep_Alive || header == nsHttp::Proxy_Authenticate ||
|
||||
header == nsHttp::Proxy_Authorization || // not a response header!
|
||||
header == nsHttp::TE || header == nsHttp::Trailer ||
|
||||
header == nsHttp::Transfer_Encoding || header == nsHttp::Upgrade ||
|
||||
// Ignore any non-modifiable headers...
|
||||
header == nsHttp::Content_Location || header == nsHttp::Content_MD5 ||
|
||||
header == nsHttp::ETag ||
|
||||
// Assume Cache-Control: "no-transform"
|
||||
header == nsHttp::Content_Encoding || header == nsHttp::Content_Range ||
|
||||
header == nsHttp::Content_Type ||
|
||||
// Ignore wacky headers too...
|
||||
// this one is for MS servers that send "Content-Length: 0"
|
||||
// on 304 responses
|
||||
header == nsHttp::Content_Length) {
|
||||
LOG(("ignoring response header [%s: %s]\n", header.get(), val.get()));
|
||||
} else {
|
||||
LOG(("new response header [%s: %s]\n", header.get(), val.get()));
|
||||
|
||||
if (NS_FAILED(aOther->GetHeader(header, val))) {
|
||||
continue;
|
||||
}
|
||||
// overwrite the current header value with the new value...
|
||||
DebugOnly<nsresult> rv =
|
||||
// overwrite the current header value with the new value...
|
||||
SetHeader_locked(header, headerNameOriginal, val);
|
||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
||||
}
|
||||
|
|
|
@ -147,11 +147,10 @@ class nsHttpResponseHead {
|
|||
bool GetContentTypeOptionsHeader(nsACString& aOutput) const;
|
||||
|
||||
private:
|
||||
[[nodiscard]] nsresult SetHeader_locked(
|
||||
const nsHttpAtom& atom, const nsACString& h, const nsACString& v,
|
||||
bool m = false,
|
||||
const nsHttpHeaderArray::HeaderVariety& variety =
|
||||
nsHttpHeaderArray::eVarietyResponse) MOZ_REQUIRES(mRecursiveMutex);
|
||||
[[nodiscard]] nsresult SetHeader_locked(const nsHttpAtom& atom,
|
||||
const nsACString& h,
|
||||
const nsACString& v, bool m = false)
|
||||
MOZ_REQUIRES(mRecursiveMutex);
|
||||
void AssignDefaultStatusText() MOZ_REQUIRES(mRecursiveMutex);
|
||||
void ParseVersion(const char*) MOZ_REQUIRES(mRecursiveMutex);
|
||||
void ParseCacheControl(const char*) MOZ_REQUIRES(mRecursiveMutex);
|
||||
|
@ -199,19 +198,6 @@ class nsHttpResponseHead {
|
|||
return mHasCacheControl ? mCacheControlNoCache : mPragmaNoCache;
|
||||
}
|
||||
|
||||
// update original response headers
|
||||
void UpdateOriginalHeaders(nsHttpResponseHead* aOther);
|
||||
|
||||
// headers that can be ignored for a 304/206 response
|
||||
bool CanIgnoreResponseHeaderTypes(const nsHttpAtom& header) const;
|
||||
|
||||
bool IsOriginalResponseHeader(
|
||||
const nsHttpHeaderArray::HeaderVariety variety) const {
|
||||
return (
|
||||
(variety == nsHttpHeaderArray::eVarietyResponseNetOriginal) ||
|
||||
(variety == nsHttpHeaderArray::eVarietyResponseNetOriginalAndResponse));
|
||||
}
|
||||
|
||||
private:
|
||||
// All members must be copy-constructable and assignable
|
||||
nsHttpHeaderArray mHeaders MOZ_GUARDED_BY(mRecursiveMutex);
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
[header-value-combining.any.html]
|
||||
[response.headers.get('heya') expects , \x0b\x0c, 1, , , 2]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('double-trouble') expects , ]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('www-authenticate') expects 1, 2, 3, 4]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('content-length') expects 0, 0]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[header-value-combining.any.worker.html]
|
||||
[response.headers.get('heya') expects , \x0b\x0c, 1, , , 2]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('double-trouble') expects , ]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('www-authenticate') expects 1, 2, 3, 4]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('content-length') expects 0, 0]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[header-value-combining.any.serviceworker.html]
|
||||
[response.headers.get('heya') expects , \x0b\x0c, 1, , , 2]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('double-trouble') expects , ]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('www-authenticate') expects 1, 2, 3, 4]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('content-length') expects 0, 0]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[header-value-combining.any.sharedworker.html]
|
||||
[response.headers.get('heya') expects , \x0b\x0c, 1, , , 2]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('double-trouble') expects , ]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('www-authenticate') expects 1, 2, 3, 4]
|
||||
expected: FAIL
|
||||
|
||||
[response.headers.get('content-length') expects 0, 0]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
[api-and-duplicate-headers.any.worker.html]
|
||||
[fetch() and duplicate Content-Length/Content-Type headers]
|
||||
expected: FAIL
|
||||
|
||||
[XMLHttpRequest and duplicate Content-Length/Content-Type headers]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[api-and-duplicate-headers.any.html]
|
||||
[fetch() and duplicate Content-Length/Content-Type headers]
|
||||
expected: FAIL
|
||||
|
||||
[XMLHttpRequest and duplicate Content-Length/Content-Type headers]
|
||||
expected: FAIL
|
||||
|
|
@ -5,6 +5,9 @@
|
|||
[Request: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[Response: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): separate response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -20,6 +23,9 @@
|
|||
[fetch(): combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[Request: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[Request: combined response Content-Type: text/plain;charset=gbk text/plain;charset=windows-1252]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -44,12 +50,24 @@
|
|||
[<iframe>: separate response Content-Type: text/plain;charset=gbk text/html]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): combined response Content-Type: text/plain;charset=gbk text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[Request: combined response Content-Type: text/html text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[Request: combined response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): separate response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[Request: combined response Content-Type: text/plain;charset=gbk text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): combined response Content-Type: text/plain;charset=gbk text/html]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -68,9 +86,18 @@
|
|||
[Request: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[Response: combined response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[Request: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[Response: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[Response: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -104,21 +131,45 @@
|
|||
[fetch(): combined response Content-Type: text/html;charset=gbk text/html;x=",text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): combined response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[Request: combined response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): separate response Content-Type: text/plain;charset=gbk text/html;charset=windows-1254]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): combined response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): combined response Content-Type: text/plain;charset=gbk text/plain;charset=windows-1252]
|
||||
expected: FAIL
|
||||
|
||||
[Response: combined response Content-Type: text/plain;charset=gbk text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): separate response Content-Type: text/html text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[Request: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[Response: combined response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[Request: combined response Content-Type: text/html;charset=gbk text/html;x=",text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[Response: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): combined response Content-Type: text/plain ]
|
||||
expected: FAIL
|
||||
|
||||
[Response: combined response Content-Type: text/plain ]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): separate response Content-Type: text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -131,6 +182,9 @@
|
|||
[fetch(): combined response Content-Type: text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[Request: combined response Content-Type: text/plain ]
|
||||
expected: FAIL
|
||||
|
||||
[fetch(): separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,56 @@
|
|||
[navigation-sets-cookie.https.html]
|
||||
expected: TIMEOUT
|
||||
[Same-site top-level navigation with passthrough service worker should be able to set SameSite=* cookies.]
|
||||
expected:
|
||||
if (os == "linux") and fission and not debug and (processor == "x86_64"): [TIMEOUT, NOTRUN]
|
||||
TIMEOUT
|
||||
|
||||
[Cross-site top-level navigation with passthrough service worker should be able to set SameSite=* cookies.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Same-site top-level POST with passthrough service worker should be able to set SameSite=* cookies.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Cross-site top-level with passthrough service worker POST should be able to set SameSite=* cookies.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Same-site top-level navigation with navpreload service worker should be able to set SameSite=* cookies.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Cross-site top-level navigation with navpreload service worker should be able to set SameSite=* cookies.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Same-site top-level navigation with change-request service worker should be able to set SameSite=* cookies.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Cross-site top-level navigation with change-request service worker should be able to set SameSite=* cookies.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Same-site top-level POST with change-request service worker should be able to set SameSite=* cookies.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Cross-site top-level with change-request service worker POST should be able to set SameSite=* cookies.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Cleanup service workers]
|
||||
expected: NOTRUN
|
||||
|
||||
[Cross-site top-level navigation with fallback service worker should be able to set SameSite=* cookies.]
|
||||
expected:
|
||||
if (os == "linux") and fission and not debug and (processor == "x86_64"): [PASS, NOTRUN]
|
||||
|
||||
[Cross-site top-level with fallback service worker POST should be able to set SameSite=* cookies.]
|
||||
expected:
|
||||
if (os == "linux") and fission and not debug and (processor == "x86_64"): [PASS, NOTRUN]
|
||||
|
||||
[Same-site top-level POST with fallback service worker should be able to set SameSite=* cookies.]
|
||||
expected:
|
||||
if (os == "linux") and fission and not debug and (processor == "x86_64"): [PASS, NOTRUN]
|
||||
|
||||
[Same-site top-level navigation with fallback service worker should be able to set SameSite=* cookies.]
|
||||
expected:
|
||||
if (os == "linux") and fission and not debug and (processor == "x86_64"): [PASS, NOTRUN]
|
||||
|
||||
[Setup service workers]
|
||||
expected:
|
||||
if (os == "linux") and fission and not debug and (processor == "x86_64"): [PASS, TIMEOUT]
|
|
@ -1,54 +1,193 @@
|
|||
[same-site-cookies.https.html]
|
||||
expected:
|
||||
if (os == "linux") and fission and not debug: [TIMEOUT, CRASH]
|
||||
if (os == "linux") and not fission and not debug: [TIMEOUT, CRASH]
|
||||
TIMEOUT
|
||||
[same-origin, window.open with passthrough]
|
||||
expected: TIMEOUT
|
||||
|
||||
[same-origin, window.open with change-request]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with navpreload]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-site, window.open with no service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-site, window.open with fallback]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-site, window.open with passthrough]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-site, window.open with change-request]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-site, window.open with navpreload]
|
||||
expected: NOTRUN
|
||||
|
||||
[cross-site, window.open with no service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[cross-site, window.open with fallback]
|
||||
expected: NOTRUN
|
||||
|
||||
[cross-site, window.open with passthrough]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[cross-site, window.open with change-request]
|
||||
expected: NOTRUN
|
||||
|
||||
[cross-site, window.open with navpreload]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with no service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with fallback]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with passthrough]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with change-request]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-site, form post with no service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-site, form post with fallback]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-site, form post with passthrough]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-site, form post with change-request]
|
||||
expected: NOTRUN
|
||||
|
||||
[cross-site, form post with no service worker]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[cross-site, form post with fallback]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[cross-site, form post with passthrough]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[cross-site, form post with change-request]
|
||||
expected: NOTRUN
|
||||
|
||||
[Cleanup service workers]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with no service worker and same-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with fallback and same-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with passthrough and same-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with change-request and same-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with navpreload and same-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with no service worker and cross-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with fallback and cross-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with passthrough and cross-site redirect]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with change-request and cross-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with navpreload and cross-site redirect]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with no service worker, cross-site redirect, and same-origin redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with fallback, cross-site redirect, and same-origin redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with passthrough, cross-site redirect, and same-origin redirect]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with change-request, cross-site redirect, and same-origin redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, window.open with navpreload, cross-site redirect, and same-origin redirect]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with no service worker and same-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with fallback and same-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with passthrough and same-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with change-request and same-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with no service worker and cross-site redirect]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with fallback and cross-site redirect]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with passthrough and cross-site redirect]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with change-request and cross-site redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with no service worker, cross-site redirect, and same-origin redirect]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with fallback, cross-site redirect, and same-origin redirect]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with passthrough, cross-site redirect, and same-origin redirect]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, form post with change-request, cross-site redirect, and same-origin redirect]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, nested window.open with cross-site middle frame and no service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, nested window.open with cross-site middle frame and fallback service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, nested window.open with cross-site middle frame and passthrough service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, nested window.open with cross-site middle frame and change-request service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, nested window.open with cross-site middle frame and navpreload service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, nested set location with cross-site middle frame and no service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, nested set location with cross-site middle frame and fallback service worker]
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, nested set location with cross-site middle frame and passthrough service worker]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, nested set location with cross-site middle frame and change-request service worker]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[same-origin, nested set location with cross-site middle frame and navpreload service worker]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[xhr-content-length.https.window.html]
|
||||
expected:
|
||||
if (os == "android") and debug and not swgl: [OK, ERROR]
|
||||
[Synthetic response with two Content-Length headers value larger than response body length]
|
||||
expected: FAIL
|
|
@ -0,0 +1,13 @@
|
|||
[getallresponseheaders.htm]
|
||||
[XMLHttpRequest: getAllResponseHeaders() 5]
|
||||
expected: FAIL
|
||||
|
||||
[XMLHttpRequest: getAllResponseHeaders() 2]
|
||||
expected: FAIL
|
||||
|
||||
[XMLHttpRequest: getAllResponseHeaders() 6]
|
||||
expected: FAIL
|
||||
|
||||
[XMLHttpRequest: getAllResponseHeaders() 3]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
[getresponseheader.any.worker.html]
|
||||
[getResponseHeader('heya') expects , \x0b\x0c, 1, , , 2]
|
||||
expected: FAIL
|
||||
|
||||
[getResponseHeader('double-trouble') expects , ]
|
||||
expected: FAIL
|
||||
|
||||
[getResponseHeader('content-length') expects 0, 0]
|
||||
expected: FAIL
|
||||
|
||||
[getResponseHeader('www-authenticate') expects 1, 2, 3, 4]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[getresponseheader.any.html]
|
||||
[getResponseHeader('heya') expects , \x0b\x0c, 1, , , 2]
|
||||
expected: FAIL
|
||||
|
||||
[getResponseHeader('double-trouble') expects , ]
|
||||
expected: FAIL
|
||||
|
||||
[getResponseHeader('content-length') expects 0, 0]
|
||||
expected: FAIL
|
||||
|
||||
[getResponseHeader('www-authenticate') expects 1, 2, 3, 4]
|
||||
expected: FAIL
|
||||
|
Загрузка…
Ссылка в новой задаче