RESOLVED FIXED 165279
Implement inert attribute (affects keyboard, events, and accessibility)
https://bugs.webkit.org/show_bug.cgi?id=165279
Summary Implement inert attribute (affects keyboard, events, and accessibility)
James Craig
Reported 2016-12-01 14:31:39 PST
WICG discussion happening here: https://discourse.wicg.io/t/inert-attribute/1838
Attachments
testcase (5.02 KB, text/html)
2020-04-16 07:43 PDT, Frédéric Wang (:fredw)
no flags
WIP Patch (4.57 KB, patch)
2020-04-16 07:47 PDT, Frédéric Wang (:fredw)
no flags
Patch (62.43 KB, patch)
2021-08-20 05:48 PDT, Tim Nguyen (:ntim)
no flags
Patch (67.34 KB, patch)
2021-08-20 08:56 PDT, Tim Nguyen (:ntim)
no flags
Patch (69.46 KB, patch)
2021-08-23 07:08 PDT, Tim Nguyen (:ntim)
ews-feeder: commit-queue-
Patch (69.27 KB, patch)
2021-08-23 07:14 PDT, Tim Nguyen (:ntim)
no flags
Patch (68.02 KB, patch)
2021-08-23 09:04 PDT, Tim Nguyen (:ntim)
no flags
Patch (68.01 KB, patch)
2021-08-23 09:28 PDT, Tim Nguyen (:ntim)
no flags
Patch (68.08 KB, patch)
2021-08-23 13:15 PDT, Tim Nguyen (:ntim)
no flags
Patch (67.91 KB, patch)
2021-08-24 00:29 PDT, Tim Nguyen (:ntim)
no flags
Radar WebKit Bug Importer
Comment 1 2016-12-01 14:32:16 PST
James Craig
Comment 2 2016-12-01 15:28:40 PST
There are obvious benefits for accessibility. Are there concerns from WebKit implementors about the functionality change or implementability of for events handling and keyboard/focus behavior?
James Craig
Comment 3 2016-12-01 15:52:47 PST
Also discussion re: naming conflict with template: https://github.com/WICG/inert/issues/39
James Craig
Comment 4 2016-12-08 18:54:45 PST
*** Bug 159748 has been marked as a duplicate of this bug. ***
James Craig
Comment 5 2016-12-08 18:59:03 PST
Relating to <dialog> bug 84635
Chris Rebert
Comment 6 2016-12-08 19:50:48 PST
James Craig
Comment 7 2017-05-27 00:50:26 PDT
Google this shipping behind a flag now. Enable: chrome://flags#enable-experimental-web-platform-features Explainer: https://github.com/WICG/inert/blob/master/README.md Chrome "Intent to Implement" from February: https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/N--HhuYFJQI
Carolyn MacLeod
Comment 8 2017-10-06 19:11:24 PDT
Michael Puckett
Comment 9 2018-09-03 05:44:42 PDT
Please consider adding to the feature status list here: https://webkit.org/status
Frédéric Wang (:fredw)
Comment 10 2020-04-16 07:43:38 PDT
Created attachment 396647 [details] testcase
Frédéric Wang (:fredw)
Comment 11 2020-04-16 07:47:18 PDT
Created attachment 396649 [details] WIP Patch Just a quick proof-of-concept patch. It seems to at least work for links. Probably there are several cases to check and things to verify, but that gives a starting point.
Frédéric Wang (:fredw)
Comment 12 2020-04-16 07:52:27 PDT
Comment on attachment 396649 [details] WIP Patch View in context: https://bugs.webkit.org/attachment.cgi?id=396649&action=review > Source/WebCore/dom/Element.h:473 > + virtual bool isDisabledFormControl() const { return isInert(); } Obviously, this should also be done in derived class... it seems they don't call their parent.
Carolyn MacLeod
Comment 13 2021-04-09 05:33:24 PDT
Nudge. :) Chrome/Edge/Opera and Firefox all have this ready and waiting behind a flag: https://caniuse.com/mdn-api_htmlelement_inert The HTML spec has an approved pull request waiting: https://github.com/whatwg/html/pull/4288 So it seems everybody is waiting on webkit/Safari.
Carolyn MacLeod
Comment 14 2021-04-09 05:55:46 PDT
Hmmm, I guess people are also waiting on https://github.com/whatwg/html/issues/5650 and https://github.com/w3c/html-aam/issues/295. If you can help move those conversations forward from a webkit point of view, please do.
Tim Nguyen (:ntim)
Comment 15 2021-07-17 15:32:09 PDT
I'm going to start implementing inert subtrees in bug 110952 in the next weeks, though only the minimum needed for <dialog> element. I suspect it won't be hard to get the attribute working after that's properly done.
Tim Nguyen (:ntim)
Comment 16 2021-08-20 05:48:34 PDT
Tim Nguyen (:ntim)
Comment 17 2021-08-20 08:56:08 PDT
Sam Weinig
Comment 18 2021-08-20 11:54:26 PDT
Comment on attachment 435994 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=435994&action=review > Source/WebCore/html/HTMLElement.idl:60 > + // Experimental: https://github.com/WICG/inert/blob/master/README.md > + [CEReactions, Reflect, EnabledBySetting=InertAttribute] attribute boolean inert; I would put this above the Non-standard attributes (and below the attachInternals commented out attribute).
Simon Fraser (smfr)
Comment 19 2021-08-20 12:04:00 PDT
Comment on attachment 435994 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=435994&action=review > Source/WebCore/dom/Node.cpp:2640 > + const Element* element = is<Element>(this) ? downcast<Element>(this) : parentElement(); > + while (element) { > + if (is<HTMLElement>(element) && element->hasAttribute(HTMLNames::inertAttr)) > + return true; > + element = element->parentElement(); Doing an ancestor tree walk every time this is called doesn't seem great for perf.
Tim Nguyen (:ntim)
Comment 20 2021-08-20 13:53:35 PDT
(In reply to Simon Fraser (smfr) from comment #19) > Comment on attachment 435994 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=435994&action=review > > > Source/WebCore/dom/Node.cpp:2640 > > + const Element* element = is<Element>(this) ? downcast<Element>(this) : parentElement(); > > + while (element) { > > + if (is<HTMLElement>(element) && element->hasAttribute(HTMLNames::inertAttr)) > > + return true; > > + element = element->parentElement(); > > Doing an ancestor tree walk every time this is called doesn't seem great for > perf. Simon suggested adding a bit on Document that is set anytime one of the elements get the inert attribute, and only doing the ancestor walk in that case.
Tim Nguyen (:ntim)
Comment 21 2021-08-23 07:08:10 PDT
Tim Nguyen (:ntim)
Comment 22 2021-08-23 07:14:02 PDT
Chris Dumez
Comment 23 2021-08-23 08:08:40 PDT
Comment on attachment 436192 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=436192&action=review > Source/WebCore/dom/Document.h:1635 > + bool hasInertAttributeBeenUsed() { return m_hasInertAttributeBeenUsed; } should be const. > Source/WebCore/dom/Node.cpp:2636 > + const Element* element = is<Element>(this) ? downcast<Element>(this) : parentElement(); Seems like you should be using lineageOfType: for (auto& element : lineageOfType<HTMLElement>(*this)) { if (element->hasAttribute(HTMLNames::inertAttr)) return true; } > Source/WebCore/html/HTMLElement.cpp:486 > + document().setHasInertAttributeBeenUsed(); How does that work when an element gets moved from one document to another?
Tim Nguyen (:ntim)
Comment 24 2021-08-23 09:04:08 PDT
Chris Dumez
Comment 25 2021-08-23 09:15:13 PDT
Comment on attachment 436200 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=436200&action=review r=me > Source/WebCore/dom/Node.cpp:2636 > + auto* element = is<Element>(this) ? downcast<Element>(this) : parentElement(); is<Element>(*this) to avoid an unnecessary null-check.
Tim Nguyen (:ntim)
Comment 26 2021-08-23 09:28:14 PDT
EWS
Comment 27 2021-08-23 11:20:09 PDT
Found 30 new test failures: accessibility/accessibility-crash-focused-element-change.html, accessibility/accessibility-crash-setattribute.html, accessibility/accessibility-node-reparent.html, accessibility/mac/abbr-acronym-tags.html, accessibility/mac/accessibility-make-first-responder.html, accessibility/mac/accesskey.html, accessibility/mac/attributed-string/attributed-string-for-range-with-options.html, accessibility/mac/attributed-string/attributed-string-for-range.html, accessibility/mac/search-text/search-text.html, accessibility/mac/select-text/select-text-1.html ...
Ryosuke Niwa
Comment 28 2021-08-23 13:15:20 PDT
Comment on attachment 436203 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=436203&action=review > Source/WebCore/dom/Node.cpp:2636 > + auto* element = is<Element>(*this) ? downcast<Element>(this) : parentElement(); Please use RefPtr.
Tim Nguyen (:ntim)
Comment 29 2021-08-23 13:15:32 PDT
Ryosuke Niwa
Comment 30 2021-08-23 13:16:15 PDT
Comment on attachment 436228 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=436228&action=review > Source/WebCore/dom/Node.cpp:2637 > + auto* element = is<Element>(*this) ? downcast<Element>(this) : parentElement(); > + if (element) { Please use RefPtr. Also declare the variable inside if like so: if (RefPtr element = ~)
Emilio Cobos Álvarez (:emilio)
Comment 31 2021-08-23 16:47:03 PDT
Comment on attachment 436228 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=436228&action=review > Source/WebCore/dom/Node.cpp:2639 > + if (is<HTMLElement>(ancestor) && ancestor.hasAttribute(HTMLNames::inertAttr)) Shouldn't this use the flat tree?
Tim Nguyen (:ntim)
Comment 32 2021-08-24 00:29:12 PDT
EWS
Comment 33 2021-08-24 01:18:01 PDT
Committed r281490 (240864@main): <https://commits.webkit.org/240864@main> All reviewed patches have been landed. Closing bug and clearing flags on attachment 436265 [details].
Note You need to log in before you can comment on or make changes to this bug.