From b91b0c37eb6cab1e179252692ad7e7a60606efa3 Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Tue, 7 Jan 2020 09:10:56 -0500 Subject: Bug 1322938 - Put element behind preference. Tag #1343 --- dom/html/HTMLDialogElement.cpp | 29 +++++++++++++++++++++++- dom/html/HTMLDialogElement.h | 2 ++ dom/tests/mochitest/general/test_interfaces.html | 2 +- dom/webidl/HTMLDialogElement.webidl | 1 + 4 files changed, 32 insertions(+), 2 deletions(-) (limited to 'dom') diff --git a/dom/html/HTMLDialogElement.cpp b/dom/html/HTMLDialogElement.cpp index 1f65b602f..48666628e 100644 --- a/dom/html/HTMLDialogElement.cpp +++ b/dom/html/HTMLDialogElement.cpp @@ -6,8 +6,20 @@ #include "mozilla/dom/HTMLDialogElement.h" #include "mozilla/dom/HTMLDialogElementBinding.h" +#include "mozilla/dom/HTMLUnknownElement.h" +#include "mozilla/Preferences.h" -NS_IMPL_NS_NEW_HTML_ELEMENT(Dialog) +// Expand NS_IMPL_NS_NEW_HTML_ELEMENT(Dialog) with pref check +nsGenericHTMLElement* +NS_NewHTMLDialogElement(already_AddRefed&& aNodeInfo, + mozilla::dom::FromParser aFromParser) +{ + if (!mozilla::dom::HTMLDialogElement::IsDialogEnabled()) { + return new mozilla::dom::HTMLUnknownElement(aNodeInfo); + } + + return new mozilla::dom::HTMLDialogElement(aNodeInfo); +} namespace mozilla { namespace dom { @@ -18,6 +30,21 @@ HTMLDialogElement::~HTMLDialogElement() NS_IMPL_ELEMENT_CLONE(HTMLDialogElement) +bool +HTMLDialogElement::IsDialogEnabled() +{ + static bool isDialogEnabled = false; + static bool added = false; + + if (!added) { + Preferences::AddBoolVarCache(&isDialogEnabled, + "dom.dialog_element.enabled"); + added = true; + } + + return isDialogEnabled; +} + void HTMLDialogElement::Close(const mozilla::dom::Optional& aReturnValue) { diff --git a/dom/html/HTMLDialogElement.h b/dom/html/HTMLDialogElement.h index 2222cd2f7..efa319f3c 100644 --- a/dom/html/HTMLDialogElement.h +++ b/dom/html/HTMLDialogElement.h @@ -26,6 +26,8 @@ public: virtual nsresult Clone(mozilla::dom::NodeInfo* aNodeInfo, nsINode** aResult) const override; + static bool IsDialogEnabled(); + bool Open() const { return GetBoolAttr(nsGkAtoms::open); } void SetOpen(bool aOpen, ErrorResult& aError) { diff --git a/dom/tests/mochitest/general/test_interfaces.html b/dom/tests/mochitest/general/test_interfaces.html index 9208997be..eb09f5962 100644 --- a/dom/tests/mochitest/general/test_interfaces.html +++ b/dom/tests/mochitest/general/test_interfaces.html @@ -443,7 +443,7 @@ var interfaceNamesInGlobalScope = // IMPORTANT: Do not change this list without review from a DOM peer! "HTMLDetailsElement", // IMPORTANT: Do not change this list without review from a DOM peer! - "HTMLDialogElement", + {name: "HTMLDialogElement", disabled: true}, // IMPORTANT: Do not change this list without review from a DOM peer! "HTMLDirectoryElement", // IMPORTANT: Do not change this list without review from a DOM peer! diff --git a/dom/webidl/HTMLDialogElement.webidl b/dom/webidl/HTMLDialogElement.webidl index f4aa8484a..b6cdbacf6 100644 --- a/dom/webidl/HTMLDialogElement.webidl +++ b/dom/webidl/HTMLDialogElement.webidl @@ -11,6 +11,7 @@ * and create derivative works of this document. */ +[Pref="dom.dialog_element.enabled"] interface HTMLDialogElement : HTMLElement { [SetterThrows] attribute boolean open; attribute DOMString returnValue; -- cgit v1.2.3