bool CSSParser::parseColor(RGBA32& color, const String& string, bool strict) { if (string.isEmpty()) return false; // The regular color parsers don't resolve all named colors, so explicitly // handle these first. Color namedColor; if (namedColor.setNamedColor(string)) { color = namedColor.rgb(); return true; } RefPtrWillBeRawPtr<CSSValue> value = CSSParserFastPaths::parseColor(string, !strict); // TODO(timloh): Why is this always strict mode? if (!value) value = parseSingleValue(CSSPropertyColor, string, strictCSSParserContext()); if (!value || !value->isPrimitiveValue()) return false; CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value.get()); if (!primitiveValue->isRGBColor()) return false; color = primitiveValue->getRGBA32Value(); return true; }
Color CSSParser::parseColor(const String& string, bool strict) { if (string.isEmpty()) return Color(); // Try named colors first. Color namedColor { string }; if (namedColor.isValid()) return namedColor; // Try the fast path to parse hex and rgb. RefPtr<CSSValue> value = CSSParserFastPaths::parseColor(string, strict ? HTMLStandardMode : HTMLQuirksMode); // If that fails, try the full parser. if (!value) value = parseSingleValue(CSSPropertyColor, string, strictCSSParserContext()); if (!value || !value->isPrimitiveValue()) return Color(); const auto& primitiveValue = downcast<CSSPrimitiveValue>(*value); if (!primitiveValue.isRGBColor()) return Color(); return primitiveValue.color(); }