From 6a6db2ef0f63f379ee7906a055473bf933c4a8f1 Mon Sep 17 00:00:00 2001 From: Fedor Date: Sun, 7 Feb 2021 17:33:21 +0200 Subject: [PATCH] Make pref-controlled and disable by default. --- dom/html/HTMLMenuElement.cpp | 6 +++--- dom/html/HTMLMenuItemElement.cpp | 13 +++++++++++-- .../test/browser_content_contextmenu_userinput.js | 3 +++ dom/html/test/mochitest.ini | 2 ++ dom/tests/mochitest/general/test_interfaces.html | 2 -- .../webcomponents/htmlconstructor_builtin_tests.js | 1 - dom/webidl/EventHandler.webidl | 1 + dom/webidl/HTMLElement.webidl | 4 +--- dom/webidl/HTMLMenuElement.webidl | 4 ++-- dom/webidl/HTMLMenuItemElement.webidl | 2 +- layout/style/res/html.css | 6 ++++-- modules/libpref/init/all.js | 3 +++ 12 files changed, 31 insertions(+), 16 deletions(-) diff --git a/dom/html/HTMLMenuElement.cpp b/dom/html/HTMLMenuElement.cpp index 6c096084a..a099a5289 100644 --- a/dom/html/HTMLMenuElement.cpp +++ b/dom/html/HTMLMenuElement.cpp @@ -137,9 +137,9 @@ HTMLMenuElement::ParseAttribute(int32_t aNamespaceID, const nsAString& aValue, nsAttrValue& aResult) { - if (aNamespaceID == kNameSpaceID_None && aAttribute == nsGkAtoms::type) { - bool success = aResult.ParseEnumValue(aValue, kMenuTypeTable, - false); + if (aNamespaceID == kNameSpaceID_None && aAttribute == nsGkAtoms::type && + Preferences::GetBool("dom.menuitem.enabled")) { + bool success = aResult.ParseEnumValue(aValue, kMenuTypeTable, false); if (success) { mType = aResult.GetEnumValue(); } else { diff --git a/dom/html/HTMLMenuItemElement.cpp b/dom/html/HTMLMenuItemElement.cpp index 5c5cf8d76..42cee132e 100644 --- a/dom/html/HTMLMenuItemElement.cpp +++ b/dom/html/HTMLMenuItemElement.cpp @@ -7,12 +7,21 @@ #include "mozilla/BasicEvents.h" #include "mozilla/EventDispatcher.h" +#include "mozilla/Preferences.h" #include "mozilla/dom/HTMLMenuItemElementBinding.h" +#include "mozilla/dom/HTMLUnknownElement.h" #include "nsAttrValueInlines.h" #include "nsContentUtils.h" - -NS_IMPL_NS_NEW_HTML_ELEMENT_CHECK_PARSER(MenuItem) +nsGenericHTMLElement* +NS_NewHTMLMenuItemElement(already_AddRefed&& aNodeInfo, + mozilla::dom::FromParser aFromParser) { + if (mozilla::Preferences::GetBool("dom.menuitem.enabled")) { + return new mozilla::dom::HTMLMenuItemElement(aNodeInfo, aFromParser); + } else { + return new mozilla::dom::HTMLUnknownElement(aNodeInfo); + } +} namespace mozilla { namespace dom { diff --git a/dom/html/test/browser_content_contextmenu_userinput.js b/dom/html/test/browser_content_contextmenu_userinput.js index 7d0387715..845ba718e 100644 --- a/dom/html/test/browser_content_contextmenu_userinput.js +++ b/dom/html/test/browser_content_contextmenu_userinput.js @@ -4,6 +4,9 @@ const kPage = "http://example.org/browser/" + "dom/html/test/file_content_contextmenu.html"; add_task(function* () { + yield SpecialPowers.pushPrefEnv({ + set: [["dom.menuitem.enabled", true]], + }); yield BrowserTestUtils.withNewTab({ gBrowser, url: kPage diff --git a/dom/html/test/mochitest.ini b/dom/html/test/mochitest.ini index 5c9c66e61..dcbb73840 100644 --- a/dom/html/test/mochitest.ini +++ b/dom/html/test/mochitest.ini @@ -1,4 +1,6 @@ [DEFAULT] +prefs = + dom.menuitem.enabled=true # only for test_bug617528.html support-files = 347174transform.xsl 347174transformable.xml diff --git a/dom/tests/mochitest/general/test_interfaces.html b/dom/tests/mochitest/general/test_interfaces.html index eb09f5962..5eb47d101 100644 --- a/dom/tests/mochitest/general/test_interfaces.html +++ b/dom/tests/mochitest/general/test_interfaces.html @@ -496,8 +496,6 @@ var interfaceNamesInGlobalScope = "HTMLMediaElement", // IMPORTANT: Do not change this list without review from a DOM peer! "HTMLMenuElement", -// IMPORTANT: Do not change this list without review from a DOM peer! - "HTMLMenuItemElement", // IMPORTANT: Do not change this list without review from a DOM peer! "HTMLMetaElement", // IMPORTANT: Do not change this list without review from a DOM peer! diff --git a/dom/tests/mochitest/webcomponents/htmlconstructor_builtin_tests.js b/dom/tests/mochitest/webcomponents/htmlconstructor_builtin_tests.js index 0b04971e3..c3d9a241d 100644 --- a/dom/tests/mochitest/webcomponents/htmlconstructor_builtin_tests.js +++ b/dom/tests/mochitest/webcomponents/htmlconstructor_builtin_tests.js @@ -71,7 +71,6 @@ ['map', 'Map'], ['mark', ''], ['menu', 'Menu'], - ['menuitem', 'MenuItem'], ['meta', 'Meta'], ['meter', 'Meter'], ['nav', ''], diff --git a/dom/webidl/EventHandler.webidl b/dom/webidl/EventHandler.webidl index 484a8e95c..e7dc4931b 100644 --- a/dom/webidl/EventHandler.webidl +++ b/dom/webidl/EventHandler.webidl @@ -82,6 +82,7 @@ interface GlobalEventHandlers { attribute EventHandler onseeked; attribute EventHandler onseeking; attribute EventHandler onselect; + [Pref="dom.menuitem.enabled"] attribute EventHandler onshow; //(Not implemented)attribute EventHandler onsort; attribute EventHandler onstalled; diff --git a/dom/webidl/HTMLElement.webidl b/dom/webidl/HTMLElement.webidl index 815f4a3bd..cd1fd7d6a 100644 --- a/dom/webidl/HTMLElement.webidl +++ b/dom/webidl/HTMLElement.webidl @@ -49,10 +49,8 @@ interface HTMLElement : Element { attribute DOMString contentEditable; [Pure] readonly attribute boolean isContentEditable; - [Pure] + [Pure, Pref="dom.menuitem.enabled"] readonly attribute HTMLMenuElement? contextMenu; - //[SetterThrows] - // attribute HTMLMenuElement? contextMenu; [CEReactions, SetterThrows, Pure] attribute boolean spellcheck; diff --git a/dom/webidl/HTMLMenuElement.webidl b/dom/webidl/HTMLMenuElement.webidl index 1194226c5..dc9a78ae8 100644 --- a/dom/webidl/HTMLMenuElement.webidl +++ b/dom/webidl/HTMLMenuElement.webidl @@ -17,9 +17,9 @@ interface MenuBuilder; // http://www.whatwg.org/specs/web-apps/current-work/#the-menu-element [HTMLConstructor] interface HTMLMenuElement : HTMLElement { - [CEReactions, SetterThrows] + [CEReactions, SetterThrows, Pref="dom.menuitem.enabled"] attribute DOMString type; - [CEReactions, SetterThrows] + [CEReactions, SetterThrows, Pref="dom.menuitem.enabled"] attribute DOMString label; }; diff --git a/dom/webidl/HTMLMenuItemElement.webidl b/dom/webidl/HTMLMenuItemElement.webidl index f09104501..6005bd7d2 100644 --- a/dom/webidl/HTMLMenuItemElement.webidl +++ b/dom/webidl/HTMLMenuItemElement.webidl @@ -12,7 +12,7 @@ */ // http://www.whatwg.org/specs/web-apps/current-work/#the-menuitem-element -[HTMLConstructor] +[HTMLConstructor, Pref="dom.menuitem.enabled"] interface HTMLMenuItemElement : HTMLElement { [CEReactions, SetterThrows] attribute DOMString type; diff --git a/layout/style/res/html.css b/layout/style/res/html.css index 066aab397..890ea6762 100644 --- a/layout/style/res/html.css +++ b/layout/style/res/html.css @@ -576,8 +576,10 @@ ul, menu, dir { padding-inline-start: 40px; } -menu[type="context"] { - display: none !important; +@supports -moz-bool-pref("dom.menuitem.enabled") { + menu[type="context"] { + display: none !important; + } } ol { diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js index ec57a0bb7..dce012db5 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -4978,6 +4978,9 @@ pref("dom.mozInputMethod.enabled", false); // Enable mapped array buffer by default. pref("dom.mapped_arraybuffer.enabled", true); +// Whether is a thing or not. +pref("dom.menuitem.enabled", false); + #ifdef MOZ_SAFE_BROWSING // The tables used for Safebrowsing phishing and malware checks. pref("urlclassifier.malwareTable", "goog-malware-shavar,goog-unwanted-shavar,test-malware-simple,test-unwanted-simple");