Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1452)

Unified Diff: Source/core/loader/LinkHeader.cpp

Issue 1135203002: Add <link rel=preconnect> crossorigin attribute (take 2) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Todo Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/loader/LinkHeader.h ('k') | Source/core/loader/LinkHeaderTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/loader/LinkHeader.cpp
diff --git a/Source/core/loader/LinkHeader.cpp b/Source/core/loader/LinkHeader.cpp
index ab32f759787f5f2c497567f2f74e955487ca0689..158c022e8668f3ae7a476cda8c7d671707901d87 100644
--- a/Source/core/loader/LinkHeader.cpp
+++ b/Source/core/loader/LinkHeader.cpp
@@ -40,6 +40,11 @@ static bool isValidParameterValueChar(CharType chr)
return !isWhitespace(chr) && !isValidParameterValueEnd(chr);
}
+static bool isExtensionParameter(LinkHeader::LinkParameterName name)
+{
+ return name > LinkHeader::LinkParameterAnchor;
+}
+
// Before:
//
// <cat.jpg>; rel=preload
@@ -116,6 +121,8 @@ static LinkHeader::LinkParameterName paramterNameFromString(String name)
return LinkHeader::LinkParameterRel;
else if (equalIgnoringCase(name, "anchor"))
return LinkHeader::LinkParameterAnchor;
+ else if (equalIgnoringCase(name, "crossorigin"))
+ return LinkHeader::LinkParameterCrossOrigin;
return LinkHeader::LinkParameterUnknown;
}
@@ -137,11 +144,10 @@ static bool parseParameterName(CharType*& position, CharType* end, LinkHeader::L
skipWhile<CharType, isValidParameterNameChar>(position, end);
CharType* nameEnd = position;
skipWhile<CharType, isWhitespace>(position, end);
- if (!skipExactly<CharType>(position, end, '='))
- return false;
+ bool hasEqual = skipExactly<CharType>(position, end, '=');
skipWhile<CharType, isWhitespace>(position, end);
name = paramterNameFromString(String(nameStart, nameEnd - nameStart));
- return true;
+ return hasEqual || isExtensionParameter(name);
}
// Before:
@@ -200,8 +206,10 @@ static bool parseParameterValue(CharType*& position, CharType* end, String& valu
}
valueEnd = position;
skipWhile<CharType, isWhitespace>(position, end);
- if ((!completeQuotes && valueStart == valueEnd) || (position != end && !isValidParameterValueEnd(*position)))
+ if ((!completeQuotes && valueStart == valueEnd) || (position != end && !isValidParameterValueEnd(*position))) {
+ value = String("");
return false;
+ }
if (hasQuotes)
++valueStart;
if (completeQuotes)
@@ -217,6 +225,8 @@ void LinkHeader::setValue(LinkParameterName name, String value)
m_rel = value.lower();
else if (name == LinkParameterAnchor)
m_isValid = false;
+ else if (name == LinkParameterCrossOrigin)
+ m_crossOrigin = crossOriginAttributeValue(value);
}
template <typename CharType>
@@ -228,7 +238,8 @@ static void findNextHeader(CharType*& position, CharType* end)
template <typename CharType>
LinkHeader::LinkHeader(CharType*& position, CharType* end)
- : m_isValid(true)
+ : m_crossOrigin(CrossOriginAttributeNotSet)
+ , m_isValid(true)
{
if (!parseURL(position, end, m_url)) {
m_isValid = false;
@@ -250,7 +261,7 @@ LinkHeader::LinkHeader(CharType*& position, CharType* end)
}
String parameterValue;
- if (!parseParameterValue(position, end, parameterValue)) {
+ if (!parseParameterValue(position, end, parameterValue) && !isExtensionParameter(parameterName)) {
findNextHeader(position, end);
m_isValid = false;
return;
« no previous file with comments | « Source/core/loader/LinkHeader.h ('k') | Source/core/loader/LinkHeaderTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698