diff options
author | Gaming4JC <g4jc@hyperbola.info> | 2020-01-22 23:06:22 -0500 |
---|---|---|
committer | Gaming4JC <g4jc@hyperbola.info> | 2020-01-26 15:50:51 -0500 |
commit | 944fadc3188e0857eb84150a3db9bd9a6177a48c (patch) | |
tree | 5c6c062676da71877d39c1252b9808449ebe8eff /dom/base | |
parent | f0191e1cbc5973da7e707d9a9c01e201b029a194 (diff) | |
download | aura-central-944fadc3188e0857eb84150a3db9bd9a6177a48c.tar.gz |
Bug 1413815 - Convert 'observedAttributes' to a sequence<DOMString>
Tag UXP Issue mcp-graveyard/UXP%1344
Diffstat (limited to 'dom/base')
-rw-r--r-- | dom/base/CustomElementRegistry.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/dom/base/CustomElementRegistry.cpp b/dom/base/CustomElementRegistry.cpp index c52d2cc98..4a803b710 100644 --- a/dom/base/CustomElementRegistry.cpp +++ b/dom/base/CustomElementRegistry.cpp @@ -699,7 +699,6 @@ CustomElementRegistry::Define(const nsAString& aName, * observedAttributesIterable to a sequence<DOMString>. Rethrow * any exceptions from the conversion. */ - // TODO: Bug 1293921 - Implement connected/disconnected/adopted/attributeChanged lifecycle callbacks for custom elements if (callbacksHolder->mAttributeChangedCallback.WasPassed()) { // Enter constructor's compartment. JSAutoCompartment ac(cx, constructor); @@ -712,12 +711,22 @@ CustomElementRegistry::Define(const nsAString& aName, } if (!observedAttributesIterable.isUndefined()) { + if (!observedAttributesIterable.isObject()) { + aRv.ThrowTypeError<MSG_NOT_SEQUENCE>(NS_LITERAL_STRING("observedAttributes")); + return; + } + JS::ForOfIterator iter(cx); - if (!iter.init(observedAttributesIterable)) { + if (!iter.init(observedAttributesIterable, JS::ForOfIterator::AllowNonIterable)) { aRv.StealExceptionFromJSContext(cx); return; } + if (!iter.valueIsIterable()) { + aRv.ThrowTypeError<MSG_NOT_SEQUENCE>(NS_LITERAL_STRING("observedAttributes")); + return; + } + JS::Rooted<JS::Value> attribute(cx); while (true) { bool done; @@ -729,9 +738,8 @@ CustomElementRegistry::Define(const nsAString& aName, break; } - JSString *attrJSStr = attribute.toString(); - nsAutoJSString attrStr; - if (!attrStr.init(cx, attrJSStr)) { + nsAutoString attrStr; + if (!ConvertJSValueToString(cx, attribute, eStringify, eStringify, attrStr)) { aRv.StealExceptionFromJSContext(cx); return; } |