style: Implement inverted-colors media feature

Implemented the inverted-colors media feature from Media Queries Level 5
for all platforms.
Spec: https://drafts.csswg.org/mediaqueries-5/#inverted

Platform specific implementations:
- Windows: Checks system color filter setting, and if it is inverted
  (note: Windows does not live update due to having to read a reg key)
- Mac: Checks dedicated inverted accessibility system setting
- Android: Checks dedicated inverted system setting
- Linux: No GTK API exposes anything like it so always none

Locked behind new pref `layout.css.inverted-colors.enabled`,
always off by default for now.

Also added new WPT tests (none previously).

Other browsers:
- WebKit: shipped since Safari 9.1 (Jan 2017)
- Blink: no signal

Test page: https://goose.icu/inverted-colors

Differential Revision: https://phabricator.services.mozilla.com/D173201
This commit is contained in:
CanadaHonk 2023-04-11 13:34:00 +00:00 committed by Martin Robinson
parent dcfef6cdbb
commit 13e2d10474
2 changed files with 43 additions and 1 deletions

View file

@ -329,6 +329,13 @@ fn disabled_by_pref(feature: &Atom, context: &ParserContext) -> bool {
return !context.in_ua_or_chrome_sheet() &&
!static_prefs::pref!("layout.css.prefers-reduced-transparency.enabled");
}
// inverted-colors is always enabled in the ua and chrome. On
// the web it is hidden behind a preferenc.
if *feature == atom!("inverted-colors") {
return !context.in_ua_or_chrome_sheet() &&
!static_prefs::pref!("layout.css.inverted-colors.enabled");
}
}
false
}