style: Remove TNode::set_can_be_fragmented and TNode::can_be_fragmented.
Replace them instead by a computed value flag, the same way as the
IS_IN_DISPLAY_NONE_SUBTREE flag works.
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18893)
<!-- Reviewable:end -->
We don't need to calculate computed animation-name or transition-property prior
to other properties any more because we no longer fill out those other
properties values in response to animation-name or transition-property length
at the time when we calculate computed property values.
This reverts commit 1970e82b0d, reversing
changes made to e882660ea6.
The reparenting logic is still bogus, but I'll figure out how to deal with that
in a bit.
In practice the only NAC that possibly inherits from a grid or flex container
are pseudos.
In Gecko, if the root element is an item container, custom anon content would
also sometimes incorrectly inherit from that (see bug 1405635), but that's fixed
in Stylo.
We remove the IS_ROOT_ELEMENT blockification from the "skip display fixup"
check, since the root element is never NAC or anything like that, so there's no
need for the check.
This also fixes some reparenting fishiness related to pseudo-elements. We were
only skipping the fixup when reparenting anon boxes, not when reparenting normal
element styles, nor when reparenting other pseudo styles which are not anon
boxes.
The style adjuster knows about the pseudo, so there's no reason to thread that
info down.
There are more simplifications that can be done in followups, cleaning a bit the
cascade flags too, those will come later.
It's not only more consistent (since we have a proper ParserContext there), but
also fixes a bunch of bugs where Gecko accidentally exposes and allows setting
internal state because of conversions from nsCSSPropertyID to PropertyId.
This adds the extra complexity of caring about aliases for longer, but that's
probably not a big deal in practice, since we also have PropertyDeclarationId.
MozReview-Commit-ID: C2Js8PfloxQ
This allows enabling properties in ua sheets and chrome differently.
The setup is:
* enabled_in needs to be one of the four values:
["", "ua", "chrome", "content"]
* "chrome" implies "ua", and implies that they're explicitly enabled.
* "" implies the property will never be parsed.
* "content" implies the property is accessible unconditionally, modulo a pref.
Experimental still keeps trumping over those when the pref is enabled.
This PR replaces uses of internal="" by enabled_in="ua" or enabled_in="".
This may seem that it changes behavior, but since the properties where I added
enabled_in="" already unconditionally error from parse it's not.
Next step is annotating chrome-only properties.
Servo currently uses `heapsize`, but Stylo/Gecko use `malloc_size_of`.
`malloc_size_of` is better -- it handles various cases that `heapsize` does not
-- so this patch changes Servo to use `malloc_size_of`.
This patch makes the following changes to the `malloc_size_of` crate.
- Adds `MallocSizeOf` trait implementations for numerous types, some built-in
(e.g. `VecDeque`), some external and Servo-only (e.g. `string_cache`).
- Makes `enclosing_size_of_op` optional, because vanilla jemalloc doesn't
support that operation.
- For `HashSet`/`HashMap`, falls back to a computed estimate when
`enclosing_size_of_op` isn't available.
- Adds an extern "C" `malloc_size_of` function that does the actual heap
measurement; this is based on the same functions from the `heapsize` crate.
This patch makes the following changes elsewhere.
- Converts all the uses of `heapsize` to instead use `malloc_size_of`.
- Disables the "heapsize"/"heap_size" feature for the external crates that
provide it.
- Removes the `HeapSizeOf` implementation from `hashglobe`.
- Adds `ignore` annotations to a few `Rc`/`Arc`, because `malloc_size_of`
doesn't derive those types, unlike `heapsize`.
Fixes warnings from rust-lang/rust#44229 when `--enable-commonmark` is
passed to rustdoc.
This is mostly a global find-and-replace for bare URIs on lines by
themselves in doc comments.
There are two key steps when resolving text styles with `::first-line`:
1. `ResolveStyleForText` computes the initial style of the text via
`Servo_ComputedValues_Inherit`
2. `ReparentStyleContext` is called to update style data when the first line
of text is moved to be a child of the `::first-line` frame
Before this patch, `Servo_ComputedValues_Inherit` would clear out unvisited
rules, but visited styles (with rules inside) were cloned as-is, meaning that
step 1 might leave the text node with a style that has:
* Unvisited rules: None
* Visited rules: Some
When we later go to step 2 and re-parent onto the `::first-line` styles, we try
to cascade with these leftover visited rules. This causes any `::first-line`
styles from our parent to be overridden by these rules which are no longer quite
right for the new frame tree.
In this patch, we resolve this by changing `StyleBuilder::for_inheritance`
(which is used by step 1's `Servo_ComputedValues_Inherit`) to also clear out
visited rules, so that we use the same logic for both unvisited and visited text
styles when reparenting onto the `::first-line` frame.
MozReview-Commit-ID: 3sgc4eGHBXs
I'm about to introduce more state here to implement optimizations for custom
property cascading, so this abstraction is useful to encapsulate that state.
In custom_properties::SpecifiedValue::parse.
It's not a big deal now, but it's useful to simplify testing this stuff, since
it avoids forcing us to mock it.