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