Diff
Modified: trunk/Source/WebCore/ChangeLog (264565 => 264566)
--- trunk/Source/WebCore/ChangeLog 2020-07-18 03:13:20 UTC (rev 264565)
+++ trunk/Source/WebCore/ChangeLog 2020-07-18 10:33:54 UTC (rev 264566)
@@ -1,3 +1,27 @@
+2020-07-18 Rob Buis <[email protected]>
+
+ Only use enum classes in HTTPParsers
+ https://bugs.webkit.org/show_bug.cgi?id=214451
+
+ Reviewed by Darin Adler.
+
+ Only use enum classes in HTTPParsers by converting XFrameOptionsSameOrigin
+ and ContentTypeOptionsDisposition. Remove HTTPVersion enum since its
+ only use is by parseHTTPRequestLine, but this method is unused.
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
+ * loader/cache/CachedCSSStyleSheet.cpp:
+ (WebCore::CachedCSSStyleSheet::mimeTypeAllowedByNosniff const):
+ * platform/network/HTTPParsers.cpp:
+ (WebCore::parseContentTypeOptionsHeader):
+ (WebCore::parseXFrameOptionsHeader):
+ (WebCore::parseHTTPRequestLine): Deleted.
+ * platform/network/HTTPParsers.h:
+ (): Deleted.
+ * platform/network/ResourceResponseBase.cpp:
+ (WebCore::isScriptAllowedByNosniff):
+
2020-07-17 Sam Weinig <[email protected]>
Remove final vestigates of SimpleColor
Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (264565 => 264566)
--- trunk/Source/WebCore/loader/FrameLoader.cpp 2020-07-18 03:13:20 UTC (rev 264565)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp 2020-07-18 10:33:54 UTC (rev 264566)
@@ -3615,7 +3615,7 @@
XFrameOptionsDisposition disposition = parseXFrameOptionsHeader(content);
switch (disposition) {
- case XFrameOptionsSameOrigin: {
+ case XFrameOptionsDisposition::SameOrigin: {
auto origin = SecurityOrigin::create(url);
if (!origin->isSameSchemeHostPort(topFrame.document()->securityOrigin()))
return true;
@@ -3625,17 +3625,17 @@
}
return false;
}
- case XFrameOptionsDeny:
+ case XFrameOptionsDisposition::Deny:
return true;
- case XFrameOptionsAllowAll:
+ case XFrameOptionsDisposition::AllowAll:
return false;
- case XFrameOptionsConflict:
+ case XFrameOptionsDisposition::Conflict:
m_frame.document()->addConsoleMessage(MessageSource::JS, MessageLevel::Error, "Multiple 'X-Frame-Options' headers with conflicting values ('" + content + "') encountered when loading '" + url.stringCenterEllipsizedToLength() + "'. Falling back to 'DENY'.", requestIdentifier);
return true;
- case XFrameOptionsInvalid:
+ case XFrameOptionsDisposition::Invalid:
m_frame.document()->addConsoleMessage(MessageSource::JS, MessageLevel::Error, "Invalid 'X-Frame-Options' header encountered when loading '" + url.stringCenterEllipsizedToLength() + "': '" + content + "' is not a recognized directive. The header will be ignored.", requestIdentifier);
return false;
- case XFrameOptionsNone:
+ case XFrameOptionsDisposition::None:
return false;
}
ASSERT_NOT_REACHED();
Modified: trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp (264565 => 264566)
--- trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp 2020-07-18 03:13:20 UTC (rev 264565)
+++ trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp 2020-07-18 10:33:54 UTC (rev 264566)
@@ -127,7 +127,7 @@
bool CachedCSSStyleSheet::mimeTypeAllowedByNosniff() const
{
- return parseContentTypeOptionsHeader(m_response.httpHeaderField(HTTPHeaderName::XContentTypeOptions)) != ContentTypeOptionsNosniff || equalLettersIgnoringASCIICase(responseMIMEType(), "text/css");
+ return parseContentTypeOptionsHeader(m_response.httpHeaderField(HTTPHeaderName::XContentTypeOptions)) != ContentTypeOptionsDisposition::Nosniff || equalLettersIgnoringASCIICase(responseMIMEType(), "text/css");
}
bool CachedCSSStyleSheet::canUseSheet(MIMETypeCheckHint mimeTypeCheckHint, bool* hasValidMIMEType) const
Modified: trunk/Source/WebCore/platform/network/HTTPParsers.cpp (264565 => 264566)
--- trunk/Source/WebCore/platform/network/HTTPParsers.cpp 2020-07-18 03:13:20 UTC (rev 264565)
+++ trunk/Source/WebCore/platform/network/HTTPParsers.cpp 2020-07-18 10:33:54 UTC (rev 264566)
@@ -538,8 +538,8 @@
{
StringView leftToken = header.left(header.find(','));
if (equalLettersIgnoringASCIICase(stripLeadingAndTrailingHTTPSpaces(leftToken), "nosniff"))
- return ContentTypeOptionsNosniff;
- return ContentTypeOptionsNone;
+ return ContentTypeOptionsDisposition::Nosniff;
+ return ContentTypeOptionsDisposition::None;
}
// For example: "HTTP/1.1 200 OK" => "OK".
@@ -559,7 +559,7 @@
XFrameOptionsDisposition parseXFrameOptionsHeader(const String& header)
{
- XFrameOptionsDisposition result = XFrameOptionsNone;
+ XFrameOptionsDisposition result = XFrameOptionsDisposition::None;
if (header.isEmpty())
return result;
@@ -566,20 +566,20 @@
for (auto& currentHeader : header.split(',')) {
currentHeader = currentHeader.stripWhiteSpace();
- XFrameOptionsDisposition currentValue = XFrameOptionsNone;
+ XFrameOptionsDisposition currentValue = XFrameOptionsDisposition::None;
if (equalLettersIgnoringASCIICase(currentHeader, "deny"))
- currentValue = XFrameOptionsDeny;
+ currentValue = XFrameOptionsDisposition::Deny;
else if (equalLettersIgnoringASCIICase(currentHeader, "sameorigin"))
- currentValue = XFrameOptionsSameOrigin;
+ currentValue = XFrameOptionsDisposition::SameOrigin;
else if (equalLettersIgnoringASCIICase(currentHeader, "allowall"))
- currentValue = XFrameOptionsAllowAll;
+ currentValue = XFrameOptionsDisposition::AllowAll;
else
- currentValue = XFrameOptionsInvalid;
+ currentValue = XFrameOptionsDisposition::Invalid;
- if (result == XFrameOptionsNone)
+ if (result == XFrameOptionsDisposition::None)
result = currentValue;
else if (result != currentValue)
- return XFrameOptionsConflict;
+ return XFrameOptionsDisposition::Conflict;
}
return result;
}
@@ -642,69 +642,6 @@
return true;
}
-// HTTP/1.1 - RFC 2616
-// http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1
-// Request-Line = Method SP Request-URI SP HTTP-Version CRLF
-size_t parseHTTPRequestLine(const char* data, size_t length, String& failureReason, String& method, String& url, HTTPVersion& httpVersion)
-{
- method = String();
- url = ""
- httpVersion = Unknown;
-
- const char* space1 = 0;
- const char* space2 = 0;
- const char* p;
- size_t consumedLength;
-
- for (p = data, consumedLength = 0; consumedLength < length; p++, consumedLength++) {
- if (*p == ' ') {
- if (!space1)
- space1 = p;
- else if (!space2)
- space2 = p;
- } else if (*p == '\n')
- break;
- }
-
- // Haven't finished header line.
- if (consumedLength == length) {
- failureReason = "Incomplete Request Line"_s;
- return 0;
- }
-
- // RequestLine does not contain 3 parts.
- if (!space1 || !space2) {
- failureReason = "Request Line does not appear to contain: <Method> <Url> <HTTPVersion>."_s;
- return 0;
- }
-
- // The line must end with "\r\n".
- const char* end = p + 1;
- if (*(end - 2) != '\r') {
- failureReason = "Request line does not end with CRLF"_s;
- return 0;
- }
-
- // Request Method.
- method = String(data, space1 - data); // For length subtract 1 for space, but add 1 for data being the first character.
-
- // Request URI.
- url = "" + 1, space2 - space1 - 1); // For length subtract 1 for space.
-
- // HTTP Version.
- String httpVersionString(space2 + 1, end - space2 - 3); // For length subtract 1 for space, and 2 for "\r\n".
- if (httpVersionString.length() != 8 || !httpVersionString.startsWith("HTTP/1."))
- httpVersion = Unknown;
- else if (httpVersionString[7] == '0')
- httpVersion = HTTP_1_0;
- else if (httpVersionString[7] == '1')
- httpVersion = HTTP_1_1;
- else
- httpVersion = Unknown;
-
- return end - data;
-}
-
static inline bool isValidHeaderNameCharacter(const char* character)
{
// https://tools.ietf.org/html/rfc7230#section-3.2
Modified: trunk/Source/WebCore/platform/network/HTTPParsers.h (264565 => 264566)
--- trunk/Source/WebCore/platform/network/HTTPParsers.h 2020-07-18 03:13:20 UTC (rev 264565)
+++ trunk/Source/WebCore/platform/network/HTTPParsers.h 2020-07-18 10:33:54 UTC (rev 264566)
@@ -47,18 +47,18 @@
BlockEnabled,
};
-enum ContentTypeOptionsDisposition {
- ContentTypeOptionsNone,
- ContentTypeOptionsNosniff
+enum class ContentTypeOptionsDisposition : bool {
+ None,
+ Nosniff
};
-enum XFrameOptionsDisposition {
- XFrameOptionsNone,
- XFrameOptionsDeny,
- XFrameOptionsSameOrigin,
- XFrameOptionsAllowAll,
- XFrameOptionsInvalid,
- XFrameOptionsConflict
+enum class XFrameOptionsDisposition : uint8_t {
+ None,
+ Deny,
+ SameOrigin,
+ AllowAll,
+ Invalid,
+ Conflict
};
enum class CrossOriginResourcePolicy {
@@ -91,8 +91,6 @@
ContentTypeOptionsDisposition parseContentTypeOptionsHeader(StringView header);
// Parsing Complete HTTP Messages.
-enum HTTPVersion { Unknown, HTTP_1_0, HTTP_1_1 };
-size_t parseHTTPRequestLine(const char* data, size_t length, String& failureReason, String& method, String& url, HTTPVersion&);
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);
Modified: trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp (264565 => 264566)
--- trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp 2020-07-18 03:13:20 UTC (rev 264565)
+++ trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp 2020-07-18 10:33:54 UTC (rev 264566)
@@ -41,7 +41,7 @@
bool isScriptAllowedByNosniff(const ResourceResponse& response)
{
- if (parseContentTypeOptionsHeader(response.httpHeaderField(HTTPHeaderName::XContentTypeOptions)) != ContentTypeOptionsNosniff)
+ if (parseContentTypeOptionsHeader(response.httpHeaderField(HTTPHeaderName::XContentTypeOptions)) != ContentTypeOptionsDisposition::Nosniff)
return true;
String mimeType = extractMIMETypeFromMediaType(response.httpHeaderField(HTTPHeaderName::ContentType));
return MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType);
Modified: trunk/Source/WebKit/ChangeLog (264565 => 264566)
--- trunk/Source/WebKit/ChangeLog 2020-07-18 03:13:20 UTC (rev 264565)
+++ trunk/Source/WebKit/ChangeLog 2020-07-18 10:33:54 UTC (rev 264566)
@@ -1,3 +1,15 @@
+2020-07-18 Rob Buis <[email protected]>
+
+ Only use enum classes in HTTPParsers
+ https://bugs.webkit.org/show_bug.cgi?id=214451
+
+ Reviewed by Darin Adler.
+
+ Adjust to XFrameOptionsDisposition change.
+
+ * NetworkProcess/NetworkResourceLoader.cpp:
+ (WebKit::NetworkResourceLoader::shouldInterruptLoadForXFrameOptions):
+
2020-07-17 Sam Weinig <[email protected]>
Remove final vestigates of SimpleColor
Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (264565 => 264566)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp 2020-07-18 03:13:20 UTC (rev 264565)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp 2020-07-18 10:33:54 UTC (rev 264566)
@@ -515,12 +515,12 @@
return false;
switch (parseXFrameOptionsHeader(xFrameOptions)) {
- case XFrameOptionsNone:
- case XFrameOptionsAllowAll:
+ case XFrameOptionsDisposition::None:
+ case XFrameOptionsDisposition::AllowAll:
return false;
- case XFrameOptionsDeny:
+ case XFrameOptionsDisposition::Deny:
return true;
- case XFrameOptionsSameOrigin: {
+ case XFrameOptionsDisposition::SameOrigin: {
auto origin = SecurityOrigin::create(url);
auto topFrameOrigin = m_parameters.frameAncestorOrigins.last();
if (!origin->isSameSchemeHostPort(*topFrameOrigin))
@@ -531,12 +531,12 @@
}
return false;
}
- case XFrameOptionsConflict: {
+ case XFrameOptionsDisposition::Conflict: {
String errorMessage = "Multiple 'X-Frame-Options' headers with conflicting values ('" + xFrameOptions + "') encountered when loading '" + url.stringCenterEllipsizedToLength() + "'. Falling back to 'DENY'.";
send(Messages::WebPage::AddConsoleMessage { m_parameters.webFrameID, MessageSource::JS, MessageLevel::Error, errorMessage, identifier() }, m_parameters.webPageID);
return true;
}
- case XFrameOptionsInvalid: {
+ case XFrameOptionsDisposition::Invalid: {
String errorMessage = "Invalid 'X-Frame-Options' header encountered when loading '" + url.stringCenterEllipsizedToLength() + "': '" + xFrameOptions + "' is not a recognized directive. The header will be ignored.";
send(Messages::WebPage::AddConsoleMessage { m_parameters.webFrameID, MessageSource::JS, MessageLevel::Error, errorMessage, identifier() }, m_parameters.webPageID);
return false;