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 | d97ddff6fe204a71a2710d27fd989b7ccabf618f (patch) | |
tree | 5c6c062676da71877d39c1252b9808449ebe8eff /dom | |
parent | 076695c59731bc9f853b67836bf92e26c21dd626 (diff) | |
download | uxp-d97ddff6fe204a71a2710d27fd989b7ccabf618f.tar.gz |
Bug 1413815 - Convert 'observedAttributes' to a sequence<DOMString>
Tag UXP Issue mcp-graveyard/UXP#1344
Diffstat (limited to 'dom')
-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 c52d2cc986..4a803b7102 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; } |