Title: [238953] trunk/Source/WebCore
Revision
238953
Author
[email protected]
Date
2018-12-07 10:33:43 -0800 (Fri, 07 Dec 2018)

Log Message

Merge parseAccessControlExposeHeadersAllowList into parseAccessControlAllowList
https://bugs.webkit.org/show_bug.cgi?id=192288

Patch by Rob Buis <[email protected]> on 2018-12-07
Reviewed by Frédéric Wang.

Merge parseAccessControlExposeHeadersAllowList into parseAccessControlAllowList
as they do the same thing. Also remove std::optional from parseAccessControlAllowList
since the function can't fail.

* WebCore.order:
* loader/CrossOriginAccessControl.cpp:
(WebCore::validatePreflightResponse):
* loader/CrossOriginPreflightResultCache.cpp:
(WebCore::CrossOriginPreflightResultCacheItem::parse):
* loader/CrossOriginPreflightResultCache.h:
* platform/network/HTTPParsers.cpp:
(WebCore::parseAccessControlExposeHeadersAllowList): Deleted.
* platform/network/HTTPParsers.h:
(WebCore::parseAccessControlAllowList):
* platform/network/ResourceResponseBase.cpp:
(WebCore::ResourceResponseBase::filter):
(WebCore::ResourceResponseBase::sanitizeHTTPHeaderFieldsAccordingToTainting):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (238952 => 238953)


--- trunk/Source/WebCore/ChangeLog	2018-12-07 18:08:24 UTC (rev 238952)
+++ trunk/Source/WebCore/ChangeLog	2018-12-07 18:33:43 UTC (rev 238953)
@@ -1,3 +1,28 @@
+2018-12-07  Rob Buis  <[email protected]>
+
+        Merge parseAccessControlExposeHeadersAllowList into parseAccessControlAllowList
+        https://bugs.webkit.org/show_bug.cgi?id=192288
+
+        Reviewed by Frédéric Wang.
+
+        Merge parseAccessControlExposeHeadersAllowList into parseAccessControlAllowList
+        as they do the same thing. Also remove std::optional from parseAccessControlAllowList
+        since the function can't fail.
+
+        * WebCore.order:
+        * loader/CrossOriginAccessControl.cpp:
+        (WebCore::validatePreflightResponse):
+        * loader/CrossOriginPreflightResultCache.cpp:
+        (WebCore::CrossOriginPreflightResultCacheItem::parse):
+        * loader/CrossOriginPreflightResultCache.h:
+        * platform/network/HTTPParsers.cpp:
+        (WebCore::parseAccessControlExposeHeadersAllowList): Deleted.
+        * platform/network/HTTPParsers.h:
+        (WebCore::parseAccessControlAllowList):
+        * platform/network/ResourceResponseBase.cpp:
+        (WebCore::ResourceResponseBase::filter):
+        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFieldsAccordingToTainting):
+
 2018-12-07  Eric Carlson  <[email protected]>
 
         [iOS] Don't update AVPlayerViewController currentTime while scrubbing

Modified: trunk/Source/WebCore/WebCore.order (238952 => 238953)


--- trunk/Source/WebCore/WebCore.order	2018-12-07 18:08:24 UTC (rev 238952)
+++ trunk/Source/WebCore/WebCore.order	2018-12-07 18:33:43 UTC (rev 238953)
@@ -7313,7 +7313,6 @@
 __ZNK7WebCore14XMLHttpRequest6statusERi
 __ZN7WebCore54jsXMLHttpRequestPrototypeFunctionGetAllResponseHeadersEPN3JSC9ExecStateE
 __ZNK7WebCore14XMLHttpRequest21getAllResponseHeadersERi
-__ZN7WebCore40parseAccessControlExposeHeadersAllowListERKN3WTF6StringERNS0_7HashSetIS1_NS0_15CaseFoldingHashENS0_10HashTraitsIS1_EEEE
 __ZN7WebCore27jsXMLHttpRequestResponseXMLEPN3JSC9ExecStateENS0_7JSValueENS0_12PropertyNameE
 __ZN7WebCore14XMLHttpRequest11responseXMLERi
 __ZNK7WebCore14XMLHttpRequest16responseMIMETypeEv

Modified: trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp (238952 => 238953)


--- trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp	2018-12-07 18:08:24 UTC (rev 238952)
+++ trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp	2018-12-07 18:33:43 UTC (rev 238953)
@@ -206,7 +206,7 @@
         return false;
 
     auto result = std::make_unique<CrossOriginPreflightResultCacheItem>(storedCredentialsPolicy);
-    if (!result->parse(response, errorDescription)
+    if (!result->parse(response)
         || !result->allowsCrossOriginMethod(request.httpMethod(), errorDescription)
         || !result->allowsCrossOriginHeaders(request.httpHeaderFields(), errorDescription)) {
         return false;

Modified: trunk/Source/WebCore/loader/CrossOriginPreflightResultCache.cpp (238952 => 238953)


--- trunk/Source/WebCore/loader/CrossOriginPreflightResultCache.cpp	2018-12-07 18:08:24 UTC (rev 238952)
+++ trunk/Source/WebCore/loader/CrossOriginPreflightResultCache.cpp	2018-12-07 18:33:43 UTC (rev 238953)
@@ -52,23 +52,13 @@
     return ok;
 }
 
-bool CrossOriginPreflightResultCacheItem::parse(const ResourceResponse& response, String& errorDescription)
+bool CrossOriginPreflightResultCacheItem::parse(const ResourceResponse& response)
 {
     m_methods.clear();
-    auto methods = parseAccessControlAllowList(response.httpHeaderField(HTTPHeaderName::AccessControlAllowMethods));
-    if (!methods) {
-        errorDescription = "Cannot parse Access-Control-Allow-Methods response header field.";
-        return false;
-    }
-    m_methods = WTFMove(methods.value());
+    parseAccessControlAllowList(response.httpHeaderField(HTTPHeaderName::AccessControlAllowMethods), m_methods);
 
     m_headers.clear();
-    auto headers = parseAccessControlAllowList<ASCIICaseInsensitiveHash>(response.httpHeaderField(HTTPHeaderName::AccessControlAllowHeaders));
-    if (!headers) {
-        errorDescription = "Cannot parse Access-Control-Allow-Headers response header field.";
-        return false;
-    }
-    m_headers = WTFMove(headers.value());
+    parseAccessControlAllowList<ASCIICaseInsensitiveHash>(response.httpHeaderField(HTTPHeaderName::AccessControlAllowHeaders), m_headers);
 
     Seconds expiryDelta = 0_s;
     if (parseAccessControlMaxAge(response.httpHeaderField(HTTPHeaderName::AccessControlMaxAge), expiryDelta)) {

Modified: trunk/Source/WebCore/loader/CrossOriginPreflightResultCache.h (238952 => 238953)


--- trunk/Source/WebCore/loader/CrossOriginPreflightResultCache.h	2018-12-07 18:08:24 UTC (rev 238952)
+++ trunk/Source/WebCore/loader/CrossOriginPreflightResultCache.h	2018-12-07 18:33:43 UTC (rev 238953)
@@ -45,7 +45,7 @@
     {
     }
 
-    WEBCORE_EXPORT bool parse(const ResourceResponse&, String& errorDescription);
+    WEBCORE_EXPORT bool parse(const ResourceResponse&);
     WEBCORE_EXPORT bool allowsCrossOriginMethod(const String&, String& errorDescription) const;
     WEBCORE_EXPORT bool allowsCrossOriginHeaders(const HTTPHeaderMap&, String& errorDescription) const;
     bool allowsRequest(StoredCredentialsPolicy, const String& method, const HTTPHeaderMap& requestHeaders) const;

Modified: trunk/Source/WebCore/platform/network/HTTPParsers.cpp (238952 => 238953)


--- trunk/Source/WebCore/platform/network/HTTPParsers.cpp	2018-12-07 18:08:24 UTC (rev 238952)
+++ trunk/Source/WebCore/platform/network/HTTPParsers.cpp	2018-12-07 18:33:43 UTC (rev 238953)
@@ -769,15 +769,6 @@
     return length;
 }
 
-void parseAccessControlExposeHeadersAllowList(const String& headerValue, HTTPHeaderSet& headerSet)
-{
-    for (auto& header : headerValue.split(',')) {
-        String strippedHeader = header.stripWhiteSpace();
-        if (!strippedHeader.isEmpty())
-            headerSet.add(strippedHeader);
-    }
-}
-
 // Implements <https://fetch.spec.whatwg.org/#forbidden-header-name>.
 bool isForbiddenHeaderName(const String& name)
 {

Modified: trunk/Source/WebCore/platform/network/HTTPParsers.h (238952 => 238953)


--- trunk/Source/WebCore/platform/network/HTTPParsers.h	2018-12-07 18:08:24 UTC (rev 238952)
+++ trunk/Source/WebCore/platform/network/HTTPParsers.h	2018-12-07 18:33:43 UTC (rev 238953)
@@ -97,8 +97,6 @@
 size_t parseHTTPHeader(const char* data, size_t length, String& failureReason, StringView& nameStr, String& valueStr, bool strict = true);
 size_t parseHTTPRequestBody(const char* data, size_t length, Vector<unsigned char>& body);
 
-void parseAccessControlExposeHeadersAllowList(const String& headerValue, HTTPHeaderSet&);
-
 // HTTP Header routine as per https://fetch.spec.whatwg.org/#terminology-headers
 bool isForbiddenHeaderName(const String&);
 bool isForbiddenResponseHeaderName(const String&);
@@ -151,9 +149,8 @@
 }
 
 template<class HashType = DefaultHash<String>::Hash>
-std::optional<HashSet<String, HashType>> parseAccessControlAllowList(const String& string)
+void parseAccessControlAllowList(const String& string, HashSet<String, HashType>& set)
 {
-    HashSet<String, HashType> set;
     unsigned start = 0;
     size_t end;
     while ((end = string.find(',', start)) != notFound) {
@@ -163,8 +160,6 @@
     }
     if (start != string.length())
         addToAccessControlAllowList(string, start, string.length() - 1, set);
-
-    return set;
 }
 
 }

Modified: trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp (238952 => 238953)


--- trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp	2018-12-07 18:08:24 UTC (rev 238952)
+++ trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp	2018-12-07 18:33:43 UTC (rev 238953)
@@ -152,7 +152,7 @@
     filteredResponse.setType(Type::Cors);
 
     HTTPHeaderSet accessControlExposeHeaderSet;
-    parseAccessControlExposeHeadersAllowList(response.httpHeaderField(HTTPHeaderName::AccessControlExposeHeaders), accessControlExposeHeaderSet);
+    parseAccessControlAllowList(response.httpHeaderField(HTTPHeaderName::AccessControlExposeHeaders), accessControlExposeHeaderSet);
     filteredResponse.m_httpHeaderFields.uncommonHeaders().removeAllMatching([&](auto& entry) {
         return !isCrossOriginSafeHeader(entry.key, accessControlExposeHeaderSet);
     });
@@ -419,13 +419,13 @@
             if (isSafeCrossOriginResponseHeader(header.key))
                 filteredHeaders.add(header.key, WTFMove(header.value));
         }
-        if (auto corsSafeHeaderSet = parseAccessControlAllowList(httpHeaderField(HTTPHeaderName::AccessControlExposeHeaders))) {
-            for (auto& headerName : *corsSafeHeaderSet) {
-                if (!filteredHeaders.contains(headerName)) {
-                    auto value = m_httpHeaderFields.get(headerName);
-                    if (!value.isNull())
-                        filteredHeaders.add(headerName, value);
-                }
+        HTTPHeaderSet corsSafeHeaderSet;
+        parseAccessControlAllowList(httpHeaderField(HTTPHeaderName::AccessControlExposeHeaders), corsSafeHeaderSet);
+        for (auto& headerName : corsSafeHeaderSet) {
+            if (!filteredHeaders.contains(headerName)) {
+                auto value = m_httpHeaderFields.get(headerName);
+                if (!value.isNull())
+                    filteredHeaders.add(headerName, value);
             }
         }
         m_httpHeaderFields = WTFMove(filteredHeaders);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to