Bug 238356 - [css-cascade] "related-property" logic for (-webkit-)text-orientation is broken
Summary: [css-cascade] "related-property" logic for (-webkit-)text-orientation is broken
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: CSS (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Oriol Brufau
URL:
Keywords: InRadar
Depends on:
Blocks: 238350
  Show dependency treegraph
 
Reported: 2022-03-24 16:46 PDT by Oriol Brufau
Modified: 2022-04-06 08:05 PDT (History)
11 users (show)

See Also:


Attachments
testcase (889 bytes, text/html)
2022-03-24 16:46 PDT, Oriol Brufau
no flags Details
Patch (11.66 KB, patch)
2022-03-24 19:41 PDT, Oriol Brufau
no flags Details | Formatted Diff | Diff
Patch (24.30 KB, patch)
2022-03-25 05:59 PDT, Oriol Brufau
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (24.43 KB, patch)
2022-03-25 06:00 PDT, Oriol Brufau
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (24.47 KB, patch)
2022-03-25 06:21 PDT, Oriol Brufau
no flags Details | Formatted Diff | Diff
Patch (24.44 KB, patch)
2022-04-06 04:29 PDT, Oriol Brufau
ews-feeder: commit-queue-
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Oriol Brufau 2022-03-24 16:46:36 PDT
Created attachment 455703 [details]
testcase

The text-orientation and -webkit-text-orientation properties are defined with the "related-property" flag.
They are two different longhands that share a computed value, so this flag tries to address the case where both properties are specified.
Typically, properties are applied in alphabetical order within their priority group, but "related-property" achieves that the last specified one wins:

  <div style="-webkit-text-orientation: mixed; text-orientation: upright">I'm upright</div>
  <div style="text-orientation: mixed; -webkit-text-orientation: upright">I'm upright</div>

However, it doesn't work here (see attached testcase):

  <style>
  div { -webkit-text-orientation: mixed }
  div { text-orientation: upright }
  </style>
  <div>I should be upright</div>

This case works well for (-webkit-)box-shadow, which instead of "related-property" is handled by shouldApplyPropertyInParseOrder().

I thought I could handle (-webkit-)text-orientation in the same way (bug 238350), but when shouldApplyPropertyInParseOrder() returns true, the property is deferred and applied after low-priority properties.
This conflicts with (-webkit-)text-orientation, which need to be high priority.
Comment 1 Oriol Brufau 2022-03-24 17:53:00 PDT
For revert-layer this implies a problem like bug 238125 (but it would need to be addressed in a different way). This example is not upright:

  @layer { div { writing-mode: vertical-lr; text-orientation: upright; } }
  @layer { div { -webkit-text-orientation: revert-layer; } }

And CSSOM is also broken:

  CSS.supports("text-orientation", "sideways-right"); // false
  document.body.style.webkitTextOrientation = "sideways-right";
  document.body.style.textOrientation; // "sideways-right" !!! invalid value

Since the only difference between these properties is that -webkit-text-orientation accepts sideways-right, but this value always computes to sideways, I would:

 1. Make -webkit-text-orientation an shorthand of text-orientation
 2. Alias sideways-right into sideways at parse time

This is similar to the example in the spec https://drafts.csswg.org/css-cascade/#legacy-shorthand, which says that page-break-before:always expands to break-before:page at parse time.
Comment 2 Oriol Brufau 2022-03-24 19:41:50 PDT
Created attachment 455718 [details]
Patch
Comment 3 Oriol Brufau 2022-03-25 05:59:00 PDT
Created attachment 455750 [details]
Patch
Comment 4 Oriol Brufau 2022-03-25 06:00:52 PDT
Created attachment 455751 [details]
Patch
Comment 5 Oriol Brufau 2022-03-25 06:21:46 PDT
Created attachment 455754 [details]
Patch
Comment 6 Oriol Brufau 2022-03-25 07:29:03 PDT
PTAL
Comment 7 Radar WebKit Bug Importer 2022-03-31 16:47:15 PDT
<rdar://problem/91133741>
Comment 8 Antti Koivisto 2022-04-06 01:49:05 PDT
Comment on attachment 455754 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=455754&action=review

> Source/WebCore/css/parser/CSSPropertyParser.cpp:5659
> +    else
> +        return false;
> +    if (!keyword || !m_range.atEnd())
> +        return false;

could just remove the else brach, it will hit the !keyword case
Comment 9 Oriol Brufau 2022-04-06 04:29:01 PDT
Created attachment 456807 [details]
Patch
Comment 10 Oriol Brufau 2022-04-06 04:31:13 PDT
Comment on attachment 456807 [details]
Patch

(In reply to Antti Koivisto from comment #8)
> Comment on attachment 455754 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=455754&action=review
> 
> > Source/WebCore/css/parser/CSSPropertyParser.cpp:5659
> > +    else
> > +        return false;
> > +    if (!keyword || !m_range.atEnd())
> > +        return false;
> 
> could just remove the else brach, it will hit the !keyword case

Done.
Comment 11 EWS 2022-04-06 07:20:26 PDT
Committed r292463 (249314@main): <https://commits.webkit.org/249314@main>

All reviewed patches have been landed. Closing bug and clearing flags on attachment 456807 [details].