-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bug 1565557: ResizeObserver for SVG elements with CSS layout boxes us…
…e the layout boxes. r=emilio As per the CSSWG resolution here: w3c/csswg-drafts#4032 Previously, any and all SVG elements used its SVG object bounding box. Now, SVG elements that have their own CSS layout box use them. These match the following CSS rules: `svg:root, *:not(svg|*) > svg, svg|foreignObject > svg` Differential Revision: https://phabricator.services.mozilla.com/D154246
- Loading branch information
Showing
3 changed files
with
191 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
91 changes: 91 additions & 0 deletions
91
testing/web-platform/tests/resize-observer/svg-with-css-box-001.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
<!doctype html> | ||
<title>ResizeObserver for SVG elements with CSS box.</title> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="./resources/resizeTestHelper.js"></script> | ||
<div id="container" style="width: 500px; height: 500px;"> | ||
<svg id="svg" width="100%" viewBox="0 0 100 100"> | ||
<circle cx="50" cy="50" r="45" style="fill:orange;stroke:black;stroke-width:1" /> | ||
<foreignObject id="foreign" x="0" y="0" width="100" height="100"> | ||
<svg xmlns="http://www.w3.org/2000/svg" | ||
width="100%" height="100%" | ||
viewBox="0 0 100 100" | ||
id="foreign-svg"> | ||
<circle cx="50" cy="50" r="45" style="fill:orange;stroke:black;stroke-width:1" /> | ||
</svg> | ||
</foreignObject> | ||
</svg> | ||
<script> | ||
'use strict'; | ||
|
||
function test0() { | ||
let targetWidth = 150; | ||
let target = document.getElementById('foreign-svg'); | ||
let container = document.getElementById('foreign'); | ||
let helper = new ResizeTestHelper( | ||
"test0: observe `foreignObject` SVG in HTML document", | ||
[ | ||
{ | ||
setup: observer => { | ||
observer.observe(target); | ||
}, | ||
notify: (entries, observer) => { | ||
return true; // Delay next step | ||
} | ||
}, | ||
{ | ||
setup: observer => { | ||
target.setAttribute('width', targetWidth); | ||
}, | ||
notify: entries => { | ||
assert_equals(entries.length, 1); | ||
const entry = entries[0]; | ||
assert_equals(entry.target, target); | ||
assert_equals(entry.contentBoxSize[0].inlineSize, targetWidth); | ||
}, | ||
} | ||
]); | ||
return helper.start(); | ||
} | ||
|
||
function test1() { | ||
let targetWidth = 400; | ||
let target = document.getElementById('svg'); | ||
let container = document.getElementById('container'); | ||
let helper = new ResizeTestHelper( | ||
"test1: observe inline SVG in HTML", | ||
[ | ||
{ | ||
setup: observer => { | ||
observer.observe(target); | ||
}, | ||
notify: (entries, observer) => { | ||
return true; // Delay next step | ||
} | ||
}, | ||
{ | ||
setup: observer => { | ||
target.style.width = targetWidth + 'px'; | ||
}, | ||
notify: (entries, observer) => { | ||
assert_equals(entries.length, 1); | ||
const entry = entries[0]; | ||
assert_equals(entry.target, target); | ||
assert_equals(entry.contentBoxSize[0].inlineSize, targetWidth); | ||
} | ||
} | ||
]); | ||
return helper.start(); | ||
} | ||
|
||
let guard; | ||
test(_ => { | ||
assert_implements(window.ResizeObserver); | ||
guard = async_test('guard'); | ||
}, "ResizeObserver implemented") | ||
|
||
test0() | ||
.then(() => { test1(); }) | ||
.then(() => { guard.done(); }); | ||
|
||
</script> |
94 changes: 94 additions & 0 deletions
94
testing/web-platform/tests/resize-observer/svg-with-css-box-002.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.