bool elementPatternMatches(const char* pattern, const HTMLInputElement* inputElement) { WTF::String patternString(pattern); if (!inputElement || patternString.isEmpty()) return false; if (inputElement->fastHasAttribute(HTMLNames::patternAttr)) { WTF::String patternAttribute = inputElement->fastGetAttribute(HTMLNames::patternAttr); if (patternAttribute.startsWith(patternString)) { // The pattern is for hexadecimal, make sure nothing else is permitted. // Check if it was an exact match. if (patternAttribute.length() == patternString.length()) return true; // Check for * if (patternAttribute.length() == patternString.length() + 1 && patternAttribute[patternString.length()] == '*') return true; // Is the regex specifying a character count? if (patternAttribute[patternString.length()] != '{' || !patternAttribute.endsWith('}')) return false; // Make sure the number in the regex is actually a number. unsigned count = 0; patternString = patternString + "{%d}"; return (sscanf(patternAttribute.latin1().data(), patternString.latin1().data() + '\0', &count) == 1) && count > 0; } } return false; }
static WTF::String urlSuitableForTestResult(const WTF::String& uriString) { if (uriString.isEmpty() || !uriString.startsWith("file://")) return uriString; const size_t index = uriString.reverseFind('/'); return (index == WTF::notFound) ? uriString : uriString.substring(index + 1); }