Commit Graph

280 Commits

Author SHA1 Message Date
Olli Pettay
3b6605eede Bug 1419661, if ExtendedDOMSlots are used before slots, use FatSlots to have fewer allocations, r=mrbkap 2018-06-30 01:30:37 +03:00
Olli Pettay
9a87f70a87 Bug 1331334 - Implement :defined pseudo-class for custom elements, r=emilio 2018-06-28 14:55:45 +03:00
Hiroyuki Ikezoe
d1b919b70b Bug 1418806 - Try to allocate possible size for AnimationValueMap before composing. r=birtles
The EffectSet count does not exactly represent the count what we really need
for AnimationValueMap, but in most cases it matches.  For example;

1) The element has two different keyframes animations

 @keyframes anim1 {
   to { opacity: 0; }
 }
 @keyframes anim2 {
   to { transform: rotate(360deg); }
 }

 In this case the number matches.

2) The element has two animations but both keyframes have the same CSS property

 @keyframes anim1 {
   to { opacity: 0; }
 }
 @keyframes anim2 {
   to { opacity: 0.1; }
 }

 In this case the number doesn't match, moreover it results more memory than we
 ever needed, but this case is presumably less common.

3) The element has an animation having keyframes for two different CSS
   properties.

 @keyframes anim {
   from { opacity: 0; transform: rotate(360deg); }
 }

 In this kind of cases, the number doesn't match.  But even so, this patch
 reduces the opportunities that the AnimationValueMap tries to allocate a new
 memory (i.e. less opportunities on expanding the map).

Note that when the hash map is expanded, we do allocate a new RawTable with the
new size then replace the old one with the new one [1], so I believe this
change will reduce the crash rate to some extent.

[1] https://hg.mozilla.org/mozilla-central/file/15c95df467be/servo/components/hashglobe/src/hash_map.rs#l734

MozReview-Commit-ID: 6tcF9aqXh7a
2018-06-26 11:08:24 +09:00
Emilio Cobos Álvarez
1417aa1938 Bug 1468640: Relax a bit an invalid assertion. r=me
We may end up looking at a non-flushed AuthorStyles object when looking at
whether attribute changes and such may affect style.

Check the styles are clean to preserve the assertion, since if that happens
before the first flush, we may not have updated the quirks_mode field (and
that's fine).

MozReview-Commit-ID: FgVpiTf4qMr
2018-06-16 03:32:50 -07:00
Emilio Cobos Álvarez
6f9ec3aedd Bug 1466406: Work around a bindgen bug on Android. r=xidorn
MozReview-Commit-ID: 2lltjH7IoZu
2018-06-05 01:57:31 +02:00
Emilio Cobos Álvarez
66641ce079 No bug - Sprinkle some #[inline] on methods that have inline fast-paths. r=me
MozReview-Commit-ID: 5kOmctLTAX0
2018-06-04 21:48:43 +02:00
Emilio Cobos Álvarez
e417a9a09d No bug - Sprinkle some inline in methods that are just pointer-chasing or function calls. r=me
MozReview-Commit-ID: 8G2NQPBVuXn
2018-06-04 21:46:22 +02:00
Emilio Cobos Álvarez
925f405089 Bug 1419695: Move TransitionProperty where it belongs. r=xidorn
MozReview-Commit-ID: 9PN6VfbDbLA
2018-06-04 15:55:53 +02:00
Emilio Cobos Álvarez
c8bba95b9d Bug 1419695: Make the transition-property code make more sense. r=xidorn
We were working around the lack of alias support during parsing in
TransitionProperty by doing a Gecko lookup. That's a hack and is now gone.

MozReview-Commit-ID: EptUvJNTrZr
2018-06-04 15:55:50 +02:00
Emilio Cobos Álvarez
679b23382a Bug 1449243: Remove invalid assertion. r=me
We can look at stale styles while trying to figure out if we need any
invalidation, and that's ok.

MozReview-Commit-ID: 4mBIFNm9qJv
2018-06-04 14:51:47 +02:00
Nazım Can Altınova
4e99e486f8 Bug 1464496 - Part 1: Merge ServoDeclarationBlock and DeclarationBlock r=emilio
MozReview-Commit-ID: By9fV70Oq0K
2018-05-30 18:15:25 +02:00
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
Emilio Cobos Álvarez
9c564230a4 Bug 1464428: Optimize QuerySelector in shadow trees. r=xidorn
Pretty much the same setup we have for document.

We have the awkwardness of having to check containing shadow manually for
ShadowRoot because it's not available in TNode (and making it available added a
bit more complexity that wasn't worth it IMO).

MozReview-Commit-ID: CqOh0sLHf6o
2018-05-28 14:30:34 +02:00
arthur.iakab
16df87ac1b Backed out changeset 8fb0fa2dca36 (bug 1464428) for Reftest crashes on a CLOSED TREE 2018-05-28 13:17:34 +03:00
Emilio Cobos Álvarez
99d060c0ec Bug 1464428: Optimize QuerySelector in shadow trees. r=xidorn
Pretty much the same setup we have for document.

We have the awkwardness of having to check containing shadow manually for
ShadowRoot because it's not available in TNode (and making it available added a
bit more complexity that wasn't worth it IMO).

MozReview-Commit-ID: CqOh0sLHf6o
2018-05-28 10:08:35 +02:00
Olli Pettay
d75012d143 Bug 1463116 - Make mBindingParent strong, r=bz 2018-05-22 00:11:11 +03:00
shindli
0211354ff3 Backed out changeset 603804d62ce8 (bug 1463116) for force-cargo-library-build bustage on a CLOSED TREE 2018-05-21 23:55:58 +03:00
Olli Pettay
3d076252d6 Bug 1463116 - Make mBindingParent strong, r=bz 2018-05-21 23:02:07 +03:00
Emilio Cobos Álvarez
140b9297df Bug 1453702: [css-display] Move unboxing to style, and handle display: contents before other suppressions. r=mats,xidorn
This also adopts the resolution of [1] while at it, and switches XUL to not
support display: contents until a use case appears.

This makes our behavior consistent both with the spec and also in terms of
handling dynamic changes to stuff that would otherwise get suppressed.

Also makes us consistent with both Blink and WebKit in terms of computed style.
We were the only ones respecting "behaves as display: none" without actually
computing to display: none. Will file a spec issue to get that changed.

It also makes us match Blink and WebKit in terms of respecting display: contents
before other suppressions, see the reftest which I didn't write as a WPT
(because there's no spec supporting neither that or the opposite of what we do),
where a <g> element respects display: contents even though if it had any other
kind of display value we'd suppress the frame for it and all the descendants
since it's an SVG element in a non-SVG subtree.

Also, this removes the page-break bit from the display: contents loop, which I
think is harmless.

As long as the tests under style are based in namespace id / node name /
traversal parent, this should not make style sharing go wrong in any way, since
that's the first style sharing check we do at [2].

The general idea under this change is making all nodes with computed style of
display: contents actually honor it. Otherwise there's no way of making the
setup sound except re-introducing something similar to all the state tracking
removed in bug 1303605.

[1]: https://github.com/w3c/csswg-drafts/issues/2167
[2]: https://searchfox.org/mozilla-central/rev/fca4426325624fecbd493c31389721513fc49fef/servo/components/style/sharing/mod.rs#700

MozReview-Commit-ID: JoCKnGYEleD
2018-04-16 12:56:30 +02:00
Emilio Cobos Álvarez
f654e10648 Bug 1453206: Fix IsInAnonymousSubtree to account for XBL in Shadow DOM. r=smaug
MozReview-Commit-ID: B2aYury8K7i
2018-04-14 11:59:06 +02:00
Andreea Pavel
3c8dab74ff Backed out 2 changesets (bug 1453206) for crashtest failures on muliple files e.g. tests/reftest/tests/layout/base/crashtests/416107.xhtml on a CLOSED TREE
Backed out changeset 1844a120acda (bug 1453206)
Backed out changeset b12b7c5b8178 (bug 1453206)
2018-04-13 23:06:55 +03:00
Emilio Cobos Álvarez
f2979ee963 Bug 1453206: Fix IsInAnonymousSubtree to account for XBL in Shadow DOM. r=smaug
MozReview-Commit-ID: B2aYury8K7i
2018-04-13 21:05:48 +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
Emilio Cobos Álvarez
ae43d74570 servo: Merge #20479 - style: Add a fast path to each_anonymous_content_child (from emilio:anon-child-bit); r=upsuper
If we know that we don't have anon children it is pointless to go through FFI.

Source-Repo: https://github.com/servo/servo
Source-Revision: 107fd47b93e5e8586ca27293052b9fedc75b88e4
2018-03-30 20:31:36 -04:00
Xidorn Quan
3d9ddbc319 servo: Merge #20460 - Remove StyleBackendType uses (from upsuper:remove-stylebackendtype); r=emilio
This is the Servo side change of [bug 1447828](https://bugzilla.mozilla.org/show_bug.cgi?id=1447828).

Source-Repo: https://github.com/servo/servo
Source-Revision: 433d2f65778c955854a5cd911fc62878524be610
2018-03-28 08:15:14 -04:00
Xidorn Quan
fff3672580 servo: Merge #20456 - Remove nsCSSPseudoClasses and friends (from upsuper:remove-nscsspseudoclasses); r=emilio
This is the Servo side change of [bug 1449097](https://bugzilla.mozilla.org/show_bug.cgi?id=1449097) and [bug 1449089](https://bugzilla.mozilla.org/show_bug.cgi?id=1449089).

Source-Repo: https://github.com/servo/servo
Source-Revision: 97c12bd3927c057d5610b0295f0e8320b64af5e5
2018-03-27 18:51:48 -04:00
Emilio Cobos Álvarez
02788c6d8d servo: Merge #20340 - style: Better Shadow DOM assertions (from emilio:shadow-dom-assert); r=xidorn
Bug: 1445682
Reviewed-by: xidorn
Differential Revision: https://phabricator.services.mozilla.com/D748

Source-Repo: https://github.com/servo/servo
Source-Revision: 794c0d445a6c5eb5977b9d2cd4ba3b30ce18eefa
2018-03-19 09:34:00 -04:00
Emilio Cobos Álvarez
ce3f293edd servo: Merge #20243 - style: add infrastructure to match the :host selector (from emilio:host-selector-on-the-way); r=SimonSapin
Source-Repo: https://github.com/servo/servo
Source-Revision: 148beb4ea5f8f1680e694ac48045a632da58269c
2018-03-14 10:38:45 -04:00
Emilio Cobos Álvarez
2f87a028bf servo: Merge #20223 - style: Allow to share style across elements with similar XBL bindings (from emilio:share-xbl); r=xidorn,bholley
Also move the checks so that the tag name checks (presumably cheaper) come earlier.

Source-Repo: https://github.com/servo/servo
Source-Revision: 087cf21d79cb090c2a8b55b441e6004921b540aa
2018-03-12 16:48:36 -04:00
Emilio Cobos Álvarez
deb4c5acde servo: Merge #20241 - style: Make getting the XBL binding faster (from emilio:xbl-faster); r=bholley
Source-Repo: https://github.com/servo/servo
Source-Revision: 9b540d199e87acdbc7aea51f5b7e4370b187ce09
2018-03-08 11:31:35 -05:00
Emilio Cobos Álvarez
5433e8d3b9 servo: Merge #20229 - style: Separate the XBL and shadow dom styling bits (from emilio:finally); r=xidorn
Bug: 1441022
Reviewed-by: xidorn
MozReview-Commit-ID: 2W0BmZ8wWXg
Source-Repo: https://github.com/servo/servo
Source-Revision: 6272233c50071534ddbab118b64ecdb8fdda7c8a
2018-03-07 10:06:05 -05:00
Emilio Cobos Álvarez
a0cbf174af servo: Merge #20188 - style: Add bindings for ShadowRoot (from emilio:moar-traits); r=nox
This adds TShadowRoot to the `dom` module.

Right now it barely adds uses of it, but this is a prerequisite to fix a bunch
of Shadow DOM bugs and separate it from the XBL mess.

Source-Repo: https://github.com/servo/servo
Source-Revision: ce562a2cc6c508a423cad07be30638e89ff13def
2018-03-03 17:53:08 -05:00
Xidorn Quan
7a136661b5 servo: Merge #20150 - Remove text-is-significant param from Gecko_IsSignificantChild (from upsuper:text-is-significant); r=emilio
This is Servo side change of [bug 1441729](https://bugzilla.mozilla.org/show_bug.cgi?id=1441729).

Source-Repo: https://github.com/servo/servo
Source-Revision: 90b8410b05e8aab35e3885820a37c6239252cca1
2018-03-01 18:52:07 -05:00
Emilio Cobos Álvarez
2e57800fc3 servo: Merge #20138 - style: Only expose longhands to rust via iterators (from emilio:longhand-iterator); r=nox
The key here is that we only filter longhands if the shorthand is accessible to
content and vice-versa. This prevents the bug that prevented me to land this
patch before, which was us not expanding properly chrome-only shorthands.

Source-Repo: https://github.com/servo/servo
Source-Revision: a0be3a7fae2730bfef52db94db7f3af14b60be67
2018-02-28 06:28:41 -05:00
Emilio Cobos Álvarez
1766c58591 servo: Merge #20133 - style: Make Shadow DOM not use XBL anymore (from emilio:kill-xbl); r=xidorn
Bug: 1425759
Reviewed-by: xidorn
MozReview-Commit-ID: Jf2iGvLC5de
Source-Repo: https://github.com/servo/servo
Source-Revision: a7f38f0f32e2a01dfd3d415fd34d246957bede63
2018-02-27 05:47:29 -05:00
Anthony Ramine
07dfc9ac34 servo: Merge #20123 - Remove TransitionProperty::All (from servo:rm-all); r=emilio
Source-Repo: https://github.com/servo/servo
Source-Revision: 2c2f8be1ccfbb38d46c351f78f0334226b3ec5f7
2018-02-26 10:41:31 -05: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
43770737dc servo: Merge #20065 - style: Cleanup GeckoElement::note_explicit_hints (from emilio:note-stuff); r=nox
What it's doing is not so complicated.

Source-Repo: https://github.com/servo/servo
Source-Revision: d423e54d58d6cced950896eed1957ee2989f4eee
2018-02-16 15:33:48 -05:00
Emilio Cobos Álvarez
3f59a7620c servo: Merge #20061 - style: Make XBL / Shadow DOM use something more light-weight than a Stylist (from emilio:author-styles); r=xidorn
Introduce AuthorStyles, which is just a struct aggregating stylesheets +
CascadeData, with a quirks_mode parameter because XBL sucks so bad.

Bug: 1436059
Reviewed-by: xidorn
MozReview-Commit-ID: 7q99tSNXo0K
Source-Repo: https://github.com/servo/servo
Source-Revision: 504b901cc82db5c5e02e157cec9753f7c297ac2c
2018-02-16 09:54:06 -05:00
Emilio Cobos Álvarez
a3f09f2a51 servo: Merge #20026 - style: Use more CascadeData and less Stylist for XBL stuff (from emilio:less-stylist-xbl); r=upsuper
Just some more use-cases that can be converted right away.

I'm trying to make XBL not use a whole Stylist, slowly...

Source-Repo: https://github.com/servo/servo
Source-Revision: 63691f01d79874aae4bb84badf86667c863cec9b
2018-02-12 06:03:30 -05:00
Emilio Cobos Álvarez
4ae76f189b servo: Merge #19911 - style: Make GeckoElement::has_class more specialized (from emilio:has-class); r=xidorn
Bug: 1431421
Reviewed-by: xidorn
MozReview-Commit-ID: 7LiSEamTCkX
Source-Repo: https://github.com/servo/servo
Source-Revision: c88dc51d03a81e9e405688ccd2baae75d61ffffd
2018-01-31 04:45:07 -06:00
Emilio Cobos Álvarez
cc2fd57c81 servo: Merge #19878 - selectors: Never match ::slotted on <slot>s (from emilio:slotted-slot); r=nox
This fixes the test from https://github.com/w3c/web-platform-tests/pull/9212 in
Gecko.

Source-Repo: https://github.com/servo/servo
Source-Revision: 82922c97dc0313736fedb8021b205d4f84088a15
2018-01-29 11:45:11 -06: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
4cd6b51091 servo: Merge #19805 - style: Handle correctly document state invalidation inside negation (from emilio:doc-state-fix); r=xidorn
style: Handle correctly document state invalidation inside negation.

Source-Repo: https://github.com/servo/servo
Source-Revision: 3b07be555310a3a31445fae1150720cc3ff7d5d5
2018-01-19 19:18:47 -06:00
Emilio Cobos Álvarez
9c27e80a90 servo: Merge #19817 - style: Track the visited-handling-mode on the MatchingContext (from emilio:matching-context-visited); r=nox
This fixes bugs where we're not passing the value around correctly, like from
::-moz-any.

This is a fix for https://bugzilla.mozilla.org/show_bug.cgi?id=1431539.

Source-Repo: https://github.com/servo/servo
Source-Revision: 0d7d02fca772a407d4ffa1ebd1e03d60f385eb74
2018-01-19 12:50:00 -06:00
Emilio Cobos Álvarez
e4c2e9f72f servo: Merge #19787 - style: Make GeckoElement::has_class faster (from emilio:opt-has-class); r=bholley
By force-inlining the fast path, and pulling out a branch that rust didn't manage to pull out.

Source-Repo: https://github.com/servo/servo
Source-Revision: 1ac35dc7abd0b984838dfa4be581a319158190a5
2018-01-16 15:15:01 -06:00
Bobby Holley
aee2a38782 servo: Merge #19756 - Avoid entraining various Debug impls in release builds (from bholley:avoid_debug_impls_in_release); r=emilio
See https://bugzilla.mozilla.org/show_bug.cgi?id=1351737#c29

This patch saves more than 80k of code size.

Source-Repo: https://github.com/servo/servo
Source-Revision: 08fc9f190d7e1eaa11560b5924e243ba686c3d79
2018-01-13 11:52:15 -06:00
Emilio Cobos Álvarez
e865a61abf servo: Merge #19747 - style: Add a document state invalidator (from emilio:doc-state-invalidator); r=upsuper
Don't use it yet (since I was working from a Servo tree). Will hook it up and improve in the Gecko bug.

Right now it takes a `StyleRuleCascadeData`, which means that if all the origins in the document have state selectors we could do just one walk over the tree and not multiple, that will be improved.

Other than that, this is completely untested of course, but I prefer to land it, given I don't think it's complex, and work on the Gecko integration separately. The reason for this is that I also plan to fix the `<slot>` bugs, which will change `StyleRuleCascadeData` and such, and I want the two bugs to conflict as little as possible.

Source-Repo: https://github.com/servo/servo
Source-Revision: 50e4171958d4ff7f1c76d133a8f89e7d5995376f
2018-01-12 05:09:04 -06:00
Emilio Cobos Álvarez
7ada63a4b6 servo: Merge #19744 - style: A few trivial changes in preparation for document state invalidation (from emilio:doc-invalidation-preparation); r=upsuper
Source-Repo: https://github.com/servo/servo
Source-Revision: 9b3fc43f5a576f4cc466a779e2a308e53a8a46f7
2018-01-11 07:50:55 -06:00
Edgar Chen
9fbf275b38 servo: Merge #19743 - style: Remove :unsolved pseudo-class (from EdgarChen:unresolved); r=heycam
<!-- Please describe your changes on the following line: -->

This is the servo part changes of https://bugzilla.mozilla.org/show_bug.cgi?id=1417829.

---
<!-- 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=1417829.

<!-- Either: -->
- [ ] There are tests for these changes OR
- [X] These changes do not require tests because this PR is to remove a feature.

<!-- 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: f47cd758fa76e571d378d29d031ecad38ac202d4
2018-01-10 21:06:04 -06:00