Closed Bug 1367923 Opened 8 years ago Closed 8 years ago

Stylo: Support link preshints (mapped attributes) on <body>

Categories

(Core :: CSS Parsing and Computation, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla55
Tracking Status
firefox55 --- fixed

People

(Reporter: jryans, Assigned: jryans)

References

(Blocks 1 open bug)

Details

Attachments

(3 files)

Setting `document.linkColor` or changing the body's link attribute seems to be ignored with Stylo. (There's also `alinkColor` / `aLink` and `vlinkColor` / `vLink`.) This appears to impact at least the following tests: layout/reftests/bugs/99850-1a.html layout/reftests/bugs/99850-1c.html layout/reftests/bugs/99850-1d.html
Also these too: layout/reftests/bugs/589615-1a.xhtml layout/reftests/bugs/589615-1b.html
Summary: Stylo: Need to restyle when `document.linkColor` / body link attr changes → Stylo: `document.linkColor` / body link attr colors not applied
In Gecko's style system, these link / vlink / alink attributes are applied in `HTMLBodyElement::MapAttributesIntoRule`[1]. While the rest of that method has been converted to work with Stylo, these link ones haven't been so far. They are a bit different, since they each create one-off style rules[2] that the Gecko style system manually matches[3] based on element state of a given link. :bz, do you think we could potentially unship support for link / vlink / alink attributes on the body in Gecko? HTML 4.01 lists them as deprecated. Looking at other browsers: Chrome 60: link attr ignored Safari 10.2: link attr initially ignored, but if you close the tab and restore it, they appear applied Edge 15: link attr applied [1]: http://searchfox.org/mozilla-central/rev/a14524a72de6f4ff738a5e784970f0730cea03d8/dom/html/HTMLBodyElement.cpp#318-345 [2]: http://searchfox.org/mozilla-central/rev/c195cc1698da2d3116fd8594db44614bb1304719/layout/style/nsHTMLStyleSheet.cpp#491 [3]: http://searchfox.org/mozilla-central/rev/c195cc1698da2d3116fd8594db44614bb1304719/layout/style/nsHTMLStyleSheet.cpp#307-329
Flags: needinfo?(bzbarsky)
> :bz, do you think we could potentially unship support No. > HTML 4.01 lists them as deprecated HTML 4.01 says many things, only some of which make sense. ;) Anyway, the relevant spec here at this point is https://html.spec.whatwg.org/multipage/rendering.html#the-page these bits: When a body element has a link attribute, its value is expected to be parsed using the rules for parsing a legacy color value, and if that does not return an error, the user agent is expected to treat the attribute as a presentational hint setting the 'color' property of any element in the Document matching the :link pseudo-class to the resulting color. and similar for vlink/alink. As far as I know this is all interoperably implemented by every single browser. > Chrome 60: link attr ignored That's not what I see at all. Testcase: <!DOCTYPE html> <body link="lime" vlink="pink"> <a href="http://ibetthisisnotahostnameyouvisited">Unvisited link</a> <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1367923">Visited link</a> </body> Those render as lime and pink respectively for me in Chrome 60 dev after I visit this bug page in it. > Safari 10.2: link attr initially ignored, but if you close the tab and restore it, they appear applied Again, not what I see (in Safari 10.1 or WebKit nightly). The above testcase works just fine there.
Flags: needinfo?(bzbarsky)
(In reply to Boris Zbarsky [:bz] (work week until 5/26) (if a patch has no decent message, automatic r-) from comment #3) > > HTML 4.01 lists them as deprecated > > HTML 4.01 says many things, only some of which make sense. ;) Ah sorry, this is what I get for blindly trusting the MDN spec links... > and similar for vlink/alink. As far as I know this is all interoperably > implemented by every single browser. Yes, using your test case, it looks like the static attributes are well supported. I was loading layout/reftests/bugs/99850-1a.html as my test case, which changes the color dynamically via `document.linkColor`. So, I guess the static attribute is better supported than dynamic changes. In any case, looks like we'll need to port this for Stylo. Thanks for helping with the analysis. :)
Assignee: nobody → jryans
Status: NEW → ASSIGNED
Summary: Stylo: `document.linkColor` / body link attr colors not applied → Stylo: Support link preshints (mapped attributes) on <body>
Comment on attachment 8873641 [details] Bug 1367923 - Store Servo decls when link preshints change. https://reviewboard.mozilla.org/r/145018/#review148984 ::: layout/style/ServoBindings.cpp:502 (Diff revision 1) > + nsHTMLStyleSheet* sheet = aElement->OwnerDoc()->GetAttributeStyleSheet(); > + if (!sheet) { > + return nullptr; > + } > + > + return reinterpret_cast<const RawServoDeclarationBlockStrong*> would be nice if we had a helper function for doing this conversion.
Attachment #8873641 - Flags: review?(manishearth) → review+
Comment on attachment 8873642 [details] Bug 1367923 - Pull decls from Gecko for link preshints. https://reviewboard.mozilla.org/r/145020/#review148988 ::: servo/components/style/gecko/wrapper.rs:1110 (Diff revision 1) > } > > + // Support for link, vlink, and alink presentation hints on <body> > + if self.is_link() { > + // Unvisited vs. visited styles are computed up-front based on the > + // visited mode (not the element's actual state). So I guess this is called twice per visit-able element, regardless of its state?
Attachment #8873642 - Flags: review?(manishearth) → review+
Attachment #8873643 - Flags: review?(manishearth) → review+
Comment on attachment 8873641 [details] Bug 1367923 - Store Servo decls when link preshints change. https://reviewboard.mozilla.org/r/145018/#review148984 > would be nice if we had a helper function for doing this conversion. Good idea, I'll add one!
Comment on attachment 8873642 [details] Bug 1367923 - Pull decls from Gecko for link preshints. https://reviewboard.mozilla.org/r/145020/#review148988 > So I guess this is called twice per visit-able element, regardless of its state? Yes, that's right. If a relevant link is found, match and cascade is done a second time in visited mode to compute the visited styles.
Pushed by jryans@gmail.com: https://hg.mozilla.org/integration/autoland/rev/7b8fcdae113f Store Servo decls when link preshints change. r=Manishearth https://hg.mozilla.org/integration/autoland/rev/5092c00facfa Enable link attr tests for Stylo. r=Manishearth
Status: ASSIGNED → RESOLVED
Closed: 8 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla55
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: