forked from mirrors/gecko-dev
		
	 4364b3b811
			
		
	
	
		4364b3b811
		
	
	
	
	
		
			
			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
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			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>
 |