Closed Bug 1490661 Opened 6 years ago Closed 4 years ago

Support enterkeyhint and deprecate mozactionhint


(Core :: DOM: Core & HTML, defect, P2)




Tracking Status
firefox79 --- fixed


(Reporter: dtapuska, Assigned: m_kato)



(Keywords: dev-doc-needed, site-compat, Whiteboard: [geckoview:m79])


(6 files)

User Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36

Steps to reproduce:

enterkeylabel is a standardization of mozactionhint (with previous addition)

Actual results:

Not supported

Expected results:

Support the new attribute and pass the WPT tests
Summary: Support enterkeylabel and deprecate mozactionhint → Support enterkeyhint nd deprecate mozactionhint
Summary: Support enterkeyhint nd deprecate mozactionhint → Support enterkeyhint and deprecate mozactionhinta
Clearly I wasn't awake when I submitted this. It should reference enterkeyhint
So if I understand correctly, this requires two changes:

1)  Adding an IDL attribute with reflection for the new attributes.

2)  Adding UI functionality to actually change what the user is shown based on those attributes.

Is that correct?

Should UAs avoid doing #1 until #2 is done, to allow feature-detection?   What should happen on platforms where #2 is not really possible (because there is no virtual keyboard)?
Flags: needinfo?(dtapuska)
You need to do 1).

And for 2 you should already have the support on Android (except for the previous value but should be trivial to add).

This is only used as a hint so feature detection I don't think is necessary. Chrome only has control of this on Android but we do read and reflect the attribute on all platforms.
Flags: needinfo?(dtapuska)
Keywords: site-compat
Setting the component in order to involve the development team in reviewing this issue.
Component: Untriaged → Keyboard Navigation
That's the wrong component, as well as the wrong product, for what needs to be done here.
Component: Keyboard Navigation → DOM
Ever confirmed: true
Product: Firefox → Core
Summary: Support enterkeyhint and deprecate mozactionhinta → Support enterkeyhint and deprecate mozactionhint
So what needs to happen is:

1)  Sending an intent to implement (and ship?)
2)  Adding ... on which elements?  Spec has it for all HTML elements, but we don't generally support this stuff for non-form-controls.   I still have open questions around feature-detection here and whether sites will end up switching on whether the attribute is present on various types of elements.   In particular, it's not clear to me that we want to support the reflection on elements on which we don't use the attribute.
3)  In IMEStateManager::SetIMEState (in dom/events/IMEStateManager.cpp) we want to consider this attribute in the case where it currently does GetAttr(nsGkAtoms::moz_action_hint).  Looks like that's only for input and textarea, so we may want to limit exposure of the IDL reflection to those elements until that changes...
Priority: -- → P2
Component: DOM → DOM: Core & HTML

Also, this has unclear issue for event model.

I see people promoting this now that Safari has shipped:

Yoshino-san, although you set site-compat keyword, do you know whether any major site already uses this attribute?

To ship this on us, we have to clear ui event issue per comment #9. Although I ask it to dtapuska, no response.

Sorry I missed that. We always fire enter events if the attribute is specified. The specification could likely be cleaned up.

(In reply to dtapuska from comment #12)

Sorry I missed that. We always fire enter events if the attribute is specified. The specification could likely be cleaned up.

Thank you. I already have a prototype for this implementation, so I am considering this for GeckoView.

(In reply to Makoto Kato [:m_kato] from comment #11)

Yoshino-san, although you set site-compat keyword, do you know whether any major site already uses this attribute?

I don’t know any specific case but will post a site compatibility note anyway for the deprecation.

Assignee: nobody → m_kato
Whiteboard: [geckoview:m79]

On mobile platform, "ENTER" key on software keyboard key can sometimes
change to "Next" and etc. Although Firefox OS/Firefox Android have
mozactionhint attribute for its behaviour, This is standardized version
of it.

Chrome and Safari already support it now, so I would like to support this
on Firefox/GeckoView Nightly.

Bug 1618295 isn't merged into, I copy
it from /parser/html/javasrc/

Depends on D79641

Set enterkeyhint to InputContext.mActionHint. Although it is used by
moz_action attribute, enterkeyhint is standardized version of this.

New logic is the following.

  1. Read enterkeyhint that is from editing host
  2. Read moz_action on <input> element if no enterkeyhint
  3. If both is nothing, we infer this value from the <form>.

Depends on D79642

Current implementation of Blink and WebKit is that enter key is dispatched
even if enterkeyhint is next. If no enterkeyhint, Gecko and Blink infer
this type from <form> and <input> element.

If this key is set as "next" by inference, Blink doesn't dispatch key event
then sets focus to next element, and Gecko dispatches Tab key to set focus
to next element.

So if action hint is "next" by inference, we would like to change to another
type "maybenext".

Depends on D79644

When using enterkeyhint attribute, key event must be be fired as enter key.
So by previous changeset, I change action type to maybenext if inferring
action type without enterkeyhint.

Also, enterkeyhint can have additional values (enter and previous), so Android
back end should support it.

Depends on D79645

Pushed by
Part 1. Support HTML.enterKeyHint in Nighly. r=webidl,smaug,hsivonen
Part 2. Add enterkeyhint attribute to htmlparser. r=hsivonen
Part 3. InputContext should reference enterkeyhint attribute for action hint. r=masayuki
Part 4. Split next action hint with next and maybenext. r=masayuki
Part 5. Implement current spec of enterkeyhint on Android backend. r=geckoview-reviewers,agi
Part 6. Add geckoview-junit test for enterkeyhint. r=geckoview-reviewers,agi
Blocks: 1648332
You need to log in before you can comment on or make changes to this bug.