OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <style> | |
3 #box { | |
4 position: absolute; | |
5 left: 0; | |
6 top: 0; | |
7 width: 100px; | |
8 height: 100px; | |
9 background: green; | |
10 box-shadow: 1.4px 1.4px blue; | |
11 } | |
12 </style> | |
13 <div id="box"></div> | |
14 <script src="../../resources/js-test.js"></script> | |
15 <script src="../../resources/run-after-layout-and-paint.js"></script> | |
16 <script> | |
17 var jsTestIsAsync = true; | |
18 description('Tests whether a repaint rect encompasses box-shadow with subpixel o
ffset when the shadow changes.'); | |
19 | |
20 // Accepts [x, y, width, height] rects. Checks if the first argument contains th
e second. | |
21 function rectContainsRect(outer, inner) { | |
22 return outer[0] <= inner[0] | |
23 && outer[1] <= inner[1] | |
24 && outer[0] + outer[2] >= inner[0] + inner[2] | |
25 && outer[1] + outer[3] >= inner[1] + inner[3]; | |
26 } | |
27 | |
28 if (!window.internals) { | |
29 testFailed('Test requires window.internals.'); | |
30 finishJSTest(); | |
31 } else { | |
32 var box = document.getElementById('box'); | |
33 runAfterLayoutAndPaint(function() { | |
34 internals.startTrackingRepaints(document); | |
35 box.style.boxShadow = 'none'; | |
36 | |
37 runAfterLayoutAndPaint(function() { | |
38 var layerTree = JSON.parse(internals.layerTreeAsText(document, inter
nals.LAYER_TREE_INCLUDES_PAINT_INVALIDATIONS)); | |
39 var repaintRects = layerTree.children[0].repaintRects; | |
40 var shadowRect = [1.4, 1.4, 100, 100]; | |
41 if (repaintRects.some(repaintRect => rectContainsRect(repaintRect, s
hadowRect))) | |
42 testPassed('Subpixel shadow was repainted.'); | |
43 else | |
44 testFailed('Subpixel shadow ' + JSON.stringify(shadowRect) + ' w
as not repainted. Repaint rects were ' + JSON.stringify(repaintRects) + '.'); | |
45 | |
46 internals.stopTrackingRepaints(document); | |
47 box.remove(); | |
48 finishJSTest(); | |
49 }); | |
50 }); | |
51 } | |
52 </script> | |
OLD | NEW |