Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / fast / repaint / subpixel-shadow-included-in-invalidation.html
blob1d971e2fd62576d36168fc5bcbcff96bfc2e0f7d
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;
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 offset when the shadow changes.');
20 // Accepts [x, y, width, height] rects. Checks if the first argument contains the 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];
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';
37 runAfterLayoutAndPaint(function() {
38 var layerTree = JSON.parse(internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_REPAINT_RECTS));
39 var repaintRects = layerTree.children[0].repaintRects;
40 var shadowRect = [1.4, 1.4, 100, 100];
41 if (repaintRects.some(repaintRect => rectContainsRect(repaintRect, shadowRect)))
42 testPassed('Subpixel shadow was repainted.');
43 else
44 testFailed('Subpixel shadow ' + JSON.stringify(shadowRect) + ' was not repainted. Repaint rects were ' + JSON.stringify(repaintRects) + '.');
46 internals.stopTrackingRepaints(document);
47 box.remove();
48 finishJSTest();
49 });
50 });
52 </script>