| <!DOCTYPE html> | |
| <html> | |
| <meta charset=utf-8 /> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <script src=/resources/testdriver.js></script> | |
| <script src=/resources/testdriver-vendor.js></script> | |
| <script src=resources/event-timing-test-utils.js></script> | |
| <custom-button id='custom_button'></custom-button> | |
| <script> | |
| async_test(function(t) { | |
| assert_implements(window.PerformanceEventTiming, 'Event Timing is not supported.'); | |
| let innerButtonClicked = false; | |
| customElements.define('custom-button', class extends HTMLElement { | |
| connectedCallback() { | |
| this.attachShadow({mode: 'open'}); | |
| this.shadowRoot.innerHTML = `<button id='inner_button_id'>Click me</button>`; | |
| this.shadowRoot.getElementById('inner_button_id').onclick = () => { | |
| innerButtonClicked = true; | |
| }; | |
| } | |
| }); | |
| const observer = new PerformanceObserver(t.step_func((entryList) => { | |
| const entries = entryList.getEntriesByName('pointerdown'); | |
| if (entries.length === 0) | |
| return; | |
| // There must only be one pointerdown entry. | |
| assert_equals(entries.length, 1); | |
| verifyClickEvent(entries[0], 'custom_button', true); | |
| assert_true(innerButtonClicked); | |
| t.done() | |
| })); | |
| observer.observe({entryTypes: ['event']}); | |
| clickAndBlockMain('custom_button'); | |
| }, "Event Timing: target reports the last Event Target, i.e. nothing from shadow DOM."); | |
| </script> | |
| </html> |