| <!DOCTYPE html> | |
| <html> | |
| <body> | |
| <p>This tests removing an iframe with a custom element inside a callback. WebKit should not hit assertions.<br> | |
| WebKit should not hit any assertions.</p> | |
| <script> | |
| customElements.define('test-element', class extends HTMLElement { | |
| disconnectedCallback() { } | |
| attributeChangedCallback(name, oldValue, newValue) { | |
| if (newValue != 'bar') | |
| return; | |
| removeIframe(); | |
| GCController.collect(); | |
| } | |
| static get observedAttributes() { return ['id']; } | |
| }); | |
| function insertIframe() { | |
| let iframe = document.createElement('iframe'); | |
| document.body.appendChild(iframe); | |
| let container = document.createElement('div'); | |
| container.innerHTML = '<test-element></test-element><test-element id="foo"></test-element>'; | |
| iframe.contentDocument.body.appendChild(container); | |
| } | |
| function removeIframe() { | |
| document.querySelector('iframe').remove(); | |
| } | |
| if (!window.GCController) | |
| document.write('This test requires GCController'); | |
| else { | |
| testRunner.dumpAsText(); | |
| insertIframe(); | |
| document.createElement('test-element').id = 'bar'; | |
| document.write(`<p>PASS. WebKit did not hit any assertions.</p>`); | |
| } | |
| </script> | |
| </body> | |
| </html> |