Bug 295854
| Summary: | [WebIDL] Add WebIDL support for [Enumerated] extended attribute, and related attributes: [MissingValueDefault], [InvalidValueDefault] | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | Rahim Abdi <rahim_abdi> |
| Component: | Bindings | Assignee: | Nobody <webkit-unassigned> |
| Status: | RESOLVED FIXED | ||
| Severity: | Normal | CC: | cdumez, webkit-bug-importer |
| Priority: | P2 | Keywords: | InRadar |
| Version: | Other | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
Rahim Abdi
In .idl files, it would be helpful to simplify defining enumerated attributes to streamline getter/setter code generation (and not have to code these manually). This is particularly useful for enumerated attributes since they are limited to known values, and have two optional, special states: missing value default and invalid value default; all of these could be specified as part of an attribute's .idl declaration.
For example (ignoring that these may not be truly valid values):
CURRENT:
[CEReactions=Needed, Reflect=aria_orientation] attribute DOMString? ariaOrientation;
PROPOSED:
[CEReactions=Needed, Reflect=aria_orientation, ReflectOnly=("horizontal", "vertical", "undefined"), ReflectMissing=("vertical"), ReflectInvalid=("horizontal")] attribute DOMString? ariaOrientation;
Per HTML spec, DOMString and nullable DOMString (DOMString?) do not require that the attribute be enumerated however, where a content attribute is enumerated, it must be limited to known values; see DOMString and DOMString reflection algorithm: https://html.spec.whatwg.org/#reflecting-content-attributes-in-idl-attributes.
Note: These new extended attributes are not defined in WebIDL, although they are described in WebIDL spec prose. Also, Chrome already supports them: https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLExtendedAttributes.md#reflectonly.
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
Rahim Abdi
Pull request: https://github.com/WebKit/WebKit/pull/47953
Radar WebKit Bug Importer
<rdar://problem/156249490>
Rahim Abdi
New approach from PR comment on improving syntax of enumerated attributes using 'enum' IDL type: https://github.com/WebKit/WebKit/pull/47953#pullrequestreview-3014249574.
To better support .idl definition of reflected DOMString/DOMString? attributes, the following should be added:
- [Enumerated] = allowed on attributes that use [Reflect] and used to specify two or more known values for the attribute
- [MissingValueDefault] = the value of the IDL attribute when the content attribute is missing: https://html.spec.whatwg.org/#missing-value-default
- [InvalidValueDefault] = the value of the IDL attribute when the content attribute has a non-permitted value: https://html.spec.whatwg.org/#invalid-value-default
- [EmptyValueDefault] = the value of the IDL attribute when the content attribute is present without a value, e.g., <div someAttr> (as opposed to <div someAttr="foo">
For example:
[
MissingValueDefault=“Value1”,
InvalidValueDefault=“Value3”,
] enum attrnameAttribute {
"Value1",
"Value2",
"Value3"
}
…
[Reflect=myattr, Enumerated=attrnameAttribute] attribute DOMString? myattr;
EWS
Committed 298172@main (5c150f7a3b58): <https://commits.webkit.org/298172@main>
Reviewed commits have been landed. Closing PR #47953 and removing active labels.