diff options
Diffstat (limited to 'dom/tests/mochitest/webcomponents/test_custom_element_register_invalid_callbacks.html')
-rw-r--r-- | dom/tests/mochitest/webcomponents/test_custom_element_register_invalid_callbacks.html | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/dom/tests/mochitest/webcomponents/test_custom_element_register_invalid_callbacks.html b/dom/tests/mochitest/webcomponents/test_custom_element_register_invalid_callbacks.html new file mode 100644 index 000000000..a349f4aa5 --- /dev/null +++ b/dom/tests/mochitest/webcomponents/test_custom_element_register_invalid_callbacks.html @@ -0,0 +1,72 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1275835 +--> +<head> + <title>Test registering invalid lifecycle callbacks for custom elements.</title> + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1275835">Bug 1275835</a> +<iframe id="iframe"></iframe> +<script> + +// Use window from iframe to isolate the test. +const testWindow = iframe.contentDocument.defaultView; + +// This is for backward compatibility. +// We should do the same checks for the callbacks from v0 spec. +[ + 'createdCallback', + 'attachedCallback', + 'detachedCallback', + 'attributeChangedCallback', +].forEach(callback => { + var c = class {}; + var p = c.prototype; + + // Test getting callback throws exception. + Object.defineProperty(p, callback, { + get() { + const e = new Error('this is rethrown'); + e.name = 'rethrown'; + throw e; + } + }); + + SimpleTest.doesThrow(() => { + testWindow.document.registerElement(`test-register-${callback}-rethrown`, + { prototype: p }); + }, `document.registerElement should throw exception if prototype.${callback} throws`); + + SimpleTest.doesThrow(() => { + testWindow.customElements.define(`test-define-${callback}-rethrown`, c); + }, `customElements.define should throw exception if constructor.${callback} throws`); + + // Test callback is not callable. + [ + { name: 'null', value: null }, + { name: 'object', value: {} }, + { name: 'integer', value: 1 }, + ].forEach(data => { + var c = class {}; + var p = c.prototype; + + p[callback] = data.value; + + SimpleTest.doesThrow(() => { + testWindow.document.registerElement(`test-register-${callback}-${data.name}`, + { prototype: p }); + }, `document.registerElement should throw exception if ${callback} is ${data.name}`); + + SimpleTest.doesThrow(() => { + testWindow.customElements.define(`test-define-${callback}-${data.name}`, c); + }, `customElements.define should throw exception if ${callback} is ${data.name}`); + }); +}); + +</script> +</body> +</html> |