svg-with-css-box-001.html (2554B)
1 <!doctype html> 2 <title>ResizeObserver for SVG elements with CSS box.</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="./resources/resizeTestHelper.js"></script> 6 <div id="container" style="width: 500px; height: 500px;"> 7 <svg id="svg" width="100%" viewBox="0 0 100 100"> 8 <circle cx="50" cy="50" r="45" style="fill:orange;stroke:black;stroke-width:1" /> 9 <foreignObject id="foreign" x="0" y="0" width="100" height="100"> 10 <svg xmlns="http://www.w3.org/2000/svg" 11 width="100%" height="100%" 12 viewBox="0 0 100 100" 13 id="foreign-svg"> 14 <circle cx="50" cy="50" r="45" style="fill:orange;stroke:black;stroke-width:1" /> 15 </svg> 16 </foreignObject> 17 </svg> 18 <script> 19 'use strict'; 20 21 function test0() { 22 let targetWidth = 150; 23 let target = document.getElementById('foreign-svg'); 24 let container = document.getElementById('foreign'); 25 let helper = new ResizeTestHelper( 26 "test0: observe `foreignObject` SVG in HTML document", 27 [ 28 { 29 setup: observer => { 30 observer.observe(target); 31 }, 32 notify: (entries, observer) => { 33 return true; // Delay next step 34 } 35 }, 36 { 37 setup: observer => { 38 target.setAttribute('width', targetWidth); 39 }, 40 notify: entries => { 41 assert_equals(entries.length, 1); 42 const entry = entries[0]; 43 assert_equals(entry.target, target); 44 assert_equals(entry.contentBoxSize[0].inlineSize, targetWidth); 45 }, 46 } 47 ]); 48 return helper.start(); 49 } 50 51 function test1() { 52 let targetWidth = 400; 53 let target = document.getElementById('svg'); 54 let container = document.getElementById('container'); 55 let helper = new ResizeTestHelper( 56 "test1: observe inline SVG in HTML", 57 [ 58 { 59 setup: observer => { 60 observer.observe(target); 61 }, 62 notify: (entries, observer) => { 63 return true; // Delay next step 64 } 65 }, 66 { 67 setup: observer => { 68 target.style.width = targetWidth + 'px'; 69 }, 70 notify: (entries, observer) => { 71 assert_equals(entries.length, 1); 72 const entry = entries[0]; 73 assert_equals(entry.target, target); 74 assert_equals(entry.contentBoxSize[0].inlineSize, targetWidth); 75 } 76 } 77 ]); 78 return helper.start(); 79 } 80 81 let guard; 82 test(_ => { 83 assert_implements(window.ResizeObserver); 84 guard = async_test('guard'); 85 }, "ResizeObserver implemented") 86 87 test0() 88 .then(() => { test1(); }) 89 .then(() => { guard.done(); }); 90 91 </script>