| 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;
|
|
|