LinkHeader::LinkHeader(CharacterType*& position, CharacterType* const end) { ASSERT(position <= end); auto urlResult = findURLBoundaries(position, end); if (urlResult == std::nullopt) { m_isValid = false; findNextHeader(position, end); return; } m_url = urlResult.value(); while (m_isValid && position < end) { if (!parseParameterDelimiter(position, end, m_isValid)) { findNextHeader(position, end); return; } LinkParameterName parameterName; if (!parseParameterName(position, end, parameterName)) { findNextHeader(position, end); m_isValid = false; return; } String parameterValue; if (!parseParameterValue(position, end, parameterValue) && !isExtensionParameter(parameterName)) { findNextHeader(position, end); m_isValid = false; return; } setValue(parameterName, parameterValue); } findNextHeader(position, end); }
LinkHeader::LinkHeader(CharType*& position, CharType* end) : m_crossOrigin(CrossOriginAttributeNotSet) , m_isValid(true) { if (!parseURL(position, end, m_url)) { m_isValid = false; findNextHeader(position, end); return; } while (m_isValid && position < end) { if (!parseParameterDelimiter(position, end, m_isValid)) { findNextHeader(position, end); return; } LinkParameterName parameterName; if (!parseParameterName(position, end, parameterName)) { findNextHeader(position, end); m_isValid = false; return; } String parameterValue; if (!parseParameterValue(position, end, parameterValue) && !isExtensionParameter(parameterName)) { findNextHeader(position, end); m_isValid = false; return; } setValue(parameterName, parameterValue); } findNextHeader(position, end); }