| <!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> |