author | Makoto Kato <m_kato@ga2.so-net.ne.jp> |
Tue, 23 Jun 2020 06:37:20 +0000 | |
changeset 536732 | 7c732d35b39746dddb68cae556b97d2de6ecf5fd |
parent 536731 | 9556117ca7806e17b79f8e894a13ba226b09c300 |
child 536733 | 9b7202e779eb71a7368c075fba8a183a3118fb43 |
push id | 37532 |
push user | abutkovits@mozilla.com |
push date | Tue, 23 Jun 2020 16:15:06 +0000 |
treeherder | mozilla-central@3add3a174755 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | webidl, smaug, hsivonen |
bugs | 1490661 |
milestone | 79.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/html/nsGenericHTMLElement.cpp +++ b/dom/html/nsGenericHTMLElement.cpp @@ -117,16 +117,34 @@ static const nsAttrValue::EnumTable kInp {"tel", NS_INPUTMODE_TEL}, {"url", NS_INPUTMODE_URL}, {"email", NS_INPUTMODE_EMAIL}, {"numeric", NS_INPUTMODE_NUMERIC}, {"decimal", NS_INPUTMODE_DECIMAL}, {"search", NS_INPUTMODE_SEARCH}, {nullptr, 0}}; +static const uint8_t NS_ENTERKEYHINT_ENTER = 1; +static const uint8_t NS_ENTERKEYHINT_DONE = 2; +static const uint8_t NS_ENTERKEYHINT_GO = 3; +static const uint8_t NS_ENTERKEYHINT_NEXT = 4; +static const uint8_t NS_ENTERKEYHINT_PREVIOUS = 5; +static const uint8_t NS_ENTERKEYHINT_SEARCH = 6; +static const uint8_t NS_ENTERKEYHINT_SEND = 7; + +static const nsAttrValue::EnumTable kEnterKeyHintTable[] = { + {"enter", NS_ENTERKEYHINT_ENTER}, + {"done", NS_ENTERKEYHINT_DONE}, + {"go", NS_ENTERKEYHINT_GO}, + {"next", NS_ENTERKEYHINT_NEXT}, + {"previous", NS_ENTERKEYHINT_PREVIOUS}, + {"search", NS_ENTERKEYHINT_SEARCH}, + {"send", NS_ENTERKEYHINT_SEND}, + {nullptr, 0}}; + nsresult nsGenericHTMLElement::CopyInnerTo(Element* aDst) { MOZ_ASSERT(!aDst->GetUncomposedDoc(), "Should not CopyInnerTo an Element in a document"); auto reparse = aDst->OwnerDoc() == OwnerDoc() ? ReparseAttributes::No : ReparseAttributes::Yes; nsresult rv = Element::CopyInnerTo(aDst, reparse); NS_ENSURE_SUCCESS(rv, rv); @@ -852,16 +870,20 @@ bool nsGenericHTMLElement::ParseAttribut if (aAttribute == nsGkAtoms::rel) { aResult.ParseAtomArray(aValue); return true; } if (aAttribute == nsGkAtoms::inputmode) { return aResult.ParseEnumValue(aValue, kInputmodeTable, false); } + + if (aAttribute == nsGkAtoms::enterkeyhint) { + return aResult.ParseEnumValue(aValue, kEnterKeyHintTable, false); + } } return nsGenericHTMLElementBase::ParseAttribute( aNamespaceID, aAttribute, aValue, aMaybeScriptedPrincipal, aResult); } bool nsGenericHTMLElement::ParseBackgroundAttribute(int32_t aNamespaceID, nsAtom* aAttribute,
--- a/dom/html/nsGenericHTMLElement.h +++ b/dom/html/nsGenericHTMLElement.h @@ -175,16 +175,23 @@ class nsGenericHTMLElement : public nsGe void GetInputMode(nsAString& aValue) { GetEnumAttr(nsGkAtoms::inputmode, nullptr, aValue); } void SetInputMode(const nsAString& aValue, ErrorResult& aRv) { SetHTMLAttr(nsGkAtoms::inputmode, aValue, aRv); } + void GetEnterKeyHint(nsAString& aValue) { + GetEnumAttr(nsGkAtoms::enterkeyhint, nullptr, aValue); + } + void SetEnterKeyHint(const nsAString& aValue, ErrorResult& aRv) { + SetHTMLAttr(nsGkAtoms::enterkeyhint, aValue, aRv); + } + /** * Determine whether an attribute is an event (onclick, etc.) * @param aName the attribute * @return whether the name is an event handler name */ virtual bool IsEventAttributeNameInternal(nsAtom* aName) override; #define EVENT(name_, id_, type_, struct_) /* nothing; handled by nsINode */
--- a/dom/webidl/HTMLElement.webidl +++ b/dom/webidl/HTMLElement.webidl @@ -47,16 +47,18 @@ interface HTMLElement : Element { [Pure] readonly attribute HTMLMenuElement? contextMenu; //[SetterThrows] // attribute HTMLMenuElement? contextMenu; [CEReactions, SetterThrows, Pure] attribute boolean spellcheck; [CEReactions, Pure, SetterThrows, Pref="dom.forms.inputmode"] attribute DOMString inputMode; + [CEReactions, Pure, SetterThrows, Pref="dom.forms.enterkeyhint"] + attribute DOMString enterKeyHint; attribute DOMString nonce; // command API //readonly attribute DOMString? commandType; //readonly attribute DOMString? commandLabel; //readonly attribute DOMString? commandIcon; //readonly attribute boolean? commandHidden;
--- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -2021,16 +2021,22 @@ # Support for input type=month, type=week and type=datetime-local. By default, # disabled. - name: dom.forms.datetime.others type: bool value: @IS_ANDROID@ mirror: always +# Is support for HTMLElement.enterKeyHint enabled? +- name: dom.forms.enterkeyhint + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + # Is support for HTMLElement.inputMode enabled? - name: dom.forms.inputmode type: bool #if defined(ANDROID) value: true #else value: @IS_NOT_RELEASE_OR_BETA@ #endif
--- a/testing/web-platform/meta/html/dom/idlharness.https.html.ini +++ b/testing/web-platform/meta/html/dom/idlharness.https.html.ini @@ -1,9 +1,9 @@ -prefs: [dom.security.featurePolicy.enabled:true, dom.security.featurePolicy.experimental.enabled:true, dom.security.featurePolicy.header.enabled:true, dom.security.featurePolicy.webidl.enabled:true, dom.webcomponents.elementInternals.enabled:true, dom.forms.requestsubmit.enabled:true, dom.forms.inputmode:true] +prefs: [dom.security.featurePolicy.enabled:true, dom.security.featurePolicy.experimental.enabled:true, dom.security.featurePolicy.header.enabled:true, dom.security.featurePolicy.webidl.enabled:true, dom.webcomponents.elementInternals.enabled:true, dom.forms.requestsubmit.enabled:true, dom.forms.inputmode:true, dom.forms.enterkeyhint:true] [idlharness.https.html?exclude=(Document|Window|HTML.*)] [OffscreenCanvasRenderingContext2D interface: operation lineTo(unrestricted double, unrestricted double)] expected: FAIL [OffscreenCanvasRenderingContext2D interface: attribute globalAlpha] expected: FAIL [AudioTrack interface: existence and properties of interface prototype object] @@ -880,19 +880,16 @@ prefs: [dom.security.featurePolicy.enabl expected: FAIL [HTMLDialogElement interface: operation show()] expected: FAIL [HTMLInputElement interface: createInput("search") must inherit property "dirName" with the proper type] expected: FAIL - [HTMLElement interface: attribute enterKeyHint] - expected: FAIL - [HTMLInputElement interface: createInput("checkbox") must inherit property "dirName" with the proper type] expected: FAIL [HTMLFormElement interface: attribute relList] expected: FAIL [HTMLDialogElement interface: existence and properties of interface prototype object] expected: FAIL @@ -937,19 +934,16 @@ prefs: [dom.security.featurePolicy.enabl expected: FAIL [HTMLInputElement interface: createInput("password") must inherit property "dirName" with the proper type] expected: FAIL [HTMLInputElement interface: document.createElement("input") must inherit property "dirName" with the proper type] expected: FAIL - [HTMLElement interface: document.createElement("noscript") must inherit property "enterKeyHint" with the proper type] - expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "videoTracks" with the proper type] expected: FAIL [HTMLDialogElement interface: existence and properties of interface prototype object's "constructor" property] expected: FAIL [HTMLMediaElement interface: attribute videoTracks] expected: FAIL
--- a/testing/web-platform/meta/html/dom/reflection-misc.html.ini +++ b/testing/web-platform/meta/html/dom/reflection-misc.html.ini @@ -1,10 +1,10 @@ [reflection-misc.html] - prefs: [dom.dialog_element.enabled:true, dom.forms.inputmode:true] + prefs: [dom.dialog_element.enabled:true, dom.forms.inputmode:true, dom.forms.enterkeyhint:true] [script.nonce: IDL set to ""] expected: FAIL [script.nonce: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] expected: FAIL [script.nonce: IDL set to undefined] expected: FAIL @@ -46,340 +46,16 @@ expected: FAIL [script.nonce: IDL set to null] expected: FAIL [script.nonce: IDL set to object "test-toString"] expected: FAIL - [undefinedelement.enterKeyHint: IDL set to "send\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to null] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to ""] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to true] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "go"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "o"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "revious"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to null] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "go\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "nter"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "xgo"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "next"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to Infinity] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to object "test-valueOf"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "enter"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to NaN] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "ENTER"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "NEXT"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "SEARCH"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "xgo"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "next\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "DONE"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to Infinity] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "send"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "enter\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "done\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "PREVIOUS"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "nter"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "GO"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "search"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "NEXT"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "next\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "xsend"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "SEARCH"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "done"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "ext"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "previous\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "xsearch"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "xenter"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "SEND"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to false] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "GO"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "send"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "xprevious"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to object "test-valueOf"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "PREVIOUS"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to undefined] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "enter\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "earch"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to ""] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "go"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "search\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to -Infinity] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to undefined] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "send\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to 7] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "done\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "end"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "ENTER"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "previous"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "xsend"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL get with DOM attribute unset] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "SEND"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "previous"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "xprevious"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to 1.5] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "5%"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "+100"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to ".5"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to 1.5] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "5%"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "+100"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to ".5"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "next"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to -Infinity] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "one"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "earch"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "xnext"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "xnext"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "enter"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "xdone"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "DONE"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "o"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "xsearch"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "search\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "end"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to false] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "one"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "xenter"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "go\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to true] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "ext"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "search"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to object "test-toString"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to 7] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "xdone"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to object "[object Object\]"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to object "[object Object\]"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to object "test-toString"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to NaN] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "previous\\0"] - expected: FAIL - - [undefinedelement.enterKeyHint: typeof IDL attribute] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "done"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "revious"] - expected: FAIL - [script.autofocus: setAttribute() to NaN] expected: FAIL [undefinedelement.autofocus: setAttribute() to "5%"] expected: FAIL [details.autofocus: setAttribute() to "\\0"] expected: FAIL @@ -1737,27 +1413,8 @@ [html.autofocus: IDL set to " foo "] expected: FAIL [script.autofocus: IDL set to object "test-valueOf"] expected: FAIL [summary.autofocus: typeof IDL attribute] expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "previouſ"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "ſearch"] - expected: FAIL - - [undefinedelement.enterKeyHint: IDL set to "ſend"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "ſend"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "ſearch"] - expected: FAIL - - [undefinedelement.enterKeyHint: setAttribute() to "previouſ"] - expected: FAIL -
--- a/xpcom/ds/StaticAtoms.py +++ b/xpcom/ds/StaticAtoms.py @@ -405,16 +405,17 @@ STATIC_ATOMS = [ Atom("elements", "elements"), Atom("em", "em"), Atom("embed", "embed"), Atom("empty", "empty"), Atom("encoding", "encoding"), Atom("enctype", "enctype"), Atom("end", "end"), Atom("endEvent", "endEvent"), + Atom("enterkeyhint", "enterkeyhint"), Atom("equalsize", "equalsize"), Atom("error", "error"), Atom("ethiopic_numeric", "ethiopic-numeric"), Atom("even", "even"), Atom("event", "event"), Atom("events", "events"), Atom("excludeResultPrefixes", "exclude-result-prefixes"), Atom("exportparts", "exportparts"),