Commit Graph

159 Commits

Author SHA1 Message Date
Emilio Cobos Álvarez
d90761c49b Bug 1454165 - Make :host() and ::slotted() account for the inner selector's specificity. r=xidorn
As resolved in https://github.com/w3c/csswg-drafts/issues/1915.

Differential Revision: https://phabricator.services.mozilla.com/D1849
2018-06-28 10:58:06 +00:00
Xidorn Quan
8fcf4543e7 Bug 1471104 followup - Upgrade cssparser and revendor.
MozReview-Commit-ID: 74rBgkJEcYd
2018-06-27 10:43:21 +10:00
Emilio Cobos Álvarez
7f45c7307f Bug 1471063: Simplify selector serialization. r=xidorn
MozReview-Commit-ID: 959U7yd5W9j
2018-06-26 14:15:58 +02:00
Emilio Cobos Álvarez
2f16f5667d Bug 1471063: Deindent the serialization loop. r=xidorn
MozReview-Commit-ID: GPlUAx7YXVb
2018-06-26 14:15:57 +02:00
Emilio Cobos Álvarez
d5138ad869 Bug 1471063: Remove unneeded combinator check in selector-matching. r=xidorn
The combinator doesn't change during the loop, no need to check it.

MozReview-Commit-ID: KIAt0WiEOtI
2018-06-26 14:15:56 +02:00
Emilio Cobos Álvarez
19564fb756 Bug 1416282: Add diagnostics. r=xidorn
MozReview-Commit-ID: GTnFyZnXR84
2018-06-10 01:08:43 +02:00
Emilio Cobos Álvarez
60d13425a2 Bug 1465291: Make pseudo-elements work with :host. r=xidorn
Imported WebKit's test as a WPT.

MozReview-Commit-ID: 19ZThuoqKLW
2018-06-05 02:51:43 +02:00
Xidorn Quan
24d4058e50 Bug 1457524 part 4 - Allow 16% false positives in test bloom::create_and_insert_some_stuff. r=heycam
It seems that the result of hash algorithm used in bloom filter depends
on the pointer length. On 64bit platforms, there are 135 false positives
in the first part of that test, and 8 in the second part. However, on
32bit platforms, the numbers become 157 and 16 correspondingly.

16 is still less than 20% in the second part, so all fine, but 157 is
slightly larger than 15% in the test assertion. Given it is what we are
shipping, we probably should just accept this and loosen the assertion.

MozReview-Commit-ID: 9kFXBzLFAzE
2018-05-02 21:07:07 +10: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
45343981af servo: Merge #20606 - style: Implement the functional :host(..) selector (from emilio:host); r=xidorn
We could invalidate in a slightly more fine-grained way, but I don't think it's
worth the churn vs. keeping the special-cases minimal.

Bug: 1452640
Reviewed-by: xidorn
MozReview-Commit-ID: 5DkQrgwg9GW
Source-Repo: https://github.com/servo/servo
Source-Revision: e11c2d97552d192b761b0684c8c6852b9dea0921
2018-04-10 02:16:30 -04:00
Emilio Cobos Álvarez
fd154499a4 servo: Merge #20597 - style: Implement the non-functional :host selector (from emilio:host); r=xidorn
Kinda tricky because :host only matches rules on the shadow root where the rules
come from. So we need to be careful during invalidation and style sharing.

I didn't use the non_ts_pseudo_class_list bits because as soon as we implement
the :host(..) bits we're going to need to special-case it anyway.

The general schema is the following:

 * Rightmost featureless :host selectors are handled inserting them in the
   host_rules hashmap. Note that we only insert featureless stuff there. We
   could insert all of them and just filter during matching, but that's slightly
   annoying.

 * The other selectors, like non-featureless :host or what not, are added to the
   normal cascade data. This is harmless, since the shadow host rules are never
   matched against the host, so we know they'll just never match, and avoids
   adding more special-cases.

 * Featureless :host selectors to the left of a combinator are handled during
   matching, in the special-case of next_element_for_combinator in selectors.
   This prevents this from being more invasive, and keeps the usual fast path
   slim, but it's a bit hard to match the spec and the implementation.

   We could keep a copy of the SelectorIter instead in the matching context to
   make the handling of featureless-ness explicit in match_non_ts_pseudo_class,
   but we'd still need the special-case anyway, so I'm not fond of it.

 * We take advantage of one thing that makes this sound. As you may have
   noticed, if you had `root` element which is a ShadowRoot, and you matched
   something like `div:host` against it, using a MatchingContext with
   current_host == root, we'd incorrectly report a match. But this is impossible
   due to the following constraints:

    * Shadow root rules aren't matched against the host during styling (except
      these featureless selectors).

    * DOM APIs' current_host needs to be the _containing_ host, not the element
      itself if you're a Shadow host.

Bug: 992245
Reviewed-by: xidorn
MozReview-Commit-ID: KayYNfTXb5h
Source-Repo: https://github.com/servo/servo
Source-Revision: cb754b262747e7cab794411df55588f0f0b30b5e
2018-04-09 06:41:59 -04:00
Emilio Cobos Álvarez
0241e13730 servo: Merge #20583 - selectors: Don't serialize :nth-child(-n) as -1n (from emilio:affine-stuff); r=upsuper
Source-Repo: https://github.com/servo/servo
Source-Revision: ecfcf35c26e789bacd2c46786bf0d75f0b20944f
2018-04-07 10:10:35 -04:00
Emilio Cobos Álvarez
90d9196da7 servo: Merge #20454 - Update to rustc 1.25.0-nightly (bacb5c58d 2018-01-26) (from emilio:rustup); r=SimonSapin
Update to rust version 1.26.0-nightly (188e693b3 2018-03-26)

Source-Repo: https://github.com/servo/servo
Source-Revision: d232705106478e0a2e5de78f8b40144408879c36
2018-03-29 09:12:45 -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
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
2e6dd5b9a9 servo: Merge #20248 - style: Change the order we match selectors on invalidation to match normal order (from emilio:invalidation-selectors-faster); r=bholley
This changes the order to match the normal selector-matching order, which is
usually faster.

That is, when matching div:nth-child(2), for example, before this patch we'd
first try to match :nth-child(2), and only then div.

This patch makes us walk until the end or the next combinator, and only then
match backwards, matching first div, then :nth-child.

Bug: 1443814
Reviewed-by: bholley
Source-Repo: https://github.com/servo/servo
Source-Revision: 8e52f8a523e2f12b2666536d0f8ff3fa40b83ef5
2018-03-08 18:44:29 -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
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
85499bae26 servo: Merge #19822 - style: More tiny selector-matching cleanup (from emilio:less-match-public); r=KiChjang
See each commit individually.

Source-Repo: https://github.com/servo/servo
Source-Revision: 6fc71a7644bd7afcccf83f67cfdaf01897e1a3bc
2018-01-19 23:05:18 -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
cbcc86d026 servo: Merge #19813 - selectors: Simplify SelectorIter::next (from emilio:tidy); r=nox
Source-Repo: https://github.com/servo/servo
Source-Revision: 726a1854b08b7809dbe31fa57c186de39bd5ca42
2018-01-19 06:49:54 -06:00
Xidorn Quan
d3be9b9b6a servo: Merge #19781 - Optimize selector matching for some common cases (from upsuper:matching-opt); r=emilio
This is the "better way" I mentioned in #19774, which seems to actually improve the score of dromaeo_css on talos.

Source-Repo: https://github.com/servo/servo
Source-Revision: 525758ea5ef67148c28acae9404916691e9a960c
2018-01-16 16:47:29 -06:00
Simon Sapin
71e6c25a65 servo: Merge #19751 - Clean up the selectors crate for a new crates.io release (from servo:selectors); r=bholley
Source-Repo: https://github.com/servo/servo
Source-Revision: 6ca651c0c8271ce185448e1db95b893a276eaed9
2018-01-12 16:55:12 -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
17ac2d9d1e servo: Merge #19721 - style: Support ::slotted better (from emilio:slotted); r=heycam
This allows to selector-match ::slotted, though we still don't parse it.

Bug: 1425834, 1424607, 1425755
Reviewed-by: heycam
MozReview-Commit-ID: ItELHkf2PMl
Source-Repo: https://github.com/servo/servo
Source-Revision: bb34b7f54aa85cde600c6d675360d03714cf1f8b
2018-01-09 07:26:28 -06:00
Emilio Cobos Álvarez
dac26d545c servo: Merge #19610 - style: Don't support a list of selectors in ::slotted yet (from emilio:slotted-list); r=xidorn
Bug: 1425757
Reviewed-by: xidorn
MozReview-Commit-ID: G0I0gM2sWTh
Source-Repo: https://github.com/servo/servo
Source-Revision: e074a1c62012e966b499d797b49b2efc08fe4007
2017-12-20 11:09:50 -06:00
Emilio Cobos Álvarez
b20b6f2d5a servo: Merge #19558 - selectors: Manually inline any(..) in matches_selector_list (from emilio:sadness); r=heycam
Since the compiler refuses to inline the inner closure even with -O3, which is
sad :(.

Sad try run:

  https://treeherder.mozilla.org/perf.html#/compare?originalProject=try&originalRevision=c2724c47e98f990826327da05220cd83b772d144&newProject=try&newRevision=52ac88b40a08a5ef6a629bd681f2e5a444b75f54&framework=1

Source-Repo: https://github.com/servo/servo
Source-Revision: 370f5acf6dcf2fa2b4755105376302b41a88fed3
2017-12-14 10:19:23 -06:00
Emilio Cobos Álvarez
60802af130 servo: Merge #19541 - selectors: Add parsing support for ::slotted() (from emilio:parse-slotted); r=heycam
Without turning it on yet, of course.

The reason why I didn't use the general PseudoElement mechanism is because this
pseudo is a bit of its own thing, and I found easier to make ::selectors know
about it (because you need to jump to the assigned slot) than the other way
around.

Also, we need to support ::slotted(..)::before and such, and supporting multiple
pseudo-elements like that breaks some other invariants around the SelectorMap,
and fixing those would require special-casing slotted a lot more in other parts
of the code.

Let me know if you think otherwise.

I also don't like much the boolean tuple return value, but I plan to do some
cleanup in the area in a bit, so it should go away soon, I'd hope.

Source-Repo: https://github.com/servo/servo
Source-Revision: f5129ef7b5efa59a176cac98dc68d910cb3279c9
2017-12-14 00:22:45 -06:00
Emilio Cobos Álvarez
0d20c7d386 servo: Merge #19536 - style: Move the code to parse a list of compound selectors (from emilio:compound-selector-list); r=mbrubeck
I'll need this for ::slotted().

Source-Repo: https://github.com/servo/servo
Source-Revision: c6bf85eca90b9cb71ff05d4454a43a7da5fc3ac8
2017-12-09 17:15:14 -06:00
Emilio Cobos Álvarez
b219ad3edb servo: Merge #19534 - style: Simplify naming and signatures of single-colon pseudo stuff (from emilio:naming-is-a-bit-hard-but-not-that-hard); r=nox
Also drop a few FIXMEs while at it, since they look bogus.

Source-Repo: https://github.com/servo/servo
Source-Revision: 051eb6bcb9204ecab1c1481a275a09fd50bf0467
2017-12-09 09:52:27 -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
76ae0d9f5d servo: Merge #19518 - style: Remove useless type parameter (from emilio:useless-code-is-useless); r=KiChjang
Source-Repo: https://github.com/servo/servo
Source-Revision: 22472b4db4564f7bc274eb01447e4f04fd7e7205
2017-12-07 20:32:11 -06:00
Bastien Orivel
fcbd628a38 servo: Merge #19494 - Update smallvec to 0.6 (from Eijebong:smallvec); r=emilio
Source-Repo: https://github.com/servo/servo
Source-Revision: c20fd7d58a36496ea7d12ea3284172712da006b0
2017-12-05 13:44:19 -06:00
Emilio Cobos Álvarez
c11226ea1d servo: Merge #19457 - style: support calc() in color functions (from emilio:color-calc); r=SimonSapin
Depends on #19456 and https://github.com/servo/rust-cssparser/pull/207.

Fixes https://bugzilla.mozilla.org/show_bug.cgi?id=984021

Source-Repo: https://github.com/servo/servo
Source-Revision: 3cef09ae217ece7fa276d1be653c7c36dee7febc
2017-12-05 03:37:18 -06:00
Michael Wilson
3c4fc707dd servo: Merge #19195 - style: :dir() pseudo class now represented by enum (from wilsoniya:issue-16840); r=emilio
`:dir()` pseudo class param now represented as enum variants.

---
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #16840
- [X] There are tests for these changes

Source-Repo: https://github.com/servo/servo
Source-Revision: 006202732f0bd8d2239bdd51898380bdbe0f0f1a
2017-11-21 02:56:49 -06:00
Cameron McCormack
4b2a859d21 servo: Merge #19263 - selectors: Allow white space in the brackets of an attribute selector (from heycam:attr-ws); r=SimonSapin
Source-Repo: https://github.com/servo/servo
Source-Revision: 7b886b4479763018ecad62aa6db96049732ca9ed
2017-11-18 00:47:57 -06:00
Emilio Cobos Álvarez
732f4543e0 servo: Merge #19226 - style: Sprinkle some inline in trivial methods (from emilio:inline-qs); r=nox
These methods are instantiated by the Gecko library, and used during
querySelector, which means that they end up being super-hot in micro-benchmarks.

MozReview-Commit-ID: K1XJb0QyX5a
Source-Repo: https://github.com/servo/servo
Source-Revision: 85fa6409bb699647b4f5e22952538365e87418d7
2017-11-15 09:22:14 -06:00
Simon Sapin
c9085cd560 servo: Merge #19162 - Allow unused imports for AsciiExt in style code (from emilio:ascii-ext); r=emilio
See #19128, this part is cherry-picked so Gecko can build with rust nightly.

Source-Repo: https://github.com/servo/servo
Source-Revision: e7a654dd13f589e127193267bcb576ffd661c11d
2017-11-09 06:49:29 -06:00
Emilio Cobos Álvarez
41b44bee77 servo: Merge #19113 - Reland #19108, because it was backed out before its Gecko-side patches could land (from emilio:qsa); r=xidorn,bz
Source-Repo: https://github.com/servo/servo
Source-Revision: 0f5325d0a7e9b3039c7d5b5f9de5cd2511207d9a
2017-11-04 05:36:17 -05:00
Sebastian Hengst
6cc26eae55 Backed out changeset dbd300f4d75b for build bustage. r=backout on a CLOSED TREE 2017-11-04 00:55:25 +01:00
Emilio Cobos Álvarez
cd152daa4a servo: Merge #19108 - stylo: querySelector{,All} optimizations (from emilio:qsa); r=xidorn,bz
Bug: 1410624
Source-Repo: https://github.com/servo/servo
Source-Revision: a0cd781bdcdfa9db8b33632f0117e4d835ea1892
2017-11-03 14:27:34 -05: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
Emilio Cobos Álvarez
a161f9d355 servo: Merge #19027 - selectors: Be consistent about how we get a parent element for selector matching (from emilio:svg-use-bug); r=upsuper
This fixes bug 1412011.

Source-Repo: https://github.com/servo/servo
Source-Revision: de7595f16fa41c32ca5654aef53c60ad19bb108a
2017-10-26 19:54:09 -05:00
Emilio Cobos Álvarez
726f98d5af servo: Merge #18988 - stylo: querySelector / querySelectorAll machinery (from emilio:qs); r=heycam
Bug: 1410624
Reviewed-by: heycam
Source-Repo: https://github.com/servo/servo
Source-Revision: eaba7ede232c9b556f22d67698eca5dc64ad4075
2017-10-23 08:14:35 -05:00
Emilio Cobos Álvarez
684d276883 servo: Merge #18983 - selectors: Reformat signatures in the parser module (from emilio:reformat-selector-parser); r=jdm
I was doing something unrelated with this code, and each signature uses a
different style. This PR unifies them.

Source-Repo: https://github.com/servo/servo
Source-Revision: a296e386af21b50409e78dd3a34ea6a5fd36d4bf
2017-10-22 09:55:21 -05:00
Matt Brubeck
2e79c8d38c servo: Merge #18971 - Use env::var_os to read paths from the environment (from mbrubeck:var); r=emilio
This avoids unnecessary UTF-8 validation on OsStrings that we just pass
back to the OS.

---
- [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 they are code cleanup only

Source-Repo: https://github.com/servo/servo
Source-Revision: 5ab0ac162019aede12a8150118328566467fddf2
2017-10-21 08:09:22 -05:00
Xidorn Quan
4251860b62 servo: Merge #18962 - Support matching for ::-moz-tree-* pseudo-elements (from upsuper:tree-pseudos); r=emilio
This is the Servo side change of [bug 1397644](https://bugzilla.mozilla.org/show_bug.cgi?id=1397644).

Source-Repo: https://github.com/servo/servo
Source-Revision: b1e6f05ae455748f6091ddf81c1c0488e09546a1
2017-10-20 04:18:53 -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