Move document.defineElement to customElements.define
[WebKit-https.git] / LayoutTests / fast / custom-elements / parser / parser-uses-registry-of-owner-document.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Custom Elements: Changes to the HTML parser</title>
5 <meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
6 <meta name="assert" content="HTML parser must use the owner document's custom element registry">
7 <script src="../../../resources/testharness.js"></script>
8 <script src="../../../resources/testharnessreport.js"></script>
9 <link rel='stylesheet' href='../../../resources/testharness.css'>
10 </head>
11 <body>
12 <div id="log"></div>
13 <script>
14
15 class MyCustomElement extends HTMLElement { };
16 customElements.define('my-custom-element', MyCustomElement);
17
18 document.write('<template><my-custom-element></my-custom-element></template>');
19
20 test(function () {
21     var template = document.querySelector('template');
22     var instance = template.content.firstChild;
23
24     assert_true(instance instanceof HTMLElement,
25         'A custom element inside a template element must be an instance of HTMLElement');
26     assert_false(instance instanceof MyCustomElement,
27         'A custom element must not be instantiated inside a template element using the registry of the template element\'s owner document');
28     assert_equals(instance.ownerDocument, template.content.ownerDocument,
29         'Custom elements inside a template must use the appropriate template contents owner document as the owner document');
30
31 }, 'HTML parser must not instantiate custom elements inside template elements');
32
33 var iframe = document.createElement('iframe');
34 document.body.appendChild(iframe);
35 iframe.contentDocument.body.innerHTML = '<my-custom-element></my-custom-element>';
36
37 test(function () {
38     var instance = iframe.contentDocument.querySelector('my-custom-element');
39
40     assert_true(instance instanceof iframe.contentWindow.HTMLElement);
41     assert_false(instance instanceof MyCustomElement);
42
43 }, 'HTML parser must not use the registry of the owner element\'s document inside an iframe');
44
45 class ElementInIFrame extends iframe.contentWindow.HTMLElement { };
46 iframe.contentWindow.customElements.define('element-in-iframe', ElementInIFrame);
47 iframe.contentDocument.body.innerHTML = '<element-in-iframe></element-in-iframe>';
48
49 test(function () {
50     var instance = iframe.contentDocument.querySelector('element-in-iframe');
51
52     assert_true(instance instanceof iframe.contentWindow.HTMLElement, 'A custom element inside an iframe must be an instance of HTMLElement');
53     assert_true(instance instanceof ElementInIFrame,
54         'A custom element must be instantiated inside an iframe using the registry of the content document');
55     assert_equals(instance.ownerDocument, iframe.contentDocument,
56         'The owner document of custom elements inside an iframe must be the content document of the iframe');
57
58 }, 'HTML parser must use the registry of the content document inside an iframe');
59
60 document.write('<element-in-iframe></element-in-iframe>');
61
62 test(function () {
63     var instance = document.querySelector('element-in-iframe');
64
65     assert_true(instance instanceof HTMLElement);
66     assert_false(instance instanceof ElementInIFrame);
67
68 }, 'HTML parser must not instantiate a custom element defined inside an frame in frame element\'s owner document');
69
70 document.body.removeChild(iframe);
71
72 var windowlessDocument = document.implementation.createHTMLDocument();
73 windowlessDocument.open();
74 windowlessDocument.write('<my-custom-element></my-custom-element>');
75 windowlessDocument.close();
76
77 test(function () {
78     var instance = windowlessDocument.querySelector('my-custom-element');
79
80     assert_true(instance instanceof HTMLElement);
81     assert_false(instance instanceof MyCustomElement);
82
83 }, 'HTML parser must use the registry of window.document in a document created by document.implementation.createHTMLDocument()');
84
85 windowlessDocument = document.implementation.createDocument ('http://www.w3.org/1999/xhtml', 'html', null);
86 windowlessDocument.documentElement.innerHTML = '<my-custom-element></my-custom-element>';
87
88 test(function () {
89     var instance = windowlessDocument.querySelector('my-custom-element');
90
91     assert_true(instance instanceof HTMLElement);
92     assert_false(instance instanceof MyCustomElement);
93
94 }, 'HTML parser must use the registry of window.document in a document created by document.implementation.createXHTMLDocument()');
95
96 </script>
97 </body>
98 </html>