Handle values with var() when parsing font for Canvas/FontFaceSet #25843
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When setting the 'font' attribute, it must parse according to the
grammar of <font> (minus CSS-wide keywords) [1]. Values with var()
do not match the grammar of <font>, but the parsing function we
use allow it anyway, since var()-containing values have special
handling during regular CSS declaration parsing.
There are multiple call sites that parse a <font> and then try to
fix up the result (with IsCSSWideKeyword). This CL adds
CSSParser::ParseFont which does the check for CSS-wide keywords, and
now also for the pending-substitution value (which is what you get
if you parse a var()-containing sequence as a shorthand).
This fixes DCHECKs/undefined behavior when using var() in a canvas
font attribute, or in FontFaceSet.load().
Bug: 1131922
[1] https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-font
Change-Id: Ic906932fa14ad46683cf97edc78e2929020e0fd5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2436346
Commit-Queue: Anders Hartvoll Ruud <andruud@chromium.org>
Reviewed-by: Xiaocheng Hu <xiaochengh@chromium.org>
Reviewed-by: Dominik Röttsches <drott@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812024}