Skip to content

Commit 0e3386b

Browse files
GingehAtkinsSJ
authored andcommitted
LibWeb: Throw SyntaxError when FontFaceSet contains var
1 parent 863092a commit 0e3386b

File tree

3 files changed

+55
-3
lines changed

3 files changed

+55
-3
lines changed

Libraries/LibWeb/CSS/FontFaceSet.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,11 @@ static WebIDL::ExceptionOr<GC::Ref<JS::Set>> find_matching_font_faces(JS::Realm&
175175
{
176176
// 1. Parse font using the CSS value syntax of the font property. If a syntax error occurs, return a syntax error.
177177
auto property = parse_css_value(CSS::Parser::ParsingParams(), font, PropertyID::Font);
178-
if (!property)
178+
if (!property || !property->is_shorthand())
179179
return WebIDL::SyntaxError::create(realm, "Unable to parse font"_string);
180180

181181
// If the parsed value is a CSS-wide keyword, return a syntax error.
182-
if (property->is_css_wide_keyword())
183-
return WebIDL::SyntaxError::create(realm, "Parsed font is a CSS-wide keyword"_string);
182+
// Note: This case is already caught by the is_shorthand check.
184183

185184
// FIXME: Absolutize all relative lengths against the initial values of the corresponding properties. (For example, a
186185
// relative font weight like bolder is evaluated against the initial value normal.)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Harness status: OK
2+
3+
Found 4 tests
4+
5+
4 Pass
6+
Pass Loading "var(--x) serif" causes SyntaxError (document)
7+
Pass Loading "var(--x, 10px) serif" causes SyntaxError (document)
8+
Pass Loading "var(--x) serif" causes SyntaxError (worker)
9+
Pass Loading "var(--x, 10px) serif" causes SyntaxError (worker)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<!DOCTYPE html>
2+
<title>SyntaxError thrown when matching loading values with var()</title>
3+
<link rel="help" href="https://drafts.csswg.org/css-font-loading/#font-face-set-load">
4+
<link rel="help" href="https://drafts.csswg.org/css-font-loading/#find-the-matching-font-faces">
5+
<script src="../../resources/testharness.js"></script>
6+
<script src="../../resources/testharnessreport.js"></script>
7+
<script>
8+
9+
function load_on_worker(keyword) {
10+
return new Promise((resolve, reject) =>{
11+
var blob = new Blob([`
12+
self.fonts.load('${keyword}').then(
13+
()=>{ self.postMessage('success') },
14+
(e)=>{ self.postMessage(e) }
15+
);
16+
`]);
17+
var blob_url = window.URL.createObjectURL(blob);
18+
let worker = new Worker(blob_url);
19+
worker.onmessage = msg => {
20+
if (msg === 'success')
21+
resolve(msg.data)
22+
else
23+
reject(msg.data)
24+
}
25+
});
26+
}
27+
28+
promise_test(test => {
29+
return promise_rejects_dom(test, 'SyntaxError', document.fonts.load('var(--x) serif'));
30+
}, 'Loading "var(--x) serif" causes SyntaxError (document)')
31+
32+
promise_test(test => {
33+
return promise_rejects_dom(test, 'SyntaxError', document.fonts.load('var(--x, 10px) serif'));
34+
}, 'Loading "var(--x, 10px) serif" causes SyntaxError (document)')
35+
36+
promise_test(test => {
37+
return promise_rejects_dom(test, 'SyntaxError', load_on_worker('var(--x) serif'));
38+
}, 'Loading "var(--x) serif" causes SyntaxError (worker)')
39+
40+
promise_test(test => {
41+
return promise_rejects_dom(test, 'SyntaxError', load_on_worker('var(--x, 10px) serif'));
42+
}, 'Loading "var(--x, 10px) serif" causes SyntaxError (worker)')
43+
44+
</script>

0 commit comments

Comments
 (0)