delegatesFocus-highlight-sibling.html (4649B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="/resources/testdriver.js"></script> 5 <script src="/resources/testdriver-vendor.js"></script> 6 <script src="/resources/testdriver-actions.js"></script> 7 <script src="resources/shadow-dom.js"></script> 8 <script src="resources/focus-utils.js"></script> 9 <!-- Adapted from http://jsbin.com/dexinu/6/edit for layout test --> 10 11 <template id='XMenuTemplate'> 12 <style> 13 :host { 14 display: inline-block; 15 position: relative; 16 background-color: #aaa; 17 } 18 :host(:focus) { 19 background-color: #ccc; 20 } 21 li { 22 display: inline-block; 23 position: relative; 24 background-color: #eee; 25 } 26 li:focus { 27 background-color: #fff; 28 } 29 </style> 30 <li tabindex='0'>Item One</li> 31 <li tabindex='0'>Item Two</li> 32 <li tabindex='0'>Item Three</li> 33 </template> 34 35 <section> 36 <x-menu id='XMenu1' tabindex='0'></x-menu> 37 </section> 38 <section> 39 <x-menu id='XMenu2' tabindex='0' delegatesFocus></x-menu> 40 <x-menu id='XMenu3' tabindex='0' delegatesFocus></x-menu> 41 </section> 42 <section> 43 <x-menu id='XMenu4' tabindex='0' delegatesFocus></x-menu> 44 </section> 45 46 <script> 47 'use strict'; 48 49 const template = document.querySelector('#XMenuTemplate'); 50 51 customElements.define('x-menu', class extends HTMLElement { 52 connectedCallback() { 53 const delegatesFocus = this.hasAttribute('delegatesFocus'); 54 this.attachShadow({mode: 'open', delegatesFocus: delegatesFocus}) 55 .appendChild(document.importNode(template.content, true)); 56 } 57 }); 58 59 promise_test(async () => { 60 let xmenu1 = document.getElementById('XMenu1'); 61 62 xmenu1.focus(); 63 await navigateFocusForward(); 64 await navigateFocusForward(); 65 await navigateFocusForward(); 66 assert_equals(document.activeElement.id, 'XMenu1'); 67 assert_background_color('XMenu1', 'rgb(204, 204, 204)'); 68 assert_background_color('XMenu2', 'rgb(170, 170, 170)'); 69 assert_background_color('XMenu3', 'rgb(170, 170, 170)'); 70 assert_background_color('XMenu4', 'rgb(170, 170, 170)'); 71 72 await navigateFocusForward(); 73 await navigateFocusForward(); 74 await navigateFocusForward(); 75 assert_equals(document.activeElement.id, 'XMenu2'); 76 await assert_background_color('XMenu1', 'rgb(170, 170, 170)'); 77 await assert_background_color('XMenu2', 'rgb(204, 204, 204)'); 78 await assert_background_color('XMenu3', 'rgb(170, 170, 170)'); 79 await assert_background_color('XMenu4', 'rgb(170, 170, 170)'); 80 81 await navigateFocusForward(); 82 await navigateFocusForward(); 83 await navigateFocusForward(); 84 assert_equals(document.activeElement.id, 'XMenu3'); 85 assert_background_color('XMenu1', 'rgb(170, 170, 170)'); 86 assert_background_color('XMenu2', 'rgb(170, 170, 170)'); 87 assert_background_color('XMenu3', 'rgb(204, 204, 204)'); 88 assert_background_color('XMenu4', 'rgb(170, 170, 170)'); 89 90 await navigateFocusForward(); 91 await navigateFocusForward(); 92 await navigateFocusForward(); 93 assert_equals(document.activeElement.id, 'XMenu4'); 94 assert_background_color('XMenu1', 'rgb(170, 170, 170)'); 95 assert_background_color('XMenu2', 'rgb(170, 170, 170)'); 96 assert_background_color('XMenu3', 'rgb(170, 170, 170)'); 97 assert_background_color('XMenu4', 'rgb(204, 204, 204)'); 98 99 await navigateFocusBackward(); 100 await navigateFocusBackward(); 101 await navigateFocusBackward(); 102 assert_equals(document.activeElement.id, 'XMenu3'); 103 assert_background_color('XMenu1', 'rgb(170, 170, 170)'); 104 assert_background_color('XMenu2', 'rgb(170, 170, 170)'); 105 assert_background_color('XMenu3', 'rgb(204, 204, 204)'); 106 assert_background_color('XMenu4', 'rgb(170, 170, 170)'); 107 108 await navigateFocusBackward(); 109 await navigateFocusBackward(); 110 await navigateFocusBackward(); 111 assert_equals(document.activeElement.id, 'XMenu2'); 112 assert_background_color('XMenu1', 'rgb(170, 170, 170)'); 113 assert_background_color('XMenu2', 'rgb(204, 204, 204)'); 114 assert_background_color('XMenu3', 'rgb(170, 170, 170)'); 115 assert_background_color('XMenu4', 'rgb(170, 170, 170)'); 116 117 await navigateFocusBackward(); 118 await navigateFocusBackward(); 119 await navigateFocusBackward(); 120 assert_equals(document.activeElement.id, 'XMenu1'); 121 assert_background_color('XMenu1', 'rgb(204, 204, 204)'); 122 assert_background_color('XMenu2', 'rgb(170, 170, 170)'); 123 assert_background_color('XMenu3', 'rgb(170, 170, 170)'); 124 assert_background_color('XMenu4', 'rgb(170, 170, 170)'); 125 }, 'crbug/474687 :focus style should properly be applied to shadow hosts.'); 126 </script>