Bug 1550328 [wpt PR 16629] - Always use physical coordinates for visual rects, a=testonly

Automatic update from web-platform-tests
Always use physical coordinates for visual rects

- Let MapToVisualRectInAncestorSpace() always treat the input rect as
  in pure physical coordinates. Previously the input was inconsistent:
  pure physical for boxes, and flipped for inlines.

- This makes it clear that all visual rects, regardless of their
  coordinates spaces, are in physical coordinates.

- This reduces unnecessary back and forth flipping in LayoutNG which
  is already using physical coordinates in inline layout.

Bug: 941228
Change-Id: I10e16c5e7833e94a615e4dd18aa3141512b8e9e3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1568619
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Reviewed-by: Stefan Zager <szager@chromium.org>
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#656051}

--

wpt-commits: 5e447de33a3c3c0de7cb96513e8318ca673f182e
wpt-pr: 16629
This commit is contained in:
Xianzhu Wang 2019-05-20 12:59:36 +00:00 коммит произвёл James Graham
Родитель 8f4b39504b
Коммит d8db750e15
1 изменённых файлов: 66 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,66 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/intersection-observer-test-utils.js"></script>
<style>
body, html {
margin: 0;
}
pre, #log {
position: absolute;
top: 150px;
}
#target {
width: 100px;
height: 100px;
background-color: green;
float: left;
}
#occluder {
float: left;
margin-left: 10px;
width: 100px;
height: 100px;
background-color: blue;
filter: drop-shadow(-50px 0);
writing-mode: vertical-rl;
}
</style>
<div id="target"></div>
<div id="occluder"></div>
<script>
var delay = 100;
var entries = [];
var target;
var occluder;
runTestCycle(function() {
target = document.getElementById("target");
occluder = document.getElementById("occluder");
assert_true(!!target, "target exists");
assert_true(!!occluder, "occluder exists");
var observer = new IntersectionObserver(function(changes) {
entries = entries.concat(changes)
}, {trackVisibility: true, delay: delay});
observer.observe(target);
entries = entries.concat(observer.takeRecords());
assert_equals(entries.length, 0, "No initial notifications.");
runTestCycle(step0, "First rAF.", delay);
}, "IntersectionObserverV2 in a single document using the implicit root, with an occluding element.", delay);
function step0() {
// Occluding elements with opacity=0 should not affect target visibility.
occluder.style.opacity = "0";
runTestCycle(step2, "occluder.style.opacity = 0", delay);
// First notification should report occlusion due to drop shadow filter.
checkLastEntry(entries, 0, [0, 100, 0, 100, 0, 100, 0, 100, 0, 800, 0, 600, true, false]);
}
function step2() {
checkLastEntry(entries, 1, [0, 100, 0, 100, 0, 100, 0, 100, 0, 800, 0, 600, true, true]);
}
</script>