| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <script src="../../../resources/js-test.js"></script> | |
| 3 <script src="resources/shadow-dom.js"></script> | |
| 4 <style> | |
| 5 div { | |
| 6 background-color: white; | |
| 7 } | |
| 8 | |
| 9 div#shadow-host:focus { | |
| 10 background-color: green; | |
| 11 } | |
| 12 </style> | |
| 13 <body> | |
| 14 <div id="sandbox"></div> | |
| 15 </body> | |
| 16 <script> | |
| 17 function buildNestedDistributionTree(delegatesFocus1, delegatesFocus2) { | |
| 18 var sandbox = document.querySelector('#sandbox'); | |
| 19 sandbox.innerHTML = ''; | |
| 20 sandbox.appendChild( | |
| 21 createDOM('div', {}, | |
| 22 createDOM('input', {'id': 'outer-input'}), | |
| 23 createDOM('div', {'id': 'shadow-host'}, | |
| 24 createDOM('input', {'id': 'input1'}), | |
| 25 attachShadow( | |
| 26 {'mode': 'open', 'delegatesFocus': delegatesFocus1}, | |
| 27 createDOM('style', {}, | |
| 28 document.createTextNode('div { background-color: yellow;
} div#inner-shadow-host:focus { background-color: blue; }')), | |
| 29 createDOM('input', {'id': 'input2'}), | |
| 30 createDOM('div', {'id': 'inner-shadow-host'}, | |
| 31 createDOM('slot', {}), // #input1 goes here | |
| 32 attachShadow( | |
| 33 {'mode': 'open', 'delegatesFocus': delegatesFocus2}, | |
| 34 createDOM('slot', {}), // #input1 redistributed her
e, #input2 goes here. | |
| 35 createDOM('input', {'id': 'input3'}))))))); | |
| 36 | |
| 37 sandbox.offsetTop; | |
| 38 } | |
| 39 | |
| 40 function testNestedDistribution() { | |
| 41 debug('testing nested distribution'); | |
| 42 | |
| 43 buildNestedDistributionTree(false, false); | |
| 44 | |
| 45 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 46 | |
| 47 var outerInput = getNodeInComposedTree('outer-input'); | |
| 48 var input1 = getNodeInComposedTree('input1'); | |
| 49 var input2 = getNodeInComposedTree('shadow-host/input2'); | |
| 50 var input3 = getNodeInComposedTree('shadow-host/inner-shadow-host/input3'); | |
| 51 | |
| 52 debug('#input1, #input2 are (re)distributed in the same treescope as #input3
, but :focus on shadow host only matches when a focused element is under its sha
dow tree.'); | |
| 53 | |
| 54 debug('(1/4) top and inner shadow do not delegate focus.'); | |
| 55 outerInput.focus(); | |
| 56 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 57 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 58 | |
| 59 input1.focus(); | |
| 60 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 61 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 62 | |
| 63 input2.focus(); | |
| 64 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 65 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 66 | |
| 67 input3.focus(); | |
| 68 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 69 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 70 | |
| 71 debug('(2/4) top shadow delegates, but inner shadow does not.'); | |
| 72 buildNestedDistributionTree(true, false); | |
| 73 | |
| 74 var outerInput = getNodeInComposedTree('outer-input'); | |
| 75 var input1 = getNodeInComposedTree('input1'); | |
| 76 var input2 = getNodeInComposedTree('shadow-host/input2'); | |
| 77 var input3 = getNodeInComposedTree('shadow-host/inner-shadow-host/input3'); | |
| 78 | |
| 79 outerInput.focus(); | |
| 80 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 81 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 82 | |
| 83 input1.focus(); | |
| 84 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 85 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 86 | |
| 87 input2.focus(); | |
| 88 backgroundColorShouldBe('shadow-host', 'rgb(0, 128, 0)'); | |
| 89 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 90 | |
| 91 input3.focus(); | |
| 92 backgroundColorShouldBe('shadow-host', 'rgb(0, 128, 0)'); | |
| 93 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 94 | |
| 95 debug('(3/4) top shadow does not delegate, but inner shadow does.'); | |
| 96 buildNestedDistributionTree(false, true); | |
| 97 | |
| 98 var outerInput = getNodeInComposedTree('outer-input'); | |
| 99 var input1 = getNodeInComposedTree('input1'); | |
| 100 var input2 = getNodeInComposedTree('shadow-host/input2'); | |
| 101 var input3 = getNodeInComposedTree('shadow-host/inner-shadow-host/input3'); | |
| 102 | |
| 103 outerInput.focus(); | |
| 104 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 105 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 106 | |
| 107 input1.focus(); | |
| 108 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 109 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 110 | |
| 111 input2.focus(); | |
| 112 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 113 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 114 | |
| 115 input3.focus(); | |
| 116 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 117 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(0, 0, 255)'); | |
| 118 | |
| 119 debug('(4/4) both shadow hosts delagate focus.'); | |
| 120 buildNestedDistributionTree(true, true); | |
| 121 | |
| 122 var outerInput = getNodeInComposedTree('outer-input'); | |
| 123 var input1 = getNodeInComposedTree('input1'); | |
| 124 var input2 = getNodeInComposedTree('shadow-host/input2'); | |
| 125 var input3 = getNodeInComposedTree('shadow-host/inner-shadow-host/input3'); | |
| 126 | |
| 127 outerInput.focus(); | |
| 128 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 129 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 130 | |
| 131 input1.focus(); | |
| 132 backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); | |
| 133 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 134 | |
| 135 input2.focus(); | |
| 136 backgroundColorShouldBe('shadow-host', 'rgb(0, 128, 0)'); | |
| 137 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)')
; | |
| 138 | |
| 139 input3.focus(); | |
| 140 backgroundColorShouldBe('shadow-host', 'rgb(0, 128, 0)'); | |
| 141 backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(0, 0, 255)'); | |
| 142 } | |
| 143 | |
| 144 testNestedDistribution(); | |
| 145 </script> | |
| OLD | NEW |