Commit Graph

41 Commits

Author SHA1 Message Date
Emilio Cobos Álvarez
f553b5e6f9 Bug 1460382: Make element-backed pseudos inherit from NAC subtree roots and other NAC inherit from their parents. r=heycam
Currently, NAC always inherits from the closest non-NAC ancestor element,
regardless of whether it is for an element-backed pseudo or not.

This patch changes the inheritance so that for element-backed pseudos, we
inherit from the closest native anonymous root's parent, and for other NAC we
inherit from the parent.

This prevents the following two issues and allows us to remove the
NODE_IS_NATIVE_ANONYMOUS flag:

 * Avoiding inheriting from the non-NAC ancestor in XBL bindings bound to NAC.

   - This is no longer a problem since we apply the rule only if we're a
     pseudo-element, and all pseudo-elements are in native anonymous subtrees.

   - This also allows to remove the hack that propagates the
     NODE_IS_NATIVE_ANONYMOUS flag from the ::cue pseudo-element from
     BindToTree.

 * Inheriting from the wrong thing if we're a nested NAC subtree.

   - We no longer look past our NAC subtree, with the exception of
     ::-moz-number-text's pseudo-elements, for which we do want to propagate
     ::placeholder to.

A few rules from forms.css have been modified because they're useless or needed
to propagate stuff to the anonymous form control in input[type="number"] which
previously inherited from the input itself.

MozReview-Commit-ID: IDKYt3EJtSH
2018-05-30 10:14:46 +02:00
Bobby Holley
196912c9bf servo: Merge #20603 - Run rustfmt on selectors, servo_arc, and style (from bholley:rustfmt_style); r=Manishearth
Now that rustfmt is getting close to stable, and work on the style system has died down a bit, it seemed like an opportune time to auto-format the style crates.

The first commit disables import reordering, since tidy and rustfmt don't currently agree on the correct ordering. The second commit does a bunch of manual fixups such that the output of rustfmt passes tidy. The third commit runs rustfmt on the three aforementioned crate.

There are a few dozen warnings in the style crate about lines longer than 100 characters. It would be good to fix these, but I don't have time for that now.

Source-Repo: https://github.com/servo/servo
Source-Revision: 9a900ef019cd643bff961d7b20db6da69f3edb29
2018-04-10 21:00:11 -04:00
Bastien Orivel
f38039247d servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin
Source-Repo: https://github.com/servo/servo
Source-Revision: 12d82fe621947c2b29b12d9c9e9a81b0f4baa117
2018-03-28 15:08:52 -04:00
Emilio Cobos Álvarez
5dec67e627 servo: Merge #20117 - style: Somewhat miscelaneous cleanup (from emilio:misc-cleanup); r=nox
Source-Repo: https://github.com/servo/servo
Source-Revision: bbfca28a4f3770896955375d01f1c489b4632fd3
2018-02-24 17:28:20 -05:00
Emilio Cobos Álvarez
b74b91ac7e servo: Merge #19842 - style: Cleanup a bit the cascade (from emilio:cascade-cleanup); r=nox,jryans
This makes an element available in StyleAdjuster, and uses it to replace some of our CascadeFlags (the ones that don't represent restrictions on what's actually cascaded, actually).

That fixes handwaviness in the handling of those flags from style reparenting,
and code duplication to handle tricky stuff like :visited.

There are a number of other changes that are worth noticing:

 * skip_root_and_item_based_display_fixup is renamed to skip_item_display_fixup:

   TElement::is_root() already implies being the document element, which by
   definition is not native anonymous and not a pseudo-element.

   Thus, you never get fixed-up if your NAC or a pseudo, which is what the code
   tried to avoid, so the only fixup with a point is the item one, which is
   necessary.

 * The pseudo-element probing code was refactored to return early a
   Option::<CascadeInputs>::None, which is nicer than what it was doing.

 * The visited_links_enabled check has moved to selector-matching time. The rest
   of the checks aren't based on whether the element is a link, or are properly
   guarded by parent_style.visited_style().is_some() or visited_rules.is_some().

   Thus you can transitively infer that no element will end up with a :visited
   style, not even from style reparenting.

Anyway, the underlying reason why I want the element in StyleAdjuster is because
we're going to implement an adjustment in there depending on the tag of the
element (converting display: contents to display: none depending on the tag), so
computing that information eagerly, including a hash lookup, wouldn't be nice.

See each commit for details.

Source-Repo: https://github.com/servo/servo
Source-Revision: 02331617b9bd7a379b05f7daa7ad09a44c27504c
2018-01-23 06:30:51 -06:00
Emilio Cobos Álvarez
14f0f89c80 servo: Merge #19734 - style: Remove some unneeded indirection (from emilio:less-indirection); r=mbrubeck
All TElement's implement Copy, and are just pointers, so the double indirection
is stupid.

I'm going to try to see if removing this double-indirection fixes some
selector-matching performance, and this is a trivial pre-requisite while I wait
for Talos results.

Source-Repo: https://github.com/servo/servo
Source-Revision: e2c89df8eeb5f2dbac1436335aea52099a622d0d
2018-01-09 23:34:15 -06:00
Xidorn Quan
c2b8c6ecb7 servo: Merge #19696 - Skip rule node which contains only inherited properties for rule cache (from upsuper:rule-cache-opt); r=emilio
This is one possible fix for [bug 1427681](https://bugzilla.mozilla.org/show_bug.cgi?id=1427681) which tries to skip some rule nodes when using rule cache.

Try push for correctness: https://treeherder.mozilla.org/#/jobs?repo=try&revision=74e3941e2cfc5fba4bce839f2518af8a5a8b7411

It doesn't really show much memory saving on awsy. It only shows several KB save on fresh start memory. But since conceptually it's simple, I guess it's worth taking.

Source-Repo: https://github.com/servo/servo
Source-Revision: 6131371cc230cca45b13ef9a2622c6e602208357
2018-01-05 03:35:04 -06:00
Emilio Cobos Álvarez
c68f6d47d8 servo: Merge #19667 - Revert #19666 since we do create NAC elements and expect them to be inline (from emilio:root-and-item); r=emilio
This reverts commit 1970e82b0d310128eabe8466d39d42cc20e7ae4b, reversing
changes made to e882660ea694f9f12d9d2936012dbdf192f8aec8.

The reparenting logic is still bogus, but I'll figure out how to deal with that
in a bit.

Source-Repo: https://github.com/servo/servo
Source-Revision: be7d13e37fad6eb594a7b8c8ec9b07fa0df11116
2017-12-31 10:01:58 -06:00
Emilio Cobos Álvarez
a4b62501f9 servo: Merge #19666 - style: Simplify the skip item based display fixup adjustment (from emilio:root-and-item); r=upsuper
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.

Source-Repo: https://github.com/servo/servo
Source-Revision: 1970e82b0d310128eabe8466d39d42cc20e7ae4b
2017-12-31 07:01:10 -06:00
Emilio Cobos Álvarez
b9b3a3caf8 servo: Merge #19662 - style: Simplify "prohibit display: contents" adjustment (from emilio:simplify-prohibit-display-contents); r=upsuper
On top of #19661.

The NAC condition is pointless because NAC don't match author rules unless they
are a pseudo-element too.

Source-Repo: https://github.com/servo/servo
Source-Revision: ebff37b80720447044cc38553558e8339512144f
2017-12-31 02:23:59 -06:00
Matt Brubeck
bd2b1d6b5f servo: Merge #19537 - style: Use the ? operator for Option (from mbrubeck:try); r=nox
This is stable in Rust 1.22 (#19532).

---

- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes do not require tests because it is refactoring only

Source-Repo: https://github.com/servo/servo
Source-Revision: 5f4f355cea4a24992ac9efa97f4a6e1837008e0b
2017-12-09 10:50:55 -06:00
Emilio Cobos Álvarez
49bf5fbc7a servo: Merge #19520 - selectors: Simplify :visited by only using the "is inside link" information (from emilio:simplify-visited); r=jryans
Right now we go through a lot of hoops to see if we ever see a relevant link.

However, that information is not needed: if the element is a link, we'll always
need to compute its visited style because its its own relevant link.

If the element inherits from a link, we need to also compute the visited style
anyway.

So the "has a relevant link been found" is pretty useless when we know what are
we inheriting from.

The branches at the beginning of matches_complex_selector_internal were
affecting performance, and there are no good reasons to keep them.

I've verified that this passes all the visited tests in mozilla central, and
that the test-cases too-flaky to be landed still pass.

Source-Repo: https://github.com/servo/servo
Source-Revision: 7a8733723551201d2c06acde9b0915b4c03938b4
2017-12-08 17:37:32 -06:00
Emilio Cobos Álvarez
034c3d82a4 servo: Merge #19500 - style: Make all keywords CamelCase for consistency (from emilio:camel-case-all-the-way); r=nox
style: Make all keywords CamelCase for consistency.

Source-Repo: https://github.com/servo/servo
Source-Revision: b24778202a4d886a990ee493adfb6851ac4be40c
2017-12-05 19:35:25 -06:00
Bastien Orivel
113ffac80e servo: Merge #18967 - Bump bitflags to 1.0 (from Eijebong:bitflags2.0); r=mbrubeck
See #18809

Still haven't had time to test it but it should fix the tests failures that appeared in m-c

Source-Repo: https://github.com/servo/servo
Source-Revision: fe4139b779b3af749ec1426ddf4e1393c7b85442
2017-10-30 18:25:45 -05:00
Sebastian Hengst
97c840e765 Backed out changeset e64e659c077d: servo PR #18809 and revendor for reftest failures, e.g. in layout/reftests/bugs/392435-1.html. r=backout on a CLOSED TREE 2017-10-19 23:23:30 +02:00
Bastien Orivel
a7068a599d servo: Merge #18809 - Update bitflags to 1.0 in every servo crate (from Eijebong:bitflags); r=nox
It still needs dependencies update to remove all the other bitflags
versions.

- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes do not require tests because it's a dependency update

Source-Repo: https://github.com/servo/servo
Source-Revision: fe16c1d5c3c9084da0ccb85af599d6ec0f8ab20b
2017-10-19 10:35:08 -05:00
Emilio Cobos Álvarez
b946022394 servo: Merge #18692 - style: multiple cleanups (from emilio:cleanups); r=nox
Source-Repo: https://github.com/servo/servo
Source-Revision: 4d95e2cd46b7f47f28970153c14a565afdef2bc3
2017-10-01 13:30:18 -05:00
Bobby Holley
599d2f4ac9 servo: Merge #18589 - Plumbing for the nth-index cache (from bholley:nth_index_plumbing); r=emilio
https://bugzilla.mozilla.org/show_bug.cgi?id=1334730

Source-Repo: https://github.com/servo/servo
Source-Revision: 39f8fce453f0a34751abb82485442429f06324bf
2017-09-21 01:24:01 -05:00
Bobby Holley
8f610f8ac1 servo: Merge #18571 - Add a geckolib API to check for primary style reuse (from bholley:primary_reuse_api); r=emilio
https://bugzilla.mozilla.org/show_bug.cgi?id=1401317

Source-Repo: https://github.com/servo/servo
Source-Revision: 3cea16e18f125e3839af4dd3f064b4194fde4953
2017-09-20 02:05:57 -05:00
Emilio Cobos Álvarez
d449e355e5 servo: Merge #18547 - style: Resolver cleanup and sharing by rule node fixes (from emilio:self-sharing); r=heycam
See the individual commits for details.

This is the only coherent story I have for crashes like:

  https://crash-stats.mozilla.com/report/index/bcdfe629-ca1f-4e4d-aa17-27f890170917

(And the fact that there are crashes like it on the main thread kinda indicates it's the case)

Source-Repo: https://github.com/servo/servo
Source-Revision: 2387dbedbb27629cd9e8c4657e8328ae04ff6d58
2017-09-17 21:58:06 -05:00
Cameron McCormack
0c427cea30 servo: Merge #18499 - style: add a TLS-based cache of reset style structs (from heycam:rule-cache); r=emilio
Rule cache

<!-- Please describe your changes on the following line: -->
This adds a TLS-based cache reset styles structs keyed off rule nodes.  Reviewed in https://bugzilla.mozilla.org/show_bug.cgi?id=1367635 by me and Emilio.

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: 874cb0d9df44e62a78d427f22f234a13227d07f8
2017-09-14 04:28:50 -05:00
Bobby Holley
acd012cddf servo: Merge #18496 - do a second pass on the style sharing cache after computing the rule node (from bholley:2ndpass); r=emilio
https://bugzilla.mozilla.org/show_bug.cgi?id=1397976

Source-Repo: https://github.com/servo/servo
Source-Revision: 298b1363ffd7e830a6ad28424421ead6628ac9b7
2017-09-14 00:07:52 -05:00
Emilio Cobos Álvarez
7d0d7a9aa2 servo: Merge #18268 - style: Recascade the document instead of using the dirty_on_viewport_size_change bit (from emilio:dirty-viewport-followup); r=SimonSapin
This allows us to simplify a lot of code.

On top of #18267.

Source-Repo: https://github.com/servo/servo
Source-Revision: 473934c989c94773c38f585b1c4500cd8c811738
2017-08-29 14:18:58 -05:00
Emilio Cobos Álvarez
b186b66f9d servo: Merge #18261 - style: Really only resolve applicable ::before / ::after (from emilio:silly-pseudo-style); r=heycam
Source-Repo: https://github.com/servo/servo
Source-Revision: 94c870726f0f549ab011451d0bafb4fe6a60e2c1
2017-08-28 07:01:51 -05:00
Emilio Cobos Álvarez
ed45d1f32a servo: Merge #18235 - style: Remove SharedStyleContext::quirks_mode (from emilio:shared-context-cleanup); r=nox
Source-Repo: https://github.com/servo/servo
Source-Revision: 4fca1703cfddc5e52309d3425ae5c2e529606536
2017-08-25 07:59:24 -05:00
Emilio Cobos Álvarez
8869a9b2e4 servo: Merge #18215 - style: Only store applicable ::before / ::after pseudo styles during the traversal (from emilio:applicable-pseudo); r=heycam
This should help memory usage quite a bit.

Source-Repo: https://github.com/servo/servo
Source-Revision: 772a8464eb8dcd4fd50cd342b7c6fa165745dd1e
2017-08-25 02:30:50 -05:00
Ting-Yu Lin
a05c564347 servo: Merge #18213 - Improve debug log related to selector matching (from aethanyc:improve-debug-log); r=emilio
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors

<!-- Either: -->
- [ ] There are tests for these changes OR
- [x] These changes do not require tests because it only modifies debug log

Source-Repo: https://github.com/servo/servo
Source-Revision: 1aacbce053aa1823a1d974aa4cf9eeba7d377c88
2017-08-24 05:17:27 -05:00
Simon Sapin
6ea0512630 servo: Merge #18046 - Upgrade to rustc 1.21.0-nightly (13d94d5fa 2017-08-10) (from servo:rustup); r=emilio
Source-Repo: https://github.com/servo/servo
Source-Revision: 7d9b82b9efa7b10a2e34d93df5ac535d99518f7a
2017-08-15 07:31:04 -05:00
Cameron McCormack
a31488a832 servo: Merge #17982 - style: Don't perform parent display-based style fixups on most pseudos (from heycam:parent-fixup); r=emilio
Reviewed by Emilio in https://bugzilla.mozilla.org/show_bug.cgi?id=1379865.

Source-Repo: https://github.com/servo/servo
Source-Revision: 586f84f5fea9a15c90dc5bc5415e2c5f5caa3ddb
2017-08-05 05:52:59 -05:00
Boris Zbarsky
a3492ab819 servo: Merge #17875 - Add support for having two separate parent styles. Fixes gecko bug 1382806 (from bzbarsky:first-line-dual-inheritance); r=emilio
<!-- Please describe your changes on the following line: -->

This is needed for ::first-line support.  See https://drafts.csswg.org/css-pseudo-4/#first-line-inheritance

This PR doesn't quite implement what the CSS spec draft says right now.  It implements what Gecko does, which is what an earlier draft said.

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix https://bugzilla.mozilla.org/show_bug.cgi?id=1382806

<!-- Either: -->
- [ ] There are tests for these changes OR
- [X] These changes do not require tests because servo doesn't support ::first-line yet

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: 020188fdd77f0f0f2848e21eb9bcc28362d98506
2017-07-26 15:21:37 -05:00
Emilio Cobos Álvarez
dc6b5c81a6 servo: Merge #17867 - style: Don't skip computation of pseudo-elements of display: none elements (from emilio:pseudo-display-none); r=heycam
We have optimizations to avoid doing selector-matching when the style attribute
changes, so, given you can toggle the display property and the pseudo-elements
will suddenly become effective, we can't really skip them.

Furthermore, we assume that if an element has an ElementStyles, they're
up-to-date and we can use them for getComputedStyle, so it's pretty easy to
prove that we do the wrong thing when calling getComputedStyle with a
pseudo-element on a display: none root.

Bug: 1384065
Reviewed-by: heycam
MozReview-Commit-ID: BIOqevGZyrm
Source-Repo: https://github.com/servo/servo
Source-Revision: f61528d2977b11673af30e075b4556a2a30f5aaf
2017-07-26 02:15:30 -07:00
Emilio Cobos Álvarez
bd2d3bc7ca servo: Merge #17834 - stylo: Fix the interaction of frame construction restyles with animation restyles (from emilio:animation-fc-crash); r=heycam
Fixes bug 1383001.

Source-Repo: https://github.com/servo/servo
Source-Revision: 30d6d6024bd0a082424395621f620dc9580970e5
2017-07-24 01:09:24 -07:00
Emilio Cobos Álvarez
5ce9e9139b servo: Merge #17828 - stylo: Visited link fixes (from emilio:visited-now); r=Manishearth
Straight from https://bugzilla.mozilla.org/show_bug.cgi?id=1383307

Source-Repo: https://github.com/servo/servo
Source-Revision: 2241d5879e5d66c52d2b4f17ad730c5de1eff364
2017-07-23 13:46:43 -07:00
Emilio Cobos Álvarez
2b0be17f61 servo: Merge #17825 - style: Move the RELEVANT_LINK_VISITED flag to servo (from emilio:is-visited); r=manishearth
Bug: 1383307
Reviewed-by: Manishearth
Source-Repo: https://github.com/servo/servo
Source-Revision: 14b12eeb3b7ff110dbdb1f9672c2cbfad4133ae0
2017-07-23 04:15:39 -07:00
Emilio Cobos Álvarez
68d6b615dc servo: Merge #17804 - Add a comment about visited style inheritance (from emilio:visited-comment); r=jryans
Source-Repo: https://github.com/servo/servo
Source-Revision: 3c89486de233d7fe8c81050399b5fc15cf6941aa
2017-07-20 21:38:58 -07:00
Emilio Cobos Álvarez
5c9b69b09d servo: Merge #17801 - style: Don't inherit from the parent visited style if we're a link (from emilio:visited-inherited); r=jryans
Bug: 1377469
Reviewed-by: jryans
MozReview-Commit-ID: CoMj9KSb5w9
Source-Repo: https://github.com/servo/servo
Source-Revision: 3d66cdeed40468cb97f9f007ed282d7f3021a890
2017-07-20 08:25:09 -07:00
Michael Partheil
728ab1f36c servo: Merge #17775 - Replace all uses of the style::stylearc alias with servo_arc (from michael-p:rename-stylearc-to-servo-arc); r=emilio
The `stylearc` alias is left there temporarilly and will be removed completely in a later commit/PR where also `components/style/gecko/generated/structs_{debug|release}.rs` are re-generated (they still use the old alias).

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #17768  (github issue number if applicable).

<!-- Either: -->
- [ ] There are tests for these changes OR
- [X] These changes do not require tests because no new features / only refactoring

Source-Repo: https://github.com/servo/servo
Source-Revision: 31228c18499d1c7f68b6b64b559354c768e81215
2017-07-19 06:03:17 -07:00
Emilio Cobos Álvarez
cae5c53a3f servo: Merge #17773 - style: Cleanup post #17767 (from emilio:removing-the-ugly); r=manishearth
Reviewed in https://bugzilla.mozilla.org/show_bug.cgi?id=1381764

Source-Repo: https://github.com/servo/servo
Source-Revision: 66e06578ee68b98c94029fba3cfc3ae7d3782044
2017-07-18 09:23:03 -07:00
Manish Goregaokar
cb8af9ffe8 servo: Merge #17767 - stylo: Fuse ServoStyleContext and ServoComputedValues (from Manishearth:stylo-fuse); r=bholley
r=bholley https://bugzilla.mozilla.org/show_bug.cgi?id=1367904

Source-Repo: https://github.com/servo/servo
Source-Revision: d746abaa9e69e6cf0ad187d2b46be661bbe03a9f
2017-07-17 19:44:25 -07:00
Emilio Cobos Álvarez
25f762c50e servo: Merge #17762 - style: Cascade the visited style with the normal rules if we didn't find a relevant link (from emilio:visited-nested); r=jryans
Source-Repo: https://github.com/servo/servo
Source-Revision: e122ea65fdbb07c237de7f53a998f678c7a0ca5a
2017-07-17 15:21:22 -07:00
Emilio Cobos Álvarez
27fff64d23 servo: Merge #17688 - style: Split style resolution and dynamic change computation (from emilio:split-style-resolution); r=heycam,BorisChiou
This is the Servo side of Mozilla bug 1379505.

Source-Repo: https://github.com/servo/servo
Source-Revision: 16d6dc133b40a5d48e33b1f8e2aeafa88e36a6e3
2017-07-12 00:28:44 -07:00