Diff
Modified: trunk/Source/WebCore/ChangeLog (292691 => 292692)
--- trunk/Source/WebCore/ChangeLog 2022-04-10 23:52:37 UTC (rev 292691)
+++ trunk/Source/WebCore/ChangeLog 2022-04-10 23:54:28 UTC (rev 292692)
@@ -1,3 +1,38 @@
+2022-04-10 Chris Dumez <cdu...@apple.com>
+
+ Avoid redundant calls to findHTTPHeaderName()
+ https://bugs.webkit.org/show_bug.cgi?id=239021
+
+ Reviewed by Darin Adler.
+
+ Some call sites of HTTPHeaderMap::add() / set() or ResourceResponse::addHTTPHeaderField() / setHTTPHeaderField()
+ have already called findHTTPHeaderName() and determined that this wasn't a common header. As a result, we were
+ doing redundant findHTTPHeaderName() checks inside those functions. To avoid this, add overloads that take in
+ a header that we already know is uncommon.
+
+ * Modules/fetch/FetchHeaders.cpp:
+ (WebCore::appendToHeaderMap):
+ (WebCore::FetchHeaders::filterAndFill):
+ * Modules/fetch/FetchResponse.cpp:
+ (WebCore::FetchResponse::resourceResponse const):
+ * Modules/websockets/WebSocketHandshake.cpp:
+ (WebCore::WebSocketHandshake::readHTTPHeaders):
+ * platform/network/CacheValidation.cpp:
+ (WebCore::updateResponseHeadersAfterRevalidation):
+ * platform/network/HTTPHeaderMap.cpp:
+ (WebCore::HTTPHeaderMap::setUncommonHeader):
+ (WebCore::HTTPHeaderMap::add):
+ (WebCore::HTTPHeaderMap::addUncommonHeader):
+ * platform/network/HTTPHeaderMap.h:
+ * platform/network/ResourceResponseBase.cpp:
+ (WebCore::ResourceResponseBase::setHTTPHeaderField):
+ (WebCore::ResourceResponseBase::setUncommonHTTPHeaderField):
+ (WebCore::ResourceResponseBase::addHTTPHeaderField):
+ (WebCore::ResourceResponseBase::addUncommonHTTPHeaderField):
+ * platform/network/ResourceResponseBase.h:
+ * workers/service/ServiceWorkerJob.cpp:
+ (WebCore::ServiceWorkerJob::fetchScriptWithContext):
+
2022-04-10 Alan Bujtas <za...@apple.com>
[Line clamp] Move line clamp only code from RenderBlockFlow to RenderDeprecatedFlexibleBox
Modified: trunk/Source/WebCore/Modules/fetch/FetchHeaders.cpp (292691 => 292692)
--- trunk/Source/WebCore/Modules/fetch/FetchHeaders.cpp 2022-04-10 23:52:37 UTC (rev 292691)
+++ trunk/Source/WebCore/Modules/fetch/FetchHeaders.cpp 2022-04-10 23:54:28 UTC (rev 292692)
@@ -87,7 +87,7 @@
if (header.keyAsHTTPHeaderName)
headers.add(header.keyAsHTTPHeaderName.value(), header.value);
else
- headers.add(header.key, header.value);
+ headers.addUncommonHeader(header.key, header.value);
if (guard == FetchHeaders::Guard::RequestNoCors)
removePrivilegedNoCORSRequestHeaders(headers);
@@ -218,7 +218,7 @@
if (header.keyAsHTTPHeaderName)
m_headers.add(header.keyAsHTTPHeaderName.value(), header.value);
else
- m_headers.add(header.key, header.value);
+ m_headers.addUncommonHeader(header.key, header.value);
}
}
Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp (292691 => 292692)
--- trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp 2022-04-10 23:52:37 UTC (rev 292691)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp 2022-04-10 23:54:28 UTC (rev 292692)
@@ -538,8 +538,12 @@
if (headers().guard() != FetchHeaders::Guard::Immutable) {
// FIXME: Add a setHTTPHeaderFields on ResourceResponseBase.
- for (auto& header : headers().internalHeaders())
- response.setHTTPHeaderField(header.key, header.value);
+ for (auto& header : headers().internalHeaders()) {
+ if (header.keyAsHTTPHeaderName)
+ response.setHTTPHeaderField(*header.keyAsHTTPHeaderName, header.value);
+ else
+ response.setUncommonHTTPHeaderField(header.key, header.value);
+ }
}
return response;
Modified: trunk/Source/WebCore/Modules/websockets/WebSocketHandshake.cpp (292691 => 292692)
--- trunk/Source/WebCore/Modules/websockets/WebSocketHandshake.cpp 2022-04-10 23:52:37 UTC (rev 292691)
+++ trunk/Source/WebCore/Modules/websockets/WebSocketHandshake.cpp 2022-04-10 23:54:28 UTC (rev 292692)
@@ -453,7 +453,7 @@
HTTPHeaderName headerName;
if (!findHTTPHeaderName(name, headerName)) {
// Evidence in the wild shows that services make use of custom headers in the handshake
- m_serverHandshakeResponse.addHTTPHeaderField(name.toString(), value);
+ m_serverHandshakeResponse.addUncommonHTTPHeaderField(name.toString(), value);
continue;
}
Modified: trunk/Source/WebCore/platform/network/CacheValidation.cpp (292691 => 292692)
--- trunk/Source/WebCore/platform/network/CacheValidation.cpp 2022-04-10 23:52:37 UTC (rev 292691)
+++ trunk/Source/WebCore/platform/network/CacheValidation.cpp 2022-04-10 23:54:28 UTC (rev 292692)
@@ -93,7 +93,10 @@
// we care about.
if (!shouldUpdateHeaderAfterRevalidation(header.key))
continue;
- response.setHTTPHeaderField(header.key, header.value);
+ if (header.keyAsHTTPHeaderName)
+ response.setHTTPHeaderField(*header.keyAsHTTPHeaderName, header.value);
+ else
+ response.setUncommonHTTPHeaderField(header.key, header.value);
}
}
Modified: trunk/Source/WebCore/platform/network/HTTPHeaderMap.cpp (292691 => 292692)
--- trunk/Source/WebCore/platform/network/HTTPHeaderMap.cpp 2022-04-10 23:52:37 UTC (rev 292691)
+++ trunk/Source/WebCore/platform/network/HTTPHeaderMap.cpp 2022-04-10 23:54:28 UTC (rev 292692)
@@ -109,6 +109,11 @@
void HTTPHeaderMap::setUncommonHeader(const String& name, const String& value)
{
+#if ASSERT_ENABLED
+ HTTPHeaderName headerName;
+ ASSERT(!findHTTPHeaderName(name, headerName));
+#endif
+
auto index = m_uncommonHeaders.findIf([&](auto& header) {
return equalIgnoringASCIICase(header.key, name);
});
@@ -125,6 +130,16 @@
add(headerName, value);
return;
}
+ addUncommonHeader(name, value);
+}
+
+void HTTPHeaderMap::addUncommonHeader(const String& name, const String& value)
+{
+#if ASSERT_ENABLED
+ HTTPHeaderName headerName;
+ ASSERT(!findHTTPHeaderName(name, headerName));
+#endif
+
auto index = m_uncommonHeaders.findIf([&](auto& header) {
return equalIgnoringASCIICase(header.key, name);
});
Modified: trunk/Source/WebCore/platform/network/HTTPHeaderMap.h (292691 => 292692)
--- trunk/Source/WebCore/platform/network/HTTPHeaderMap.h 2022-04-10 23:52:37 UTC (rev 292691)
+++ trunk/Source/WebCore/platform/network/HTTPHeaderMap.h 2022-04-10 23:54:28 UTC (rev 292692)
@@ -157,6 +157,8 @@
WEBCORE_EXPORT String get(StringView name) const;
WEBCORE_EXPORT void set(const String& name, const String& value);
WEBCORE_EXPORT void add(const String& name, const String& value);
+ void setUncommonHeader(const String& name, const String& value);
+ void addUncommonHeader(const String& name, const String& value);
WEBCORE_EXPORT void append(const String& name, const String& value);
WEBCORE_EXPORT bool contains(const String&) const;
WEBCORE_EXPORT bool remove(const String&);
@@ -213,7 +215,6 @@
template <class Decoder> static WARN_UNUSED_RETURN bool decode(Decoder&, HTTPHeaderMap&);
private:
- void setUncommonHeader(const String& name, const String& value);
WEBCORE_EXPORT String getUncommonHeader(StringView name) const;
CommonHeadersVector m_commonHeaders;
Modified: trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp (292691 => 292692)
--- trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp 2022-04-10 23:52:37 UTC (rev 292691)
+++ trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp 2022-04-10 23:54:28 UTC (rev 292692)
@@ -566,14 +566,19 @@
void ResourceResponseBase::setHTTPHeaderField(const String& name, const String& value)
{
- lazyInit(AllFields);
-
HTTPHeaderName headerName;
if (findHTTPHeaderName(name, headerName))
- updateHeaderParsedState(headerName);
+ setHTTPHeaderField(headerName, value);
+ else
+ setUncommonHTTPHeaderField(name, value);
+}
- m_httpHeaderFields.set(name, value);
+void ResourceResponseBase::setUncommonHTTPHeaderField(const String& name, const String& value)
+{
+ lazyInit(AllFields);
+ m_httpHeaderFields.setUncommonHeader(name, value);
+
// FIXME: Should invalidate or update platform response if present.
}
@@ -607,12 +612,16 @@
HTTPHeaderName headerName;
if (findHTTPHeaderName(name, headerName))
addHTTPHeaderField(headerName, value);
- else {
- lazyInit(AllFields);
- m_httpHeaderFields.add(name, value);
- }
+ else
+ addUncommonHTTPHeaderField(name, value);
}
+void ResourceResponseBase::addUncommonHTTPHeaderField(const String& name, const String& value)
+{
+ lazyInit(AllFields);
+ m_httpHeaderFields.addUncommonHeader(name, value);
+}
+
const HTTPHeaderMap& ResourceResponseBase::httpHeaderFields() const
{
lazyInit(AllFields);
Modified: trunk/Source/WebCore/platform/network/ResourceResponseBase.h (292691 => 292692)
--- trunk/Source/WebCore/platform/network/ResourceResponseBase.h 2022-04-10 23:52:37 UTC (rev 292691)
+++ trunk/Source/WebCore/platform/network/ResourceResponseBase.h 2022-04-10 23:54:28 UTC (rev 292692)
@@ -122,10 +122,12 @@
String httpHeaderField(StringView name) const;
WEBCORE_EXPORT String httpHeaderField(HTTPHeaderName) const;
WEBCORE_EXPORT void setHTTPHeaderField(const String& name, const String& value);
+ WEBCORE_EXPORT void setUncommonHTTPHeaderField(const String& name, const String& value);
WEBCORE_EXPORT void setHTTPHeaderField(HTTPHeaderName, const String& value);
WEBCORE_EXPORT void addHTTPHeaderField(HTTPHeaderName, const String& value);
WEBCORE_EXPORT void addHTTPHeaderField(const String& name, const String& value);
+ WEBCORE_EXPORT void addUncommonHTTPHeaderField(const String& name, const String& value);
// Instead of passing a string literal to any of these functions, just use a HTTPHeaderName instead.
template<size_t length> String httpHeaderField(const char (&)[length]) const = delete;
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp (292691 => 292692)
--- trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp 2022-04-10 23:52:37 UTC (rev 292691)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp 2022-04-10 23:54:28 UTC (rev 292692)
@@ -105,7 +105,7 @@
ResourceRequest request { m_jobData.scriptURL };
request.setInitiatorIdentifier(context.resourceRequestIdentifier());
- request.addHTTPHeaderField("Service-Worker"_s, "script"_s);
+ request.addHTTPHeaderField(HTTPHeaderName::ServiceWorker, "script"_s);
FetchOptions options;
options.mode = FetchOptions::Mode::SameOrigin;