summaryrefslogtreecommitdiffstats
path: root/dom
diff options
context:
space:
mode:
Diffstat (limited to 'dom')
-rw-r--r--dom/html/HTMLDialogElement.cpp29
-rw-r--r--dom/html/HTMLDialogElement.h2
-rw-r--r--dom/tests/mochitest/general/test_interfaces.html2
-rw-r--r--dom/webidl/HTMLDialogElement.webidl1
4 files changed, 32 insertions, 2 deletions
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<mozilla::dom::NodeInfo>&& 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<nsAString>& 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;