Closed
Bug 1367028
Opened 7 years ago
Closed 7 years ago
Gecko serializes rectangular values (<top> <right> <bottom> <left>) differently than WebKit and Edge
Categories
(Core :: CSS Parsing and Computation, defect, P2)
Core
CSS Parsing and Computation
Tracking
()
RESOLVED
FIXED
mozilla55
Tracking | Status | |
---|---|---|
firefox55 | --- | fixed |
People
(Reporter: nox, Assigned: xidorn)
References
Details
(Whiteboard: [stylo])
Attachments
(3 files)
``` <div style='border-image: url("foo.png") 5 5 / 5 / 5 repeat repeat'></div> <script> var div = document.getElementsByTagName("div")[0]; console.log(div.style.borderImage); console.log(getComputedStyle(div).borderImage); </script> ``` The "5 5 / 5 / 5" part gets serialised as "5 / 5 / 5" in Edge, WebKit, and Servo with https://github.com/servo/servo/pull/17002, but as "5 5 5 5 / 5 5 5 5 / 5 5 5 5" in Firefox. Gecko should align its behaviour with the rest of the main user agents.
Comment 1•7 years ago
|
||
What does Stylo do?
Reporter | ||
Comment 2•7 years ago
|
||
Servo does "5 5 5 5" currently, and will do just "5" with the PR I mentioned above, aligning it with WebKit and Edge and making the code simpler.
Updated•7 years ago
|
Priority: -- → P2
Whiteboard: [stylo]
Comment hidden (mozreview-request) |
Assignee | ||
Comment 4•7 years ago
|
||
I don't change the serialization of computed value because that is a bit different and it is not required for shipping stylo.
Assignee: nobody → xidorn+moz
Reporter | ||
Comment 5•7 years ago
|
||
The serialisation of computed values is the same as what I described in all browsers but Gecko, AFAIK.
Comment 6•7 years ago
|
||
The fact that this shows up in the "border-image" shorthand property is a secondary effect here. Really, the main issue here is really with the longhand properties: - border-image-slice - border-image-outset - border-image-width You can reproduce this same issue (and discrepancy w/ other browsers) by simply setting any of those properties to "5" and then inspecting the serialized & computed style. It looks like the patch fixes the serialized-style part of this (I think) but not the computed-style part -- I expect window.getComputedStyle(div, "").borderImageOutset will will return "5 5 5 5" with the attached patch, right? (whereas in Chrome it'll return "5") I think the fix here needs to: - Fix the computed style representation as well (to maintain consistency with ourselves & with other browers) - Test the longhand properties directly, perhaps with testcases in: https://dxr.mozilla.org/mozilla-central/source/layout/style/test/test_computed_style.html https://dxr.mozilla.org/mozilla-central/source/layout/style/test/test_specified_value_serialization.html
Comment 7•7 years ago
|
||
You should include testcases in those ^^ mochitests for the two-value serialization behavior as well -- e.g.: - test that "border-image-outset: 5 6 5 6" serializes to "5 6". - test that "border-image-outset: 5 5 6 6" serializes to itself since it doesn't have the pairs matched up correctly for the two-value syntax.
Comment 8•7 years ago
|
||
mozreview-review |
Comment on attachment 8872236 [details] Bug 1367028 part 1 - Simplify serialization of specified rect values in border-image props when possible. https://reviewboard.mozilla.org/r/143718/#review147630 r- for now per comment 6. Also, one observation / possible-nit: ::: layout/style/test/test_shorthand_property_getters.html:236 (Diff revision 1) > e.setAttribute("style", 'border-image: url("foo.png") 5 5 5 5 / 5 5 5 5 / 5 5 5 5 repeat repeat; border-left: medium solid green'); > is(e.style.cssText, > - 'border-image: url("foo.png") 5 5 5 5 / 5 5 5 5 / 5 5 5 5 repeat repeat; border-left: medium solid green;', > + 'border-image: url("foo.png") 5 / 5 / 5 repeat repeat; border-left: medium solid green;', This piece of this mochitest isn't really *intending* to test/exercise this value-collapsing behavior (that "5 5 5 5" collapses to "5".) Really, it's just intending to test that a setAttribute("style" call took effect. So you should probably make the same change to the setAttribute call -- collapsing "5 5 5 5" quartets to just "5" -- to keep it consistent with the value that we're checking for here. That'd make this test a little more understandable. (It *is* important to test the 5 5 5 5 --> 5 collapsing behavior, but per comment 6, we should perform that check in a more dedicated test)
Attachment #8872236 -
Flags: review?(dholbert) → review-
Comment 9•7 years ago
|
||
(In reply to Daniel Holbert [:dholbert] (reduced availability - travel & post-PTO backlog) from comment #7) > You should include testcases in those ^^ mochitests for the two-value > serialization behavior as well nox points out in IRC that there's a three value syntax as well, e.g.: - "5 6 5" should serialize as "5 6" - "5 6 7" should serialize as "5 6 7" It occurs to me that we already have this implemented for margin/padding/border-width, and it seems to work how I expect it should (abbreviating values as-possible). Rather than fixing up the border-image serialization code to reimplement the abbreviation behavior, perhaps we should refactor that existing code into a helper function which we can share with border-image-* properties? (The helper function would need to accept unitless values of course, which it probably doesn't right now for margin/border-width/padding.)
Assignee | ||
Comment 10•7 years ago
|
||
> It looks like the patch fixes the serialized-style part of this (I think) but not the computed-style part -- I expect window.getComputedStyle(div, "").borderImageOutset will will return "5 5 5 5" with the attached patch, right? (whereas in Chrome it'll return "5") Yes, that is intentionally as I mentioned in comment 4 that: 1. doing that serialization in computed style is a bit more annoying, and 2. it is not required for shipping stylo. But okay, given both you and nox raised this issue, I should probably just fix that.
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Assignee | ||
Comment 14•7 years ago
|
||
Looks like changing the serialization of computed value actually adds lots of failures to handle... (That's why I didn't really want to touch things which doesn't necessarily need to be changed... especially when it was good enough.)
Comment 15•7 years ago
|
||
(In reply to Xidorn Quan [:xidorn] UTC+10 from comment #10) > 2. [abbreviating computedsytle] is not required for shipping stylo. Is it because Stylo isn't modifying our getComputedStyle implementation? (Honest question -- I wasn't aware of this difference in priorities between our two paths for serialization. But I can imagine how this might be the case.) > Looks like changing the serialization of computed value actually adds lots of failures to handle... Try run, for reference: https://treeherder.mozilla.org/#/jobs?repo=try&revision=0d5bd03eb9f4&selectedJob=102944024 The "failures" there don't look too nasty/numerous -- and they're all cases where we simply need to update the expectations, due to this legitimate change in getComputedStyle serialization behavior. For example: in the wpt10 orange in animation "xyz-per-property" tests, it looks like a lot of failures but I'll bet it's sufficient to just change these 3 lines (in a common data file which these tests share) https://dxr.mozilla.org/mozilla-central/rev/34ac1a5d6576d6775491c8a882710a1520551da6/testing/web-platform/tests/web-animations/animation-model/animation-types/property-list.js#193,205,219 > (That's why I didn't really want to touch things which doesn't > necessarily need to be changed... especially when it was good enough.) I understand, but our existing behavior for specified-style serialization is arguably just as "good enough" too. :) My position is: right now, we (Gecko) are internally consistent w.r.t. how we serialize these properties, when comparing their specified style vs. computed style. That consistency seems useful & desirable. If we're changing from one arbitrary serialization to another in one of those codepaths, it seems like we should make that same change in both places, to preserve our current (desirable)internal consistency.
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Reporter | ||
Comment 19•7 years ago
|
||
Stylo does this for: * border-color * border-style * margin * padding * border-width * inset() * border-radius * border-image-outset * -moz-outline-radius
Reporter | ||
Comment 20•7 years ago
|
||
Forgot to repeat 2 that Daniel already mentioned: * border-image-slice * border-image-width
Comment 21•7 years ago
|
||
mozreview-review |
Comment on attachment 8872236 [details] Bug 1367028 part 1 - Simplify serialization of specified rect values in border-image props when possible. https://reviewboard.mozilla.org/r/143718/#review147994 r=me
Attachment #8872236 -
Flags: review?(dholbert) → review+
Comment 22•7 years ago
|
||
mozreview-review |
Comment on attachment 8872506 [details] Bug 1367028 part 2 - Simplify serialization of computed value of rect values in border-image props when possible. https://reviewboard.mozilla.org/r/144042/#review147998 r=me
Attachment #8872506 -
Flags: review?(dholbert) → review+
Comment 23•7 years ago
|
||
mozreview-review |
Comment on attachment 8872507 [details] Bug 1367028 part 3 - Add tests for the new serialization code. https://reviewboard.mozilla.org/r/144044/#review148004 r=me
Attachment #8872507 -
Flags: review?(dholbert) → review+
Comment 24•7 years ago
|
||
Pushed by xquan@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/43c472a9bfb4 part 1 - Simplify serialization of specified rect values in border-image props when possible. r=dholbert https://hg.mozilla.org/integration/autoland/rev/2b57daca7dcb part 2 - Simplify serialization of computed value of rect values in border-image props when possible. r=dholbert https://hg.mozilla.org/integration/autoland/rev/a5a48d024030 part 3 - Add tests for the new serialization code. r=dholbert
Comment 25•7 years ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/43c472a9bfb4 https://hg.mozilla.org/mozilla-central/rev/2b57daca7dcb https://hg.mozilla.org/mozilla-central/rev/a5a48d024030
Status: NEW → RESOLVED
Closed: 7 years ago
status-firefox55:
--- → fixed
Flags: in-testsuite+
Resolution: --- → FIXED
Target Milestone: --- → mozilla55
You need to log in
before you can comment on or make changes to this bug.
Description
•