fune/testing/web-platform/tests/css/css-layout-api/constraints-data-function-failure.https.html
Ian Kilpatrick 4364b3b811 Bug 1571788 [wpt PR 18297] - [css-layout-api] Convert to promise based API., a=testonly
Automatic update from web-platform-tests
[css-layout-api] Convert to promise based API.

As above! This switches the API from being generator based, to promise
based.

This introduces the specification's work queue, which is run until
exhaustion. After the work queue has been run the given promise should
be resolved, (if not we fallback to block layout).

This also introduces the CustomLayoutScope, and CustomLayoutToken
which are used together.

The CustomLayoutToken is a heap allocated class held onto objects which
should only be used within a certain layout pass. E.g. you cannot
hold onto a fragment from a previous layout pass, and use it within
the current layout pass.

This is managed by a stack allocated CustomLayoutScope, which once
destroyed marks the CustomLayoutToken as "detached". Any object which
has a "detached" token shouldn't be used.

The CustomLayoutScope is also used to hold onto the work queue.

Bug: 726125
Change-Id: Ic435c8c50fe3d3779f068b41eada815253d0b78b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1716035
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#684927}

--

wpt-commits: dd38623d0edc9005cf87397feb2e011eb0679c52
wpt-pr: 18297
2019-08-09 20:31:41 +00:00

61 lines
1.5 KiB
HTML

<!DOCTYPE html>
<html class=reftest-wait>
<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-data">
<link rel="match" href="green-square-ref.html">
<meta name="assert" content="This test checks that a function can't be passed to a child layout." />
<style>
.test {
background: red;
width: 100px;
}
@supports (display: layout(parent)) {
.test {
display: layout(parent);
background: green;
}
.child {
display: layout(child);
}
}
</style>
<script src="/common/reftest-wait.js"></script>
<script src="/common/worklet-reftest.js"></script>
<div class="test">
<div class="child"></div>
</div>
<script id="code" type="text/worklet">
registerLayout('parent', class {
async intrinsicSizes() {}
async layout([child], edges, constraints, styleMap) {
let childFragment = null;
try {
childFragment = await child.layoutNextFragment({
data: { fn: function() {} }
});
} catch(e) {
// Success! The structured cloning algorithm should have thrown an error.
childFragment = await child.layoutNextFragment({});
return {autoBlockSize: 100, childFragments: [childFragment]};
}
return {autoBlockSize: 0, childFragments: [childFragment]};
}
});
registerLayout('child', class {
async intrinsicSizes() {}
async layout() {
return {autoBlockSize: 0};
}
});
</script>
<script>
importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, document.getElementById('code').textContent);
</script>
</html>