gecko-dev/servo/components
Emilio Cobos Álvarez 2bc468b78a 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

--HG--
extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
extra : subtree_revision : 2ebbb2578ff9dbadfe905ae501cd52bd61a9fe9a
2018-04-09 06:41:59 -04:00
..
allocator servo: Merge #19061 - FreeType: don’t use usable_size() as deallocation size (from servo:ft-alloc); r=mbrubeck 2017-10-30 12:40:34 -05:00
atoms servo: Merge #20181 - Fire the pageshow event at the end of the page load (from fabricedesre:end-load-pageshow); r=jdm 2018-03-06 10:49:51 -05:00
bluetooth servo: Merge #20371 - Bump ipc-channel and bincode (from Eijebong:ipc-channel); r=nox 2018-03-21 09:00:16 -04:00
bluetooth_traits servo: Merge #20371 - Bump ipc-channel and bincode (from Eijebong:ipc-channel); r=nox 2018-03-21 09:00:16 -04:00
canvas servo: Merge #20539 - Moar WebGL improvements, again (from servo:webgl); r=emilio 2018-04-05 03:31:41 -04:00
canvas_traits servo: Merge #20539 - Moar WebGL improvements, again (from servo:webgl); r=emilio 2018-04-05 03:31:41 -04:00
compositing servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
config servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
constellation servo: Merge #20507 - New Session History (from cbrewster:history_transactions); r=asajeffrey 2018-04-05 19:26:37 -04:00
debugger servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
deny_public_fields servo: Merge #20022 - Update syn, quote and synstructure (from Eijebong:syn); r=nox 2018-02-13 11:15:54 -05:00
devtools servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
devtools_traits servo: Merge #20371 - Bump ipc-channel and bincode (from Eijebong:ipc-channel); r=nox 2018-03-21 09:00:16 -04:00
dom_struct servo: Merge #19476 - Use workspace.default-members to specify default crates for cargo build (from servo:default-members); r=nox 2017-12-07 06:53:07 -06:00
domobject_derive servo: Merge #20246 - Use higher level handles from JS bindings (from marmistrz:test-lifetime-handles); r=jdm 2018-03-28 16:22:01 -04:00
fallible servo: Merge #19494 - Update smallvec to 0.6 (from Eijebong:smallvec); r=emilio 2017-12-05 13:44:19 -06:00
geometry servo: Merge #20071 - Use typed coordinates more (from paulrouget:typedsize); r=glennw 2018-03-16 17:18:24 -04:00
gfx servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
gfx_traits servo: Merge #19933 - Update WebRender (from mrobinson:update-wr); r=emilio 2018-02-06 09:12:58 -05:00
hashglobe servo: Merge #20371 - Bump ipc-channel and bincode (from Eijebong:ipc-channel); r=nox 2018-03-21 09:00:16 -04:00
jstraceable_derive servo: Merge #20022 - Update syn, quote and synstructure (from Eijebong:syn); r=nox 2018-02-13 11:15:54 -05:00
layout servo: Merge #20573 - Add support for percentages in column-gap (from Ramshell:issue/20498); r=mbrubeck 2018-04-06 19:48:59 -04:00
layout_thread servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
layout_traits servo: Merge #20371 - Bump ipc-channel and bincode (from Eijebong:ipc-channel); r=nox 2018-03-21 09:00:16 -04:00
malloc_size_of servo: Merge #20504 - Hide non-Servo heap measurement (from jdm:unbreak); r=bustage 2018-04-02 10:40:02 -04:00
malloc_size_of_derive servo: Merge #20022 - Update syn, quote and synstructure (from Eijebong:syn); r=nox 2018-02-13 11:15:54 -05:00
metrics servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
msg servo: Merge #19975 - Kill browserhtml (from paulrouget:killbhtml); r=mbrubeck,emilio 2018-02-13 04:54:47 -05:00
net servo: Merge #20391 - Measure cache memory usage (from modal17:iss19251); r=jdm 2018-04-02 02:01:50 -04:00
net_traits servo: Merge #20391 - Measure cache memory usage (from modal17:iss19251); r=jdm 2018-04-02 02:01:50 -04:00
nonzero servo: Merge #18875 - Remove the need for rust-mozjs to use unstable Rust features (from servo:stable-js); r=nox,jdm 2017-10-16 17:07:50 -05:00
profile servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
profile_traits servo: Merge #20391 - Measure cache memory usage (from modal17:iss19251); r=jdm 2018-04-02 02:01:50 -04:00
rand servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
range servo: Merge #18938 - Replace all uses of the heapsize crate with malloc_size_of (from nnethercote:bug-1409255); r=SimonSapin 2017-10-18 13:56:05 -05:00
remutex servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
script servo: Merge #20565 - Daily batch of drive-by WebGL improvements, wholesome and gluten-free (from servo:webgl); r=emilio 2018-04-06 05:52:06 -04:00
script_layout_interface servo: Merge #20447 - NCSU Canvas Rendering Project Initial Steps (from Brody-Eastwood:master); r=jdm 2018-04-02 22:24:34 -04:00
script_plugins servo: Merge #19098 - Make the unrooted_must_root conditional on a default Cargo feature (from servo:minimal-plugin); r=jdm 2017-11-02 09:28:13 -05:00
script_traits servo: Merge #20447 - NCSU Canvas Rendering Project Initial Steps (from Brody-Eastwood:master); r=jdm 2018-04-02 22:24:34 -04:00
selectors servo: Merge #20597 - style: Implement the non-functional :host selector (from emilio:host); r=xidorn 2018-04-09 06:41:59 -04:00
servo servo: Merge #20517 - Fix the env_logger update (from Eijebong:fix_log); r=mbrubeck 2018-04-03 09:14:41 -04:00
servo_arc servo: Merge #20088 - Fix license metadata for servo_arc crate (from mbrubeck:license); r=SimonSapin 2018-02-21 19:35:55 -05:00
size_of_test
style servo: Merge #20597 - style: Implement the non-functional :host selector (from emilio:host); r=xidorn 2018-04-09 06:41:59 -04:00
style_derive servo: Merge #20275 - Finish cleaning up trait bounds generation in style_derive (from servo:derive-all-the-things); r=emilio 2018-03-12 04:52:02 -04:00
style_traits servo: Merge #20454 - Update to rustc 1.25.0-nightly (bacb5c58d 2018-01-26) (from emilio:rustup); r=SimonSapin 2018-03-29 09:12:45 -04:00
url servo: Merge #20371 - Bump ipc-channel and bincode (from Eijebong:ipc-channel); r=nox 2018-03-21 09:00:16 -04:00
webdriver_server servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
webvr servo: Merge #20465 - Bump env_logger to 0.5 and log to 0.4 in every servo crate (from Eijebong:log); r=SimonSapin 2018-03-28 15:08:52 -04:00
webvr_traits servo: Merge #20371 - Bump ipc-channel and bincode (from Eijebong:ipc-channel); r=nox 2018-03-21 09:00:16 -04:00