From adf037a0f4b7f29ae304a79aaf8074a2072b7657 Mon Sep 17 00:00:00 2001 From: Kent Tamura Date: Wed, 6 Mar 2019 16:52:51 +0000 Subject: [PATCH] Bug 1531256 [wpt PR 15516] - custom-elements: Update CustomElementRegistry.html for 'disabledFeatures'., a=testonly Automatic update from web-platform-tests custom-elements: Update CustomElementRegistry.html for 'disabledFeatures'. This change is for https://github.com/whatwg/html/pull/4324, and a follow-up of https://github.com/web-platform-tests/wpt/pull/15123 Bug: crbug.com/905922 Change-Id: I3eceb5d21ab555c23ed877ded17d359fe004e2aa Reviewed-on: https://chromium-review.googlesource.com/c/1482361 Auto-Submit: Kent Tamura Reviewed-by: Hayato Ito Commit-Queue: Kent Tamura Cr-Commit-Position: refs/heads/master@{#635380} -- wpt-commits: 1aa5413b0c0a03d3c93e07d18bf8cc78e19ca611 wpt-pr: 15516 --- .../CustomElementRegistry.html | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/testing/web-platform/tests/custom-elements/CustomElementRegistry.html b/testing/web-platform/tests/custom-elements/CustomElementRegistry.html index 86337fa879510..d6fda892c38bd 100644 --- a/testing/web-platform/tests/custom-elements/CustomElementRegistry.html +++ b/testing/web-platform/tests/custom-elements/CustomElementRegistry.html @@ -328,7 +328,9 @@ }); customElements.define('element-with-attribute-changed-callback', proxy); assert_array_equals(prototypeCalls, [1, 'connectedCallback', 2, 'disconnectedCallback', 3, 'adoptedCallback', 4, 'attributeChangedCallback']); - assert_array_equals(constructorCalls, [0, 'prototype', 5, 'observedAttributes']); + assert_array_equals(constructorCalls, [0, 'prototype', + 5, 'observedAttributes', + 6, 'disabledFeatures']); }, 'customElements.define must get "observedAttributes" property on the constructor prototype when "attributeChangedCallback" is present'); test(function () { @@ -388,6 +390,53 @@ customElements.define('element-without-callback-with-invalid-observed-attributes', constructor); }, 'customElements.define must not throw even if "observedAttributes" fails to convert if "attributeChangedCallback" is not defined'); +test(function () { + var constructor = function () {} + var calls = []; + var proxy = new Proxy(constructor, { + get: function (target, name) { + calls.push(name); + if (name == 'disabledFeatures') + throw {name: 'expectedError'}; + return target[name]; + } + }); + assert_throws({'name': 'expectedError'}, () => customElements.define('element-with-throwing-disabled-features', proxy)); + assert_array_equals(calls, ['prototype', 'disabledFeatures'], + 'customElements.define must get "prototype" and "disabledFeatures" on the constructor'); +}, 'customElements.define must rethrow an exception thrown while getting disabledFeatures on the constructor prototype'); + +test(function () { + var constructor = function () {} + var calls = []; + var proxy = new Proxy(constructor, { + get: function (target, name) { + calls.push(name); + if (name == 'disabledFeatures') + return 1; + return target[name]; + } + }); + assert_throws({'name': 'TypeError'}, () => customElements.define('element-with-invalid-disabled-features', proxy)); + assert_array_equals(calls, ['prototype', 'disabledFeatures'], + 'customElements.define must get "prototype" and "disabledFeatures" on the constructor'); +}, 'customElements.define must rethrow an exception thrown while converting the value of disabledFeatures to sequence'); + +test(function () { + var constructor = function () {} + constructor.disabledFeatures = {[Symbol.iterator]: function *() { + yield 'foo'; + throw {name: 'SomeError'}; + }}; + assert_throws({'name': 'SomeError'}, () => customElements.define('element-with-generator-disabled-features', constructor)); +}, 'customElements.define must rethrow an exception thrown while iterating over disabledFeatures to sequence'); + +test(function () { + var constructor = function () {} + constructor.disabledFeatures = {[Symbol.iterator]: 1}; + assert_throws({'name': 'TypeError'}, () => customElements.define('element-with-disabled-features-with-uncallable-iterator', constructor)); +}, 'customElements.define must rethrow an exception thrown while retrieving Symbol.iterator on disabledFeatures'); + test(function () { class MyCustomElement extends HTMLElement {}; customElements.define('my-custom-element', MyCustomElement);