| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Custom Elements: document.implementation.createElement must not instantiate a custom element</title> |
| <meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> |
| <meta name="assert" content="document.implementation.createElement must not instantiate a custom element"> |
| <link rel="help" content="https://dom.spec.whatwg.org/#dom-domimplementation-createdocument"> |
| <link rel="help" content="https://html.spec.whatwg.org/#look-up-a-custom-element-definition"> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="../../imported/w3c/web-platform-tests/custom-elements/resources/custom-elements-helpers.js"></script> |
| </head> |
| <body> |
| <div id="log"></div> |
| <script> |
| |
| const xhtmlNamespaceURI = 'http://www.w3.org/1999/xhtml'; |
| |
| test_with_window((contentWindow, contentDocument) => { |
| let constructorCount = 0; |
| class MyCustomElement extends contentWindow.HTMLElement { |
| constructor() { |
| super(); |
| constructorCount++; |
| } |
| } |
| contentWindow.customElements.define('my-custom-element', MyCustomElement); |
| const instance = contentDocument.createElement('my-custom-element'); |
| assert_true(instance instanceof MyCustomElement); |
| assert_equals(constructorCount, 1); |
| |
| const newDocument = contentDocument.implementation.createDocument(xhtmlNamespaceURI, 'my-custom-element', null); |
| assert_equals(constructorCount, 1); |
| assert_true(newDocument.documentElement instanceof contentWindow.HTMLElement); |
| assert_equals(newDocument.documentElement.localName, 'my-custom-element'); |
| assert_false(newDocument.documentElement instanceof MyCustomElement); |
| }, 'document.createElement invoke a custom element constructor with no arguments'); |
| |
| </script> |
| </body> |
| </html> |