Bug 1377999 - Make nsXULElement to adapt the DOMArena changes r=smaug

Differential Revision: https://phabricator.services.mozilla.com/D57705

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Sean Feng 2020-03-17 14:53:33 +00:00
Родитель 17552f5d3d
Коммит a104d39094
3 изменённых файлов: 17 добавлений и 7 удалений

Просмотреть файл

@ -22,7 +22,9 @@ namespace dom {
nsXULElement* NS_NewXULPopupElement(
already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo) {
return new XULPopupElement(std::move(aNodeInfo));
RefPtr<mozilla::dom::NodeInfo> nodeInfo(aNodeInfo);
auto* nim = nodeInfo->NodeInfoManager();
return new (nim) XULPopupElement(nodeInfo.forget());
}
JSObject* XULPopupElement::WrapNode(JSContext* aCx,

Просмотреть файл

@ -16,8 +16,10 @@ namespace dom {
nsXULElement* NS_NewXULTooltipElement(
already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo) {
RefPtr<mozilla::dom::NodeInfo> nodeInfo(aNodeInfo);
auto* nim = nodeInfo->NodeInfoManager();
RefPtr<XULTooltipElement> tooltip =
new XULTooltipElement(std::move(aNodeInfo));
new (nim) XULTooltipElement(nodeInfo.forget());
NS_ENSURE_SUCCESS(tooltip->Init(), nullptr);
return tooltip;
}

Просмотреть файл

@ -123,7 +123,9 @@ void nsXULElement::MaybeUpdatePrivateLifetime() {
/* static */
nsXULElement* NS_NewBasicXULElement(
already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo) {
return new nsXULElement(std::move(aNodeInfo));
RefPtr<mozilla::dom::NodeInfo> nodeInfo(std::move(aNodeInfo));
auto* nim = nodeInfo->NodeInfoManager();
return new (nim) nsXULElement(nodeInfo.forget());
}
/* static */
@ -132,7 +134,8 @@ nsXULElement* nsXULElement::Construct(
RefPtr<mozilla::dom::NodeInfo> nodeInfo = aNodeInfo;
if (nodeInfo->Equals(nsGkAtoms::label) ||
nodeInfo->Equals(nsGkAtoms::description)) {
return new XULTextElement(nodeInfo.forget());
auto* nim = nodeInfo->NodeInfoManager();
return new (nim) XULTextElement(nodeInfo.forget());
}
if (nodeInfo->Equals(nsGkAtoms::menupopup) ||
@ -148,16 +151,19 @@ nsXULElement* nsXULElement::Construct(
if (nodeInfo->Equals(nsGkAtoms::iframe) ||
nodeInfo->Equals(nsGkAtoms::browser) ||
nodeInfo->Equals(nsGkAtoms::editor)) {
return new XULFrameElement(nodeInfo.forget());
auto* nim = nodeInfo->NodeInfoManager();
return new (nim) XULFrameElement(nodeInfo.forget());
}
if (nodeInfo->Equals(nsGkAtoms::menu) ||
nodeInfo->Equals(nsGkAtoms::menulist)) {
return new XULMenuElement(nodeInfo.forget());
auto* nim = nodeInfo->NodeInfoManager();
return new (nim) XULMenuElement(nodeInfo.forget());
}
if (nodeInfo->Equals(nsGkAtoms::tree)) {
return new XULTreeElement(nodeInfo.forget());
auto* nim = nodeInfo->NodeInfoManager();
return new (nim) XULTreeElement(nodeInfo.forget());
}
return NS_NewBasicXULElement(nodeInfo.forget());