mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-23 15:47:30 +09:00
Creating customized built-in elements without relevant definitions registered first shouldn't throw NotFoundError;
per spec change: https://github.com/w3c/webcomponents/issues/608 Tag UXP Issue #1344
This commit is contained in:
parent
cb89330bf3
commit
cca692c240
3 changed files with 0 additions and 94 deletions
|
|
@ -5395,14 +5395,6 @@ nsDocument::CreateElement(const nsAString& aTagName,
|
||||||
}
|
}
|
||||||
|
|
||||||
const nsString* is = nullptr;
|
const nsString* is = nullptr;
|
||||||
if (aOptions.IsElementCreationOptions()) {
|
|
||||||
// Throw NotFoundError if 'is' is not-null and definition is null
|
|
||||||
is = CheckCustomElementName(aOptions.GetAsElementCreationOptions(),
|
|
||||||
needsLowercase ? lcTagName : aTagName, mDefaultElementType, rv);
|
|
||||||
if (rv.Failed()) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RefPtr<Element> elem = CreateElem(
|
RefPtr<Element> elem = CreateElem(
|
||||||
needsLowercase ? lcTagName : aTagName, nullptr, mDefaultElementType, is);
|
needsLowercase ? lcTagName : aTagName, nullptr, mDefaultElementType, is);
|
||||||
|
|
@ -5443,14 +5435,6 @@ nsDocument::CreateElementNS(const nsAString& aNamespaceURI,
|
||||||
}
|
}
|
||||||
|
|
||||||
const nsString* is = nullptr;
|
const nsString* is = nullptr;
|
||||||
if (aOptions.IsElementCreationOptions()) {
|
|
||||||
// Throw NotFoundError if 'is' is not-null and definition is null
|
|
||||||
is = CheckCustomElementName(aOptions.GetAsElementCreationOptions(),
|
|
||||||
aQualifiedName, nodeInfo->NamespaceID(), rv);
|
|
||||||
if (rv.Failed()) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nsCOMPtr<Element> element;
|
nsCOMPtr<Element> element;
|
||||||
rv = NS_NewElement(getter_AddRefs(element), nodeInfo.forget(),
|
rv = NS_NewElement(getter_AddRefs(element), nodeInfo.forget(),
|
||||||
|
|
@ -12757,30 +12741,6 @@ nsIDocument::UpdateStyleBackendType()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
const nsString*
|
|
||||||
nsDocument::CheckCustomElementName(const ElementCreationOptions& aOptions,
|
|
||||||
const nsAString& aLocalName,
|
|
||||||
uint32_t aNamespaceID,
|
|
||||||
ErrorResult& rv)
|
|
||||||
{
|
|
||||||
// only check aOptions if 'is' is passed and the webcomponents preference
|
|
||||||
// is enabled
|
|
||||||
if (!aOptions.mIs.WasPassed() ||
|
|
||||||
!CustomElementRegistry::IsCustomElementEnabled()) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
const nsString* is = &aOptions.mIs.Value();
|
|
||||||
|
|
||||||
// Throw NotFoundError if 'is' is not-null and definition is null
|
|
||||||
if (!nsContentUtils::LookupCustomElementDefinition(this, aLocalName,
|
|
||||||
aNamespaceID, is)) {
|
|
||||||
rv.Throw(NS_ERROR_DOM_NOT_FOUND_ERR);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is;
|
|
||||||
}
|
|
||||||
|
|
||||||
Selection*
|
Selection*
|
||||||
nsIDocument::GetSelection(ErrorResult& aRv)
|
nsIDocument::GetSelection(ErrorResult& aRv)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1388,20 +1388,6 @@ protected:
|
||||||
private:
|
private:
|
||||||
static bool CustomElementConstructor(JSContext* aCx, unsigned aArgc, JS::Value* aVp);
|
static bool CustomElementConstructor(JSContext* aCx, unsigned aArgc, JS::Value* aVp);
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the passed custom element name, aOptions.mIs, is a registered
|
|
||||||
* custom element type or not, then return the custom element name for future
|
|
||||||
* usage.
|
|
||||||
*
|
|
||||||
* If there is no existing custom element definition for this name, throw a
|
|
||||||
* NotFoundError.
|
|
||||||
*/
|
|
||||||
const nsString* CheckCustomElementName(
|
|
||||||
const mozilla::dom::ElementCreationOptions& aOptions,
|
|
||||||
const nsAString& aLocalName,
|
|
||||||
uint32_t aNamespaceID,
|
|
||||||
ErrorResult& rv);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual already_AddRefed<mozilla::dom::CustomElementRegistry>
|
virtual already_AddRefed<mozilla::dom::CustomElementRegistry>
|
||||||
GetCustomElementRegistry() override;
|
GetCustomElementRegistry() override;
|
||||||
|
|
|
||||||
|
|
@ -103,52 +103,12 @@ function startTest() {
|
||||||
is(extendedButton.getAttribute("is"), "x-extended-button", "The |is| attribute of the created element should be the extended type.");
|
is(extendedButton.getAttribute("is"), "x-extended-button", "The |is| attribute of the created element should be the extended type.");
|
||||||
is(extendedButton.type, "submit", "Created element should be a button with type of \"submit\"");
|
is(extendedButton.type, "submit", "Created element should be a button with type of \"submit\"");
|
||||||
|
|
||||||
// document.createElementNS with different namespace than definition.
|
|
||||||
try {
|
|
||||||
var svgButton = document.createElementNS("http://www.w3.org/2000/svg", "button", {is: "x-extended-button"});
|
|
||||||
ok(false, "An exception should've been thrown");
|
|
||||||
} catch(err) {
|
|
||||||
is(err.name, "NotFoundError", "A NotFoundError exception should've been thrown");
|
|
||||||
}
|
|
||||||
|
|
||||||
// document.createElementNS with no namespace.
|
|
||||||
try {
|
|
||||||
var noNamespaceButton = document.createElementNS("", "button", {is: "x-extended-button"});
|
|
||||||
ok(false, "An exception should've been thrown");
|
|
||||||
} catch(err) {
|
|
||||||
is(err.name, "NotFoundError", "A NotFoundError exception should've been thrown");
|
|
||||||
}
|
|
||||||
|
|
||||||
// document.createElement with non-existant extended type.
|
|
||||||
try {
|
|
||||||
var normalButton = document.createElement("button", {is: "x-non-existant"});
|
|
||||||
ok(false, "An exception should've been thrown");
|
|
||||||
} catch(err) {
|
|
||||||
is(err.name, "NotFoundError", "A NotFoundError exception should've been thrown");
|
|
||||||
}
|
|
||||||
|
|
||||||
// document.createElement with exteneded type that does not match with local name of element.
|
|
||||||
try {
|
|
||||||
var normalDiv = document.createElement("div", {is: "x-extended-button"});
|
|
||||||
ok(false, "An exception should've been thrown");
|
|
||||||
} catch(err) {
|
|
||||||
is(err.name, "NotFoundError", "A NotFoundError exception should've been thrown");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom element constructor.
|
// Custom element constructor.
|
||||||
var constructedButton = new buttonConstructor();
|
var constructedButton = new buttonConstructor();
|
||||||
is(constructedButton.tagName, "BUTTON", "Created element should have local name of BUTTON");
|
is(constructedButton.tagName, "BUTTON", "Created element should have local name of BUTTON");
|
||||||
is(constructedButton.__proto__, extendedProto, "Created element should have the prototype of the extended type.");
|
is(constructedButton.__proto__, extendedProto, "Created element should have the prototype of the extended type.");
|
||||||
is(constructedButton.getAttribute("is"), "x-extended-button", "The |is| attribute of the created element should be the extended type.");
|
is(constructedButton.getAttribute("is"), "x-extended-button", "The |is| attribute of the created element should be the extended type.");
|
||||||
|
|
||||||
// document.createElement with different namespace than definition for extended element.
|
|
||||||
try {
|
|
||||||
var htmlText = document.createElement("text", {is: "x-extended-text"});
|
|
||||||
ok(false, "An exception should've been thrown");
|
|
||||||
} catch(err) {
|
|
||||||
is(err.name, "NotFoundError", "A NotFoundError exception should've been thrown");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try creating an element with a custom element name, but not in the html namespace.
|
// Try creating an element with a custom element name, but not in the html namespace.
|
||||||
var htmlNamespaceProto = Object.create(HTMLElement.prototype);
|
var htmlNamespaceProto = Object.create(HTMLElement.prototype);
|
||||||
document.registerElement("x-in-html-namespace", { prototype: htmlNamespaceProto });
|
document.registerElement("x-in-html-namespace", { prototype: htmlNamespaceProto });
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue