Title: [292692] trunk/Source/WebCore
Revision
292692
Author
cdu...@apple.com
Date
2022-04-10 16:54:28 -0700 (Sun, 10 Apr 2022)

Log Message

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):

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to