mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-06 07:48:38 +09:00
moebius#140: Fix: Fetch - headers should sort and combine
https://github.com/MoonchildProductions/moebius/pull/140
This commit is contained in:
parent
a3fc13a8fc
commit
f70e3223fb
4 changed files with 86 additions and 27 deletions
|
|
@ -21,12 +21,14 @@ InternalHeaders::InternalHeaders(const nsTArray<Entry>&& aHeaders,
|
|||
HeadersGuardEnum aGuard)
|
||||
: mGuard(aGuard)
|
||||
, mList(aHeaders)
|
||||
, mListDirty(true)
|
||||
{
|
||||
}
|
||||
|
||||
InternalHeaders::InternalHeaders(const nsTArray<HeadersEntry>& aHeadersEntryList,
|
||||
HeadersGuardEnum aGuard)
|
||||
: mGuard(aGuard)
|
||||
, mListDirty(true)
|
||||
{
|
||||
for (const HeadersEntry& headersEntry : aHeadersEntryList) {
|
||||
mList.AppendElement(Entry(headersEntry.name(), headersEntry.value()));
|
||||
|
|
@ -56,6 +58,8 @@ InternalHeaders::Append(const nsACString& aName, const nsACString& aValue,
|
|||
return;
|
||||
}
|
||||
|
||||
SetListDirty();
|
||||
|
||||
mList.AppendElement(Entry(lowerName, aValue));
|
||||
}
|
||||
|
||||
|
|
@ -69,6 +73,8 @@ InternalHeaders::Delete(const nsACString& aName, ErrorResult& aRv)
|
|||
return;
|
||||
}
|
||||
|
||||
SetListDirty();
|
||||
|
||||
// remove in reverse order to minimize copying
|
||||
for (int32_t i = mList.Length() - 1; i >= 0; --i) {
|
||||
if (lowerName == mList[i].mName) {
|
||||
|
|
@ -155,6 +161,8 @@ InternalHeaders::Set(const nsACString& aName, const nsACString& aValue, ErrorRes
|
|||
return;
|
||||
}
|
||||
|
||||
SetListDirty();
|
||||
|
||||
int32_t firstIndex = INT32_MAX;
|
||||
|
||||
// remove in reverse order to minimize copying
|
||||
|
|
@ -177,6 +185,7 @@ InternalHeaders::Set(const nsACString& aName, const nsACString& aValue, ErrorRes
|
|||
void
|
||||
InternalHeaders::Clear()
|
||||
{
|
||||
SetListDirty();
|
||||
mList.Clear();
|
||||
}
|
||||
|
||||
|
|
@ -419,5 +428,54 @@ InternalHeaders::GetUnsafeHeaders(nsTArray<nsCString>& aNames) const
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
InternalHeaders::MaybeSortList()
|
||||
{
|
||||
class Comparator {
|
||||
public:
|
||||
bool Equals(const Entry& aA, const Entry& aB) const
|
||||
{
|
||||
return aA.mName == aB.mName;
|
||||
}
|
||||
|
||||
bool LessThan(const Entry& aA, const Entry& aB) const
|
||||
{
|
||||
return aA.mName < aB.mName;
|
||||
}
|
||||
};
|
||||
|
||||
if (!mListDirty) {
|
||||
return;
|
||||
}
|
||||
|
||||
mListDirty = false;
|
||||
|
||||
Comparator comparator;
|
||||
|
||||
mSortedList.Clear();
|
||||
for (const Entry& entry : mList) {
|
||||
bool found = false;
|
||||
for (Entry& sortedEntry : mSortedList) {
|
||||
if (sortedEntry.mName == entry.mName) {
|
||||
sortedEntry.mValue += ", ";
|
||||
sortedEntry.mValue += entry.mValue;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
mSortedList.InsertElementSorted(entry, comparator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
InternalHeaders::SetListDirty()
|
||||
{
|
||||
mSortedList.Clear();
|
||||
mListDirty = true;
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue