Merge mozilla-central to inbound. a=merge CLOSED TREE
authorMargareta Eliza Balazs <ebalazs@mozilla.com>
Wed, 28 Mar 2018 01:00:31 +0300
changeset 773618 aaa66e08731c17fc10fc2f7c5e2c439a31b8b5a9
parent 773617 4c3e0eb9d046e6cc37214f4bed1681dfb32fd047 (current diff)
parent 773564 56d6db4ad38c869d0bbc2aea449a4a382f109163 (diff)
child 773619 034e1d7593701112b0c92fb1b40e0e69663b0ca9
push id104266
push userbmo:hsivonen@hsivonen.fi
push dateWed, 28 Mar 2018 07:33:03 +0000
reviewersmerge
milestone61.0a1
Merge mozilla-central to inbound. a=merge CLOSED TREE
gfx/layers/wr/WebRenderCommandBuilder.cpp
layout/painting/nsDisplayList.cpp
layout/style/nsCSSDataBlock.h
layout/style/nsCSSPropLogicalGroupList.h
modules/libpref/init/all.js
third_party/rust/lazy_static-0.2.11/.cargo-checksum.json
third_party/rust/lazy_static-0.2.11/.travis.yml
third_party/rust/lazy_static-0.2.11/Cargo.toml
third_party/rust/lazy_static-0.2.11/LICENSE-APACHE
third_party/rust/lazy_static-0.2.11/LICENSE-MIT
third_party/rust/lazy_static-0.2.11/README.md
third_party/rust/lazy_static-0.2.11/appveyor.yml
third_party/rust/lazy_static-0.2.11/src/core_lazy.rs
third_party/rust/lazy_static-0.2.11/src/lazy.rs
third_party/rust/lazy_static-0.2.11/src/lib.rs
third_party/rust/lazy_static-0.2.11/src/nightly_lazy.rs
third_party/rust/lazy_static-0.2.11/tests/compile-fail/README.md
third_party/rust/lazy_static-0.2.11/tests/compile-fail/incorrect_visibility_restriction.rs
third_party/rust/lazy_static-0.2.11/tests/compile-fail/static_is_private.rs
third_party/rust/lazy_static-0.2.11/tests/compile-fail/static_is_sized.rs
third_party/rust/lazy_static-0.2.11/tests/compile-fail/static_never_used.rs
third_party/rust/lazy_static-0.2.11/tests/compile_tests.rs
third_party/rust/lazy_static-0.2.11/tests/no_std.rs
third_party/rust/lazy_static-0.2.11/tests/test.rs
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -328,29 +328,29 @@ dependencies = [
  "build_const 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "crossbeam-deque"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "crossbeam-epoch 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.3.0"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "arrayvec 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "scopeguard 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "crossbeam-utils"
 version = "0.2.2"
@@ -496,22 +496,22 @@ name = "dtoa-short"
 version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "dwrote"
-version = "0.4.1"
+version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 1.0.27 (git+https://github.com/gankro/serde?branch=deserialize_from_enums4)",
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "either"
@@ -840,17 +840,17 @@ source = "registry+https://github.com/ru
 [[package]]
 name = "js"
 version = "0.1.4"
 dependencies = [
  "bindgen 0.33.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "cmake 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
  "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "mozjs_sys 0.0.0",
  "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "kernel32-sys"
@@ -868,21 +868,16 @@ source = "registry+https://github.com/ru
 
 [[package]]
 name = "language-tags"
 version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "lazy_static"
-version = "0.2.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "lazy_static"
 version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "lazycell"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
@@ -908,17 +903,17 @@ dependencies = [
  "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)",
  "libudev-sys 0.1.3",
 ]
 
 [[package]]
 name = "libudev-sys"
 version = "0.1.3"
 dependencies = [
- "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "libz-sys"
 version = "1.0.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -1430,17 +1425,17 @@ source = "registry+https://github.com/ru
 [[package]]
 name = "regex"
 version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "regex-syntax"
 version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
@@ -1779,20 +1774,20 @@ version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "thread_local"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "thread_profiler"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
@@ -2020,17 +2015,17 @@ version = "0.57.0"
 dependencies = [
  "app_units 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 9.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "dwrote 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "freetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "plane-split 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2048,31 +2043,31 @@ name = "webrender_api"
 version = "0.57.0"
 dependencies = [
  "app_units 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "dwrote 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 1.0.27 (git+https://github.com/gankro/serde?branch=deserialize_from_enums4)",
  "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "webrender_bindings"
 version = "0.1.0"
 dependencies = [
  "app_units 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "dwrote 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "foreign-types 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "webrender 0.57.0",
 ]
@@ -2157,17 +2152,17 @@ dependencies = [
  "nsstring 0.1.0",
  "xpcom 0.1.0",
 ]
 
 [[package]]
 name = "xpcom_macros"
 version = "0.1.0"
 dependencies = [
- "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "zip"
 version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2211,33 +2206,33 @@ dependencies = [
 "checksum core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "286e0b41c3a20da26536c6000a280585d519fd07b3956b43aed8a79e9edce980"
 "checksum core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "716c271e8613ace48344f723b60b900a93150271e5be206212d052bbc0883efa"
 "checksum core-graphics 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb0ed45fdc32f9ab426238fba9407dfead7bacd7900c9b4dd3f396f46eafdae3"
 "checksum core-text 9.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bd581c37283d0c23311d179aefbb891f2324ee0405da58a26e8594ab76e5748"
 "checksum cose 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "72fa26cb151d3ae4b70f63d67d0fed57ce04220feafafbae7f503bef7aae590d"
 "checksum cose-c 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "49726015ab0ca765144fcca61e4a7a543a16b795a777fa53f554da2fffff9a94"
 "checksum crc 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd5d02c0aac6bd68393ed69e00bbc2457f3e89075c6349db7189618dc4ddc1d7"
 "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3"
-"checksum crossbeam-epoch 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "59796cc6cbbdc6bb319161349db0c3250ec73ec7fcb763a51065ec4e2e158552"
+"checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150"
 "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9"
 "checksum cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8a807ac3ab7a217829c2a3b65732b926b2befe6a35f33b4bf8b503692430f223"
 "checksum cssparser-macros 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "079adec4af52bb5275eadd004292028c79eb3c5f5b4ee8086a36d4197032f6df"
 "checksum cstr 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b6557bdb1dc9647eae1cf7f5601b14cd45fc3c7ccf2df618387416fe542da6ea"
 "checksum cstr-macros 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f9f316203d1ea36f4f18316822806f6999aa3dc5ed1adf51e35b77e3b3933d78"
 "checksum cubeb 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7923bed2d5a1a64ba0c3e8b6badc360508ba488d1f2f59f16a688802e755bb85"
 "checksum cubeb-backend 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdcac95519416d9ec814db2dc40e6293e7da25b906023d93f48b87f0587ab138"
 "checksum cubeb-core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "169d9a36f5daa60f9c4597905132aef056cf62693addd4a3421492853ccad565"
 "checksum cubeb-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e405ad4dff2c1a7cbfa6998e5925e8ceafe900feeacfcad35a3e3790bea0f2aa"
 "checksum darling 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d3effd06d4057f275cb7858889f4952920bab78dd8ff0f6e7dfe0c8d2e67ed89"
 "checksum darling_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "167dd3e235c2f1da16a635c282630452cdf49191eb05711de1bcd1d3d5068c00"
 "checksum darling_macro 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c53edaba455f6073a10c27c72440860eb3f60444f8c8660a391032eeae744d82"
 "checksum debug_unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9a032eac705ca39214d169f83e3d3da290af06d8d1d344d1baad2fd002dca4b3"
 "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"
 "checksum dtoa-short 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "068d4026697c1a18f0b0bb8cfcad1b0c151b90d8edb9bf4c235ad68128920d1d"
-"checksum dwrote 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a207eb7b40e25d1d28dc679f451d321fb6954b73ceaa47986702575865469461"
+"checksum dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b26e30aaa6bf31ec830db15fec14ed04f0f2ecfcc486ecfce88c55d3389b237f"
 "checksum either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18785c1ba806c258137c937e44ada9ee7e69a37e3c72077542cd2f069d78562a"
 "checksum encoding_c 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "93ec52324ca72f423237a413ca0e1c60654c8b3d0934fcd5fd888508dfcc4ba7"
 "checksum encoding_rs 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98fd0f24d1fb71a4a6b9330c8ca04cbd4e7cc5d846b54ca74ff376bc7c9f798d"
 "checksum env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b"
 "checksum error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3"
 "checksum euclid 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)" = "adfe67a9343519c1449d208da5998c6de582de698f7a39c4ac82ffba23d131a5"
 "checksum flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fac2277e84e5e858483756647a9d0aa8d9a2b7cba517fd84325a0aaa69a0909"
 "checksum fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344"
@@ -2259,17 +2254,16 @@ dependencies = [
 "checksum ident_case 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c9826188e666f2ed92071d2dadef6edc430b11b158b5b2b3f4babbcc891eaaa"
 "checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d"
 "checksum iovec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "29d062ee61fccdf25be172e70f34c9f6efc597e1fb8f6526e8437b2046ab26be"
 "checksum itertools 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b07332223953b5051bceb67e8c4700aa65291535568e1f12408c43c4a42c0394"
 "checksum itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eb2f404fbc66fd9aac13e998248505e7ecb2ad8e44ab6388684c5fb11c6c251c"
 "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
 "checksum khronos_api 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d867c645cfeb8a7fec503731679eac03ac11b7105aa5a71cb8f8ee5271636add"
 "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
-"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
 "checksum lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d"
 "checksum lazycell 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce12306c4739d86ee97c23139f3a34ddf0387bbf181bc7929d287025a8c3ef6b"
 "checksum libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)" = "f54263ad99207254cf58b5f701ecb432c717445ea2ee8af387334bdd1a03fdff"
 "checksum libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3ad660d7cb8c5822cd83d10897b0f1f1526792737a179e73896152f85b88c2"
 "checksum libudev 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea626d3bdf40a1c5aee3bcd4f40826970cae8d80a8fec934c82a63840094dcfe"
 "checksum libz-sys 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "3fdd64ef8ee652185674455c1d450b83cbc8ad895625d543b5324d923f82e4d8"
 "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
 "checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2"
@@ -2341,17 +2335,17 @@ dependencies = [
 "checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"
 "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
 "checksum syn 0.12.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9e1c669ed757c0ebd04337f6a5bb972d05e0c08fe2540dd3ee3dd9e4daf1604c"
 "checksum synom 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "27e31aa4b09b9f4cb12dff3c30ba503e17b1a624413d764d32dab76e3920e5bc"
 "checksum synstructure 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "010366096045d8250555904c58da03377289e7f4b2ce7a5b1027e2b532f41000"
 "checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6"
 "checksum term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2b6b55df3198cc93372e85dd2ed817f0e38ce8cc0f22eb32391bfad9c4bf209"
 "checksum textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0b59b6b4b44d867f1370ef1bd91bfb262bf07bf0ae65c202ea2fbc16153b693"
-"checksum thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1697c4b57aeeb7a536b647165a2825faddffb1d3bad386d507709bd51a90bb14"
+"checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963"
 "checksum thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf947d192a9be60ef5131cc7a4648886ba89d712f16700ebbf80c8a69d05d48f"
 "checksum time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d788d3aa77bc0ef3e9621256885555368b47bd495c13dd2e7413c89f845520"
 "checksum tokio-core 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "febd81b3e2ef615c6c8077347b33f3f3deec3d708ecd08194c9707b7a1eccfc9"
 "checksum tokio-io 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b4ab83e7adb5677e42e405fa4ceff75659d93c4d7d7dd22f52fcec59ee9f02af"
 "checksum tokio-uds 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "65ae5d255ce739e8537221ed2942e0445f4b3b813daebac1c0050ddaaa3587f9"
 "checksum toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a7540f4ffc193e0d3c94121edb19b055670d369f77d5804db11ae053a45b6e7e"
 "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
 "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887"
--- a/Makefile.in
+++ b/Makefile.in
@@ -153,17 +153,17 @@ endif
 tup:
 	$(call BUILDSTATUS,TIERS $(if $(MOZ_ARTIFACT_BUILDS),artifact )tup)
 ifdef MOZ_ARTIFACT_BUILDS
 	$(call BUILDSTATUS,TIER_START artifact)
 	$(MAKE) recurse_artifact
 	$(call BUILDSTATUS,TIER_FINISH artifact)
 endif
 	$(call BUILDSTATUS,TIER_START tup)
-	@$(TUP) $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),,--verbose)
+	@$(TUP) $(if $(MOZ_AUTOMATION),--quiet) $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),,--verbose)
 	$(call BUILDSTATUS,TIER_FINISH tup)
 
 .PHONY: $(addprefix install-,$(install_manifests))
 $(addprefix install-,$(install_manifests)): install-%: $(install_manifest_depends)
 ifneq (,$(filter FasterMake+RecursiveMake,$(BUILD_BACKENDS)))
 	@# If we're using the hybrid FasterMake/RecursiveMake backend, we want
 	@# to ensure the FasterMake end doesn't have install manifests for the
 	@# same directory, because that would blow up
--- a/browser/app/blocklist.xml
+++ b/browser/app/blocklist.xml
@@ -1,10 +1,10 @@
 <?xml version='1.0' encoding='UTF-8'?>
-<blocklist lastupdate="1520527480321" xmlns="http://www.mozilla.org/2006/addons-blocklist">
+<blocklist lastupdate="1521539068414" xmlns="http://www.mozilla.org/2006/addons-blocklist">
   <emItems>
     <emItem blockID="i334" id="{0F827075-B026-42F3-885D-98981EE7B1AE}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i1211" id="flvto@hotger.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
--- a/browser/base/content/test/sync/browser_sync.js
+++ b/browser/base/content/test/sync/browser_sync.js
@@ -15,39 +15,48 @@ add_task(async function test_ui_state_no
 
   Services.obs.notifyObservers(null, UIState.ON_UPDATE);
   ok(called);
 
   gSync.updateAllUI = updateAllUI;
 });
 
 add_task(async function test_ui_state_signedin() {
+  const relativeDateAnchor = new Date();
   let state = {
     status: UIState.STATUS_SIGNED_IN,
     email: "foo@bar.com",
     displayName: "Foo Bar",
     avatarURL: "https://foo.bar",
     lastSync: new Date(),
     syncing: false
   };
 
+  const origRelativeTimeFormat = gSync.relativeTimeFormat;
+  gSync.relativeTimeFormat = {
+    formatBestUnit(date) {
+      return origRelativeTimeFormat.formatBestUnit(date, {now: relativeDateAnchor});
+    }
+  };
+
   gSync.updateAllUI(state);
 
   let statusBarTooltip = gSync.appMenuStatus.getAttribute("signedinTooltiptext");
   let lastSyncTooltip = gSync.formatLastSyncDate(new Date(state.lastSync));
   checkPanelUIStatusBar({
     label: "Foo Bar",
     tooltip: statusBarTooltip,
     fxastatus: "signedin",
     avatarURL: "https://foo.bar",
     syncing: false,
     syncNowTooltip: lastSyncTooltip
   });
   checkRemoteTabsPanel("PanelUI-remotetabs-main", false);
   checkMenuBarItem("sync-syncnowitem");
+  gSync.relativeTimeFormat = origRelativeTimeFormat;
 });
 
 add_task(async function test_ui_state_syncing() {
   let state = {
     status: UIState.STATUS_SIGNED_IN,
     email: "foo@bar.com",
     displayName: "Foo Bar",
     avatarURL: "https://foo.bar",
--- a/browser/components/enterprisepolicies/Policies.jsm
+++ b/browser/components/enterprisepolicies/Policies.jsm
@@ -229,37 +229,35 @@ var Policies = {
       if (param) {
         manager.disallowFeature("SysAddonUpdate");
       }
     }
   },
 
   "DisplayBookmarksToolbar": {
     onBeforeUIStartup(manager, param) {
-      if (param) {
-        // This policy is meant to change the default behavior, not to force it.
-        // If this policy was alreay applied and the user chose to re-hide the
-        // bookmarks toolbar, do not show it again.
-        runOnce("displayBookmarksToolbar", () => {
-          gXulStore.setValue(BROWSER_DOCUMENT_URL, "PersonalToolbar", "collapsed", "false");
-        });
-      }
+      let value = (!param).toString();
+      // This policy is meant to change the default behavior, not to force it.
+      // If this policy was alreay applied and the user chose to re-hide the
+      // bookmarks toolbar, do not show it again.
+      runOncePerModification("displayBookmarksToolbar", value, () => {
+        gXulStore.setValue(BROWSER_DOCUMENT_URL, "PersonalToolbar", "collapsed", value);
+      });
     }
   },
 
   "DisplayMenuBar": {
     onBeforeUIStartup(manager, param) {
-      if (param) {
+      let value = (!param).toString();
         // This policy is meant to change the default behavior, not to force it.
         // If this policy was alreay applied and the user chose to re-hide the
         // menu bar, do not show it again.
-        runOnce("displayMenuBar", () => {
-          gXulStore.setValue(BROWSER_DOCUMENT_URL, "toolbar-menubar", "autohide", "false");
-        });
-      }
+      runOncePerModification("displayMenuBar", value, () => {
+        gXulStore.setValue(BROWSER_DOCUMENT_URL, "toolbar-menubar", "autohide", value);
+      });
     }
   },
 
   "DontCheckDefaultBrowser": {
     onBeforeUIStartup(manager, param) {
       setAndLockPref("browser.shell.checkDefaultBrowser", false);
     }
   },
@@ -509,16 +507,17 @@ function addAllowDenyPermissions(permiss
  *
  * Helper function to run a callback only once per policy.
  *
  * @param {string} actionName
  *        A given name which will be used to track if this callback has run.
  * @param {Functon} callback
  *        The callback to run only once.
  */
+ // eslint-disable-next-line no-unused-vars
 function runOnce(actionName, callback) {
   let prefName = `browser.policies.runonce.${actionName}`;
   if (Services.prefs.getBoolPref(prefName, false)) {
     log.debug(`Not running action ${actionName} again because it has already run.`);
     return;
   }
   Services.prefs.setBoolPref(prefName, true);
   callback();
--- a/browser/components/extensions/ext-pageAction.js
+++ b/browser/components/extensions/ext-pageAction.js
@@ -269,21 +269,33 @@ this.pageAction = class extends Extensio
 
     this.tabManager.addActiveTabPermission(tab);
 
     // If the widget has a popup URL defined, we open a popup, but do not
     // dispatch a click event to the extension.
     // If it has no popup URL defined, we dispatch a click event, but do not
     // open a popup.
     if (popupURL) {
-      let popup = new PanelPopup(this.extension, window.document, popupURL,
-                                 this.browserStyle);
-      await popup.contentReady;
+      if (this.popupNode && this.popupNode.panel.state !== "closed") {
+        // The panel is being toggled closed.
+        TelemetryStopwatch.cancel(popupOpenTimingHistogram, this);
+        window.BrowserPageActions.togglePanelForAction(this.browserPageAction,
+                                                       this.popupNode.panel);
+        return;
+      }
+
+      this.popupNode = new PanelPopup(this.extension, window.document, popupURL,
+                                      this.browserStyle);
+      // Remove popupNode when it is closed.
+      this.popupNode.panel.addEventListener("popuphiding", () => {
+        this.popupNode = undefined;
+      }, {once: true});
+      await this.popupNode.contentReady;
       window.BrowserPageActions.togglePanelForAction(this.browserPageAction,
-                                                     popup.panel);
+                                                     this.popupNode.panel);
       TelemetryStopwatch.finish(popupOpenTimingHistogram, this);
     } else {
       TelemetryStopwatch.cancel(popupOpenTimingHistogram, this);
       this.emit("click", tab);
     }
   }
 
   /**
--- a/browser/components/extensions/schemas/geckoProfiler.json
+++ b/browser/components/extensions/schemas/geckoProfiler.json
@@ -27,17 +27,18 @@
           "js",
           "leaf",
           "mainthreadio",
           "memory",
           "privacy",
           "restyle",
           "stackwalk",
           "tasktracer",
-          "threads"
+          "threads",
+          "trackopts"
         ]
       }
     ],
     "functions": [
       {
        "name": "start",
        "type": "function",
        "description": "Starts the profiler with the specified settings.",
--- a/browser/components/extensions/test/browser/browser_ext_commands_execute_page_action.js
+++ b/browser/components/extensions/test/browser/browser_ext_commands_execute_page_action.js
@@ -158,12 +158,21 @@ add_task(async function test_execute_pag
         }, {once: true});
       },
     },
   });
 
   await extension.startup();
   let tab = await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "http://example.com/");
   EventUtils.synthesizeKey("j", {altKey: true, shiftKey: true});
+  info("Waiting for pageAction open.");
   await extension.awaitFinish("page-action-with-popup");
+
+  // Bug 1447796 make sure the key command can close the page action
+  let panel = document.getElementById(`${makeWidgetId(extension.id)}-panel`);
+  let hidden = promisePopupHidden(panel);
+  EventUtils.synthesizeKey("j", {altKey: true, shiftKey: true});
+  info("Waiting for pageAction close.");
+  await hidden;
+
   await extension.unload();
   BrowserTestUtils.removeTab(tab);
 });
--- a/devtools/client/inspector/computed/test/browser_computed_cycle_color.js
+++ b/devtools/client/inspector/computed/test/browser_computed_cycle_color.js
@@ -10,31 +10,31 @@ const TEST_URI = `
   <style type="text/css">
     .matches {
       color: #f00;
     }
   </style>
   <span id="matches" class="matches">Some styled text</span>
 `;
 
-add_task(function* () {
-  yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
-  let {inspector, view} = yield openComputedView();
-  yield selectNode("#matches", inspector);
+add_task(async function() {
+  await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
+  let {inspector, view} = await openComputedView();
+  await selectNode("#matches", inspector);
 
   info("Checking the property itself");
   let container = getComputedViewPropertyView(view, "color").valueNode;
-  checkColorCycling(container, view);
+  await checkColorCycling(container, view);
 
   info("Checking matched selectors");
-  container = yield getComputedViewMatchedRules(view, "color");
-  yield checkColorCycling(container, view);
+  container = await getComputedViewMatchedRules(view, "color");
+  await checkColorCycling(container, view);
 });
 
-function* checkColorCycling(container, view) {
+async function checkColorCycling(container, view) {
   let valueNode = container.querySelector(".computed-color");
   let win = view.styleWindow;
 
   // "Authored" (default; currently the computed value)
   is(valueNode.textContent, "rgb(255, 0, 0)",
                             "Color displayed as an RGB value.");
 
   let tests = [{
@@ -47,25 +47,29 @@ function* checkColorCycling(container, v
     value: "hsl(0, 100%, 50%)",
     comment: "Color displayed as an HSL value again."
   }, {
     value: "rgb(255, 0, 0)",
     comment: "Color displayed as an RGB value again."
   }];
 
   for (let test of tests) {
-    yield checkSwatchShiftClick(container, win, test.value, test.comment);
+    await checkSwatchShiftClick(container, win, test.value, test.comment);
   }
 }
 
-function* checkSwatchShiftClick(container, win, expectedValue, comment) {
+async function checkSwatchShiftClick(container, win, expectedValue, comment) {
   let swatch = container.querySelector(".computed-colorswatch");
   let valueNode = container.querySelector(".computed-color");
   swatch.scrollIntoView();
 
   let onUnitChange = swatch.once("unit-change");
   EventUtils.synthesizeMouseAtCenter(swatch, {
     type: "mousedown",
     shiftKey: true
   }, win);
-  yield onUnitChange;
+  // we need to have the mouse up event in order to make sure that the platform
+  // lets go of the last container, and is not waiting for something to happen.
+  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1442153
+  EventUtils.synthesizeMouseAtCenter(swatch, {type: "mouseup"}, win);
+  await onUnitChange;
   is(valueNode.textContent, expectedValue, comment);
 }
--- a/devtools/client/inspector/markup/test/browser_markup_dragdrop_autoscroll_01.js
+++ b/devtools/client/inspector/markup/test/browser_markup_dragdrop_autoscroll_01.js
@@ -4,48 +4,46 @@
 
 "use strict";
 
 // Test that dragging a node near the top or bottom edge of the markup-view
 // auto-scrolls the view on a large toolbox.
 
 const TEST_URL = URL_ROOT + "doc_markup_dragdrop_autoscroll_01.html";
 
-add_task(function* () {
+add_task(async function() {
   // Set the toolbox as large as it would get. The toolbox automatically shrinks
   // to not overflow to window.
-  yield pushPref("devtools.toolbox.footer.height", 10000);
+  await pushPref("devtools.toolbox.footer.height", 10000);
 
-  let {inspector} = yield openInspectorForURL(TEST_URL);
+  let {inspector} = await openInspectorForURL(TEST_URL);
   let markup = inspector.markup;
   let viewHeight = markup.doc.documentElement.clientHeight;
 
   info("Pretend the markup-view is dragging");
   markup.isDragging = true;
 
   info("Simulate a mousemove on the view, at the bottom, and expect scrolling");
-  let onScrolled = waitForScrollStop(markup.doc);
 
   markup._onMouseMove({
     preventDefault: () => {},
     target: markup.doc.body,
     pageY: viewHeight + markup.doc.defaultView.scrollY
   });
 
-  let bottomScrollPos = yield onScrolled;
+  let bottomScrollPos = await waitForScrollStop(markup.doc);
   ok(bottomScrollPos > 0, "The view was scrolled down");
 
   info("Simulate a mousemove at the top and expect more scrolling");
-  onScrolled = waitForScrollStop(markup.doc);
 
   markup._onMouseMove({
     preventDefault: () => {},
     target: markup.doc.body,
     pageY: markup.doc.defaultView.scrollY
   });
 
-  let topScrollPos = yield onScrolled;
+  let topScrollPos = await waitForScrollStop(markup.doc);
   ok(topScrollPos < bottomScrollPos, "The view was scrolled up");
   is(topScrollPos, 0, "The view was scrolled up to the top");
 
   info("Simulate a mouseup to stop dragging");
   markup._onMouseUp();
 });
--- a/devtools/client/inspector/markup/test/browser_markup_dragdrop_autoscroll_02.js
+++ b/devtools/client/inspector/markup/test/browser_markup_dragdrop_autoscroll_02.js
@@ -4,46 +4,44 @@
 
 "use strict";
 
 // Test that dragging a node near the top or bottom edge of the markup-view
 // auto-scrolls the view on a small toolbox.
 
 const TEST_URL = URL_ROOT + "doc_markup_dragdrop_autoscroll_02.html";
 
-add_task(function* () {
+add_task(async function() {
   // Set the toolbox to very small in size.
-  yield pushPref("devtools.toolbox.footer.height", 150);
+  await pushPref("devtools.toolbox.footer.height", 150);
 
-  let {inspector} = yield openInspectorForURL(TEST_URL);
+  let {inspector} = await openInspectorForURL(TEST_URL);
   let markup = inspector.markup;
   let viewHeight = markup.doc.documentElement.clientHeight;
 
   info("Pretend the markup-view is dragging");
   markup.isDragging = true;
 
   info("Simulate a mousemove on the view, at the bottom, and expect scrolling");
-  let onScrolled = waitForScrollStop(markup.doc);
 
   markup._onMouseMove({
     preventDefault: () => {},
     target: markup.doc.body,
     pageY: viewHeight + markup.doc.defaultView.scrollY
   });
 
-  let bottomScrollPos = yield onScrolled;
+  let bottomScrollPos = await waitForScrollStop(markup.doc);
   ok(bottomScrollPos > 0, "The view was scrolled down");
   info("Simulate a mousemove at the top and expect more scrolling");
-  onScrolled = waitForScrollStop(markup.doc);
 
   markup._onMouseMove({
     preventDefault: () => {},
     target: markup.doc.body,
     pageY: markup.doc.defaultView.scrollY
   });
 
-  let topScrollPos = yield onScrolled;
+  let topScrollPos = await waitForScrollStop(markup.doc);
   ok(topScrollPos < bottomScrollPos, "The view was scrolled up");
   is(topScrollPos, 0, "The view was scrolled up to the top");
 
   info("Simulate a mouseup to stop dragging");
   markup._onMouseUp();
 });
--- a/devtools/client/inspector/markup/test/head.js
+++ b/devtools/client/inspector/markup/test/head.js
@@ -541,24 +541,24 @@ async function simulateNodeDrop(inspecto
 async function simulateNodeDragAndDrop(inspector, selector, xOffset, yOffset) {
   await simulateNodeDrag(inspector, selector, xOffset, yOffset);
   await simulateNodeDrop(inspector, selector);
 }
 
 /**
  * Waits until the element has not scrolled for 30 consecutive frames.
  */
-function* waitForScrollStop(doc) {
+async function waitForScrollStop(doc) {
   let el = doc.documentElement;
   let win = doc.defaultView;
   let lastScrollTop = el.scrollTop;
   let stopFrameCount = 0;
   while (stopFrameCount < 30) {
     // Wait for a frame.
-    yield new Promise(resolve => win.requestAnimationFrame(resolve));
+    await new Promise(resolve => win.requestAnimationFrame(resolve));
 
     // Check if the element has scrolled.
     if (lastScrollTop == el.scrollTop) {
       // No scrolling since the last frame.
       stopFrameCount++;
     } else {
       // The element has scrolled. Reset the frame counter.
       stopFrameCount = 0;
--- a/devtools/server/main.js
+++ b/devtools/server/main.js
@@ -1599,20 +1599,19 @@ DebuggerServerConnection.prototype = {
                             message: "No such actor for ID: " + actorID });
       return null;
     }
 
     // Dynamically-loaded actors have to be created lazily.
     if (actor instanceof ObservedActorFactory) {
       try {
         actor = actor.createActor();
-      } catch (e) {
-        this.transport.send(this._unknownError(
-          "Error occurred while creating actor '" + actor.name,
-          e));
+      } catch (error) {
+        let prefix = "Error occurred while creating actor '" + actor.name;
+        this.transport.send(this._unknownError(actorID, prefix, error));
       }
     } else if (typeof (actor) !== "object") {
       // ActorPools should now contain only actor instances (i.e. objects)
       // or ObservedActorFactory instances.
       throw new Error("Unexpected actor constructor/function in ActorPool " +
                       "for actorID=" + actorID + ".");
     }
 
@@ -1623,21 +1622,22 @@ DebuggerServerConnection.prototype = {
     for (let pool of this._extraPools) {
       if (pool.has(actorID)) {
         return pool;
       }
     }
     return null;
   },
 
-  _unknownError(prefix, error) {
+  _unknownError(from, prefix, error) {
     let errorString = prefix + ": " + DevToolsUtils.safeErrorString(error);
     reportError(errorString);
     dumpn(errorString);
     return {
+      from,
       error: "unknownError",
       message: errorString
     };
   },
 
   _queueResponse: function(from, type, responseOrPromise) {
     let pendingResponse = this._actorResponses.get(from) || Promise.resolve(null);
     let responsePromise = pendingResponse.then(() => {
@@ -1646,25 +1646,24 @@ DebuggerServerConnection.prototype = {
       if (!this.transport) {
         throw new Error(`Connection closed, pending response from ${from}, ` +
                         `type ${type} failed`);
       }
       if (!response.from) {
         response.from = from;
       }
       this.transport.send(response);
-    }).catch((e) => {
+    }).catch((error) => {
       if (!this.transport) {
         throw new Error(`Connection closed, pending error from ${from}, ` +
                         `type ${type} failed`);
       }
-      let errorPacket = this._unknownError(
-        "error occurred while processing '" + type, e);
-      errorPacket.from = from;
-      this.transport.send(errorPacket);
+
+      let prefix = "error occurred while processing '" + type;
+      this.transport.send(this._unknownError(from, prefix, error));
     });
 
     this._actorResponses.set(from, responsePromise);
   },
 
   /**
    * Passes a set of options to the BrowserAddonActors for the given ID.
    *
@@ -1771,20 +1770,19 @@ DebuggerServerConnection.prototype = {
     // handle "requestTypes" RDP request.
     if (packet.type == "requestTypes") {
       ret = { from: actor.actorID, requestTypes: Object.keys(actor.requestTypes) };
     } else if (actor.requestTypes && actor.requestTypes[packet.type]) {
       // Dispatch the request to the actor.
       try {
         this.currentPacket = packet;
         ret = actor.requestTypes[packet.type].bind(actor)(packet, this);
-      } catch (e) {
-        this.transport.send(this._unknownError(
-          "error occurred while processing '" + packet.type,
-          e));
+      } catch (error) {
+        let prefix = "error occurred while processing '" + packet.type;
+        this.transport.send(this._unknownError(actor.actorID, prefix, error));
       } finally {
         this.currentPacket = undefined;
       }
     } else {
       ret = { error: "unrecognizedPacketType",
               message: ("Actor " + actor.actorID +
                         " does not recognize the packet type " +
                         packet.type) };
@@ -1834,20 +1832,20 @@ DebuggerServerConnection.prototype = {
       return;
     }
 
     // Dispatch the request to the actor.
     let ret;
     if (actor.requestTypes && actor.requestTypes[type]) {
       try {
         ret = actor.requestTypes[type].call(actor, packet);
-      } catch (e) {
-        this.transport.send(this._unknownError(
-          "error occurred while processing bulk packet '" + type, e));
-        packet.done.reject(e);
+      } catch (error) {
+        let prefix = "error occurred while processing bulk packet '" + type;
+        this.transport.send(this._unknownError(actorKey, prefix, error));
+        packet.done.reject(error);
       }
     } else {
       let message = "Actor " + actorKey +
                     " does not recognize the bulk packet type " + type;
       ret = { error: "unrecognizedPacketType",
               message: message };
       packet.done.reject(new Error(message));
     }
--- a/devtools/server/tests/browser/browser.ini
+++ b/devtools/server/tests/browser/browser.ini
@@ -5,16 +5,17 @@ support-files =
   head.js
   animation.html
   doc_accessibility.html
   doc_allocations.html
   doc_force_cc.html
   doc_force_gc.html
   doc_innerHTML.html
   doc_perf.html
+  error-actor.js
   grid.html
   inspectedwindow-reload-target.sjs
   navigate-first.html
   navigate-second.html
   storage-cookies-same-name.html
   storage-dynamic-windows.html
   storage-listings.html
   storage-unsecured-iframe.html
@@ -26,16 +27,17 @@ support-files =
   storage-helpers.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/server/tests/mochitest/hello-actor.js
 
 [browser_accessibility_node.js]
 [browser_accessibility_node_events.js]
 [browser_accessibility_simple.js]
 [browser_accessibility_walker.js]
+[browser_actor_error.js]
 [browser_animation_emitMutations.js]
 [browser_animation_getFrames.js]
 [browser_animation_getProperties.js]
 [browser_animation_getMultipleStates.js]
 [browser_animation_getPlayers.js]
 [browser_animation_getStateAfterFinished.js]
 [browser_animation_getSubTreeAnimations.js]
 [browser_animation_keepFinished.js]
new file mode 100644
--- /dev/null
+++ b/devtools/server/tests/browser/browser_actor_error.js
@@ -0,0 +1,38 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Test that clients can catch errors in old style actors.
+ */
+
+const ACTORS_URL = "chrome://mochitests/content/browser/devtools/server/tests/browser/error-actor.js";
+
+async function test() {
+  let gClient;
+
+  DebuggerServer.init();
+  DebuggerServer.registerAllActors();
+
+  DebuggerServer.addActors(ACTORS_URL);
+
+  let transport = DebuggerServer.connectPipe();
+  gClient = new DebuggerClient(transport);
+  await gClient.connect();
+
+  let { errorActor } = await gClient.listTabs();
+  ok(errorActor, "Found the error actor.");
+
+  try {
+    await gClient.request({ to: globalActor, type: "error" });
+    ok(false, "The request is expected to fail.");
+  } catch (e) {
+    ok(true, "The request failed as expected, and was caught by the client");
+  }
+  await gClient.close();
+
+  finish();
+}
new file mode 100644
--- /dev/null
+++ b/devtools/server/tests/browser/error-actor.js
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Test actor designed to check that clients are properly notified of errors when calling
+ * methods on old style actors.
+ */
+function ErrorActor(conn, tab) {
+  this.conn = conn;
+  this.tab = tab;
+}
+
+ErrorActor.prototype = {
+  actorPrefix: "error",
+
+  onError: function() {
+    throw new Error("error");
+  }
+};
+
+ErrorActor.prototype.requestTypes = {
+  "error": ErrorActor.prototype.onError
+};
+
+DebuggerServer.removeGlobalActor(ErrorActor);
+DebuggerServer.addGlobalActor(ErrorActor, "errorActor");
--- a/dom/base/CharacterData.cpp
+++ b/dom/base/CharacterData.cpp
@@ -420,19 +420,17 @@ CharacterData::ToCString(nsAString& aBuf
       char16_t ch = *cp++;
       if (ch == '&') {
         aBuf.AppendLiteral("&amp;");
       } else if (ch == '<') {
         aBuf.AppendLiteral("&lt;");
       } else if (ch == '>') {
         aBuf.AppendLiteral("&gt;");
       } else if ((ch < ' ') || (ch >= 127)) {
-        char buf[10];
-        SprintfLiteral(buf, "\\u%04x", ch);
-        AppendASCIItoUTF16(buf, aBuf);
+        aBuf.AppendPrintf("\\u%04x", ch);
       } else {
         aBuf.Append(ch);
       }
     }
   } else {
     unsigned char* cp = (unsigned char*)mText.Get1b() + aOffset;
     const unsigned char* end = cp + aLen;
 
@@ -440,19 +438,17 @@ CharacterData::ToCString(nsAString& aBuf
       char16_t ch = *cp++;
       if (ch == '&') {
         aBuf.AppendLiteral("&amp;");
       } else if (ch == '<') {
         aBuf.AppendLiteral("&lt;");
       } else if (ch == '>') {
         aBuf.AppendLiteral("&gt;");
       } else if ((ch < ' ') || (ch >= 127)) {
-        char buf[10];
-        SprintfLiteral(buf, "\\u%04x", ch);
-        AppendASCIItoUTF16(buf, aBuf);
+        aBuf.AppendPrintf("\\u%04x", ch);
       } else {
         aBuf.Append(ch);
       }
     }
   }
 }
 #endif
 
--- a/dom/base/gen-usecounters.py
+++ b/dom/base/gen-usecounters.py
@@ -57,18 +57,17 @@ def generate_list(f, counters):
     print_optional_macro_undeclare('USE_COUNTER_CUSTOM')
 
 def generate_property_map(f, counters):
     print(AUTOGENERATED_WARNING_COMMENT, file=f)
     print('''
 enum {
   #define CSS_PROP_PUBLIC_OR_PRIVATE(publicname_, privatename_) privatename_
   #define CSS_PROP_LIST_INCLUDE_LOGICAL
-  #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_,     \\
-                   kwtable_, stylestruct_, stylestructoffset_, animtype_) \\
+  #define CSS_PROP(name_, id_, method_, ...) \\
     USE_COUNTER_FOR_CSS_PROPERTY_##method_ = eUseCounter_UNKNOWN,
   #include "nsCSSPropList.h"
   #undef CSS_PROP
   #undef CSS_PROP_LIST_INCLUDE_LOGICAL
   #undef CSS_PROP_PUBLIC_OR_PRIVATE
 };
 ''', file=f)
     for counter in counters:
--- a/dom/canvas/CanvasUtils.cpp
+++ b/dom/canvas/CanvasUtils.cpp
@@ -50,21 +50,34 @@ bool IsImageExtractionAllowed(nsIDocumen
         return true;
     }
 
     // Don't proceed if we don't have a document or JavaScript context.
     if (!aDocument || !aCx) {
         return false;
     }
 
-    // Documents with system principal can always extract canvas data.
     nsPIDOMWindowOuter *win = aDocument->GetWindow();
     nsCOMPtr<nsIScriptObjectPrincipal> sop(do_QueryInterface(win));
-    if (sop && nsContentUtils::IsSystemPrincipal(sop->GetPrincipal())) {
-        return true;
+
+    if (sop) {
+        // Documents with system principal can always extract canvas data.
+        nsIPrincipal *principal = sop->GetPrincipal();
+        if (nsContentUtils::IsSystemPrincipal(principal)) {
+            return true;
+        }
+
+        if (principal) {
+            // Allow extension principals
+            nsAutoString addonId;
+            Unused << NS_WARN_IF(NS_FAILED(principal->GetAddonId(addonId)));
+            if (!addonId.IsEmpty()) {
+                return true;
+            }
+        }
     }
 
     // Always give permission to chrome scripts (e.g. Page Inspector).
     if (nsContentUtils::ThreadsafeIsCallerChrome()) {
         return true;
     }
 
     // Get the document URI and its spec.
--- a/dom/media/Benchmark.cpp
+++ b/dom/media/Benchmark.cpp
@@ -171,18 +171,23 @@ BenchmarkPlayback::DemuxSamples()
 {
   MOZ_ASSERT(OnThread());
 
   RefPtr<Benchmark> ref(mMainThreadState);
   mDemuxer->Init()->Then(
     Thread(), __func__,
     [this, ref](nsresult aResult) {
       MOZ_ASSERT(OnThread());
-      mTrackDemuxer =
-        mDemuxer->GetTrackDemuxer(TrackInfo::kVideoTrack, 0);
+      if (mDemuxer->GetNumberTracks(TrackInfo::kVideoTrack)) {
+        mTrackDemuxer =
+          mDemuxer->GetTrackDemuxer(TrackInfo::kVideoTrack, 0);
+      } else if (mDemuxer->GetNumberTracks(TrackInfo::kAudioTrack)) {
+        mTrackDemuxer =
+          mDemuxer->GetTrackDemuxer(TrackInfo::kAudioTrack, 0);
+      }
       if (!mTrackDemuxer) {
         MainThreadShutdown();
         return;
       }
       DemuxNextSample();
     },
     [this, ref](const MediaResult& aError) { MainThreadShutdown(); });
 }
--- a/dom/media/VideoUtils.cpp
+++ b/dom/media/VideoUtils.cpp
@@ -1,14 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "VideoUtils.h"
 
+#include <functional>
+#include <stdint.h>
+
 #include "ImageContainer.h"
 #include "MediaContainerType.h"
 #include "MediaPrefs.h"
 #include "MediaResource.h"
 #include "TimeUnits.h"
 #include "VorbisUtils.h"
 #include "mozilla/Base64.h"
 #include "mozilla/SharedThreadPool.h"
@@ -20,31 +23,33 @@
 #include "nsContentTypeParser.h"
 #include "nsIConsoleService.h"
 #include "nsIRandomGenerator.h"
 #include "nsIServiceManager.h"
 #include "nsMathUtils.h"
 #include "nsServiceManagerUtils.h"
 #include "nsThreadUtils.h"
 
-#include <functional>
-#include <stdint.h>
-
 namespace mozilla {
 
 NS_NAMED_LITERAL_CSTRING(kEMEKeySystemClearkey, "org.w3.clearkey");
 NS_NAMED_LITERAL_CSTRING(kEMEKeySystemWidevine, "com.widevine.alpha");
 
 using layers::PlanarYCbCrImage;
 using media::TimeUnit;
 
-CheckedInt64 SaferMultDiv(int64_t aValue, uint32_t aMul, uint32_t aDiv) {
-  int64_t major = aValue / aDiv;
-  int64_t remainder = aValue % aDiv;
-  return CheckedInt64(remainder) * aMul / aDiv + CheckedInt64(major) * aMul;
+CheckedInt64 SaferMultDiv(int64_t aValue, uint64_t aMul, uint64_t aDiv) {
+  if (aMul > INT64_MAX || aDiv > INT64_MAX) {
+    return CheckedInt64(INT64_MAX) + 1; // Return an invalid checked int.
+  }
+  int64_t mul = aMul;
+  int64_t div = aDiv;
+  int64_t major = aValue / div;
+  int64_t remainder = aValue % div;
+  return CheckedInt64(remainder) * mul / div + CheckedInt64(major) * mul;
 }
 
 // Converts from number of audio frames to microseconds, given the specified
 // audio rate.
 CheckedInt64 FramesToUsecs(int64_t aFrames, uint32_t aRate) {
   return SaferMultDiv(aFrames, USECS_PER_S, aRate);
 }
 
--- a/dom/media/VideoUtils.h
+++ b/dom/media/VideoUtils.h
@@ -121,17 +121,17 @@ media::TimeIntervals GetEstimatedBuffere
 // Converts from number of audio frames (aFrames) to microseconds, given
 // the specified audio rate (aRate).
 CheckedInt64 FramesToUsecs(int64_t aFrames, uint32_t aRate);
 // Converts from number of audio frames (aFrames) TimeUnit, given
 // the specified audio rate (aRate).
 media::TimeUnit FramesToTimeUnit(int64_t aFrames, uint32_t aRate);
 // Perform aValue * aMul / aDiv, reducing the possibility of overflow due to
 // aValue * aMul overflowing.
-CheckedInt64 SaferMultDiv(int64_t aValue, uint32_t aMul, uint32_t aDiv);
+CheckedInt64 SaferMultDiv(int64_t aValue, uint64_t aMul, uint64_t aDiv);
 
 // Converts from microseconds (aUsecs) to number of audio frames, given the
 // specified audio rate (aRate). Stores the result in aOutFrames. Returns
 // true if the operation succeeded, or false if there was an integer
 // overflow while calulating the conversion.
 CheckedInt64 UsecsToFrames(int64_t aUsecs, uint32_t aRate);
 
 // Format TimeUnit as number of frames at given rate.
--- a/dom/media/flac/FlacFrameParser.cpp
+++ b/dom/media/flac/FlacFrameParser.cpp
@@ -233,16 +233,20 @@ FlacFrameParser::IsHeaderBlock(const uin
   }
   char type = aPacket[0] & 0x7f;
   return type >= 1 && type <= 6;
 }
 
 MetadataTags*
 FlacFrameParser::GetTags() const
 {
+  if (!mParser) {
+    return nullptr;
+  }
+
   MetadataTags* tags;
 
   tags = new MetadataTags;
   for (uint32_t i = 0; i < mParser->mTags.Length(); i++) {
     OggCodecState::AddVorbisComment(tags,
                                     mParser->mTags[i].Data(),
                                     mParser->mTags[i].Length());
   }
--- a/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp
+++ b/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp
@@ -1,51 +1,64 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et cindent: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "EMEDecoderModule.h"
+
+#include <inttypes.h>
+
 #include "Adts.h"
 #include "GMPDecoderModule.h"
 #include "GMPService.h"
 #include "MediaInfo.h"
 #include "MediaPrefs.h"
 #include "PDMFactory.h"
 #include "mozIGeckoMediaPluginService.h"
 #include "mozilla/CDMProxy.h"
 #include "mozilla/EMEUtils.h"
 #include "mozilla/UniquePtr.h"
 #include "mozilla/Unused.h"
 #include "nsAutoPtr.h"
 #include "nsClassHashtable.h"
 #include "nsServiceManagerUtils.h"
 #include "DecryptThroughputLimit.h"
 #include "ChromiumCDMVideoDecoder.h"
-#include <algorithm>
 
 namespace mozilla {
 
 typedef MozPromiseRequestHolder<DecryptPromise> DecryptPromiseRequestHolder;
 extern already_AddRefed<PlatformDecoderModule> CreateBlankDecoderModule();
 
 DDLoggedTypeDeclNameAndBase(EMEDecryptor, MediaDataDecoder);
 
 class ADTSSampleConverter
 {
 public:
   explicit ADTSSampleConverter(const AudioInfo& aInfo)
     : mNumChannels(aInfo.mChannels)
-    // Note: we clamp profile to 4 so that HE-AACv2 (profile 5) can pass
-    // through the conversion to ADTS and back again.
-    , mProfile(
-        std::min<uint8_t>(static_cast<uint8_t>(0xff & aInfo.mProfile), 4))
+    // Note: we set profile to 2 if we encounter an extended profile (which set
+    // mProfile to 0 and then set mExtendedProfile) such as HE-AACv2
+    // (profile 5). These can then pass through conversion to ADTS and back.
+    // This is done as ADTS only has 2 bits for profile, and the transform
+    // subtracts one from the value. We check if the profile supplied is > 4 for
+    // safety. 2 is used as a fallback value, though it seems the CDM doesn't
+    // care what is set.
+    , mProfile(aInfo.mProfile < 1 || aInfo.mProfile > 4 ? 2 : aInfo.mProfile)
     , mFrequencyIndex(Adts::GetFrequencyIndex(aInfo.mRate))
   {
+    EME_LOG("ADTSSampleConvertor(): aInfo.mProfile=%" PRIi8
+            " aInfo.mExtendedProfile=%" PRIi8, aInfo.mProfile,
+            aInfo.mExtendedProfile);
+    if (aInfo.mProfile < 1 || aInfo.mProfile > 4) {
+      EME_LOG("ADTSSampleConvertor(): Profile not in [1, 4]! Samples will "
+              "their profile set to 2!");
+    }
   }
   bool Convert(MediaRawData* aSample) const
   {
     return Adts::ConvertSample(
       mNumChannels, mFrequencyIndex, mProfile, aSample);
   }
   bool Revert(MediaRawData* aSample) const
   {
--- a/dom/media/test/test_seamless_looping.html
+++ b/dom/media/test/test_seamless_looping.html
@@ -118,18 +118,18 @@
       }
     }
 
     function analysisCallback() {
       if (!again) {
         return;
       }
       analyser.getFloatFrequencyData(frequencyBuf);
-      // There is an unrelated click at start, skip it.
-      if (loopCount != 0) {
+      // Let things stabilize at the beginning. See bug bug 1441509.
+      if (loopCount > 1) {
         doAnalysis(frequencyBuf, ac.sampleRate);
       }
 
       if (DEBUG) {
         c.clearRect(0, 0, w, h);
         analyser.getFloatTimeDomainData(timeDomainBuf);
         for (var i = 0; i < frequencyBuf.length; i++) {
           c.fillRect(i, h, 1, -frequencyBuf[i] + analyser.minDecibels);
--- a/dom/media/webaudio/test/test_audioParamExponentialRamp.html
+++ b/dom/media/webaudio/test/test_audioParamExponentialRamp.html
@@ -41,14 +41,18 @@ var gTest = {
     for (var i = 0; i < 2048; ++i) {
       var t = i / context.sampleRate;
       expectedBuffer.getChannelData(0)[i] = V0 * Math.pow(V1 / V0, (t - T0) / (T1 - T0));
     }
     return expectedBuffer;
   },
 };
 
-runTest();
+
+SimpleTest.waitForExplicitFinish();
+// Comparing different AudioContexts may result in different timing reated information being reported
+// when we jitter time, as they are on different Relative Timelines.
+SpecialPowers.pushPrefEnv({"set": [["privacy.resistFingerprinting.reduceTimerPrecision.jitter", false]]}, runTest);
 
 </script>
 </pre>
 </body>
 </html>
--- a/dom/media/webaudio/test/test_bug1113634.html
+++ b/dom/media/webaudio/test/test_bug1113634.html
@@ -41,14 +41,18 @@ var gTest = {
     for (var i = 0; i < 2048; ++i) {
       var t = i / context.sampleRate;
       expectedBuffer.getChannelData(0)[i] = V1 + (V0 - V1) * Math.exp(-(t - T0) / TimeConstant);
     }
     return expectedBuffer;
   },
 };
 
-runTest();
+SimpleTest.waitForExplicitFinish();
+// Comparing different AudioContexts may result in different timing reated information being reported
+// when we jitter time, as they are on different Relative Timelines.
+SpecialPowers.pushPrefEnv({"set": [["privacy.resistFingerprinting.reduceTimerPrecision.jitter", false]]}, runTest);
+
 
 </script>
 </pre>
 </body>
 </html>
--- a/dom/media/webrtc/MediaEngineWebRTC.cpp
+++ b/dom/media/webrtc/MediaEngineWebRTC.cpp
@@ -39,34 +39,36 @@ bool AudioInputCubeb::mAnyInUse = false;
 StaticMutex AudioInputCubeb::sMutex;
 uint32_t AudioInputCubeb::sUserChannelCount = 0;
 
 // AudioDeviceID is an annoying opaque value that's really a string
 // pointer, and is freed when the cubeb_device_collection is destroyed
 
 void AudioInputCubeb::UpdateDeviceList()
 {
+  // We keep all the device names, but wipe the mappings and rebuild them.
+  // Do this first so that if cubeb has failed we've unmapped our devices
+  // before we early return. Otherwise we'd keep the old list.
+  for (auto& device_index : (*mDeviceIndexes)) {
+    device_index = -1; // unmapped
+  }
+
   cubeb* cubebContext = CubebUtils::GetCubebContext();
   if (!cubebContext) {
     return;
   }
 
   cubeb_device_collection devices = { nullptr, 0 };
 
   if (CUBEB_OK != cubeb_enumerate_devices(cubebContext,
                                           CUBEB_DEVICE_TYPE_INPUT,
                                           &devices)) {
     return;
   }
 
-  for (auto& device_index : (*mDeviceIndexes)) {
-    device_index = -1; // unmapped
-  }
-  // We keep all the device names, but wipe the mappings and rebuild them
-
   // Calculate translation from existing mDevices to new devices. Note we
   // never end up with less devices than before, since people have
   // stashed indexes.
   // For some reason the "fake" device for automation is marked as DISABLED,
   // so white-list it.
   mDefaultDevice = -1;
   for (uint32_t i = 0; i < devices.count; i++) {
     LOG(("Cubeb device %u: type 0x%x, state 0x%x, name %s, id %p",
--- a/dom/webauthn/libudev-sys/Cargo.toml
+++ b/dom/webauthn/libudev-sys/Cargo.toml
@@ -1,9 +1,9 @@
 [package]
 name = "libudev-sys"
 version = "0.1.3"
 authors = ["Tim Taubert <ttaubert@mozilla.com>"]
 description = "FFI bindings to libudev"
 
 [dependencies]
-lazy_static = "0.2"
+lazy_static = "1.0"
 libc = "0.2"
--- a/dom/xul/nsXULElement.cpp
+++ b/dom/xul/nsXULElement.cpp
@@ -1106,34 +1106,21 @@ nsXULElement::AfterSetAttr(int32_t aName
                       aValue->Equals(NS_LITERAL_STRING("true"), eCaseMatters));
                 } else if (aName == nsGkAtoms::chromemargin) {
                     SetChromeMargins(aValue);
                 } else if (aName == nsGkAtoms::windowtype &&
                            document && document->GetRootElement() == this) {
                     MaybeUpdatePrivateLifetime();
                 }
             }
-            // title, (in)activetitlebarcolor and drawintitlebar are settable on
+            // title and drawintitlebar are settable on
             // any root node (windows, dialogs, etc)
             if (document && document->GetRootElement() == this) {
                 if (aName == nsGkAtoms::title) {
                     document->NotifyPossibleTitleChange(false);
-                } else if ((aName == nsGkAtoms::activetitlebarcolor ||
-                            aName == nsGkAtoms::inactivetitlebarcolor)) {
-                    nscolor color = NS_RGBA(0, 0, 0, 0);
-                    if (aValue->Type() == nsAttrValue::eColor) {
-                        aValue->GetColorValue(color);
-                    } else {
-                        nsAutoString tmp;
-                        nsAttrValue attrValue;
-                        aValue->ToString(tmp);
-                        attrValue.ParseColor(tmp);
-                        attrValue.GetColorValue(color);
-                    }
-                    SetTitlebarColor(color, aName == nsGkAtoms::activetitlebarcolor);
                 } else if (aName == nsGkAtoms::drawintitlebar) {
                     SetDrawsInTitlebar(
                         aValue->Equals(NS_LITERAL_STRING("true"), eCaseMatters));
                 } else if (aName == nsGkAtoms::drawtitle) {
                     SetDrawsTitle(
                         aValue->Equals(NS_LITERAL_STRING("true"), eCaseMatters));
                 } else if (aName == nsGkAtoms::localedir) {
                     // if the localedir changed on the root element, reset the document direction
@@ -1163,21 +1150,17 @@ nsXULElement::AfterSetAttr(int32_t aName
                     HideWindowChrome(false);
                 } else if (aName == nsGkAtoms::chromemargin) {
                     ResetChromeMargins();
                 }
             }
 
             nsIDocument* doc = GetUncomposedDoc();
             if (doc && doc->GetRootElement() == this) {
-                if ((aName == nsGkAtoms::activetitlebarcolor ||
-                     aName == nsGkAtoms::inactivetitlebarcolor)) {
-                    // Use 0, 0, 0, 0 as the "none" color.
-                    SetTitlebarColor(NS_RGBA(0, 0, 0, 0), aName == nsGkAtoms::activetitlebarcolor);
-                } else if (aName == nsGkAtoms::localedir) {
+                if (aName == nsGkAtoms::localedir) {
                     // if the localedir changed on the root element, reset the document direction
                     XULDocument* xuldoc = doc->AsXULDocument();
                     if (xuldoc) {
                         xuldoc->ResetDocumentDirection();
                     }
                 } else if ((aName == nsGkAtoms::lwtheme ||
                             aName == nsGkAtoms::lwthemetextcolor)) {
                     // if the lwtheme changed, make sure to restyle appropriately
@@ -1810,25 +1793,16 @@ nsXULElement::GetWindowWidget()
             nsCOMPtr<nsIWidget> mainWidget;
             baseWindow->GetMainWidget(getter_AddRefs(mainWidget));
             return mainWidget;
         }
     }
     return nullptr;
 }
 
-void
-nsXULElement::SetTitlebarColor(nscolor aColor, bool aActive)
-{
-    nsIWidget* mainWidget = GetWindowWidget();
-    if (mainWidget) {
-        mainWidget->SetWindowTitlebarColor(aColor, aActive);
-    }
-}
-
 class SetDrawInTitleBarEvent : public Runnable
 {
 public:
   SetDrawInTitleBarEvent(nsIWidget* aWidget, bool aState)
     : mozilla::Runnable("SetDrawInTitleBarEvent")
     , mWidget(aWidget)
     , mState(aState)
   {}
--- a/dom/xul/nsXULElement.h
+++ b/dom/xul/nsXULElement.h
@@ -732,17 +732,16 @@ protected:
     void MaybeAddPopupListener(nsAtom* aLocalName);
 
     nsIWidget* GetWindowWidget();
 
     // attribute setters for widget
     nsresult HideWindowChrome(bool aShouldHide);
     void SetChromeMargins(const nsAttrValue* aValue);
     void ResetChromeMargins();
-    void SetTitlebarColor(nscolor aColor, bool aActive);
 
     void SetDrawsInTitlebar(bool aState);
     void SetDrawsTitle(bool aState);
     void UpdateBrightTitlebarForeground(nsIDocument* aDocument);
 
     void RemoveBroadcaster(const nsAString & broadcasterId);
 
 protected:
--- a/gfx/ipc/GPUParent.cpp
+++ b/gfx/ipc/GPUParent.cpp
@@ -3,16 +3,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 #ifdef XP_WIN
 #include "WMF.h"
 #endif
 #include "GPUParent.h"
 #include "gfxConfig.h"
+#include "gfxCrashReporterUtils.h"
 #include "gfxPlatform.h"
 #include "gfxPrefs.h"
 #include "GPUProcessHost.h"
 #include "mozilla/Assertions.h"
 #include "mozilla/Telemetry.h"
 #include "mozilla/TimeStamp.h"
 #include "mozilla/dom/MemoryReportRequest.h"
 #include "mozilla/dom/VideoDecoderManagerChild.h"
@@ -196,16 +197,24 @@ GPUParent::RecvInit(nsTArray<GfxPrefSett
 
   // Inherit device preferences.
   gfxConfig::Inherit(Feature::HW_COMPOSITING, devicePrefs.hwCompositing());
   gfxConfig::Inherit(Feature::D3D11_COMPOSITING, devicePrefs.d3d11Compositing());
   gfxConfig::Inherit(Feature::OPENGL_COMPOSITING, devicePrefs.oglCompositing());
   gfxConfig::Inherit(Feature::ADVANCED_LAYERS, devicePrefs.advancedLayers());
   gfxConfig::Inherit(Feature::DIRECT2D, devicePrefs.useD2D1());
 
+  { // Let the crash reporter know if we've got WR enabled or not. For other
+    // processes this happens in gfxPlatform::InitWebRenderConfig.
+    ScopedGfxFeatureReporter reporter("WR", gfxPlatform::WebRenderPrefEnabled());
+    if (gfxVars::UseWebRender()) {
+      reporter.SetSuccessful();
+    }
+  }
+
   for (const LayerTreeIdMapping& map : aMappings) {
     LayerTreeOwnerTracker::Get()->Map(map.layersId(), map.ownerId());
   }
 
 #if defined(XP_WIN)
   if (gfxConfig::IsEnabled(Feature::D3D11_COMPOSITING)) {
     DeviceManagerDx::Get()->CreateCompositorDevices();
   }
--- a/gfx/layers/wr/ScrollingLayersHelper.cpp
+++ b/gfx/layers/wr/ScrollingLayersHelper.cpp
@@ -119,17 +119,17 @@ ScrollingLayersHelper::BeginItem(nsDispl
   // generated while processing aItem. However those display items only care
   // about the topmost clip on the stack. If that were all we cared about we
   // would only need to push one thing here and we would be done. However, we
   // also care about the ScrollingLayersHelper instance that might be created
   // for nested display items, in the case where aItem is a wrapper item. The
   // nested ScrollingLayersHelper may rely on things like TopmostScrollId and
   // TopmostClipId, so now we need to push at most two things onto the stack.
 
-  wr::WrScrollId rootId = wr::WrScrollId { 0 };
+  wr::WrScrollId rootId = wr::WrScrollId::RootScrollNode();
   wr::WrScrollId leafmostId = ids.first.valueOr(rootId);
 
   FrameMetrics::ViewID viewId = aItem->GetActiveScrolledRoot()
       ? aItem->GetActiveScrolledRoot()->GetViewId()
       : FrameMetrics::NULL_SCROLL_ID;
   wr::WrScrollId scrollId =
       mBuilder->GetScrollIdForDefinedScrollLayer(viewId).valueOr(rootId);
 
@@ -296,17 +296,17 @@ ScrollingLayersHelper::RecurseAndDefineC
       // still inside aAsr, and we need to make it a child of aAsr rather
       // than aChain->mParent.
       ancestorIds.second = Nothing();
     }
   } else {
     MOZ_ASSERT(!ancestorIds.second);
     FrameMetrics::ViewID viewId = aChain->mASR ? aChain->mASR->GetViewId() : FrameMetrics::NULL_SCROLL_ID;
 
-    wr::WrScrollId rootId = wr::WrScrollId { 0 };
+    wr::WrScrollId rootId = wr::WrScrollId::RootScrollNode();
     auto scrollId = mBuilder->GetScrollIdForDefinedScrollLayer(viewId).valueOr(rootId);
     if (mBuilder->TopmostScrollId() == scrollId) {
       if (mBuilder->TopmostIsClip()) {
         // If aChain->mASR is already the topmost scroll layer on the stack, but
         // but there was another clip pushed *on top* of that ASR, then that clip
         // shares the ASR, and we need to make our clip a child of that clip, which
         // in turn will already be a descendant of the correct ASR.
         // This covers the cases where e.g. the Gecko display list has nested items,
--- a/gfx/layers/wr/StackingContextHelper.cpp
+++ b/gfx/layers/wr/StackingContextHelper.cpp
@@ -26,19 +26,21 @@ StackingContextHelper::StackingContextHe
                                              const LayoutDeviceRect& aBounds,
                                              const gfx::Matrix4x4* aBoundTransform,
                                              const wr::WrAnimationProperty* aAnimation,
                                              float* aOpacityPtr,
                                              gfx::Matrix4x4* aTransformPtr,
                                              gfx::Matrix4x4* aPerspectivePtr,
                                              const gfx::CompositionOp& aMixBlendMode,
                                              bool aBackfaceVisible,
-                                             bool aIsPreserve3D)
+                                             bool aIsPreserve3D,
+                                             const Maybe<gfx::Matrix4x4>& aTransformForScrollData)
   : mBuilder(&aBuilder)
   , mScale(1.0f, 1.0f)
+  , mTransformForScrollData(aTransformForScrollData)
 {
   // Compute scale for fallback rendering.
   gfx::Matrix transform2d;
   if (aBoundTransform && aBoundTransform->CanDraw2D(&transform2d)) {
     mInheritedTransform = transform2d * aParentSC.mInheritedTransform;
     mScale = mInheritedTransform.ScaleFactors(true);
   }
 
@@ -67,10 +69,16 @@ StackingContextHelper::~StackingContextH
 wr::LayoutRect
 StackingContextHelper::ToRelativeLayoutRect(const LayoutDeviceRect& aRect) const
 {
   auto rect = aRect;
   rect.Round();
   return wr::ToLayoutRect(rect);
 }
 
+gfx::Matrix4x4
+StackingContextHelper::GetTransformForScrollData() const
+{
+  return mTransformForScrollData.valueOr(gfx::Matrix4x4());
+}
+
 } // namespace layers
 } // namespace mozilla
--- a/gfx/layers/wr/StackingContextHelper.h
+++ b/gfx/layers/wr/StackingContextHelper.h
@@ -33,17 +33,18 @@ public:
                         const LayoutDeviceRect& aBounds = LayoutDeviceRect(),
                         const gfx::Matrix4x4* aBoundTransform = nullptr,
                         const wr::WrAnimationProperty* aAnimation = nullptr,
                         float* aOpacityPtr = nullptr,
                         gfx::Matrix4x4* aTransformPtr = nullptr,
                         gfx::Matrix4x4* aPerspectivePtr = nullptr,
                         const gfx::CompositionOp& aMixBlendMode = gfx::CompositionOp::OP_OVER,
                         bool aBackfaceVisible = true,
-                        bool aIsPreserve3D = false);
+                        bool aIsPreserve3D = false,
+                        const Maybe<gfx::Matrix4x4>& aTransformForScrollData = Nothing());
   // This version of the constructor should only be used at the root level
   // of the tree, so that we have a StackingContextHelper to pass down into
   // the RenderLayer traversal, but don't actually want it to push a stacking
   // context on the display list builder.
   StackingContextHelper();
 
   // Pops the stacking context, if one was pushed during the constructor.
   ~StackingContextHelper();
@@ -69,21 +70,24 @@ public:
   // Export the inherited scale
   gfx::Size GetInheritedScale() const { return mScale; }
 
   const gfx::Matrix& GetInheritedTransform() const
   {
     return mInheritedTransform;
   }
 
+  gfx::Matrix4x4 GetTransformForScrollData() const;
+
   bool AffectsClipPositioning() const { return mAffectsClipPositioning; }
 
 private:
   wr::DisplayListBuilder* mBuilder;
   gfx::Size mScale;
   gfx::Matrix mInheritedTransform;
   bool mAffectsClipPositioning;
+  Maybe<gfx::Matrix4x4> mTransformForScrollData;
 };
 
 } // namespace layers
 } // namespace mozilla
 
 #endif /* GFX_STACKINGCONTEXTHELPER_H */
--- a/gfx/layers/wr/WebRenderCommandBuilder.cpp
+++ b/gfx/layers/wr/WebRenderCommandBuilder.cpp
@@ -1309,16 +1309,17 @@ WebRenderCommandBuilder::CreateWebRender
         mAsrStack.pop_back();
         const ActiveScrolledRoot* stopAtAsr =
             mAsrStack.empty() ? nullptr : mAsrStack.back();
 
         int32_t descendants = mLayerScrollData.size() - layerCountBeforeRecursing;
 
         mLayerScrollData.emplace_back();
         mLayerScrollData.back().Initialize(mManager->GetScrollData(), item, descendants, stopAtAsr);
+        mLayerScrollData.back().SetTransform(aSc.GetTransformForScrollData());
       } else if (mLayerScrollData.size() != layerCountBeforeRecursing &&
                  !eventRegions.IsEmpty()) {
         // We are not forcing a new layer for |item|, but we did create some
         // layers while recursing. In this case, we need to make sure any
         // event regions that we were carrying end up on the right layer. So we
         // do an event region "flush" but retroactively; i.e. the event regions
         // end up on the layer that was mLayerScrollData.back() prior to the
         // recursion.
new file mode 100644
--- /dev/null
+++ b/gfx/tests/reftest/1444904-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <style>
+      #box {
+          position: absolute;
+          top: 80px;
+          width: 20px;
+          height: 20px;
+          background: green;
+      }
+    </style>
+  </head>
+
+  <body style="height: 10000px;">
+    <div id="box"></div>
+  </body>
+</html>
+
new file mode 100644
--- /dev/null
+++ b/gfx/tests/reftest/1444904.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <style>
+    #container {
+        float: left;
+        position: sticky;
+        top: 0;
+        margin-top: -20px;
+        z-index: 100;
+    }
+
+    #target {
+        margin-top: 80px;
+        width: 20px;
+        height: 20px;
+        background: green;
+    }
+
+    #necessary-fixed-box {
+        position: fixed;
+        top: 0;
+        width: 20px;
+        height: 20px;
+
+    }
+    </style>
+  </head>
+
+  <body style="height: 10000px;">
+    <div id="container">
+      <div id="target"></div>
+      <div id="necessary-fixed-box"></div>
+    </div>
+  </body>
+</html>
--- a/gfx/tests/reftest/reftest.list
+++ b/gfx/tests/reftest/reftest.list
@@ -6,8 +6,9 @@ skip-if(!asyncPan) == 1086723.html 10867
 == 853889-1.html 853889-1-ref.html
 skip-if(Android) fuzzy-if(skiaContent,1,587) == 1143303-1.svg pass.svg
 fuzzy(100,30) == 1149923.html 1149923-ref.html # use fuzzy due to few distorted pixels caused by border-radius
 == 1131264-1.svg pass.svg
 == 1419528.html 1419528-ref.html
 == 1424673.html 1424673-ref.html
 == 1429411.html 1429411-ref.html
 == 1435143.html 1435143-ref.html
+== 1444904.html 1444904-ref.html
--- a/gfx/webrender_bindings/WebRenderAPI.cpp
+++ b/gfx/webrender_bindings/WebRenderAPI.cpp
@@ -936,17 +936,17 @@ DisplayListBuilder::PopStickyFrame(const
   PopCacheOverride(aParent);
   wr_dp_pop_clip(mWrState);
 }
 
 Maybe<wr::WrScrollId>
 DisplayListBuilder::GetScrollIdForDefinedScrollLayer(layers::FrameMetrics::ViewID aViewId) const
 {
   if (aViewId == layers::FrameMetrics::NULL_SCROLL_ID) {
-    return Some(wr::WrScrollId { 0 });
+    return Some(wr::WrScrollId::RootScrollNode());
   }
 
   auto it = mScrollIds.find(aViewId);
   if (it == mScrollIds.end()) {
     return Nothing();
   }
 
   return Some(it->second);
@@ -1315,17 +1315,17 @@ DisplayListBuilder::TopmostClipId()
 wr::WrScrollId
 DisplayListBuilder::TopmostScrollId()
 {
   for (auto it = mClipStack.crbegin(); it != mClipStack.crend(); it++) {
     if (it->is<wr::WrScrollId>()) {
       return it->as<wr::WrScrollId>();
     }
   }
-  return wr::WrScrollId { 0 };
+  return wr::WrScrollId::RootScrollNode();
 }
 
 bool
 DisplayListBuilder::TopmostIsClip()
 {
   if (mClipStack.empty()) {
     return false;
   }
--- a/gfx/webrender_bindings/WebRenderTypes.cpp
+++ b/gfx/webrender_bindings/WebRenderTypes.cpp
@@ -17,10 +17,14 @@ Assign_WrVecU8(wr::WrVecU8& aVec, mozill
   aVec.data = aOther.mData;
   aVec.length = aOther.mLen;
   aVec.capacity = aOther.mCapacity;
   aOther.mData = nullptr;
   aOther.mLen = 0;
   aOther.mCapacity = 0;
 }
 
+WrScrollId WrScrollId::RootScrollNode() {
+  return WrScrollId { wr_root_scroll_node_id() };
+}
+
 } // namespace wr
 } // namespace mozilla
--- a/gfx/webrender_bindings/WebRenderTypes.h
+++ b/gfx/webrender_bindings/WebRenderTypes.h
@@ -778,16 +778,18 @@ struct WrScrollId {
 
   bool operator==(const WrScrollId& other) const {
     return id == other.id;
   }
 
   bool operator!=(const WrScrollId& other) const {
     return id != other.id;
   }
+
+  static WrScrollId RootScrollNode();
 };
 
 // Corresponds to a clip id for a position:sticky clip in webrender. Similar
 // to WrClipId but a separate struct so we don't get them mixed up in C++.
 struct WrStickyId {
   size_t id;
 
   bool operator==(const WrStickyId& other) const {
--- a/gfx/webrender_bindings/src/bindings.rs
+++ b/gfx/webrender_bindings/src/bindings.rs
@@ -2238,8 +2238,18 @@ pub extern "C" fn wr_init_external_log_h
                                                     .to_level()
                                                     .unwrap_or(log::Level::Error)));
     let _ = log::set_logger(unsafe { &*Box::into_raw(logger) });
 }
 
 #[no_mangle]
 pub extern "C" fn wr_shutdown_external_log_handler() {
 }
+
+#[no_mangle]
+pub extern "C" fn wr_root_scroll_node_id() -> usize {
+    // The PipelineId doesn't matter here, since we just want the numeric part of the id
+    // produced for any given root reference frame.
+    match ClipId::root_scroll_node(PipelineId(0, 0)) {
+        ClipId::Clip(id, _) => id,
+        _ => unreachable!("Got a non Clip ClipId for root reference frame."),
+    }
+}
--- a/gfx/webrender_bindings/src/moz2d_renderer.rs
+++ b/gfx/webrender_bindings/src/moz2d_renderer.rs
@@ -1,9 +1,8 @@
-#![allow(improper_ctypes)] // this is needed so that rustc doesn't complain about passing the &Arc<Vec> to an extern function
 use webrender::api::*;
 use bindings::{ByteSlice, MutByteSlice, wr_moz2d_render_cb, ArcVecU8};
 use rayon::ThreadPool;
 
 use std::collections::hash_map::{HashMap, Entry};
 use std::mem;
 use std::os::raw::c_void;
 use std::ptr;
@@ -443,18 +442,19 @@ impl BlobImageRenderer for Moz2dImageRen
         unsafe { DeleteFontData(font); }
     }
 
     fn delete_font_instance(&mut self, _key: FontInstanceKey) {
     }
 }
 
 use bindings::WrFontKey;
+
+#[allow(improper_ctypes)] // this is needed so that rustc doesn't complain about passing the &Arc<Vec> to an extern function
 extern "C" {
-    #[allow(improper_ctypes)]
     fn AddFontData(key: WrFontKey, data: *const u8, size: usize, index: u32, vec: &ArcVecU8);
     fn AddNativeFontHandle(key: WrFontKey, handle: *mut c_void, index: u32);
     fn DeleteFontData(key: WrFontKey);
 }
 
 impl Moz2dImageRenderer {
     pub fn new(workers: Arc<ThreadPool>) -> Self {
         let (tx, rx) = channel();
--- a/gfx/webrender_bindings/webrender_ffi_generated.h
+++ b/gfx/webrender_bindings/webrender_ffi_generated.h
@@ -1524,16 +1524,20 @@ WR_FUNC;
 WR_INLINE
 void wr_resource_updates_update_image(ResourceUpdates *aResources,
                                       WrImageKey aKey,
                                       const WrImageDescriptor *aDescriptor,
                                       WrVecU8 *aBytes)
 WR_FUNC;
 
 WR_INLINE
+uintptr_t wr_root_scroll_node_id()
+WR_FUNC;
+
+WR_INLINE
 void wr_set_item_tag(WrState *aState,
                      uint64_t aScrollId,
                      uint16_t aHitInfo)
 WR_FUNC;
 
 WR_INLINE
 void wr_shutdown_external_log_handler()
 WR_FUNC;
--- a/intl/locale/MozLocale.cpp
+++ b/intl/locale/MozLocale.cpp
@@ -58,17 +58,17 @@ Locale::Locale(const nsACString& aLocale
    *  --- 0 -- --- 1 -- -- 2 - -- 3 - -- 4 -- --- x --- ---- 6 ---
    */
   for (const nsACString& subTag : normLocale.Split('-')) {
     auto slen = subTag.Length();
     if (slen > 8) {
       mIsValid = false;
       return;
     } else if (position == 6) {
-      mPrivateUse.AppendElement(subTag);
+      ToLowerCase(*mPrivateUse.AppendElement(subTag));
     } else if (subTag.LowerCaseEqualsLiteral("x")) {
       position = 6;
     } else if (position == 0) {
       if (slen < 2 || slen > 3) {
         mIsValid = false;
         return;
       }
       mLanguage = subTag;
--- a/intl/locale/tests/gtest/TestMozLocale.cpp
+++ b/intl/locale/tests/gtest/TestMozLocale.cpp
@@ -58,16 +58,23 @@ TEST(Intl_Locale_Locale, MatchesRange) {
   Locale loc3 = Locale("en");
   ASSERT_FALSE(loc == loc3);
   ASSERT_TRUE(loc.Matches(loc3, false, true));
   ASSERT_FALSE(loc.Matches(loc3, true, false));
   ASSERT_FALSE(loc.Matches(loc3, false, false));
   ASSERT_TRUE(loc.Matches(loc3, true, true));
 }
 
+TEST(Intl_Locale_Locale, Variants) {
+  Locale loc = Locale("en-US-UniFon-BasicEng");
+
+  // Make sure that we canonicalize and sort variant tags
+  ASSERT_TRUE(loc.AsString().Equals("en-US-basiceng-unifon"));
+}
+
 TEST(Intl_Locale_Locale, PrivateUse) {
   Locale loc = Locale("x-test");
 
   ASSERT_TRUE(loc.IsValid());
   ASSERT_TRUE(loc.GetLanguage().Equals(""));
   ASSERT_TRUE(loc.GetScript().Equals(""));
   ASSERT_TRUE(loc.GetRegion().Equals(""));
   ASSERT_TRUE(loc.GetVariants().Length() == 0);
@@ -79,14 +86,15 @@ TEST(Intl_Locale_Locale, PrivateUse) {
   ASSERT_TRUE(loc2.IsValid());
   ASSERT_TRUE(loc2.GetLanguage().Equals("fr"));
   ASSERT_TRUE(loc2.GetScript().Equals(""));
   ASSERT_TRUE(loc2.GetRegion().Equals(""));
   ASSERT_TRUE(loc2.GetVariants().Length() == 0);
 
   ASSERT_TRUE(loc2.AsString().Equals("fr-x-test"));
 
-  // Make sure that we preserve private use tags order.
-  Locale loc3 = Locale("fr-x-foo-bar-baz");
+  // Make sure that we canonicalize private use tags
+  // and preserve their order.
+  Locale loc3 = Locale("fr-x-foo-bAr-BaZ");
 
   ASSERT_TRUE(loc3.IsValid());
   ASSERT_TRUE(loc3.AsString().Equals("fr-x-foo-bar-baz"));
 }
--- a/js/rust/Cargo.toml
+++ b/js/rust/Cargo.toml
@@ -38,12 +38,12 @@ doctest = false
 debugmozjs = ['mozjs_sys/debugmozjs']
 promises = ['mozjs_sys/promises']
 nonzero = []
 
 [dependencies.mozjs_sys]
 path = "../src"
 
 [dependencies]
-lazy_static = "0.2.1"
+lazy_static = "1.0"
 libc = "0.2"
 log = "0.3"
 num-traits = "0.1.32"
--- a/js/src/jsapi.cpp
+++ b/js/src/jsapi.cpp
@@ -7246,16 +7246,19 @@ JS_SetGlobalJitCompilerOption(JSContext*
         break;
       case JSJITCOMPILER_JUMP_THRESHOLD:
         if (value == uint32_t(-1)) {
             jit::DefaultJitOptions defaultValues;
             value = defaultValues.jumpThreshold;
         }
         jit::JitOptions.jumpThreshold = value;
         break;
+      case JSJITCOMPILER_TRACK_OPTIMIZATIONS:
+        jit::JitOptions.disableOptimizationTracking = !value;
+        break;
       case JSJITCOMPILER_SPECTRE_INDEX_MASKING:
         jit::JitOptions.spectreIndexMasking = !!value;
         break;
       case JSJITCOMPILER_SPECTRE_OBJECT_MITIGATIONS_BARRIERS:
         jit::JitOptions.spectreObjectMitigationsBarriers = !!value;
         break;
       case JSJITCOMPILER_SPECTRE_OBJECT_MITIGATIONS_MISC:
         jit::JitOptions.spectreObjectMitigationsMisc = !!value;
--- a/js/src/jsapi.h
+++ b/js/src/jsapi.h
@@ -5820,16 +5820,17 @@ JS_SetOffthreadIonCompilationEnabled(JSC
     Register(ION_FORCE_IC, "ion.forceinlineCaches")                         \
     Register(ION_ENABLE, "ion.enable")                                      \
     Register(ION_INTERRUPT_WITHOUT_SIGNAL, "ion.interrupt-without-signals") \
     Register(ION_CHECK_RANGE_ANALYSIS, "ion.check-range-analysis")          \
     Register(BASELINE_ENABLE, "baseline.enable")                            \
     Register(OFFTHREAD_COMPILATION_ENABLE, "offthread-compilation.enable")  \
     Register(FULL_DEBUG_CHECKS, "jit.full-debug-checks")                    \
     Register(JUMP_THRESHOLD, "jump-threshold")                              \
+    Register(TRACK_OPTIMIZATIONS, "jit.track-optimizations")                \
     Register(SIMULATOR_ALWAYS_INTERRUPT, "simulator.always-interrupt")      \
     Register(SPECTRE_INDEX_MASKING, "spectre.index-masking")                \
     Register(SPECTRE_OBJECT_MITIGATIONS_BARRIERS, "spectre.object-mitigations.barriers") \
     Register(SPECTRE_OBJECT_MITIGATIONS_MISC, "spectre.object-mitigations.misc") \
     Register(SPECTRE_STRING_MITIGATIONS, "spectre.string-mitigations")      \
     Register(SPECTRE_VALUE_MASKING, "spectre.value-masking")                \
     Register(SPECTRE_JIT_TO_CXX_CALLS, "spectre.jit-to-C++-calls")          \
     Register(ASMJS_ATOMICS_ENABLE, "asmjs.atomics.enable")                  \
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -7007,16 +7007,17 @@ DrawImageInternal(gfxContext&           
 
 /* static */ ImgDrawResult
 nsLayoutUtils::DrawSingleUnscaledImage(gfxContext&          aContext,
                                        nsPresContext*       aPresContext,
                                        imgIContainer*       aImage,
                                        const SamplingFilter aSamplingFilter,
                                        const nsPoint&       aDest,
                                        const nsRect*        aDirty,
+                                       const Maybe<SVGImageContext>& aSVGContext,
                                        uint32_t             aImageFlags,
                                        const nsRect*        aSourceArea)
 {
   CSSIntSize imageSize;
   aImage->GetWidth(&imageSize.width);
   aImage->GetHeight(&imageSize.height);
   if (imageSize.width < 1 || imageSize.height < 1) {
     NS_WARNING("Image width or height is non-positive");
@@ -7035,17 +7036,17 @@ nsLayoutUtils::DrawSingleUnscaledImage(g
   nsRect fill(aDest, source.Size());
   // Ensure that only a single image tile is drawn. If aSourceArea extends
   // outside the image bounds, we want to honor the aSourceArea-to-aDest
   // translation but we don't want to actually tile the image.
   fill.IntersectRect(fill, dest);
   return DrawImageInternal(aContext, aPresContext,
                            aImage, aSamplingFilter,
                            dest, fill, aDest, aDirty ? *aDirty : dest,
-                           /* no SVGImageContext */ Nothing(), aImageFlags);
+                           aSVGContext, aImageFlags);
 }
 
 /* static */ ImgDrawResult
 nsLayoutUtils::DrawSingleImage(gfxContext&            aContext,
                                nsPresContext*         aPresContext,
                                imgIContainer*         aImage,
                                const SamplingFilter   aSamplingFilter,
                                const nsRect&          aDest,
--- a/layout/base/nsLayoutUtils.h
+++ b/layout/base/nsLayoutUtils.h
@@ -1864,28 +1864,37 @@ public:
    *
    *   @param aRenderingContext Where to draw the image, set up with an
    *                            appropriate scale and transform for drawing in
    *                            app units.
    *   @param aImage            The image.
    *   @param aDest             The top-left where the image should be drawn.
    *   @param aDirty            If non-null, then pixels outside this area may
    *                            be skipped.
+   *   @param aSVGContext       Optionally provides an SVGImageContext.
+   *                            Callers should pass an SVGImageContext with at
+   *                            least the viewport size set if aImage may be of
+   *                            type imgIContainer::TYPE_VECTOR, or pass
+   *                            Nothing() if it is of type
+   *                            imgIContainer::TYPE_RASTER (to save cycles
+   *                            constructing an SVGImageContext, since this
+   *                            argument will be ignored for raster images).
    *   @param aImageFlags       Image flags of the imgIContainer::FLAG_* variety
    *   @param aSourceArea       If non-null, this area is extracted from
    *                            the image and drawn at aDest. It's
    *                            in appunits. For best results it should
    *                            be aligned with image pixels.
    */
   static ImgDrawResult DrawSingleUnscaledImage(gfxContext&          aContext,
                                             nsPresContext*       aPresContext,
                                             imgIContainer*       aImage,
                                             const SamplingFilter aSamplingFilter,
                                             const nsPoint&       aDest,
                                             const nsRect*        aDirty,
+                                            const mozilla::Maybe<SVGImageContext>& aSVGContext,
                                             uint32_t             aImageFlags,
                                             const nsRect*        aSourceArea = nullptr);
 
   /**
    * Draw a whole image without tiling.
    *
    *   @param aRenderingContext Where to draw the image, set up with an
    *                            appropriate scale and transform for drawing in
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -8518,40 +8518,50 @@ nsDisplayTransform::CreateWebRenderComma
     aManager->WrBridge()->AddWebRenderParentCommand(anim);
     aManager->AddActiveCompositorAnimationId(animationsId);
   } else if (animationsId) {
     aManager->AddCompositorAnimationsIdForDiscard(animationsId);
     animationsId = 0;
   }
 
   nsTArray<mozilla::wr::WrFilterOp> filters;
+  Maybe<Matrix4x4> transformForScrollData;
+  if (!mFrame->HasPerspective()) {
+    // If it has perspective, we create a new scroll data via the
+    // UpdateScrollData call because that scenario is more complex. Otherwise
+    // we can just stash the transform on the StackingContextHelper and
+    // apply it to any scroll data that are created inside this
+    // nsDisplayTransform.
+    transformForScrollData = Some(GetTransform().GetMatrix());
+  }
   StackingContextHelper sc(aSc,
                            aBuilder,
                            filters,
                            LayoutDeviceRect(position, LayoutDeviceSize()),
                            &newTransformMatrix,
                            animationsId ? &prop : nullptr,
                            nullptr,
                            transformForSC,
                            nullptr,
                            gfx::CompositionOp::OP_OVER,
                            !BackfaceIsHidden(),
-                           mFrame->Extend3DContext() && !mNoExtendContext);
+                           mFrame->Extend3DContext() && !mNoExtendContext,
+                           transformForScrollData);
 
   return mStoredList.CreateWebRenderCommands(aBuilder, aResources, sc,
                                              aManager, aDisplayListBuilder);
 }
 
 bool
 nsDisplayTransform::UpdateScrollData(mozilla::layers::WebRenderScrollData* aData,
                                      mozilla::layers::WebRenderLayerScrollData* aLayerData)
 {
-  if (aLayerData) {
+  if (aLayerData && mFrame->HasPerspective()) {
     aLayerData->SetTransform(GetTransform().GetMatrix());
-    aLayerData->SetTransformIsPerspective(mFrame->HasPerspective());
+    aLayerData->SetTransformIsPerspective(true);
   }
   return true;
 }
 
 already_AddRefed<Layer> nsDisplayTransform::BuildLayer(nsDisplayListBuilder *aBuilder,
                                                        LayerManager *aManager,
                                                        const ContainerLayerParameters& aContainerParameters)
 {
--- a/layout/reftests/xul/reftest.list
+++ b/layout/reftests/xul/reftest.list
@@ -70,8 +70,9 @@ fails == object-fit-fill-svg-006.xul obj
 # Tests for rendering SVG images in a XUL <treecell>:
 # XXXdholbert: These are marked as "random" right now, since they might not
 # render the images they trying to test in time for the reftest snapshot, per
 # bug 1218954.
 skip == treecell-image-svg-1a.xul treecell-image-svg-1-ref.xul # bug 1218954
 skip == treecell-image-svg-1b.xul treecell-image-svg-1-ref.xul # bug 1218954
 
 == treechildren-padding-percent-1.xul treechildren-padding-percent-1-ref.xul
+test-pref(svg.context-properties.content.enabled,true) == treetwisty-svg-context-paint-1.xul treetwisty-svg-context-paint-1-ref.xul
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/layout/reftests/xul/treetwisty-context-paint.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"
+     fill="context-fill" stroke="context-stroke" fill-opacity="context-fill-opacity" stroke-opacity="context-stroke-opacity">
+  <circle cx="8" cy="8" r="7"/>
+</svg>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/layout/reftests/xul/treetwisty-no-context-paint.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"
+     fill="green" stroke="purple" fill-opacity="0.5" stroke-opacity="0.2">
+  <circle cx="8" cy="8" r="7"/>
+</svg>
new file mode 100644
--- /dev/null
+++ b/layout/reftests/xul/treetwisty-svg-context-paint-1-ref.xul
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        xmlns:html="http://www.w3.org/1999/xhtml">
+  <html:style>
+    treechildren::-moz-tree-twisty {
+      -moz-appearance: none !important;
+      -moz-context-properties: none !important;
+      list-style-image: url(treetwisty-no-context-paint.svg);
+    }
+  </html:style>
+  <tree seltype="single" flex="1">
+    <treecols>
+      <treecol flex="1" primary="true"/>
+    </treecols>
+    <treechildren>
+      <treeitem>
+        <treerow>
+          <treecell label="I am a treecell"></treecell>
+        </treerow>
+      </treeitem>
+      <treeitem container="true" open="true">
+        <treerow>
+          <treecell label="Folder"></treecell>
+        </treerow>
+        <treechildren>
+          <treeitem>
+            <treerow>
+              <treecell label="I am a treecell"></treecell>
+            </treerow>
+          </treeitem>
+        </treechildren>
+      </treeitem>
+    </treechildren>
+  </tree>
+</window>
new file mode 100644
--- /dev/null
+++ b/layout/reftests/xul/treetwisty-svg-context-paint-1.xul
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        xmlns:html="http://www.w3.org/1999/xhtml">
+  <html:style>
+    treechildren::-moz-tree-twisty {
+      -moz-appearance: none !important;
+      -moz-context-properties: fill, fill-opacity, stroke, stroke-opacity !important;
+      fill: green;
+      fill-opacity: 0.5;
+      stroke: purple;
+      stroke-opacity: 0.2;
+      list-style-image: url(treetwisty-context-paint.svg);
+    }
+  </html:style>
+  <tree seltype="single" flex="1">
+    <treecols>
+      <treecol flex="1" primary="true"/>
+    </treecols>
+    <treechildren>
+      <treeitem>
+        <treerow>
+          <treecell label="I am a treecell"></treecell>
+        </treerow>
+      </treeitem>
+      <treeitem container="true" open="true">
+        <treerow>
+          <treecell label="Folder"></treecell>
+        </treerow>
+        <treechildren>
+          <treeitem>
+            <treerow>
+              <treecell label="I am a treecell"></treecell>
+            </treerow>
+          </treeitem>
+        </treechildren>
+      </treeitem>
+    </treechildren>
+  </tree>
+</window>
--- a/layout/style/PythonCSSProps.h
+++ b/layout/style/PythonCSSProps.h
@@ -11,23 +11,21 @@
 
 [
 
 #define PROP_STRINGIFY_INTERNAL(X) #X
 #define PROP_STRINGIFY(X) PROP_STRINGIFY_INTERNAL(X)
 
 #define DO_PROP(name, method, id, flags, pref, proptype) \
   [ #name, #method, #id, PROP_STRINGIFY(flags), pref, proptype ],
-#define CSS_PROP(name, id, method, flags, pref, parsevariant, kwtable, \
-		 stylestruct, stylestructoffset, animtype) \
+#define CSS_PROP(name, id, method, flags, pref, ...) \
   DO_PROP(name, method, id, flags, pref, "longhand")
 #define CSS_PROP_SHORTHAND(name, id, method, flags, pref) \
   DO_PROP(name, method, id, flags, pref, "shorthand")
-#define CSS_PROP_LOGICAL(name, id, method, flags, pref, parsevariant, kwtable, \
-     group, stylestruct, stylestructoffset, animtype) \
+#define CSS_PROP_LOGICAL(name, id, method, flags, pref, ...) \
   DO_PROP(name, method, id, flags, pref, "logical")
 #define CSS_PROP_PUBLIC_OR_PRIVATE(publicname_, privatename_) publicname_
 
 #include "nsCSSPropList.h"
 
 #undef CSS_PROP_PUBLIC_OR_PRIVATE
 #undef CSS_PROP_LOGICAL
 #undef CSS_PROP_SHORTHAND
--- a/layout/style/ServoPropPrefList.h
+++ b/layout/style/ServoPropPrefList.h
@@ -4,18 +4,17 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef mozilla_ServoPropPrefList_h
 #define mozilla_ServoPropPrefList_h
 
 namespace mozilla {
 
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \
-                 stylestruct_, stylestructoffset_, animtype_)                 \
+#define CSS_PROP(name_, id_, method_, flags_, pref_, ...) \
     const bool SERVO_PREF_ENABLED_##id_ = !(sizeof(pref_) == 1);
 #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_)  \
     const bool SERVO_PREF_ENABLED_##id_ = !(sizeof(pref_) == 1);
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
 #include "nsCSSPropList.h"
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP
 #undef CSS_PROP_SHORTHAND
--- a/layout/style/moz.build
+++ b/layout/style/moz.build
@@ -35,17 +35,16 @@ EXPORTS += [
     'nsCSSFontFaceRule.h',
     'nsCSSKeywordList.h',
     'nsCSSKeywords.h',
     'nsCSSParser.h',
     'nsCSSPropAliasList.h',
     'nsCSSPropertyID.h',
     'nsCSSPropertyIDSet.h',
     'nsCSSPropList.h',
-    'nsCSSPropLogicalGroupList.h',
     'nsCSSProps.h',
     'nsCSSPseudoClasses.h',
     'nsCSSPseudoClassList.h',
     'nsCSSPseudoElementList.h',
     'nsCSSPseudoElements.h',
     'nsCSSScanner.h',
     'nsCSSValue.h',
     'nsDOMCSSAttrDeclaration.h',
deleted file mode 100644
--- a/layout/style/nsCSSDataBlock.h
+++ /dev/null
@@ -1,372 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
- * compact representation of the property-value pairs within a CSS
- * declaration, and the code for expanding and compacting it
- */
-
-#ifndef nsCSSDataBlock_h__
-#define nsCSSDataBlock_h__
-
-#include "mozilla/MemoryReporting.h"
-#include "nsCSSProps.h"
-#include "nsCSSPropertyIDSet.h"
-#include "nsCSSValue.h"
-#include "nsMemory.h"
-#include "nsStyleStruct.h"
-
-struct nsRuleData;
-class nsCSSExpandedDataBlock;
-class nsIDocument;
-
-namespace mozilla {
-namespace css {
-class Declaration;
-} // namespace css
-} // namespace mozilla
-
-/**
- * An |nsCSSCompressedDataBlock| holds a usually-immutable chunk of
- * property-value data for a CSS declaration block (which we misname a
- * |css::Declaration|).  Mutation is accomplished through
- * |nsCSSExpandedDataBlock| or in some cases via direct slot access.
- */
-class nsCSSCompressedDataBlock
-{
-private:
-  friend class nsCSSExpandedDataBlock;
-
-  // Only this class (via |CreateEmptyBlock|) or nsCSSExpandedDataBlock
-  // (in |Compress|) can create compressed data blocks.
-  explicit nsCSSCompressedDataBlock(uint32_t aNumProps)
-    : mStyleBits(0), mNumProps(aNumProps)
-  {}
-
-public:
-  ~nsCSSCompressedDataBlock();
-
-  /**
-   * Do what |nsIStyleRule::MapRuleInfoInto| needs to do for a style
-   * rule using this block for storage.
-   */
-  void MapRuleInfoInto(nsRuleData *aRuleData) const;
-
-  /**
-   * Return the location at which the *value* for the property is
-   * stored, or null if the block does not contain a value for the
-   * property.
-   *
-   * Inefficient (by design).
-   *
-   * Must not be called for shorthands.
-   */
-  const nsCSSValue* ValueFor(nsCSSPropertyID aProperty) const;
-
-  /**
-   * Attempt to replace the value for |aProperty| stored in this block
-   * with the matching value stored in |aFromBlock|.
-   * This method will fail (returning false) if |aProperty| is not
-   * already in this block.  It will set |aChanged| to true if it
-   * actually made a change to the block, but regardless, if it
-   * returns true, the value in |aFromBlock| was erased.
-   */
-  bool TryReplaceValue(nsCSSPropertyID aProperty,
-                         nsCSSExpandedDataBlock& aFromBlock,
-                         bool* aChanged);
-
-  /**
-   * Clone this block, or return null on out-of-memory.
-   */
-  nsCSSCompressedDataBlock* Clone() const;
-
-  /**
-   * Create a new nsCSSCompressedDataBlock holding no declarations.
-   */
-  static nsCSSCompressedDataBlock* CreateEmptyBlock();
-
-  size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
-
-  bool HasDefaultBorderImageSlice() const;
-  bool HasDefaultBorderImageWidth() const;
-  bool HasDefaultBorderImageOutset() const;
-  bool HasDefaultBorderImageRepeat() const;
-
-  bool HasInheritedStyleData() const
-  {
-    return mStyleBits & NS_STYLE_INHERITED_STRUCT_MASK;
-  }
-
-private:
-  void* operator new(size_t aBaseSize, uint32_t aNumProps) {
-    MOZ_ASSERT(aBaseSize == sizeof(nsCSSCompressedDataBlock),
-               "unexpected size for nsCSSCompressedDataBlock");
-    return ::operator new(aBaseSize + DataSize(aNumProps));
-  }
-
-public:
-  // Ideally, |nsCSSPropertyID| would be |enum nsCSSPropertyID : int16_t|.  But
-  // not all of the compilers we use are modern enough to support small
-  // enums.  So we manually squeeze nsCSSPropertyID into 16 bits ourselves.
-  // The static assertion below ensures it fits.
-  typedef int16_t CompressedCSSProperty;
-  static const size_t MaxCompressedCSSProperty = INT16_MAX;
-
-private:
-  static size_t DataSize(uint32_t aNumProps) {
-    return size_t(aNumProps) *
-           (sizeof(nsCSSValue) + sizeof(CompressedCSSProperty));
-  }
-
-  int32_t mStyleBits; // the structs for which we have data, according to
-                      // |nsCachedStyleData::GetBitForSID|.
-  uint32_t mNumProps;
-  // nsCSSValue elements are stored after these fields, and
-  // nsCSSPropertyID elements are stored -- each one compressed as a
-  // CompressedCSSProperty -- after the nsCSSValue elements.  Space for them
-  // is allocated in |operator new| above.  The static assertions following
-  // this class make sure that the value and property elements are aligned
-  // appropriately.
-
-  nsCSSValue* Values() const {
-    return (nsCSSValue*)(this + 1);
-  }
-
-  CompressedCSSProperty* CompressedProperties() const {
-    return (CompressedCSSProperty*)(Values() + mNumProps);
-  }
-
-  nsCSSValue* ValueAtIndex(uint32_t i) const {
-    MOZ_ASSERT(i < mNumProps, "value index out of range");
-    return Values() + i;
-  }
-
-  nsCSSPropertyID PropertyAtIndex(uint32_t i) const {
-    MOZ_ASSERT(i < mNumProps, "property index out of range");
-    nsCSSPropertyID prop = (nsCSSPropertyID)CompressedProperties()[i];
-    MOZ_ASSERT(!nsCSSProps::IsShorthand(prop), "out of range");
-    return prop;
-  }
-
-  void CopyValueToIndex(uint32_t i, nsCSSValue* aValue) {
-    new (ValueAtIndex(i)) nsCSSValue(*aValue);
-  }
-
-  void RawCopyValueToIndex(uint32_t i, nsCSSValue* aValue) {
-    memcpy(ValueAtIndex(i), aValue, sizeof(nsCSSValue));
-  }
-
-  void SetPropertyAtIndex(uint32_t i, nsCSSPropertyID aProperty) {
-    MOZ_ASSERT(i < mNumProps, "set property index out of range");
-    CompressedProperties()[i] = (CompressedCSSProperty)aProperty;
-  }
-
-  void SetNumPropsToZero() {
-    mNumProps = 0;
-  }
-};
-
-// Make sure the values and properties are aligned appropriately.  (These
-// assertions are stronger than necessary to keep them simple.)
-static_assert(sizeof(nsCSSCompressedDataBlock) == 8,
-              "nsCSSCompressedDataBlock's size has changed");
-static_assert(NS_ALIGNMENT_OF(nsCSSValue) == 4 || NS_ALIGNMENT_OF(nsCSSValue) == 8,
-              "nsCSSValue doesn't align with nsCSSCompressedDataBlock");
-static_assert(NS_ALIGNMENT_OF(nsCSSCompressedDataBlock::CompressedCSSProperty) == 2,
-              "CompressedCSSProperty doesn't align with nsCSSValue");
-
-// Make sure that sizeof(CompressedCSSProperty) is big enough.
-static_assert(eCSSProperty_COUNT_no_shorthands <=
-              nsCSSCompressedDataBlock::MaxCompressedCSSProperty,
-              "nsCSSPropertyID doesn't fit in StoredSizeOfCSSProperty");
-
-class nsCSSExpandedDataBlock
-{
-  friend class nsCSSCompressedDataBlock;
-
-public:
-  nsCSSExpandedDataBlock();
-  ~nsCSSExpandedDataBlock();
-
-private:
-  /* Property storage may not be accessed directly; use AddLonghandProperty
-   * and friends.
-   */
-  nsCSSValue mValues[eCSSProperty_COUNT_no_shorthands];
-
-public:
-  /**
-   * Transfer all of the state from a pair of compressed data blocks
-   * to this expanded block.  This expanded block must be clear
-   * beforehand.
-   *
-   * This method DELETES both of the compressed data blocks it is
-   * passed.  (This is necessary because ownership of sub-objects
-   * is transferred to the expanded block.)
-   */
-  void Expand(nsCSSCompressedDataBlock *aNormalBlock,
-              nsCSSCompressedDataBlock *aImportantBlock);
-
-  /**
-   * Allocate new compressed blocks and transfer all of the state
-   * from this expanded block to the new blocks, clearing this
-   * expanded block.  A normal block will always be allocated, but
-   * an important block will only be allocated if there are
-   * !important properties in the expanded block; otherwise
-   * |*aImportantBlock| will be set to null.
-   *
-   * aOrder is an array of nsCSSPropertyID values specifying the order
-   * to store values in the two data blocks.
-   */
-  void Compress(nsCSSCompressedDataBlock **aNormalBlock,
-                nsCSSCompressedDataBlock **aImportantBlock,
-                const nsTArray<uint32_t>& aOrder);
-
-  /**
-   * Copy a value into this expanded block.  This does NOT destroy
-   * the source value object.  |aProperty| cannot be a shorthand.
-   */
-  void AddLonghandProperty(nsCSSPropertyID aProperty, const nsCSSValue& aValue);
-
-  /**
-   * Clear the state of this expanded block.
-   */
-  void Clear();
-
-  /**
-   * Clear the data for the given property (including the set and
-   * important bits).  Can be used with shorthand properties.
-   */
-  void ClearProperty(nsCSSPropertyID aPropID);
-
-  /**
-   * Same as ClearProperty, but faster and cannot be used with shorthands.
-   */
-  void ClearLonghandProperty(nsCSSPropertyID aPropID);
-
-  /**
-   * Transfer the state for |aPropID| (which may be a shorthand)
-   * from |aFromBlock| to this block.  The property being transferred
-   * is !important if |aIsImportant| is true, and should replace an
-   * existing !important property regardless of its own importance
-   * if |aOverrideImportant| is true.  |aEnabledState| is used to
-   * determine which longhand components of |aPropID| (if it is a
-   * shorthand) to transfer.
-   *
-   * Returns true if something changed, false otherwise.  Calls
-   * |ValueAppended| on |aDeclaration| if the property was not
-   * previously set, or in any case if |aMustCallValueAppended| is true.
-   * Calls |SetDocumentAndPageUseCounter| on |aSheetDocument| if it is
-   * non-null and |aPropID| has a use counter.
-   */
-  bool TransferFromBlock(nsCSSExpandedDataBlock& aFromBlock,
-                         nsCSSPropertyID aPropID,
-                         mozilla::CSSEnabledState aEnabledState,
-                         bool aIsImportant,
-                         bool aOverrideImportant,
-                         bool aMustCallValueAppended,
-                         mozilla::css::Declaration* aDeclaration,
-                         nsIDocument* aSheetDocument);
-
-  /**
-   * Copies the values for aPropID into the specified aRuleData object.
-   *
-   * This is used for copying parsed-at-computed-value-time properties
-   * that had variable references.  aPropID must be a longhand property.
-   */
-  void MapRuleInfoInto(nsCSSPropertyID aPropID, nsRuleData* aRuleData) const;
-
-  void AssertInitialState() {
-#ifdef DEBUG
-    DoAssertInitialState();
-#endif
-  }
-
-private:
-  /**
-   * Compute the number of properties that will be present in the
-   * result of |Compress|.
-   */
-  void ComputeNumProps(uint32_t* aNumPropsNormal,
-                       uint32_t* aNumPropsImportant);
-
-  void DoExpand(nsCSSCompressedDataBlock *aBlock, bool aImportant);
-
-  /**
-   * Worker for TransferFromBlock; cannot be used with shorthands.
-   */
-  bool DoTransferFromBlock(nsCSSExpandedDataBlock& aFromBlock,
-                             nsCSSPropertyID aPropID,
-                             bool aIsImportant,
-                             bool aOverrideImportant,
-                             bool aMustCallValueAppended,
-                             mozilla::css::Declaration* aDeclaration,
-                             nsIDocument* aSheetDocument);
-
-#ifdef DEBUG
-  void DoAssertInitialState();
-#endif
-
-  /*
-   * mPropertiesSet stores a bit for every property that is present,
-   * to optimize compression of blocks with small numbers of
-   * properties (the norm) and to allow quickly checking whether a
-   * property is set in this block.
-   */
-  nsCSSPropertyIDSet mPropertiesSet;
-  /*
-   * mPropertiesImportant indicates which properties are '!important'.
-   */
-  nsCSSPropertyIDSet mPropertiesImportant;
-
-  /*
-   * Return the storage location within |this| of the value of the
-   * property |aProperty|.
-   */
-  nsCSSValue* PropertyAt(nsCSSPropertyID aProperty) {
-    MOZ_ASSERT(0 <= aProperty &&
-               aProperty < eCSSProperty_COUNT_no_shorthands,
-               "property out of range");
-    return &mValues[aProperty];
-  }
-  const nsCSSValue* PropertyAt(nsCSSPropertyID aProperty) const {
-    MOZ_ASSERT(0 <= aProperty &&
-               aProperty < eCSSProperty_COUNT_no_shorthands,
-               "property out of range");
-    return &mValues[aProperty];
-  }
-
-  void SetPropertyBit(nsCSSPropertyID aProperty) {
-    mPropertiesSet.AddProperty(aProperty);
-  }
-
-  void ClearPropertyBit(nsCSSPropertyID aProperty) {
-    mPropertiesSet.RemoveProperty(aProperty);
-  }
-
-  bool HasPropertyBit(nsCSSPropertyID aProperty) {
-    return mPropertiesSet.HasProperty(aProperty);
-  }
-
-  void SetImportantBit(nsCSSPropertyID aProperty) {
-    mPropertiesImportant.AddProperty(aProperty);
-  }
-
-  void ClearImportantBit(nsCSSPropertyID aProperty) {
-    mPropertiesImportant.RemoveProperty(aProperty);
-  }
-
-  bool HasImportantBit(nsCSSPropertyID aProperty) {
-    return mPropertiesImportant.HasProperty(aProperty);
-  }
-
-  void ClearSets() {
-    mPropertiesSet.Empty();
-    mPropertiesImportant.Empty();
-  }
-};
-
-#endif /* !defined(nsCSSDataBlock_h__) */
--- a/layout/style/nsCSSPropList.h
+++ b/layout/style/nsCSSPropList.h
@@ -47,39 +47,28 @@
   or if the boolean property whose name is 'pref' is set to true.
 
   -. 'parsevariant', to be passed to ParseVariant in the parser.
 
   -. 'kwtable', which is either nullptr or the name of the appropriate
   keyword table member of class nsCSSProps, for use in
   nsCSSProps::LookupPropertyValue.
 
-  -. 'group_' [used only for CSS_PROP_LOGICAL] is the name of
-  the logical property group that contains the physical properties
-  that can be set by this logical property.  The name must be one
-  from nsCSSPropLogicalGroupList.h.  For example, this would be
-  'BorderColor' for 'border-block-start-color'.
-
   -. 'stylestruct_' [used only for CSS_PROP and CSS_PROP_LOGICAL, not
   CSS_PROP_*] gives the name of the style struct.  Can be used to make
   nsStyle##stylestruct_ and eStyleStruct_##stylestruct_
 
-  -. 'stylestructoffset_' gives the result of offsetof(nsStyle*,
-  member).  Ignored (and generally CSS_PROP_NO_OFFSET, or -1) for
-  properties whose animtype_ is eStyleAnimType_None.
-
   -. 'animtype_' gives the animation type (see nsStyleAnimType) of this
   property.
 
   CSS_PROP_SHORTHAND only takes 1-5.
 
   CSS_PROP_LOGICAL should be used instead of CSS_PROP_struct when
-  defining logical properties (which also must be defined with the
-  CSS_PROPERTY_LOGICAL flag).  Logical shorthand properties should still
-  be defined with CSS_PROP_SHORTHAND.
+  defining logical properties.  Logical shorthand properties should
+  still be defined with CSS_PROP_SHORTHAND.
 
  ******/
 
 
 /*************************************************************************/
 
 
 // All includers must explicitly define CSS_PROP_SHORTHAND if they
@@ -87,18 +76,16 @@
 #ifndef CSS_PROP_SHORTHAND
 #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_) /* nothing */
 #define DEFINED_CSS_PROP_SHORTHAND
 #endif
 
 #define CSS_PROP_DOMPROP_PREFIXED(name_) \
   CSS_PROP_PUBLIC_OR_PRIVATE(Moz ## name_, name_)
 
-#define CSS_PROP_NO_OFFSET (-1)
-
 // Callers may define CSS_PROP_LIST_EXCLUDE_INTERNAL if they want to
 // exclude internal properties that are not represented in the DOM (only
 // the DOM style code defines this).  All properties defined in an
 // #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL section must have the
 // CSS_PROPERTY_INTERNAL flag set.
 
 // When capturing all properties by defining CSS_PROP, callers must also
 // define one of the following three macros:
@@ -129,170 +116,170 @@
 // 'font' shorthand, while '-x-lang' is excluded as there is no way to set this
 // internal property from a style sheet.
 
 // A caller who wants all the properties can define the |CSS_PROP|
 // macro.
 #ifdef CSS_PROP
 
 #define USED_CSS_PROP
-#define CSS_PROP_FONT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Font, stylestructoffset_, animtype_)
-#define CSS_PROP_COLOR(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Color, stylestructoffset_, animtype_)
-#define CSS_PROP_BACKGROUND(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Background, stylestructoffset_, animtype_)
-#define CSS_PROP_LIST(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, List, stylestructoffset_, animtype_)
-#define CSS_PROP_POSITION(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Position, stylestructoffset_, animtype_)
-#define CSS_PROP_TEXT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Text, stylestructoffset_, animtype_)
-#define CSS_PROP_TEXTRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, TextReset, stylestructoffset_, animtype_)
-#define CSS_PROP_DISPLAY(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Display, stylestructoffset_, animtype_)
-#define CSS_PROP_VISIBILITY(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Visibility, stylestructoffset_, animtype_)
-#define CSS_PROP_CONTENT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Content, stylestructoffset_, animtype_)
-#define CSS_PROP_USERINTERFACE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, UserInterface, stylestructoffset_, animtype_)
-#define CSS_PROP_UIRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, UIReset, stylestructoffset_, animtype_)
-#define CSS_PROP_TABLE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Table, stylestructoffset_, animtype_)
-#define CSS_PROP_TABLEBORDER(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, TableBorder, stylestructoffset_, animtype_)
-#define CSS_PROP_MARGIN(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Margin, stylestructoffset_, animtype_)
-#define CSS_PROP_PADDING(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Padding, stylestructoffset_, animtype_)
-#define CSS_PROP_BORDER(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Border, stylestructoffset_, animtype_)
-#define CSS_PROP_OUTLINE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Outline, stylestructoffset_, animtype_)
-#define CSS_PROP_XUL(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, XUL, stylestructoffset_, animtype_)
-#define CSS_PROP_COLUMN(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Column, stylestructoffset_, animtype_)
-#define CSS_PROP_SVG(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, SVG, stylestructoffset_, animtype_)
-#define CSS_PROP_SVGRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, SVGReset, stylestructoffset_, animtype_)
-#define CSS_PROP_VARIABLES(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Variables, stylestructoffset_, animtype_)
-#define CSS_PROP_EFFECTS(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Effects, stylestructoffset_, animtype_)
+#define CSS_PROP_FONT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Font, animtype_)
+#define CSS_PROP_COLOR(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Color, animtype_)
+#define CSS_PROP_BACKGROUND(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Background, animtype_)
+#define CSS_PROP_LIST(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, List, animtype_)
+#define CSS_PROP_POSITION(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Position, animtype_)
+#define CSS_PROP_TEXT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Text, animtype_)
+#define CSS_PROP_TEXTRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, TextReset, animtype_)
+#define CSS_PROP_DISPLAY(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Display, animtype_)
+#define CSS_PROP_VISIBILITY(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Visibility, animtype_)
+#define CSS_PROP_CONTENT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Content, animtype_)
+#define CSS_PROP_USERINTERFACE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, UserInterface, animtype_)
+#define CSS_PROP_UIRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, UIReset, animtype_)
+#define CSS_PROP_TABLE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Table, animtype_)
+#define CSS_PROP_TABLEBORDER(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, TableBorder, animtype_)
+#define CSS_PROP_MARGIN(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Margin, animtype_)
+#define CSS_PROP_PADDING(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Padding, animtype_)
+#define CSS_PROP_BORDER(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Border, animtype_)
+#define CSS_PROP_OUTLINE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Outline, animtype_)
+#define CSS_PROP_XUL(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, XUL, animtype_)
+#define CSS_PROP_COLUMN(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Column, animtype_)
+#define CSS_PROP_SVG(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, SVG, animtype_)
+#define CSS_PROP_SVGRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, SVGReset, animtype_)
+#define CSS_PROP_VARIABLES(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Variables, animtype_)
+#define CSS_PROP_EFFECTS(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, Effects, animtype_)
 
 // And similarly for logical properties.  An includer can define
 // CSS_PROP_LOGICAL to capture all logical properties, but otherwise they
 // are included in CSS_PROP (as long as CSS_PROP_LIST_INCLUDE_LOGICAL is
 // defined).
 #if defined(CSS_PROP_LOGICAL) && defined(CSS_PROP_LIST_EXCLUDE_LOGICAL) || defined(CSS_PROP_LOGICAL) && defined(CSS_PROP_LIST_INCLUDE_LOGICAL) || defined(CSS_PROP_LIST_EXCLUDE_LOGICAL) && defined(CSS_PROP_LIST_INCLUDE_LOGICAL)
 #error Do not define more than one of CSS_PROP_LOGICAL, CSS_PROP_LIST_EXCLUDE_LOGICAL and CSS_PROP_LIST_INCLUDE_LOGICAL when capturing properties using CSS_PROP.
 #endif
 
 #ifndef CSS_PROP_LOGICAL
 #ifdef CSS_PROP_LIST_INCLUDE_LOGICAL
-#define CSS_PROP_LOGICAL(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, group_, struct_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, struct_, stylestructoffset_, animtype_)
+#define CSS_PROP_LOGICAL(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, struct_, animtype_) CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, struct_, animtype_)
 #else
 #ifndef CSS_PROP_LIST_EXCLUDE_LOGICAL
 #error Must define exactly one of CSS_PROP_LOGICAL, CSS_PROP_LIST_EXCLUDE_LOGICAL and CSS_PROP_LIST_INCLUDE_LOGICAL when capturing properties using CSS_PROP.
 #endif
-#define CSS_PROP_LOGICAL(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, group_, struct_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_LOGICAL(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, struct_, animtype_) /* nothing */
 #endif
 #define DEFINED_CSS_PROP_LOGICAL
 #endif
 
 #else /* !defined(CSS_PROP) */
 
 // An includer who does not define CSS_PROP can define any or all of the
 // per-struct macros that are equivalent to it, and the rest will be
 // ignored.
 
 #if defined(CSS_PROP_LIST_EXCLUDE_LOGICAL) || defined(CSS_PROP_LIST_INCLUDE_LOGICAL)
 #error Do not define CSS_PROP_LIST_EXCLUDE_LOGICAL or CSS_PROP_LIST_INCLUDE_LOGICAL when not capturing properties using CSS_PROP.
 #endif
 
 #ifndef CSS_PROP_FONT
-#define CSS_PROP_FONT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_FONT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_FONT
 #endif
 #ifndef CSS_PROP_COLOR
-#define CSS_PROP_COLOR(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_COLOR(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_COLOR
 #endif
 #ifndef CSS_PROP_BACKGROUND
-#define CSS_PROP_BACKGROUND(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_BACKGROUND(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_BACKGROUND
 #endif
 #ifndef CSS_PROP_LIST
-#define CSS_PROP_LIST(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_LIST(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_LIST
 #endif
 #ifndef CSS_PROP_POSITION
-#define CSS_PROP_POSITION(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_POSITION(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_POSITION
 #endif
 #ifndef CSS_PROP_TEXT
-#define CSS_PROP_TEXT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_TEXT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_TEXT
 #endif
 #ifndef CSS_PROP_TEXTRESET
-#define CSS_PROP_TEXTRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_TEXTRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_TEXTRESET
 #endif
 #ifndef CSS_PROP_DISPLAY
-#define CSS_PROP_DISPLAY(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_DISPLAY(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_DISPLAY
 #endif
 #ifndef CSS_PROP_VISIBILITY
-#define CSS_PROP_VISIBILITY(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_VISIBILITY(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_VISIBILITY
 #endif
 #ifndef CSS_PROP_CONTENT
-#define CSS_PROP_CONTENT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_CONTENT(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_CONTENT
 #endif
 #ifndef CSS_PROP_USERINTERFACE
-#define CSS_PROP_USERINTERFACE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_USERINTERFACE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_USERINTERFACE
 #endif
 #ifndef CSS_PROP_UIRESET
-#define CSS_PROP_UIRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_UIRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_UIRESET
 #endif
 #ifndef CSS_PROP_TABLE
-#define CSS_PROP_TABLE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_TABLE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_TABLE
 #endif
 #ifndef CSS_PROP_TABLEBORDER
-#define CSS_PROP_TABLEBORDER(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_TABLEBORDER(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_TABLEBORDER
 #endif
 #ifndef CSS_PROP_MARGIN
-#define CSS_PROP_MARGIN(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_MARGIN(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_MARGIN
 #endif
 #ifndef CSS_PROP_PADDING
-#define CSS_PROP_PADDING(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_PADDING(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_PADDING
 #endif
 #ifndef CSS_PROP_BORDER
-#define CSS_PROP_BORDER(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_BORDER(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_BORDER
 #endif
 #ifndef CSS_PROP_OUTLINE
-#define CSS_PROP_OUTLINE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_OUTLINE(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_OUTLINE
 #endif
 #ifndef CSS_PROP_XUL
-#define CSS_PROP_XUL(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_XUL(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_XUL
 #endif
 #ifndef CSS_PROP_COLUMN
-#define CSS_PROP_COLUMN(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_COLUMN(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_COLUMN
 #endif
 #ifndef CSS_PROP_SVG
-#define CSS_PROP_SVG(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_SVG(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_SVG
 #endif
 #ifndef CSS_PROP_SVGRESET
-#define CSS_PROP_SVGRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_SVGRESET(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_SVGRESET
 #endif
 #ifndef CSS_PROP_VARIABLES
-#define CSS_PROP_VARIABLES(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_VARIABLES(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_VARIABLES
 #endif
 #ifndef CSS_PROP_EFFECTS
-#define CSS_PROP_EFFECTS(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_EFFECTS(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_EFFECTS
 #endif
 
 #ifndef CSS_PROP_LOGICAL
-#define CSS_PROP_LOGICAL(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, group_, struct_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_LOGICAL(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, struct_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_LOGICAL
 #endif
 
 #endif /* !defined(CSS_PROP) */
 
 /*************************************************************************/
 
 // For notes XXX bug 3935 below, the names being parsed do not correspond
@@ -329,37 +316,34 @@
 CSS_PROP_POSITION(
     align-content,
     align_content,
     AlignContent,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_HK,
     kAutoCompletionAlignJustifyContent,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     align-items,
     align_items,
     AlignItems,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_HK,
     kAutoCompletionAlignItems,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     align-self,
     align_self,
     AlignSelf,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_HK,
     kAutoCompletionAlignJustifySelf,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     all,
     all,
     All,
     CSS_PROPERTY_PARSE_FUNCTION,
     "layout.css.all-shorthand.enabled")
 CSS_PROP_SHORTHAND(
@@ -367,302 +351,228 @@ CSS_PROP_SHORTHAND(
     animation,
     Animation,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_DISPLAY(
     animation-delay,
     animation_delay,
     AnimationDelay,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_TIME, // used by list parsing
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     animation-direction,
     animation_direction,
     AnimationDirection,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kAnimationDirectionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     animation-duration,
     animation_duration,
     AnimationDuration,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_TIME | VARIANT_NONNEGATIVE_DIMENSION, // used by list parsing
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     animation-fill-mode,
     animation_fill_mode,
     AnimationFillMode,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kAnimationFillModeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     animation-iteration-count,
     animation_iteration_count,
     AnimationIterationCount,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        // nonnegative per
-        // http://lists.w3.org/Archives/Public/www-style/2011Mar/0355.html
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD | VARIANT_NUMBER, // used by list parsing
     kAnimationIterationCountKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     animation-name,
     animation_name,
     AnimationName,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     // FIXME: The spec should say something about 'inherit' and 'initial'
     // not being allowed.
     VARIANT_NONE | VARIANT_IDENTIFIER_NO_INHERIT | VARIANT_STRING, // used by list parsing
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     animation-play-state,
     animation_play_state,
     AnimationPlayState,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kAnimationPlayStateKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     animation-timing-function,
     animation_timing_function,
     AnimationTimingFunction,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD | VARIANT_TIMING_FUNCTION, // used by list parsing
     kTransitionTimingFunctionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     -moz-appearance,
     _moz_appearance,
     CSS_PROP_DOMPROP_PREFIXED(Appearance),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kAppearanceKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     backface-visibility,
     backface_visibility,
     BackfaceVisibility,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kBackfaceVisibilityKTable,
-    offsetof(nsStyleDisplay, mBackfaceVisibility),
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     background,
     background,
     Background,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_BACKGROUND(
     background-attachment,
     background_attachment,
     BackgroundAttachment,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kImageLayerAttachmentKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BACKGROUND(
     background-blend-mode,
     background_blend_mode,
     BackgroundBlendMode,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "layout.css.background-blend-mode.enabled",
     VARIANT_KEYWORD, // used by list parsing
     kBlendModeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BACKGROUND(
     background-clip,
     background_clip,
     BackgroundClip,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kBackgroundClipKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BACKGROUND(
     background-color,
     background_color,
     BackgroundColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED |
-        CSS_PROPERTY_HASHLESS_COLOR_QUIRK,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleBackground, mBackgroundColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_BACKGROUND(
     background-image,
     background_image,
     BackgroundImage,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED |
-        CSS_PROPERTY_START_IMAGE_LOADS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_IMAGE, // used by list parsing
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BACKGROUND(
     background-origin,
     background_origin,
     BackgroundOrigin,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kBackgroundOriginKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     background-position,
     background_position,
     BackgroundPosition,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_BACKGROUND(
     background-position-x,
     background_position_x,
     BackgroundPositionX,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_STORES_CALC,
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     0,
     kImageLayerPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_BACKGROUND(
     background-position-y,
     background_position_y,
     BackgroundPositionY,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_STORES_CALC,
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     0,
     kImageLayerPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_BACKGROUND(
     background-repeat,
     background_repeat,
     BackgroundRepeat,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kImageLayerRepeatKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BACKGROUND(
     background-size,
     background_size,
     BackgroundSize,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     0,
     kImageLayerSizeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_DISPLAY(
     -moz-binding,
     _moz_binding,
     CSS_PROP_DOMPROP_PREFIXED(Binding),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HUO,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 CSS_PROP_LOGICAL(
     block-size,
     block_size,
     BlockSize,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_AXIS |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    Size,
     Position,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     border,
     border,
     Border,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_SHORTHAND(
@@ -670,410 +580,299 @@ CSS_PROP_SHORTHAND(
     border_block_end,
     BorderBlockEnd,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_LOGICAL(
     border-block-end-color,
     border_block_end_color,
     BorderBlockEndColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    BorderColor,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     border-block-end-style,
     border_block_end_style,
     BorderBlockEndStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    0,
     "",
     VARIANT_HK,
     kBorderStyleKTable,
-    BorderStyle,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     border-block-end-width,
     border_block_end_width,
     BorderBlockEndWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    BorderWidth,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     border-block-start,
     border_block_start,
     BorderBlockStart,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_LOGICAL(
     border-block-start-color,
     border_block_start_color,
     BorderBlockStartColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    BorderColor,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     border-block-start-style,
     border_block_start_style,
     BorderBlockStartStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS,
+    0,
     "",
     VARIANT_HK,
     kBorderStyleKTable,
-    BorderStyle,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     border-block-start-width,
     border_block_start_width,
     BorderBlockStartWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    BorderWidth,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     border-bottom,
     border_bottom,
     BorderBottom,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_BORDER(
     border-bottom-color,
     border_bottom_color,
     BorderBottomColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED |
-        CSS_PROPERTY_HASHLESS_COLOR_QUIRK,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleBorder, mBorderBottomColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_BORDER(
     border-bottom-left-radius,
     border_bottom_left_radius,
     BorderBottomLeftRadius,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    offsetof(nsStyleBorder, mBorderRadius),
     eStyleAnimType_Corner_BottomLeft)
 CSS_PROP_BORDER(
     border-bottom-right-radius,
     border_bottom_right_radius,
     BorderBottomRightRadius,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    offsetof(nsStyleBorder, mBorderRadius),
     eStyleAnimType_Corner_BottomRight)
 CSS_PROP_BORDER(
     border-bottom-style,
     border_bottom_style,
     BorderBottomStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    0,
     "",
     VARIANT_HK,
     kBorderStyleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)  // on/off will need reflow
 CSS_PROP_BORDER(
     border-bottom-width,
     border_bottom_width,
     BorderBottomWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_TABLEBORDER(
     border-collapse,
     border_collapse,
     BorderCollapse,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kBorderCollapseKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     border-color,
     border_color,
     BorderColor,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_HASHLESS_COLOR_QUIRK,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_SHORTHAND(
     border-image,
     border_image,
     BorderImage,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_BORDER(
     border-image-outset,
     border_image_outset,
     BorderImageOutset,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BORDER(
     border-image-repeat,
     border_image_repeat,
     BorderImageRepeat,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     kBorderImageRepeatKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BORDER(
     border-image-slice,
     border_image_slice,
     BorderImageSlice,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     kBorderImageSliceKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BORDER(
     border-image-source,
     border_image_source,
     BorderImageSource,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_START_IMAGE_LOADS,
+    0,
     "",
     VARIANT_IMAGE | VARIANT_INHERIT,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BORDER(
     border-image-width,
     border_image_width,
     BorderImageWidth,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     border-inline-end,
     border_inline_end,
     BorderInlineEnd,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_LOGICAL(
     border-inline-end-color,
     border_inline_end_color,
     BorderInlineEndColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    BorderColor,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     border-inline-end-style,
     border_inline_end_style,
     BorderInlineEndStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    0,
     "",
     VARIANT_HK,
     kBorderStyleKTable,
-    BorderStyle,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     border-inline-end-width,
     border_inline_end_width,
     BorderInlineEndWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    BorderWidth,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     border-inline-start,
     border_inline_start,
     BorderInlineStart,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_LOGICAL(
     border-inline-start-color,
     border_inline_start_color,
     BorderInlineStartColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_LOGICAL,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    BorderColor,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     border-inline-start-style,
     border_inline_start_style,
     BorderInlineStartStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_LOGICAL,
+    0,
     "",
     VARIANT_HK,
     kBorderStyleKTable,
-    BorderStyle,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     border-inline-start-width,
     border_inline_start_width,
     BorderInlineStartWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_LOGICAL,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    BorderWidth,
     Border,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     border-left,
     border_left,
     BorderLeft,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_BORDER(
     border-left-color,
     border_left_color,
     BorderLeftColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_HASHLESS_COLOR_QUIRK |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleBorder, mBorderLeftColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_BORDER(
     border-left-style,
     border_left_style,
     BorderLeftStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    0,
     "",
     VARIANT_HK,
     kBorderStyleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BORDER(
     border-left-width,
     border_left_width,
     BorderLeftWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SHORTHAND(
     border-radius,
     border_radius,
     BorderRadius,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_SHORTHAND(
@@ -1081,61 +880,47 @@ CSS_PROP_SHORTHAND(
     border_right,
     BorderRight,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_BORDER(
     border-right-color,
     border_right_color,
     BorderRightColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_HASHLESS_COLOR_QUIRK |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleBorder, mBorderRightColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_BORDER(
     border-right-style,
     border_right_style,
     BorderRightStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    0,
     "",
     VARIANT_HK,
     kBorderStyleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BORDER(
     border-right-width,
     border_right_width,
     BorderRightWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_TABLEBORDER(
     border-spacing,
     border_spacing,
     BorderSpacing,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SHORTHAND(
     border-style,
     border_style,
     BorderStyle,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")  // on/off will need reflow
 CSS_PROP_SHORTHAND(
@@ -1143,955 +928,773 @@ CSS_PROP_SHORTHAND(
     border_top,
     BorderTop,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_BORDER(
     border-top-color,
     border_top_color,
     BorderTopColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED |
-        CSS_PROPERTY_HASHLESS_COLOR_QUIRK,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleBorder, mBorderTopColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_BORDER(
     border-top-left-radius,
     border_top_left_radius,
     BorderTopLeftRadius,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    offsetof(nsStyleBorder, mBorderRadius),
     eStyleAnimType_Corner_TopLeft)
 CSS_PROP_BORDER(
     border-top-right-radius,
     border_top_right_radius,
     BorderTopRightRadius,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    offsetof(nsStyleBorder, mBorderRadius),
     eStyleAnimType_Corner_TopRight)
 CSS_PROP_BORDER(
     border-top-style,
     border_top_style,
     BorderTopStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    0,
     "",
     VARIANT_HK,
     kBorderStyleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)  // on/off will need reflow
 CSS_PROP_BORDER(
     border-top-width,
     border_top_width,
     BorderTopWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SHORTHAND(
     border-width,
     border_width,
     BorderWidth,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_POSITION(
     bottom,
     bottom,
     Bottom,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStylePosition, mOffset),
     eStyleAnimType_Sides_Bottom)
 CSS_PROP_XUL(
     -moz-box-align,
     _moz_box_align,
     CSS_PROP_DOMPROP_PREFIXED(BoxAlign),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kBoxAlignKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX bug 3935
 CSS_PROP_BORDER(
     box-decoration-break,
     box_decoration_break,
     BoxDecorationBreak,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "layout.css.box-decoration-break.enabled",
     VARIANT_HK,
     kBoxDecorationBreakKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_XUL(
     -moz-box-direction,
     _moz_box_direction,
     CSS_PROP_DOMPROP_PREFIXED(BoxDirection),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kBoxDirectionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX bug 3935
 CSS_PROP_XUL(
     -moz-box-flex,
     _moz_box_flex,
     CSS_PROP_DOMPROP_PREFIXED(BoxFlex),
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     VARIANT_HN,
     nullptr,
-    offsetof(nsStyleXUL, mBoxFlex),
     eStyleAnimType_float) // XXX bug 3935
 CSS_PROP_XUL(
     -moz-box-ordinal-group,
     _moz_box_ordinal_group,
     CSS_PROP_DOMPROP_PREFIXED(BoxOrdinalGroup),
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     VARIANT_HI,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_XUL(
     -moz-box-orient,
     _moz_box_orient,
     CSS_PROP_DOMPROP_PREFIXED(BoxOrient),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kBoxOrientKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX bug 3935
 CSS_PROP_XUL(
     -moz-box-pack,
     _moz_box_pack,
     CSS_PROP_DOMPROP_PREFIXED(BoxPack),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kBoxPackKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX bug 3935
 CSS_PROP_EFFECTS(
     box-shadow,
     box_shadow,
     BoxShadow,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
         // NOTE: some components must be nonnegative
     "",
     VARIANT_COLOR | VARIANT_LENGTH | VARIANT_CALC | VARIANT_INHERIT | VARIANT_NONE,
     kBoxShadowTypeKTable,
-    offsetof(nsStyleEffects, mBoxShadow),
     eStyleAnimType_Shadow)
 CSS_PROP_POSITION(
     box-sizing,
     box_sizing,
     BoxSizing,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kBoxSizingKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TABLEBORDER(
     caption-side,
     caption_side,
     CaptionSide,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kCaptionSideKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_USERINTERFACE(
     caret-color,
     caret_color,
     CaretColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+    0,
     "",
     VARIANT_AUTO | VARIANT_HC,
     nullptr,
-    offsetof(nsStyleUserInterface, mCaretColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_DISPLAY(
     clear,
     clear,
     Clear,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kClearKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_EFFECTS(
     clip,
     clip,
     Clip,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_AH,
     nullptr,
-    offsetof(nsStyleEffects, mClip),
     eStyleAnimType_Custom)
 CSS_PROP_SVGRESET(
     clip-path,
     clip_path,
     ClipPath,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     VARIANT_HUO,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SVG(
     clip-rule,
     clip_rule,
     ClipRule,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kFillRuleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_COLOR(
     color,
     color,
     Color,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED |
-        CSS_PROPERTY_HASHLESS_COLOR_QUIRK,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleColor, mColor),
     eStyleAnimType_Color)
 CSS_PROP_VISIBILITY(
     color-adjust,
     color_adjust,
     ColorAdjust,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "layout.css.color-adjust.enabled",
     VARIANT_HK,
     kColorAdjustKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVG(
     color-interpolation,
     color_interpolation,
     ColorInterpolation,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kColorInterpolationKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVG(
     color-interpolation-filters,
     color_interpolation_filters,
     ColorInterpolationFilters,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kColorInterpolationKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_COLUMN(
     column-count,
     column_count,
     ColumnCount,
-    CSS_PROPERTY_PARSE_VALUE |
-        // Need to reject 0 in addition to negatives.  If we accept 0, we
-        // need to change NS_STYLE_COLUMN_COUNT_AUTO to something else.
-        CSS_PROPERTY_VALUE_AT_LEAST_ONE,
+    0,
     "",
     VARIANT_AHI,
     nullptr,
-    offsetof(nsStyleColumn, mColumnCount),
     eStyleAnimType_Custom)
 CSS_PROP_COLUMN(
     column-fill,
     column_fill,
     ColumnFill,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kColumnFillKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_COLUMN(
     column-gap,
     column_gap,
     ColumnGap,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     VARIANT_HL | VARIANT_NORMAL | VARIANT_CALC,
     nullptr,
-    offsetof(nsStyleColumn, mColumnGap),
     eStyleAnimType_Coord)
 CSS_PROP_SHORTHAND(
     column-rule,
     column_rule,
     ColumnRule,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_COLUMN(
     column-rule-color,
     column_rule_color,
     ColumnRuleColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleColumn, mColumnRuleColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_COLUMN(
     column-rule-style,
     column_rule_style,
     ColumnRuleStyle,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kBorderStyleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_COLUMN(
     column-rule-width,
     column_rule_width,
     ColumnRuleWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_COLUMN(
     column-span,
     column_span,
     ColumnSpan,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "layout.css.column-span.enabled",
     VARIANT_HK,
     kColumnSpanKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_COLUMN(
     column-width,
     column_width,
     ColumnWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     VARIANT_AHL | VARIANT_CALC,
     nullptr,
-    offsetof(nsStyleColumn, mColumnWidth),
     eStyleAnimType_Coord)
 CSS_PROP_SHORTHAND(
     columns,
     columns,
     Columns,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_DISPLAY(
     contain,
     contain,
     Contain,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_FIXPOS_CB,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "layout.css.contain.enabled",
     // Does not affect parsing, but is needed for tab completion in devtools:
     VARIANT_HK | VARIANT_NONE,
     kContainKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_CONTENT(
     content,
     content,
     Content,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_START_IMAGE_LOADS,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_HMK | VARIANT_NONE | VARIANT_URL | VARIANT_COUNTER | VARIANT_ATTR,
     kContentKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_SVG(
     // Only intended to be used internally by Mozilla, so prefixed.
     -moz-context-properties,
     _moz_context_properties,
     CSS_PROP_DOMPROP_PREFIXED(ContextProperties),
     CSS_PROPERTY_PARSE_FUNCTION |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
         CSS_PROPERTY_INTERNAL,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_TEXT(
     -moz-control-character-visibility,
     _moz_control_character_visibility,
     CSS_PROP_DOMPROP_PREFIXED(ControlCharacterVisibility),
-    CSS_PROPERTY_INTERNAL |
-        CSS_PROPERTY_PARSE_VALUE,
+    CSS_PROPERTY_INTERNAL,
     "",
     VARIANT_HK,
     kControlCharacterVisibilityKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_CONTENT(
     counter-increment,
     counter_increment,
     CounterIncrement,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_INHERIT | VARIANT_NONE,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX bug 137285
 CSS_PROP_CONTENT(
     counter-reset,
     counter_reset,
     CounterReset,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_INHERIT | VARIANT_NONE,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX bug 137285
 CSS_PROP_USERINTERFACE(
     cursor,
     cursor,
     Cursor,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_START_IMAGE_LOADS |
-        CSS_PROPERTY_IMAGE_IS_IN_ARRAY_0,
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     0,
     kCursorKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 #ifndef CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 CSS_PROP_VISIBILITY(
     direction,
     direction,
     Direction,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kDirectionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 #endif // !defined(CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND)
 CSS_PROP_DISPLAY(
     display,
     display,
     Display,
-    CSS_PROPERTY_PARSE_VALUE |
-        // This is allowed because we need to make the placeholder
-        // pseudo-element an inline-block in the UA stylesheet. It is a block
-        // by default.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK,
     kDisplayKTable,
-    offsetof(nsStyleDisplay, mDisplay),
     eStyleAnimType_None)
 CSS_PROP_SVGRESET(
     dominant-baseline,
     dominant_baseline,
     DominantBaseline,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kDominantBaselineKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TABLEBORDER(
     empty-cells,
     empty_cells,
     EmptyCells,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kEmptyCellsKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVG(
     fill,
     fill,
     Fill,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     kContextPatternKTable,
-    offsetof(nsStyleSVG, mFill),
     eStyleAnimType_PaintServer)
 CSS_PROP_SVG(
     fill-opacity,
     fill_opacity,
     FillOpacity,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HN | VARIANT_KEYWORD,
     kContextOpacityKTable,
-    offsetof(nsStyleSVG, mFillOpacity),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     fill-rule,
     fill_rule,
     FillRule,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kFillRuleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_EFFECTS(
     filter,
     filter,
     Filter,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT |
-        CSS_PROPERTY_FIXPOS_CB,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SHORTHAND(
     flex,
     flex,
     Flex,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_POSITION(
     flex-basis,
     flex_basis,
     FlexBasis,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+    0,
     "",
     // NOTE: The parsing implementation for the 'flex' shorthand property has
     // its own code to parse each subproperty. It does not depend on the
     // longhand parsing defined here.
     VARIANT_AHKLP | VARIANT_CALC,
     kWidthKTable,
-    offsetof(nsStylePosition, mFlexBasis),
     eStyleAnimType_Coord)
 CSS_PROP_POSITION(
     flex-direction,
     flex_direction,
     FlexDirection,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kFlexDirectionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     flex-flow,
     flex_flow,
     FlexFlow,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_POSITION(
     flex-grow,
     flex_grow,
     FlexGrow,
-    CSS_PROPERTY_PARSE_VALUE |
-      CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     // NOTE: The parsing implementation for the 'flex' shorthand property has
     // its own code to parse each subproperty. It does not depend on the
     // longhand parsing defined here.
     VARIANT_HN,
     nullptr,
-    offsetof(nsStylePosition, mFlexGrow),
     eStyleAnimType_float)
 CSS_PROP_POSITION(
     flex-shrink,
     flex_shrink,
     FlexShrink,
-    CSS_PROPERTY_PARSE_VALUE |
-      CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     // NOTE: The parsing implementation for the 'flex' shorthand property has
     // its own code to parse each subproperty. It does not depend on the
     // longhand parsing defined here.
     VARIANT_HN,
     nullptr,
-    offsetof(nsStylePosition, mFlexShrink),
     eStyleAnimType_float)
 CSS_PROP_POSITION(
     flex-wrap,
     flex_wrap,
     FlexWrap,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kFlexWrapKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     float,
     float_,
     CSS_PROP_PUBLIC_OR_PRIVATE(CssFloat, Float),
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    0,
     "",
     VARIANT_HK,
     kFloatKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_BORDER(
     -moz-float-edge,
     _moz_float_edge,
     CSS_PROP_DOMPROP_PREFIXED(FloatEdge),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kFloatEdgeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX bug 3935
 CSS_PROP_SVGRESET(
     flood-color,
     flood_color,
     FloodColor,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleSVGReset, mFloodColor),
     eStyleAnimType_Color)
 CSS_PROP_SVGRESET(
     flood-opacity,
     flood_opacity,
     FloodOpacity,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HN,
     nullptr,
-    offsetof(nsStyleSVGReset, mFloodOpacity),
     eStyleAnimType_float)
 CSS_PROP_SHORTHAND(
     font,
     font,
     Font,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_FONT(
     font-family,
     font_family,
     FontFamily,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-feature-settings,
     font_feature_settings,
     FontFeatureSettings,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-kerning,
     font_kerning,
     FontKerning,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK,
     kFontKerningKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-language-override,
     font_language_override,
     FontLanguageOverride,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_NORMAL | VARIANT_INHERIT | VARIANT_STRING,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-optical-sizing,
     font_optical_sizing,
     FontOpticalSizing,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "layout.css.font-variations.enabled",
     VARIANT_HK,
     kFontOpticalSizingKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_FONT(
     font-size,
     font_size,
     FontSize,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    0,
     "",
     VARIANT_HKLP | VARIANT_SYSFONT | VARIANT_CALC,
     kFontSizeKTable,
     // Note that mSize is the correct place for *reading* the computed value,
     // but setting it requires setting mFont.size as well.
-    offsetof(nsStyleFont, mSize),
     eStyleAnimType_nscoord)
 CSS_PROP_FONT(
     font-size-adjust,
     font_size_adjust,
     FontSizeAdjust,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HON | VARIANT_SYSFONT,
     nullptr,
-    offsetof(nsStyleFont, mFont.sizeAdjust),
     eStyleAnimType_float)
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_FONT(
     -moz-font-smoothing-background-color,
     _moz_font_smoothing_background_color,
     CSS_PROP_DOMPROP_PREFIXED(FontSmoothingBackgroundColor),
     CSS_PROPERTY_INTERNAL |
-        CSS_PROPERTY_PARSE_VALUE |
         CSS_PROPERTY_ENABLED_IN_UA_SHEETS_AND_CHROME,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleFont, mFont.fontSmoothingBackgroundColor),
     eStyleAnimType_Color)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_FONT(
     font-stretch,
     font_stretch,
     FontStretch,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK | VARIANT_SYSFONT,
     kFontStretchKTable,
-    offsetof(nsStyleFont, mFont.stretch),
     eStyleAnimType_Custom)
 CSS_PROP_FONT(
     font-style,
     font_style,
     FontStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK | VARIANT_SYSFONT,
     kFontStyleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-synthesis,
     font_synthesis,
     FontSynthesis,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     kFontSynthesisKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     font-variant,
     font_variant,
     FontVariant,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_FONT(
     font-variant-alternates,
     font_variant_alternates,
     FontVariantAlternates,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     kFontVariantAlternatesKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-variant-caps,
     font_variant_caps,
     FontVariantCaps,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HMK,
     kFontVariantCapsKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-variant-east-asian,
     font_variant_east_asian,
     FontVariantEastAsian,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     kFontVariantEastAsianKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-variant-ligatures,
     font_variant_ligatures,
     FontVariantLigatures,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     kFontVariantLigaturesKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-variant-numeric,
     font_variant_numeric,
     FontVariantNumeric,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     kFontVariantNumericKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-variant-position,
     font_variant_position,
     FontVariantPosition,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HMK,
     kFontVariantPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     font-variation-settings,
     font_variation_settings,
     FontVariationSettings,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION |
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "layout.css.font-variations.enabled",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_FONT(
     font-weight,
     font_weight,
     FontWeight,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
         // NOTE: This property has range restrictions on interpolation!
     "",
     0,
     kFontWeightKTable,
-    offsetof(nsStyleFont, mFont.weight),
     eStyleAnimType_Custom)
 CSS_PROP_UIRESET(
     -moz-force-broken-image-icon,
     _moz_force_broken_image_icon,
     CSS_PROP_DOMPROP_PREFIXED(ForceBrokenImageIcon),
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     VARIANT_HI,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // bug 58646
 CSS_PROP_SHORTHAND(
     grid,
     grid,
     Grid,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_SHORTHAND(
@@ -2099,80 +1702,71 @@ CSS_PROP_SHORTHAND(
     grid_area,
     GridArea,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_POSITION(
     grid-auto-columns,
     grid_auto_columns,
     GridAutoColumns,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     kGridTrackBreadthKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     grid-auto-flow,
     grid_auto_flow,
     GridAutoFlow,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     kGridAutoFlowKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     grid-auto-rows,
     grid_auto_rows,
     GridAutoRows,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     kGridTrackBreadthKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     grid-column,
     grid_column,
     GridColumn,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_POSITION(
     grid-column-end,
     grid_column_end,
     GridColumnEnd,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     grid-column-gap,
     grid_column_gap,
     GridColumnGap,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStylePosition, mGridColumnGap),
     eStyleAnimType_Coord)
 CSS_PROP_POSITION(
     grid-column-start,
     grid_column_start,
     GridColumnStart,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     grid-gap,
     grid_gap,
     GridGap,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_SHORTHAND(
@@ -2184,1306 +1778,969 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_POSITION(
     grid-row-end,
     grid_row_end,
     GridRowEnd,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     grid-row-gap,
     grid_row_gap,
     GridRowGap,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStylePosition, mGridRowGap),
     eStyleAnimType_Coord)
 CSS_PROP_POSITION(
     grid-row-start,
     grid_row_start,
     GridRowStart,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     grid-template,
     grid_template,
     GridTemplate,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_POSITION(
     grid-template-areas,
     grid_template_areas,
     GridTemplateAreas,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     grid-template-columns,
     grid_template_columns,
     GridTemplateColumns,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_STORES_CALC |
         CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     0,
     kGridTrackBreadthKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     grid-template-rows,
     grid_template_rows,
     GridTemplateRows,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_STORES_CALC |
         CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     0,
     kGridTrackBreadthKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     height,
     height,
     Height,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHKLP | VARIANT_CALC,
     kWidthKTable,
-    offsetof(nsStylePosition, mHeight),
     eStyleAnimType_Coord)
 CSS_PROP_TEXT(
     hyphens,
     hyphens,
     Hyphens,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kHyphensKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXTRESET(
     initial-letter,
     initial_letter,
     InitialLetter,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "layout.css.initial-letter.enabled",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_VISIBILITY(
     image-orientation,
     image_orientation,
     ImageOrientation,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "layout.css.image-orientation.enabled",
     0,
     kImageOrientationKTable,
-    offsetof(nsStyleVisibility, mImageOrientation),
     eStyleAnimType_Discrete)
 CSS_PROP_LIST(
     -moz-image-region,
     _moz_image_region,
     CSS_PROP_DOMPROP_PREFIXED(ImageRegion),
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    offsetof(nsStyleList, mImageRegion),
     eStyleAnimType_Custom)
 CSS_PROP_VISIBILITY(
     image-rendering,
     image_rendering,
     ImageRendering,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kImageRenderingKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_UIRESET(
     ime-mode,
     ime_mode,
     ImeMode,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kIMEModeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_LOGICAL(
     inline-size,
     inline_size,
     InlineSize,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_AXIS,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHKLP | VARIANT_CALC,
     kWidthKTable,
-    Size,
     Position,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     isolation,
     isolation,
     Isolation,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT,
+    0,
     "layout.css.isolation.enabled",
     VARIANT_HK,
     kIsolationKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     justify-content,
     justify_content,
     JustifyContent,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_HK,
     kAutoCompletionAlignJustifyContent,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     justify-items,
     justify_items,
     JustifyItems,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_HK,
     // for auto-completion we use same values as justify-self:
     kAutoCompletionAlignJustifySelf,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     justify-self,
     justify_self,
     JustifySelf,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_HK,
     kAutoCompletionAlignJustifySelf,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 #ifndef CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_FONT(
     -x-lang,
     _x_lang,
     Lang,
     CSS_PROPERTY_INTERNAL |
         CSS_PROPERTY_PARSE_INACCESSIBLE,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 #endif // CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 CSS_PROP_POSITION(
     left,
     left,
     Left,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStylePosition, mOffset),
     eStyleAnimType_Sides_Left)
 CSS_PROP_TEXT(
     letter-spacing,
     letter_spacing,
     LetterSpacing,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    0,
     "",
     VARIANT_HL | VARIANT_NORMAL | VARIANT_CALC,
     nullptr,
-    offsetof(nsStyleText, mLetterSpacing),
     eStyleAnimType_Coord)
 CSS_PROP_SVGRESET(
     lighting-color,
     lighting_color,
     LightingColor,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleSVGReset, mLightingColor),
     eStyleAnimType_Color)
 CSS_PROP_TEXT(
     line-height,
     line_height,
     LineHeight,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HLPN | VARIANT_KEYWORD | VARIANT_NORMAL | VARIANT_SYSFONT | VARIANT_CALC,
     kLineHeightKTable,
-    offsetof(nsStyleText, mLineHeight),
     eStyleAnimType_Coord)
 CSS_PROP_SHORTHAND(
     list-style,
     list_style,
     ListStyle,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_LIST(
     list-style-image,
     list_style_image,
     ListStyleImage,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_START_IMAGE_LOADS,
+    0,
     "",
     VARIANT_HUO,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_LIST(
     list-style-position,
     list_style_position,
     ListStylePosition,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kListStylePositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_LIST(
     list-style-type,
     list_style_type,
     ListStyleType,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     margin,
     margin,
     Margin,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_APPLIES_TO_PAGE_RULE,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_LOGICAL(
     margin-block-end,
     margin_block_end,
     MarginBlockEnd,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_APPLIES_TO_PAGE_RULE |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
     Margin,
-    Margin,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     margin-block-start,
     margin_block_start,
     MarginBlockStart,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_APPLIES_TO_PAGE_RULE |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
     Margin,
-    Margin,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_MARGIN(
     margin-bottom,
     margin_bottom,
     MarginBottom,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_APPLIES_TO_PAGE_RULE |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStyleMargin, mMargin),
     eStyleAnimType_Sides_Bottom)
 CSS_PROP_LOGICAL(
     margin-inline-end,
     margin_inline_end,
     MarginInlineEnd,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_APPLIES_TO_PAGE_RULE |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    0,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
     Margin,
-    Margin,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     margin-inline-start,
     margin_inline_start,
     MarginInlineStart,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_APPLIES_TO_PAGE_RULE |
-        CSS_PROPERTY_LOGICAL,
+    0,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
     Margin,
-    Margin,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_MARGIN(
     margin-left,
     margin_left,
     MarginLeft,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_APPLIES_TO_PAGE_RULE |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStyleMargin, mMargin),
     eStyleAnimType_Sides_Left)
 CSS_PROP_MARGIN(
     margin-right,
     margin_right,
     MarginRight,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_APPLIES_TO_PAGE_RULE |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStyleMargin, mMargin),
     eStyleAnimType_Sides_Right)
 CSS_PROP_MARGIN(
     margin-top,
     margin_top,
     MarginTop,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_APPLIES_TO_PAGE_RULE |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStyleMargin, mMargin),
     eStyleAnimType_Sides_Top)
 CSS_PROP_SHORTHAND(
     marker,
     marker,
     Marker,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_SVG(
     marker-end,
     marker_end,
     MarkerEnd,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HUO,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVG(
     marker-mid,
     marker_mid,
     MarkerMid,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HUO,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVG(
     marker-start,
     marker_start,
     MarkerStart,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HUO,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     mask,
     mask,
     Mask,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_SVGRESET(
     mask-clip,
     mask_clip,
     MaskClip,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kMaskClipKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVGRESET(
     mask-composite,
     mask_composite,
     MaskComposite,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kImageLayerCompositeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVGRESET(
     mask-image,
     mask_image,
     MaskImage,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_START_IMAGE_LOADS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_IMAGE, // used by list parsing
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVGRESET(
     mask-mode,
     mask_mode,
     MaskMode,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kImageLayerModeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVGRESET(
     mask-origin,
     mask_origin,
     MaskOrigin,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kMaskOriginKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     mask-position,
     mask_position,
     MaskPosition,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_SVGRESET(
     mask-position-x,
     mask_position_x,
     MaskPositionX,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_STORES_CALC,
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     0,
     kImageLayerPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SVGRESET(
     mask-position-y,
     mask_position_y,
     MaskPositionY,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_STORES_CALC,
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     0,
     kImageLayerPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SVGRESET(
     mask-repeat,
     mask_repeat,
     MaskRepeat,
     CSS_PROPERTY_PARSE_FUNCTION |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kImageLayerRepeatKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVGRESET(
     mask-size,
     mask_size,
     MaskSize,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     0,
     kImageLayerSizeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SVGRESET(
     mask-type,
     mask_type,
     MaskType,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kMaskTypeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 #ifndef CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_FONT(
     -moz-math-display,
     _moz_math_display,
     MathDisplay,
     CSS_PROPERTY_INTERNAL |
-        CSS_PROPERTY_ENABLED_IN_UA_SHEETS |
-        CSS_PROPERTY_PARSE_VALUE,
+        CSS_PROPERTY_ENABLED_IN_UA_SHEETS,
     "",
     VARIANT_HK,
     kMathDisplayKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_FONT(
     -moz-math-variant,
     _moz_math_variant,
     MathVariant,
     CSS_PROPERTY_INTERNAL |
         CSS_PROPERTY_PARSE_INACCESSIBLE,
     "",
     VARIANT_HK,
     kMathVariantKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 #endif // CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 CSS_PROP_LOGICAL(
     max-block-size,
     max_block_size,
     MaxBlockSize,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_AXIS |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HLPO | VARIANT_CALC,
     nullptr,
-    MaxSize,
     Position,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_POSITION(
     max-height,
     max_height,
     MaxHeight,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    0,
     "",
     VARIANT_HKLPO | VARIANT_CALC,
     kWidthKTable,
-    offsetof(nsStylePosition, mMaxHeight),
     eStyleAnimType_Coord)
 CSS_PROP_LOGICAL(
     max-inline-size,
     max_inline_size,
     MaxInlineSize,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_AXIS,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HKLPO | VARIANT_CALC,
     kWidthKTable,
-    MaxSize,
     Position,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_POSITION(
     max-width,
     max_width,
     MaxWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    0,
     "",
     VARIANT_HKLPO | VARIANT_CALC,
     kWidthKTable,
-    offsetof(nsStylePosition, mMaxWidth),
     eStyleAnimType_Coord)
 CSS_PROP_LOGICAL(
     min-block-size,
     min_block_size,
     MinBlockSize,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_AXIS |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    MinSize,
     Position,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_FONT(
     -moz-min-font-size-ratio,
     _moz_min_font_size_ratio,
     CSS_PROP_DOMPROP_PREFIXED(MinFontSizeRatio),
     CSS_PROPERTY_INTERNAL |
-        CSS_PROPERTY_PARSE_VALUE |
         CSS_PROPERTY_ENABLED_IN_UA_SHEETS,
     "",
     VARIANT_INHERIT | VARIANT_PERCENT,
     nullptr,
-    offsetof(nsStyleFont, mMinFontSizeRatio),
     eStyleAnimType_None)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_POSITION(
     min-height,
     min_height,
     MinHeight,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    0,
     "",
     VARIANT_AHKLP | VARIANT_CALC,
     kWidthKTable,
-    offsetof(nsStylePosition, mMinHeight),
     eStyleAnimType_Coord)
 CSS_PROP_LOGICAL(
     min-inline-size,
     min_inline_size,
     MinInlineSize,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_AXIS,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHKLP | VARIANT_CALC,
     kWidthKTable,
-    MinSize,
     Position,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_POSITION(
     min-width,
     min_width,
     MinWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    0,
     "",
     VARIANT_AHKLP | VARIANT_CALC,
     kWidthKTable,
-    offsetof(nsStylePosition, mMinWidth),
     eStyleAnimType_Coord)
 CSS_PROP_EFFECTS(
     mix-blend-mode,
     mix_blend_mode,
     MixBlendMode,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT,
+    0,
     "layout.css.mix-blend-mode.enabled",
     VARIANT_HK,
     kBlendModeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     object-fit,
     object_fit,
     ObjectFit,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kObjectFitKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     object-position,
     object_position,
     ObjectPosition,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_CALC,
     kImageLayerPositionKTable,
-    offsetof(nsStylePosition, mObjectPosition),
     eStyleAnimType_Custom)
 CSS_PROP_LOGICAL(
     offset-block-end,
     offset_block_end,
     OffsetBlockEnd,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    Offset,
     Position,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     offset-block-start,
     offset_block_start,
     OffsetBlockStart,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    Offset,
     Position,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     offset-inline-end,
     offset_inline_end,
     OffsetInlineEnd,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    Offset,
     Position,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     offset-inline-start,
     offset_inline_start,
     OffsetInlineStart,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    Offset,
     Position,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_EFFECTS(
     opacity,
     opacity,
     Opacity,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_CAN_ANIMATE_ON_COMPOSITOR |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT,
+    CSS_PROPERTY_CAN_ANIMATE_ON_COMPOSITOR,
     "",
     VARIANT_HN,
     nullptr,
-    offsetof(nsStyleEffects, mOpacity),
     eStyleAnimType_float)
 CSS_PROP_POSITION(
     order,
     order,
     Order,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HI,
     nullptr,
-    offsetof(nsStylePosition, mOrder),
     eStyleAnimType_Custom) // <integer>
 CSS_PROP_DISPLAY(
     -moz-orient,
     _moz_orient,
     CSS_PROP_DOMPROP_PREFIXED(Orient),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kOrientKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_FONT(
     -moz-osx-font-smoothing,
     _moz_osx_font_smoothing,
     CSS_PROP_DOMPROP_PREFIXED(OsxFontSmoothing),
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "layout.css.osx-font-smoothing.enabled",
     VARIANT_HK,
     kFontSmoothingKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     outline,
     outline,
     Outline,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_OUTLINE(
     outline-color,
     outline_color,
     OutlineColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleOutline, mOutlineColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_OUTLINE(
     outline-offset,
     outline_offset,
     OutlineOffset,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HL | VARIANT_CALC,
     nullptr,
-    offsetof(nsStyleOutline, mOutlineOffset),
     eStyleAnimType_nscoord)
 CSS_PROP_SHORTHAND(
     -moz-outline-radius,
     _moz_outline_radius,
     CSS_PROP_DOMPROP_PREFIXED(OutlineRadius),
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_OUTLINE(
     -moz-outline-radius-bottomleft,
     _moz_outline_radius_bottomleft,
     CSS_PROP_DOMPROP_PREFIXED(OutlineRadiusBottomleft),
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    offsetof(nsStyleOutline, mOutlineRadius),
     eStyleAnimType_Corner_BottomLeft)
 CSS_PROP_OUTLINE(
     -moz-outline-radius-bottomright,
     _moz_outline_radius_bottomright,
     CSS_PROP_DOMPROP_PREFIXED(OutlineRadiusBottomright),
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    offsetof(nsStyleOutline, mOutlineRadius),
     eStyleAnimType_Corner_BottomRight)
 CSS_PROP_OUTLINE(
     -moz-outline-radius-topleft,
     _moz_outline_radius_topleft,
     CSS_PROP_DOMPROP_PREFIXED(OutlineRadiusTopleft),
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    offsetof(nsStyleOutline, mOutlineRadius),
     eStyleAnimType_Corner_TopLeft)
 CSS_PROP_OUTLINE(
     -moz-outline-radius-topright,
     _moz_outline_radius_topright,
     CSS_PROP_DOMPROP_PREFIXED(OutlineRadiusTopright),
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    offsetof(nsStyleOutline, mOutlineRadius),
     eStyleAnimType_Corner_TopRight)
 CSS_PROP_OUTLINE(
     outline-style,
     outline_style,
     OutlineStyle,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kOutlineStyleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_OUTLINE(
     outline-width,
     outline_width,
     OutlineWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    offsetof(nsStyleOutline, mOutlineWidth),
     eStyleAnimType_nscoord)
 CSS_PROP_SHORTHAND(
     overflow,
     overflow,
     Overflow,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_SHORTHAND(
     overflow-clip-box,
     overflow_clip_box,
     OverflowClipBox,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_ENABLED_IN_UA_SHEETS |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+        CSS_PROPERTY_ENABLED_IN_UA_SHEETS,
     "layout.css.overflow-clip-box.enabled")
 CSS_PROP_DISPLAY(
     overflow-clip-box-block,
     overflow_clip_box_block,
     OverflowClipBoxBlock,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_ENABLED_IN_UA_SHEETS |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_ENABLED_IN_UA_SHEETS,
     "layout.css.overflow-clip-box.enabled",
     VARIANT_HK,
     kOverflowClipBoxKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     overflow-clip-box-inline,
     overflow_clip_box_inline,
     OverflowClipBoxInline,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_ENABLED_IN_UA_SHEETS |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_ENABLED_IN_UA_SHEETS,
     "layout.css.overflow-clip-box.enabled",
     VARIANT_HK,
     kOverflowClipBoxKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     overflow-x,
     overflow_x,
     OverflowX,
-    CSS_PROPERTY_PARSE_VALUE |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK,
     kOverflowSubKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     overflow-y,
     overflow_y,
     OverflowY,
-    CSS_PROPERTY_PARSE_VALUE |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK,
     kOverflowSubKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     padding,
     padding,
     Padding,
-    CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_LOGICAL(
     padding-block-end,
     padding_block_end,
     PaddingBlockEnd,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
     Padding,
-    Padding,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     padding-block-start,
     padding_block_start,
     PaddingBlockStart,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_BLOCK_AXIS,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
     Padding,
-    Padding,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_PADDING(
     padding-bottom,
     padding_bottom,
     PaddingBottom,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStylePadding, mPadding),
     eStyleAnimType_Sides_Bottom)
 CSS_PROP_LOGICAL(
     padding-inline-end,
     padding_inline_end,
     PaddingInlineEnd,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL |
-        CSS_PROPERTY_LOGICAL_END_EDGE,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
     Padding,
-    Padding,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LOGICAL(
     padding-inline-start,
     padding_inline_start,
     PaddingInlineStart,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_LOGICAL,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
     Padding,
-    Padding,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_PADDING(
     padding-left,
     padding_left,
     PaddingLeft,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStylePadding, mPadding),
     eStyleAnimType_Sides_Left)
 CSS_PROP_PADDING(
     padding-right,
     padding_right,
     PaddingRight,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStylePadding, mPadding),
     eStyleAnimType_Sides_Right)
 CSS_PROP_PADDING(
     padding-top,
     padding_top,
     PaddingTop,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStylePadding, mPadding),
     eStyleAnimType_Sides_Top)
 CSS_PROP_DISPLAY(
     page-break-after,
     page_break_after,
     PageBreakAfter,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kPageBreakKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // temp fix for bug 24000
 CSS_PROP_DISPLAY(
     page-break-before,
     page_break_before,
     PageBreakBefore,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kPageBreakKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // temp fix for bug 24000
 CSS_PROP_DISPLAY(
     page-break-inside,
     page_break_inside,
     PageBreakInside,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kPageBreakInsideKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVG(
     paint-order,
     paint_order,
     PaintOrder,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     perspective,
     perspective,
     Perspective,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT |
-        CSS_PROPERTY_FIXPOS_CB,
+    0,
     "",
     VARIANT_NONE | VARIANT_INHERIT | VARIANT_LENGTH |
       VARIANT_NONNEGATIVE_DIMENSION,
     nullptr,
-    offsetof(nsStyleDisplay, mChildPerspective),
     eStyleAnimType_Coord)
 CSS_PROP_DISPLAY(
     perspective-origin,
     perspective_origin,
     PerspectiveOrigin,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_STORES_CALC |
         CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_CALC,
     kImageLayerPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SHORTHAND(
     place-content,
     place_content,
     PlaceContent,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_SHORTHAND(
@@ -3497,1144 +2754,949 @@ CSS_PROP_SHORTHAND(
     place_self,
     PlaceSelf,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_USERINTERFACE(
     pointer-events,
     pointer_events,
     PointerEvents,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK,
     kPointerEventsKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     position,
     position,
     Position,
-    CSS_PROPERTY_PARSE_VALUE |
-        // For position: sticky/fixed
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT |
-        CSS_PROPERTY_ABSPOS_CB,
+    0,
     "",
     VARIANT_HK,
     kPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_LIST(
     quotes,
     quotes,
     Quotes,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     VARIANT_HOS,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     resize,
     resize,
     Resize,
-    CSS_PROPERTY_PARSE_VALUE |
-        // This is allowed because the UA stylesheet sets 'resize: both;' on
-        // textarea and we need to disable this for the placeholder
-        // pseudo-element.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK,
     kResizeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     right,
     right,
     Right,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStylePosition, mOffset),
     eStyleAnimType_Sides_Right)
 CSS_PROP_DISPLAY(
     rotate,
     rotate,
     Rotate,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT |
-        CSS_PROPERTY_FIXPOS_CB,
+        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "layout.css.individual-transform.enabled",
     0,
     nullptr,
-    offsetof(nsStyleDisplay, mSpecifiedRotate),
     eStyleAnimType_None)
 CSS_PROP_TEXT(
     ruby-align,
     ruby_align,
     RubyAlign,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kRubyAlignKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXT(
     ruby-position,
     ruby_position,
     RubyPosition,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kRubyPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 #ifndef CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_FONT(
     -moz-script-level,
     _moz_script_level,
     ScriptLevel,
     // We only allow 'script-level' when unsafe rules are enabled, because
     // otherwise it could interfere with rulenode optimizations if used in
     // a non-MathML-enabled document.
     CSS_PROPERTY_INTERNAL |
-        CSS_PROPERTY_ENABLED_IN_UA_SHEETS |
-        CSS_PROPERTY_PARSE_VALUE,
+        CSS_PROPERTY_ENABLED_IN_UA_SHEETS,
     "",
     // script-level can take Auto, Integer and Number values, but only Auto
     // ("increment if parent is not in displaystyle") and Integer
     // ("relative") values can be specified in a style sheet.
     VARIANT_AHI,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_FONT(
     -moz-script-min-size,
     _moz_script_min_size,
     ScriptMinSize,
     CSS_PROPERTY_INTERNAL |
         CSS_PROPERTY_PARSE_INACCESSIBLE,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_FONT(
     -moz-script-size-multiplier,
     _moz_script_size_multiplier,
     ScriptSizeMultiplier,
     CSS_PROPERTY_INTERNAL |
         CSS_PROPERTY_PARSE_INACCESSIBLE,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 #endif // CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 CSS_PROP_DISPLAY(
     scroll-behavior,
     scroll_behavior,
     ScrollBehavior,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "layout.css.scroll-behavior.property-enabled",
     VARIANT_HK,
     kScrollBehaviorKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     overscroll-behavior,
     overscroll_behavior,
     OverscrollBehavior,
     CSS_PROPERTY_PARSE_FUNCTION,
     "layout.css.overscroll-behavior.enabled")
 CSS_PROP_DISPLAY(
     overscroll-behavior-x,
     overscroll_behavior_x,
     OverscrollBehaviorX,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "layout.css.overscroll-behavior.enabled",
     VARIANT_HK,
     kOverscrollBehaviorKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     overscroll-behavior-y,
     overscroll_behavior_y,
     OverscrollBehaviorY,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "layout.css.overscroll-behavior.enabled",
     VARIANT_HK,
     kOverscrollBehaviorKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     scroll-snap-coordinate,
     scroll_snap_coordinate,
     ScrollSnapCoordinate,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION |
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "layout.css.scroll-snap.enabled",
     0,
     kImageLayerPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     scroll-snap-destination,
     scroll_snap_destination,
     ScrollSnapDestination,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "layout.css.scroll-snap.enabled",
     0,
     kImageLayerPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     scroll-snap-points-x,
     scroll_snap_points_x,
     ScrollSnapPointsX,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "layout.css.scroll-snap.enabled",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     scroll-snap-points-y,
     scroll_snap_points_y,
     ScrollSnapPointsY,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "layout.css.scroll-snap.enabled",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     scroll-snap-type,
     scroll_snap_type,
     ScrollSnapType,
     CSS_PROPERTY_PARSE_FUNCTION,
     "layout.css.scroll-snap.enabled")
 CSS_PROP_DISPLAY(
     scroll-snap-type-x,
     scroll_snap_type_x,
     ScrollSnapTypeX,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "layout.css.scroll-snap.enabled",
     VARIANT_HK,
     kScrollSnapTypeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     scroll-snap-type-y,
     scroll_snap_type_y,
     ScrollSnapTypeY,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "layout.css.scroll-snap.enabled",
     VARIANT_HK,
     kScrollSnapTypeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     shape-image-threshold,
     shape_image_threshold,
     ShapeImageThreshold,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "layout.css.shape-outside.enabled",
     VARIANT_HN,
     nullptr,
-    offsetof(nsStyleDisplay, mShapeImageThreshold),
     eStyleAnimType_float)
 CSS_PROP_DISPLAY(
     shape-outside,
     shape_outside,
     ShapeOutside,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
-        CSS_PROPERTY_START_IMAGE_LOADS |
-        CSS_PROPERTY_LOAD_USE_CORS |
-        CSS_PROPERTY_STORES_CALC,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "layout.css.shape-outside.enabled",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SVG(
     shape-rendering,
     shape_rendering,
     ShapeRendering,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kShapeRenderingKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 #ifndef CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_TABLE(
     -x-span,
     _x_span,
     Span,
     CSS_PROPERTY_INTERNAL |
         CSS_PROPERTY_PARSE_INACCESSIBLE,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 #endif // CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 CSS_PROP_XUL(
     -moz-stack-sizing,
     _moz_stack_sizing,
     CSS_PROP_DOMPROP_PREFIXED(StackSizing),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kStackSizingKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVGRESET(
     stop-color,
     stop_color,
     StopColor,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleSVGReset, mStopColor),
     eStyleAnimType_Color)
 CSS_PROP_SVGRESET(
     stop-opacity,
     stop_opacity,
     StopOpacity,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HN,
     nullptr,
-    offsetof(nsStyleSVGReset, mStopOpacity),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     stroke,
     stroke,
     Stroke,
     CSS_PROPERTY_PARSE_FUNCTION,
     "",
     0,
     kContextPatternKTable,
-    offsetof(nsStyleSVG, mStroke),
     eStyleAnimType_PaintServer)
 CSS_PROP_SVG(
     stroke-dasharray,
     stroke_dasharray,
     StrokeDasharray,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_NUMBERS_ARE_PIXELS,
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
         // NOTE: Internal values have range restrictions.
     "",
     0,
     kStrokeContextValueKTable,
-    CSS_PROP_NO_OFFSET, /* property stored in 2 separate members */
     eStyleAnimType_Custom)
 CSS_PROP_SVG(
     stroke-dashoffset,
     stroke_dashoffset,
     StrokeDashoffset,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_NUMBERS_ARE_PIXELS,
+    0,
     "",
     VARIANT_HLPN | VARIANT_OPENTYPE_SVG_KEYWORD,
     kStrokeContextValueKTable,
-    offsetof(nsStyleSVG, mStrokeDashoffset),
     eStyleAnimType_Coord)
 CSS_PROP_SVG(
     stroke-linecap,
     stroke_linecap,
     StrokeLinecap,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kStrokeLinecapKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVG(
     stroke-linejoin,
     stroke_linejoin,
     StrokeLinejoin,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kStrokeLinejoinKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SVG(
     stroke-miterlimit,
     stroke_miterlimit,
     StrokeMiterlimit,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_AT_LEAST_ONE,
+    0,
     "",
     VARIANT_HN,
     nullptr,
-    offsetof(nsStyleSVG, mStrokeMiterlimit),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     stroke-opacity,
     stroke_opacity,
     StrokeOpacity,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HN | VARIANT_KEYWORD,
     kContextOpacityKTable,
-    offsetof(nsStyleSVG, mStrokeOpacity),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     stroke-width,
     stroke_width,
     StrokeWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_NUMBERS_ARE_PIXELS,
+    0,
     "",
     VARIANT_HLPN | VARIANT_OPENTYPE_SVG_KEYWORD,
     kStrokeContextValueKTable,
-    offsetof(nsStyleSVG, mStrokeWidth),
     eStyleAnimType_Coord)
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_FONT(
     -x-system-font,
     _x_system_font,
     CSS_PROP_DOMPROP_PREFIXED(SystemFont),
     CSS_PROPERTY_INTERNAL |
-        CSS_PROPERTY_PARSE_INACCESSIBLE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+        CSS_PROPERTY_PARSE_INACCESSIBLE,
     "",
     0,
     kFontKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_TEXT(
     -moz-tab-size,
     _moz_tab_size,
     CSS_PROP_DOMPROP_PREFIXED(TabSize),
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE,
+    0,
     "",
     VARIANT_INHERIT | VARIANT_LNCALC,
     nullptr,
-    offsetof(nsStyleText, mTabSize),
     eStyleAnimType_Coord)
 CSS_PROP_TABLE(
     table-layout,
     table_layout,
     TableLayout,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kTableLayoutKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXT(
     text-align,
     text_align,
     TextAlign,
-    CSS_PROPERTY_PARSE_VALUE | CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-      CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     // When we support aligning on a string, we can parse text-align
     // as a string....
     VARIANT_HK /* | VARIANT_STRING */,
     kTextAlignKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXT(
     text-align-last,
     text_align_last,
     TextAlignLast,
-    CSS_PROPERTY_PARSE_VALUE | CSS_PROPERTY_VALUE_PARSER_FUNCTION,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     VARIANT_HK,
     kTextAlignLastKTable,
-    offsetof(nsStyleText, mTextAlignLast),
     eStyleAnimType_Discrete)
 CSS_PROP_SVG(
     text-anchor,
     text_anchor,
     TextAnchor,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kTextAnchorKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXT(
     text-combine-upright,
     text_combine_upright,
     TextCombineUpright,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "layout.css.text-combine-upright.enabled",
     0,
     kTextCombineUprightKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     text-decoration,
     text_decoration,
     TextDecoration,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_TEXTRESET(
     text-decoration-color,
     text_decoration_color,
     TextDecorationColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleTextReset, mTextDecorationColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_TEXTRESET(
     text-decoration-line,
     text_decoration_line,
     TextDecorationLine,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     kTextDecorationLineKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXTRESET(
     text-decoration-style,
     text_decoration_style,
     TextDecorationStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK,
     kTextDecorationStyleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     text-emphasis,
     text_emphasis,
     TextEmphasis,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_TEXT(
     text-emphasis-color,
     text_emphasis_color,
     TextEmphasisColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+    0,
     "",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleText, mTextEmphasisColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_TEXT(
     text-emphasis-position,
     text_emphasis_position,
     TextEmphasisPosition,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     kTextEmphasisPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXT(
     text-emphasis-style,
     text_emphasis_style,
     TextEmphasisStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXT(
     -webkit-text-fill-color,
     _webkit_text_fill_color,
     WebkitTextFillColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+    0,
     "layout.css.prefixes.webkit",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleText, mWebkitTextFillColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_TEXT(
     text-indent,
     text_indent,
     TextIndent,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    0,
     "",
     VARIANT_HLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStyleText, mTextIndent),
     eStyleAnimType_Coord)
 CSS_PROP_TEXT(
     text-justify,
     text_justify,
     TextJustify,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "layout.css.text-justify.enabled",
     VARIANT_HK,
     kTextJustifyKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_VISIBILITY(
     text-orientation,
     text_orientation,
     TextOrientation,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kTextOrientationKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXTRESET(
     text-overflow,
     text_overflow,
     TextOverflow,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "",
     0,
     kTextOverflowKTable,
-    offsetof(nsStyleTextReset, mTextOverflow),
     eStyleAnimType_Discrete)
 CSS_PROP_TEXT(
     text-rendering,
     text_rendering,
     TextRendering,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kTextRenderingKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXT(
     text-shadow,
     text_shadow,
     TextShadow,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
         // NOTE: some components must be nonnegative
     "",
     VARIANT_COLOR | VARIANT_LENGTH | VARIANT_CALC | VARIANT_INHERIT | VARIANT_NONE,
     nullptr,
-    offsetof(nsStyleText, mTextShadow),
     eStyleAnimType_Shadow)
 CSS_PROP_TEXT(
     -moz-text-size-adjust,
     _moz_text_size_adjust,
     CSS_PROP_DOMPROP_PREFIXED(TextSizeAdjust),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kTextSizeAdjustKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     -webkit-text-stroke,
     _webkit_text_stroke,
     WebkitTextStroke,
     CSS_PROPERTY_PARSE_FUNCTION,
     "layout.css.prefixes.webkit")
 CSS_PROP_TEXT(
     -webkit-text-stroke-color,
     _webkit_text_stroke_color,
     WebkitTextStrokeColor,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
+    0,
     "layout.css.prefixes.webkit",
     VARIANT_HC,
     nullptr,
-    offsetof(nsStyleText, mWebkitTextStrokeColor),
     eStyleAnimType_ComplexColor)
 CSS_PROP_TEXT(
     -webkit-text-stroke-width,
     _webkit_text_stroke_width,
     WebkitTextStrokeWidth,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "layout.css.prefixes.webkit",
     VARIANT_HKL | VARIANT_CALC,
     kBorderWidthKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     scale,
     scale,
     Scale,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT |
-        CSS_PROPERTY_FIXPOS_CB,
+        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "layout.css.individual-transform.enabled",
     0,
     nullptr,
-    offsetof(nsStyleDisplay, mSpecifiedScale),
     eStyleAnimType_None)
 CSS_PROP_TEXT(
     text-transform,
     text_transform,
     TextTransform,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK,
     kTextTransformKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 #ifndef CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_FONT(
     -x-text-zoom,
     _x_text_zoom,
     TextZoom,
     CSS_PROPERTY_INTERNAL |
         CSS_PROPERTY_PARSE_INACCESSIBLE,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 #endif // CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 CSS_PROP_POSITION(
     top,
     top,
     Top,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHLP | VARIANT_CALC,
     nullptr,
-    offsetof(nsStylePosition, mOffset),
     eStyleAnimType_Sides_Top)
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_DISPLAY(
     -moz-top-layer,
     _moz_top_layer,
     CSS_PROP_DOMPROP_PREFIXED(TopLayer),
     CSS_PROPERTY_INTERNAL |
-        CSS_PROPERTY_PARSE_VALUE |
         CSS_PROPERTY_ENABLED_IN_UA_SHEETS,
     "",
     VARIANT_HK,
     kTopLayerKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_DISPLAY(
     touch-action,
     touch_action,
     TouchAction,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_PARSER_FUNCTION,
+    CSS_PROPERTY_VALUE_PARSER_FUNCTION,
     "layout.css.touch_action.enabled",
     VARIANT_HK,
     kTouchActionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     transform,
     transform,
     Transform,
     CSS_PROPERTY_PARSE_FUNCTION |
         CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT |
-        CSS_PROPERTY_CAN_ANIMATE_ON_COMPOSITOR |
-        CSS_PROPERTY_FIXPOS_CB,
+        CSS_PROPERTY_CAN_ANIMATE_ON_COMPOSITOR,
     "",
     0,
     nullptr,
-    offsetof(nsStyleDisplay, mSpecifiedTransform),
     eStyleAnimType_Custom)
 CSS_PROP_DISPLAY(
     transform-box,
     transform_box,
     TransformBox,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "svg.transform-box.enabled",
     VARIANT_HK,
     kTransformBoxKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_DISPLAY(
     transform-origin,
     transform_origin,
     TransformOrigin,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_STORES_CALC |
         CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     0,
     kImageLayerPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_DISPLAY(
     transform-style,
     transform_style,
     TransformStyle,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT |
-        CSS_PROPERTY_FIXPOS_CB,
+    0,
     "",
     VARIANT_HK,
     kTransformStyleKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_SHORTHAND(
     transition,
     transition,
     Transition,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_DISPLAY(
     transition-delay,
     transition_delay,
     TransitionDelay,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_TIME, // used by list parsing
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     transition-duration,
     transition_duration,
     TransitionDuration,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_TIME | VARIANT_NONNEGATIVE_DIMENSION, // used by list parsing
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     transition-property,
     transition_property,
     TransitionProperty,
     CSS_PROPERTY_PARSE_FUNCTION |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_IDENTIFIER | VARIANT_NONE | VARIANT_ALL, // used only in shorthand
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     transition-timing-function,
     transition_timing_function,
     TransitionTimingFunction,
-    CSS_PROPERTY_PARSE_VALUE_LIST |
-        CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
+    CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD | VARIANT_TIMING_FUNCTION, // used by list parsing
     kTransitionTimingFunctionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     translate,
     translate,
     Translate,
     CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT |
-        CSS_PROPERTY_FIXPOS_CB,
+        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "layout.css.individual-transform.enabled",
     0,
     nullptr,
-    offsetof(nsStyleDisplay, mSpecifiedTranslate),
     eStyleAnimType_None)
 #ifndef CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 CSS_PROP_TEXTRESET(
     unicode-bidi,
     unicode_bidi,
     UnicodeBidi,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kUnicodeBidiKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 #endif // CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 CSS_PROP_USERINTERFACE(
     -moz-user-focus,
     _moz_user_focus,
     CSS_PROP_DOMPROP_PREFIXED(UserFocus),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kUserFocusKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX bug 3935
 CSS_PROP_USERINTERFACE(
     -moz-user-input,
     _moz_user_input,
     CSS_PROP_DOMPROP_PREFIXED(UserInput),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kUserInputKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX ??? // XXX bug 3935
 CSS_PROP_USERINTERFACE(
     -moz-user-modify,
     _moz_user_modify,
     CSS_PROP_DOMPROP_PREFIXED(UserModify),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kUserModifyKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX bug 3935
 CSS_PROP_UIRESET(
     -moz-user-select,
     _moz_user_select,
     CSS_PROP_DOMPROP_PREFIXED(UserSelect),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kUserSelectKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete) // XXX bug 3935
 CSS_PROP_SVGRESET(
     vector-effect,
     vector_effect,
     VectorEffect,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kVectorEffectKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 // NOTE: vertical-align is only supposed to apply to :first-letter when
 // 'float' is 'none', but we don't worry about that since it has no
 // effect otherwise
 CSS_PROP_DISPLAY(
     vertical-align,
     vertical_align,
     VerticalAlign,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK,
+    0,
     "",
     VARIANT_HKLP | VARIANT_CALC,
     kVerticalAlignKTable,
-    offsetof(nsStyleDisplay, mVerticalAlign),
     eStyleAnimType_Coord)
 CSS_PROP_VISIBILITY(
     visibility,
     visibility,
     Visibility,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kVisibilityKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)  // reflow for collapse
 CSS_PROP_TEXT(
     white-space,
     white_space,
     WhiteSpace,
-    CSS_PROPERTY_PARSE_VALUE |
-        // This is required by the UA stylesheet and can't be overridden.
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
+    0,
     "",
     VARIANT_HK,
     kWhitespaceKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     width,
     width,
     Width,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_VALUE_NONNEGATIVE |
-        CSS_PROPERTY_STORES_CALC |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+    CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     VARIANT_AHKLP | VARIANT_CALC,
     kWidthKTable,
-    offsetof(nsStylePosition, mWidth),
     eStyleAnimType_Coord)
 CSS_PROP_DISPLAY(
     will-change,
     will_change,
     WillChange,
     CSS_PROPERTY_PARSE_FUNCTION |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     0,
     nullptr,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_UIRESET(
     -moz-window-dragging,
     _moz_window_dragging,
     CSS_PROP_DOMPROP_PREFIXED(WindowDragging),
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kWindowDraggingKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_UIRESET(
     -moz-window-shadow,
     _moz_window_shadow,
     CSS_PROP_DOMPROP_PREFIXED(WindowShadow),
     CSS_PROPERTY_INTERNAL |
-        CSS_PROPERTY_PARSE_VALUE |
         CSS_PROPERTY_ENABLED_IN_UA_SHEETS_AND_CHROME,
     "",
     VARIANT_HK,
     kWindowShadowKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_UIRESET(
     -moz-window-opacity,
     _moz_window_opacity,
     CSS_PROP_DOMPROP_PREFIXED(WindowOpacity),
-    CSS_PROPERTY_INTERNAL | CSS_PROPERTY_PARSE_VALUE,
+    CSS_PROPERTY_INTERNAL | 0,
     "",
     VARIANT_HN,
     nullptr,
-    offsetof(nsStyleUIReset, mWindowOpacity),
     eStyleAnimType_float)
 CSS_PROP_UIRESET(
     -moz-window-transform,
     _moz_window_transform,
     CSS_PROP_DOMPROP_PREFIXED(WindowTransform),
     CSS_PROPERTY_INTERNAL |
         CSS_PROPERTY_PARSE_FUNCTION |
         CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     0,
     nullptr,
-    offsetof(nsStyleUIReset, mSpecifiedWindowTransform),
     eStyleAnimType_Custom)
 CSS_PROP_UIRESET(
     -moz-window-transform-origin,
     _moz_window_transform_origin,
     CSS_PROP_DOMPROP_PREFIXED(WindowTransformOrigin),
     CSS_PROPERTY_INTERNAL |
         CSS_PROPERTY_PARSE_FUNCTION |
-        CSS_PROPERTY_STORES_CALC |
         CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
     "",
     0,
     kImageLayerPositionKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 #endif // CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_TEXT(
     word-break,
     word_break,
     WordBreak,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kWordBreakKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_TEXT(
     word-spacing,
     word_spacing,
     WordSpacing,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
-        CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
-        CSS_PROPERTY_UNITLESS_LENGTH_QUIRK |
-        CSS_PROPERTY_STORES_CALC,
+    0,
     "",
     VARIANT_HLP | VARIANT_NORMAL | VARIANT_CALC,
     nullptr,
-    offsetof(nsStyleText, mWordSpacing),
     eStyleAnimType_Coord)
 CSS_PROP_TEXT(
     overflow-wrap,
     overflow_wrap,
     OverflowWrap,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kOverflowWrapKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_VISIBILITY(
     writing-mode,
     writing_mode,
     WritingMode,
-    CSS_PROPERTY_PARSE_VALUE,
+    0,
     "",
     VARIANT_HK,
     kWritingModeKTable,
-    CSS_PROP_NO_OFFSET,
     eStyleAnimType_Discrete)
 CSS_PROP_POSITION(
     z-index,
     z_index,
     ZIndex,
-    CSS_PROPERTY_PARSE_VALUE |
-        CSS_PROPERTY_CREATES_STACKING_CONTEXT,
+    0,
     "",
     VARIANT_AHI,
     nullptr,
-    offsetof(nsStylePosition, mZIndex),
     eStyleAnimType_Coord)
 
 #ifdef USED_CSS_PROP
 
 #undef USED_CSS_PROP
 #undef CSS_PROP_FONT
 #undef CSS_PROP_COLOR
 #undef CSS_PROP_BACKGROUND
deleted file mode 100644
--- a/layout/style/nsCSSPropLogicalGroupList.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
- * a list of groups of logical properties, for preprocessing
- */
-
-// A logical property group is one that defines the corresponding physical
-// longhand properties that could be set by a given set of logical longhand
-// properties.  For example, the logical property group for margin-block-start
-// (and the other three logical margin properties) is one that contains
-// margin-top, margin-right, margin-bottom and margin-left.
-//
-// Logical property groups are defined below using one of the following
-// macros, where the name_ argument must be capitalized LikeThis and
-// must not collide with the name of a property's DOM method (its
-// method_ in nsCSSPropList.h):
-//
-//   CSS_PROP_LOGICAL_GROUP_SHORTHAND(name_)
-//     Defines a logical property group whose corresponding physical
-//     properties are those in a given shorthand.  For example, the
-//     logical property group for margin-{block,inline}-{start,end}
-//     is defined by the margin shorthand.  The name_ argument must
-//     be the method_ name of the shorthand (so Margin rather than
-//     margin).
-//
-//   CSS_PROP_LOGICAL_GROUP_BOX(name_)
-//     Defines a logical property group whose corresponding physical
-//     properties are a set of four box properties which are not
-//     already represented by an existing shorthand property.  For
-//     example, the logical property group for
-//     offset-{block,inline}-{start,end} contains the top, right,
-//     bottom and left physical properties, but there is no shorthand
-//     that sets those four properties.  A table must be defined in
-//     nsCSSProps.cpp named g<name_>LogicalGroupTable containing the
-//     four physical properties in top/right/bottom/left order.
-//
-//   CSS_PROP_LOGICAL_GROUP_AXIS(name_)
-//     Defines a logical property group whose corresponding physical
-//     properties are a set of two axis-related properties.  For
-//     example, the logical property group for {block,inline}-size
-//     contains the width and height properties.  A table must be
-//     defined in nCSSProps.cpp named g<name_>LogicalGroupTable
-//     containing the two physical properties in vertical/horizontal
-//     order, followed by an nsCSSProperty_UNKNOWN entry.
-
-CSS_PROP_LOGICAL_GROUP_SHORTHAND(BorderColor)
-CSS_PROP_LOGICAL_GROUP_SHORTHAND(BorderStyle)
-CSS_PROP_LOGICAL_GROUP_SHORTHAND(BorderWidth)
-CSS_PROP_LOGICAL_GROUP_SHORTHAND(Margin)
-CSS_PROP_LOGICAL_GROUP_AXIS(MaxSize)
-CSS_PROP_LOGICAL_GROUP_BOX(Offset)
-CSS_PROP_LOGICAL_GROUP_SHORTHAND(Padding)
-CSS_PROP_LOGICAL_GROUP_AXIS(MinSize)
-CSS_PROP_LOGICAL_GROUP_AXIS(Size)
--- a/layout/style/nsCSSPropertyID.h
+++ b/layout/style/nsCSSPropertyID.h
@@ -16,30 +16,27 @@
    enum values are "eCSSProperty_foo" (where foo is the property)
 
    To change the list of properties, see nsCSSPropList.h
 
  */
 enum nsCSSPropertyID {
   eCSSProperty_UNKNOWN = -1,
 
-  #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, \
-                   kwtable_, stylestruct_, stylestructoffset_, animtype_) \
-    eCSSProperty_##id_,
+  #define CSS_PROP(name_, id_, ...) eCSSProperty_##id_,
   #define CSS_PROP_LIST_INCLUDE_LOGICAL
   #include "nsCSSPropList.h"
   #undef CSS_PROP_LIST_INCLUDE_LOGICAL
   #undef CSS_PROP
 
   eCSSProperty_COUNT_no_shorthands,
   // Make the count continue where it left off:
   eCSSProperty_COUNT_DUMMY = eCSSProperty_COUNT_no_shorthands - 1,
 
-  #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_) \
-    eCSSProperty_##id_,
+  #define CSS_PROP_SHORTHAND(name_, id_, ...) eCSSProperty_##id_,
   #include "nsCSSPropList.h"
   #undef CSS_PROP_SHORTHAND
 
   eCSSProperty_COUNT,
   // Make the count continue where it left off:
   eCSSProperty_COUNT_DUMMY2 = eCSSProperty_COUNT - 1,
 
   #define CSS_PROP_ALIAS(aliasname_, aliasid_, id_, method_, pref_) \
@@ -96,24 +93,9 @@ enum nsCSSFontDesc {
 enum nsCSSCounterDesc {
   eCSSCounterDesc_UNKNOWN = -1,
 #define CSS_COUNTER_DESC(name_, method_) eCSSCounterDesc_##method_,
 #include "nsCSSCounterDescList.h"
 #undef CSS_COUNTER_DESC
   eCSSCounterDesc_COUNT
 };
 
-enum nsCSSPropertyLogicalGroup {
-  eCSSPropertyLogicalGroup_UNKNOWN = -1,
-#define CSS_PROP_LOGICAL_GROUP_AXIS(name_) \
-  eCSSPropertyLogicalGroup_##name_,
-#define CSS_PROP_LOGICAL_GROUP_BOX(name_) \
-  eCSSPropertyLogicalGroup_##name_,
-#define CSS_PROP_LOGICAL_GROUP_SHORTHAND(name_) \
-  eCSSPropertyLogicalGroup_##name_,
-#include "nsCSSPropLogicalGroupList.h"
-#undef CSS_PROP_LOGICAL_GROUP_SHORTHAND
-#undef CSS_PROP_LOGICAL_GROUP_BOX
-#undef CSS_PROP_LOGICAL_GROUP_AXIS
-  eCSSPropertyLogicalGroup_COUNT
-};
-
 #endif /* nsCSSPropertyID_h___ */
--- a/layout/style/nsCSSProps.cpp
+++ b/layout/style/nsCSSProps.cpp
@@ -58,19 +58,17 @@ typedef nsCSSProps::KTableEntry KTableEn
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP
 
 // required to make the symbol external, so that TestCSSPropertyLookup.cpp can link with it
 extern const char* const kCSSRawProperties[];
 
 // define an array of all CSS properties
 const char* const kCSSRawProperties[eCSSProperty_COUNT_with_aliases] = {
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \
-                 stylestruct_, stylestructoffset_, animtype_)                 \
-  #name_,
+#define CSS_PROP(name_, ...) #name_,
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
 #include "nsCSSPropList.h"
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP
 #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_) #name_,
 #include "nsCSSPropList.h"
 #undef CSS_PROP_SHORTHAND
 #define CSS_PROP_ALIAS(aliasname_, aliasid_, id_, method_, pref_) #aliasname_,
@@ -79,23 +77,18 @@ const char* const kCSSRawProperties[eCSS
 };
 
 using namespace mozilla;
 
 static int32_t gPropertyTableRefCount;
 static nsStaticCaseInsensitiveNameTable* gPropertyTable;
 static nsStaticCaseInsensitiveNameTable* gFontDescTable;
 static nsStaticCaseInsensitiveNameTable* gCounterDescTable;
-static nsStaticCaseInsensitiveNameTable* gPredefinedCounterStyleTable;
 static nsDataHashtable<nsCStringHashKey,nsCSSPropertyID>* gPropertyIDLNameTable;
 
-/* static */ nsCSSPropertyID *
-  nsCSSProps::gShorthandsContainingTable[eCSSProperty_COUNT_no_shorthands];
-/* static */ nsCSSPropertyID* nsCSSProps::gShorthandsContainingPool = nullptr;
-
 static const char* const kCSSRawFontDescs[] = {
 #define CSS_FONT_DESC(name_, method_) #name_,
 #include "nsCSSFontDescList.h"
 #undef CSS_FONT_DESC
 };
 
 static const char* const kCSSRawCounterDescs[] = {
 #define CSS_COUNTER_DESC(name_, method_) #name_,
@@ -126,37 +119,16 @@ static const char* const kCSSRawPredefin
   "korean-hangul-formal", "korean-hanja-informal", "korean-hanja-formal",
   // 7.1.3 Chinese
   "simp-chinese-informal", "simp-chinese-formal",
   "trad-chinese-informal", "trad-chinese-formal", "cjk-ideographic",
   // 7.2 Ethiopic Numeric Counter Style
   "ethiopic-numeric"
 };
 
-struct PropertyAndCount {
-  nsCSSPropertyID property;
-  uint32_t count;
-};
-
-static int
-SortPropertyAndCount(const void* s1, const void* s2, void *closure)
-{
-  const PropertyAndCount *pc1 = static_cast<const PropertyAndCount*>(s1);
-  const PropertyAndCount *pc2 = static_cast<const PropertyAndCount*>(s2);
-
-  // Primary sort by count (lowest to highest)
-  if (pc1->count != pc2->count) {
-    return AssertedCast<int32_t>(pc1->count) -
-           AssertedCast<int32_t>(pc2->count);
-  }
-
-  // Secondary sort by property index (highest to lowest)
-  return pc2->property - pc1->property;
-}
-
 // We need eCSSAliasCount so we can make gAliases nonzero size when there
 // are no aliases.
 enum {
   eCSSAliasCount = eCSSProperty_COUNT_with_aliases - eCSSProperty_COUNT
 };
 
 // The names are in kCSSRawProperties.
 static nsCSSPropertyID gAliases[eCSSAliasCount != 0 ? eCSSAliasCount : 1] = {
@@ -183,51 +155,44 @@ CreateStaticTable(const char* const aRaw
 
 void
 nsCSSProps::AddRefTable(void)
 {
   if (0 == gPropertyTableRefCount++) {
     MOZ_ASSERT(!gPropertyTable, "pre existing array!");
     MOZ_ASSERT(!gFontDescTable, "pre existing array!");
     MOZ_ASSERT(!gCounterDescTable, "pre existing array!");
-    MOZ_ASSERT(!gPredefinedCounterStyleTable, "pre existing array!");
     MOZ_ASSERT(!gPropertyIDLNameTable, "pre existing array!");
 
     gPropertyTable = CreateStaticTable(
         kCSSRawProperties, eCSSProperty_COUNT_with_aliases);
     gFontDescTable = CreateStaticTable(kCSSRawFontDescs, eCSSFontDesc_COUNT);
     gCounterDescTable = CreateStaticTable(
         kCSSRawCounterDescs, eCSSCounterDesc_COUNT);
-    gPredefinedCounterStyleTable = CreateStaticTable(
-        kCSSRawPredefinedCounterStyles,
-        ArrayLength(kCSSRawPredefinedCounterStyles));
 
     gPropertyIDLNameTable = new nsDataHashtable<nsCStringHashKey,nsCSSPropertyID>;
     for (nsCSSPropertyID p = nsCSSPropertyID(0);
          size_t(p) < ArrayLength(kIDLNameTable);
          p = nsCSSPropertyID(p + 1)) {
       if (kIDLNameTable[p]) {
         gPropertyIDLNameTable->Put(nsDependentCString(kIDLNameTable[p]), p);
       }
     }
 
-    BuildShorthandsContainingTable();
-
     static bool prefObserversInited = false;
     if (!prefObserversInited) {
       prefObserversInited = true;
 
       #define OBSERVE_PROP(pref_, id_)                                        \
         if (pref_[0]) {                                                       \
           Preferences::AddBoolVarCache(&gPropertyEnabled[id_],                \
                                        pref_);                                \
         }
 
-      #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_,     \
-                       kwtable_, stylestruct_, stylestructoffset_, animtype_) \
+      #define CSS_PROP(name_, id_, method_, flags_, pref_, ...) \
         OBSERVE_PROP(pref_, eCSSProperty_##id_)
       #define CSS_PROP_LIST_INCLUDE_LOGICAL
       #include "nsCSSPropList.h"
       #undef CSS_PROP_LIST_INCLUDE_LOGICAL
       #undef CSS_PROP
 
       #define  CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_) \
         OBSERVE_PROP(pref_, eCSSProperty_##id_)
@@ -308,243 +273,42 @@ nsCSSProps::AddRefTable(void)
       }
     }
 #endif
   }
 }
 
 #undef  DEBUG_SHORTHANDS_CONTAINING
 
-bool
-nsCSSProps::BuildShorthandsContainingTable()
-{
-  uint32_t occurrenceCounts[eCSSProperty_COUNT_no_shorthands];
-  memset(occurrenceCounts, 0, sizeof(occurrenceCounts));
-  PropertyAndCount subpropCounts[eCSSProperty_COUNT -
-                                   eCSSProperty_COUNT_no_shorthands];
-  for (nsCSSPropertyID shorthand = eCSSProperty_COUNT_no_shorthands;
-       shorthand < eCSSProperty_COUNT;
-       shorthand = nsCSSPropertyID(shorthand + 1)) {
-#ifdef DEBUG_SHORTHANDS_CONTAINING
-    printf("Considering shorthand property '%s'.\n",
-           nsCSSProps::GetStringValue(shorthand).get());
-#endif
-    PropertyAndCount &subpropCountsEntry =
-      subpropCounts[shorthand - eCSSProperty_COUNT_no_shorthands];
-    subpropCountsEntry.property = shorthand;
-    subpropCountsEntry.count = 0;
-    for (const nsCSSPropertyID* subprops = SubpropertyEntryFor(shorthand);
-         *subprops != eCSSProperty_UNKNOWN;
-         ++subprops) {
-      MOZ_ASSERT(0 <= *subprops && *subprops < eCSSProperty_COUNT_no_shorthands,
-                 "subproperty must be a longhand");
-      ++occurrenceCounts[*subprops];
-      ++subpropCountsEntry.count;
-    }
-  }
-
-  uint32_t poolEntries = 0;
-  for (nsCSSPropertyID longhand = nsCSSPropertyID(0);
-       longhand < eCSSProperty_COUNT_no_shorthands;
-       longhand = nsCSSPropertyID(longhand + 1)) {
-    uint32_t count = occurrenceCounts[longhand];
-    if (count > 0)
-      // leave room for terminator
-      poolEntries += count + 1;
-  }
-
-  gShorthandsContainingPool = new nsCSSPropertyID[poolEntries];
-  if (!gShorthandsContainingPool)
-    return false;
-
-  // Initialize all entries to point to their null-terminator.
-  {
-    nsCSSPropertyID *poolCursor = gShorthandsContainingPool - 1;
-    nsCSSPropertyID *lastTerminator =
-      gShorthandsContainingPool + poolEntries - 1;
-    for (nsCSSPropertyID longhand = nsCSSPropertyID(0);
-         longhand < eCSSProperty_COUNT_no_shorthands;
-         longhand = nsCSSPropertyID(longhand + 1)) {
-      uint32_t count = occurrenceCounts[longhand];
-      if (count > 0) {
-        poolCursor += count + 1;
-        gShorthandsContainingTable[longhand] = poolCursor;
-        *poolCursor = eCSSProperty_UNKNOWN;
-      } else {
-        gShorthandsContainingTable[longhand] = lastTerminator;
-      }
-    }
-    MOZ_ASSERT(poolCursor == lastTerminator, "miscalculation");
-  }
-
-  // Sort with lowest count at the start and highest at the end, and
-  // within counts sort in reverse property index order.
-  NS_QuickSort(&subpropCounts, ArrayLength(subpropCounts),
-               sizeof(subpropCounts[0]), SortPropertyAndCount, nullptr);
-
-  // Fill in all the entries in gShorthandsContainingTable
-  for (const PropertyAndCount *shorthandAndCount = subpropCounts,
-                           *shorthandAndCountEnd = ArrayEnd(subpropCounts);
-       shorthandAndCount < shorthandAndCountEnd;
-       ++shorthandAndCount) {
-#ifdef DEBUG_SHORTHANDS_CONTAINING
-    printf("Entering %u subprops for '%s'.\n",
-           shorthandAndCount->count,
-           nsCSSProps::GetStringValue(shorthandAndCount->property).get());
-#endif
-    for (const nsCSSPropertyID* subprops =
-           SubpropertyEntryFor(shorthandAndCount->property);
-         *subprops != eCSSProperty_UNKNOWN;
-         ++subprops) {
-      *(--gShorthandsContainingTable[*subprops]) = shorthandAndCount->property;
-    }
-  }
-
-#ifdef DEBUG_SHORTHANDS_CONTAINING
-  for (nsCSSPropertyID longhand = nsCSSPropertyID(0);
-       longhand < eCSSProperty_COUNT_no_shorthands;
-       longhand = nsCSSPropertyID(longhand + 1)) {
-    printf("Property %s is in %d shorthands.\n",
-           nsCSSProps::GetStringValue(longhand).get(),
-           occurrenceCounts[longhand]);
-    for (const nsCSSPropertyID *shorthands = ShorthandsContaining(longhand);
-         *shorthands != eCSSProperty_UNKNOWN;
-         ++shorthands) {
-      printf("  %s\n", nsCSSProps::GetStringValue(*shorthands).get());
-    }
-  }
-#endif
-
-#ifdef DEBUG
-  // Verify that all values that should be are present.
-  for (nsCSSPropertyID shorthand = eCSSProperty_COUNT_no_shorthands;
-       shorthand < eCSSProperty_COUNT;
-       shorthand = nsCSSPropertyID(shorthand + 1)) {
-    for (const nsCSSPropertyID* subprops = SubpropertyEntryFor(shorthand);
-         *subprops != eCSSProperty_UNKNOWN;
-         ++subprops) {
-      uint32_t count = 0;
-      for (const nsCSSPropertyID *shcont = ShorthandsContaining(*subprops);
-           *shcont != eCSSProperty_UNKNOWN;
-           ++shcont) {
-        if (*shcont == shorthand)
-          ++count;
-      }
-      MOZ_ASSERT(count == 1,
-                 "subproperty of shorthand should have shorthand"
-                 " in its ShorthandsContaining() table");
-    }
-  }
-
-  // Verify that there are no extra values
-  for (nsCSSPropertyID longhand = nsCSSPropertyID(0);
-       longhand < eCSSProperty_COUNT_no_shorthands;
-       longhand = nsCSSPropertyID(longhand + 1)) {
-    for (const nsCSSPropertyID *shorthands = ShorthandsContaining(longhand);
-         *shorthands != eCSSProperty_UNKNOWN;
-         ++shorthands) {
-      uint32_t count = 0;
-      for (const nsCSSPropertyID* subprops = SubpropertyEntryFor(*shorthands);
-           *subprops != eCSSProperty_UNKNOWN;
-           ++subprops) {
-        if (*subprops == longhand)
-          ++count;
-      }
-      MOZ_ASSERT(count == 1,
-                 "longhand should be in subproperty table of "
-                 "property in its ShorthandsContaining() table");
-    }
-  }
-#endif
-
-  return true;
-}
-
 void
 nsCSSProps::ReleaseTable(void)
 {
   if (0 == --gPropertyTableRefCount) {
     delete gPropertyTable;
     gPropertyTable = nullptr;
 
     delete gFontDescTable;
     gFontDescTable = nullptr;
 
     delete gCounterDescTable;
     gCounterDescTable = nullptr;
 
-    delete gPredefinedCounterStyleTable;
-    gPredefinedCounterStyleTable = nullptr;
-
     delete gPropertyIDLNameTable;
     gPropertyIDLNameTable = nullptr;
-
-    delete [] gShorthandsContainingPool;
-    gShorthandsContainingPool = nullptr;
   }
 }
 
 /* static */ bool
-nsCSSProps::IsInherited(nsCSSPropertyID aProperty)
-{
-  MOZ_ASSERT(!IsShorthand(aProperty));
-
-  nsStyleStructID sid = kSIDTable[aProperty];
-  return ComputedStyle::IsInherited(sid);
-}
-
-/* static */ bool
-nsCSSProps::IsCustomPropertyName(const nsACString& aProperty)
-{
-  // Custom properties don't need to have a character after the "--" prefix.
-  return aProperty.Length() >= CSS_CUSTOM_NAME_PREFIX_LENGTH &&
-         StringBeginsWith(aProperty, NS_LITERAL_CSTRING("--"));
-}
-
-/* static */ bool
 nsCSSProps::IsCustomPropertyName(const nsAString& aProperty)
 {
   return aProperty.Length() >= CSS_CUSTOM_NAME_PREFIX_LENGTH &&
          StringBeginsWith(aProperty, NS_LITERAL_STRING("--"));
 }
 
 nsCSSPropertyID
-nsCSSProps::LookupProperty(const nsACString& aProperty,
-                           EnabledState aEnabled)
-{
-  MOZ_ASSERT(gPropertyTable, "no lookup table, needs addref");
-
-  if (IsCustomPropertyName(aProperty)) {
-    return eCSSPropertyExtra_variable;
-  }
-
-  nsCSSPropertyID res = nsCSSPropertyID(gPropertyTable->Lookup(aProperty));
-  if (MOZ_LIKELY(res < eCSSProperty_COUNT)) {
-    if (res != eCSSProperty_UNKNOWN && !IsEnabled(res, aEnabled)) {
-      res = eCSSProperty_UNKNOWN;
-    }
-    return res;
-  }
-  MOZ_ASSERT(eCSSAliasCount != 0,
-             "'res' must be an alias at this point so we better have some!");
-  // We intentionally don't support CSSEnabledState::eInUASheets or
-  // CSSEnabledState::eInChrome for aliases yet because it's unlikely
-  // there will be a need for it.
-  if (IsEnabled(res) || aEnabled == CSSEnabledState::eIgnoreEnabledState) {
-    res = gAliases[res - eCSSProperty_COUNT];
-    MOZ_ASSERT(0 <= res && res < eCSSProperty_COUNT,
-               "aliases must not point to other aliases");
-    if (IsEnabled(res) || aEnabled == CSSEnabledState::eIgnoreEnabledState) {
-      return res;
-    }
-  }
-  return eCSSProperty_UNKNOWN;
-}
-
-nsCSSPropertyID
 nsCSSProps::LookupProperty(const nsAString& aProperty, EnabledState aEnabled)
 {
   if (IsCustomPropertyName(aProperty)) {
     return eCSSPropertyExtra_variable;
   }
 
   // This is faster than converting and calling
   // LookupProperty(nsACString&).  The table will do its own
@@ -593,71 +357,27 @@ nsCSSProps::LookupPropertyByIDLName(cons
                                     EnabledState aEnabled)
 {
   MOZ_ASSERT(gPropertyIDLNameTable, "no lookup table, needs addref");
   return LookupPropertyByIDLName(NS_ConvertUTF16toUTF8(aPropertyIDLName),
                                  aEnabled);
 }
 
 nsCSSFontDesc
-nsCSSProps::LookupFontDesc(const nsACString& aFontDesc)
-{
-  MOZ_ASSERT(gFontDescTable, "no lookup table, needs addref");
-  nsCSSFontDesc which = nsCSSFontDesc(gFontDescTable->Lookup(aFontDesc));
-
-  if (which == eCSSFontDesc_Display && !StylePrefs::sFontDisplayEnabled) {
-    which = eCSSFontDesc_UNKNOWN;
-  }
-  return which;
-}
-
-nsCSSFontDesc
 nsCSSProps::LookupFontDesc(const nsAString& aFontDesc)
 {
   MOZ_ASSERT(gFontDescTable, "no lookup table, needs addref");
   nsCSSFontDesc which = nsCSSFontDesc(gFontDescTable->Lookup(aFontDesc));
 
   if (which == eCSSFontDesc_Display && !StylePrefs::sFontDisplayEnabled) {
     which = eCSSFontDesc_UNKNOWN;
   }
   return which;
 }
 
-nsCSSCounterDesc
-nsCSSProps::LookupCounterDesc(const nsAString& aProperty)
-{
-  MOZ_ASSERT(gCounterDescTable, "no lookup table, needs addref");
-  return nsCSSCounterDesc(gCounterDescTable->Lookup(aProperty));
-}
-
-nsCSSCounterDesc
-nsCSSProps::LookupCounterDesc(const nsACString& aProperty)
-{
-  MOZ_ASSERT(gCounterDescTable, "no lookup table, needs addref");
-  return nsCSSCounterDesc(gCounterDescTable->Lookup(aProperty));
-}
-
-bool
-nsCSSProps::IsPredefinedCounterStyle(const nsAString& aStyle)
-{
-  MOZ_ASSERT(gPredefinedCounterStyleTable,
-             "no lookup table, needs addref");
-  return gPredefinedCounterStyleTable->Lookup(aStyle) !=
-    nsStaticCaseInsensitiveNameTable::NOT_FOUND;
-}
-
-bool
-nsCSSProps::IsPredefinedCounterStyle(const nsACString& aStyle)
-{
-  MOZ_ASSERT(gPredefinedCounterStyleTable,
-             "no lookup table, needs addref");
-  return gPredefinedCounterStyleTable->Lookup(aStyle) !=
-    nsStaticCaseInsensitiveNameTable::NOT_FOUND;
-}
-
 const nsCString&
 nsCSSProps::GetStringValue(nsCSSPropertyID aProperty)
 {
   MOZ_ASSERT(gPropertyTable, "no lookup table, needs addref");
   if (gPropertyTable) {
     return gPropertyTable->GetStringValue(int32_t(aProperty));
   } else {
     static nsDependentCString sNullStr("");
@@ -2486,19 +2206,18 @@ nsCSSProps::ValueToKeyword(int32_t aValu
     return sNullStr;
   } else {
     return nsCSSKeywords::GetStringValue(keyword);
   }
 }
 
 /* static */ const KTableEntry* const
 nsCSSProps::kKeywordTableTable[eCSSProperty_COUNT_no_shorthands] = {
-  #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_,     \
-                   kwtable_, stylestruct_, stylestructoffset_, animtype_) \
-    kwtable_,
+  #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, \
+                   kwtable_, ...) kwtable_,
   #define CSS_PROP_LIST_INCLUDE_LOGICAL
   #include "nsCSSPropList.h"
   #undef CSS_PROP_LIST_INCLUDE_LOGICAL
   #undef CSS_PROP
 };
 
 const nsCString&
 nsCSSProps::LookupPropertyValue(nsCSSPropertyID aProp, int32_t aValue)
@@ -2534,68 +2253,53 @@ bool nsCSSProps::GetColorName(int32_t aP
     aStr = nsCSSKeywords::GetStringValue(keyword);
     nsCSSKeywords::ReleaseTable();
     rv = true;
   }
   return rv;
 }
 
 const nsStyleStructID nsCSSProps::kSIDTable[eCSSProperty_COUNT_no_shorthands] = {
-    #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_,     \
-                     kwtable_, stylestruct_, stylestructoffset_, animtype_) \
+    #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, \
+                     kwtable_, stylestruct_, ...) \
         eStyleStruct_##stylestruct_,
     #define CSS_PROP_LIST_INCLUDE_LOGICAL
 
     #include "nsCSSPropList.h"
 
     #undef CSS_PROP_LIST_INCLUDE_LOGICAL
     #undef CSS_PROP
 };
 
 const nsStyleAnimType
 nsCSSProps::kAnimTypeTable[eCSSProperty_COUNT_no_shorthands] = {
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \
-                 stylestruct_, stylestructoffset_, animtype_)                 \
+#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, \
+                 kwtable_, stylestruct_, animtype_)                 \
   animtype_,
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
 #include "nsCSSPropList.h"
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP
 };
 
-const ptrdiff_t
-nsCSSProps::kStyleStructOffsetTable[eCSSProperty_COUNT_no_shorthands] = {
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \
-                 stylestruct_, stylestructoffset_, animtype_)                 \
-  stylestructoffset_,
-#define CSS_PROP_LIST_INCLUDE_LOGICAL
-#include "nsCSSPropList.h"
-#undef CSS_PROP_LIST_INCLUDE_LOGICAL
-#undef CSS_PROP
-};
-
 const uint32_t nsCSSProps::kFlagsTable[eCSSProperty_COUNT] = {
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \
-                 stylestruct_, stylestructoffset_, animtype_)                 \
-  flags_,
+#define CSS_PROP(name_, id_, method_, flags_, ...) flags_,
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
 #include "nsCSSPropList.h"
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP
 #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_) flags_,
 #include "nsCSSPropList.h"
 #undef CSS_PROP_SHORTHAND
 };
 
 static const nsCSSPropertyID gAllSubpropTable[] = {
 #define CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \
-                 stylestruct_, stylestructoffset_, animtype_)                 \
-  eCSSProperty_##id_,
+#define CSS_PROP(name_, id_, ...) eCSSProperty_##id_,
 #include "nsCSSPropList.h"
 #undef CSS_PROP
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
   eCSSProperty_UNKNOWN
 };
 
 static const nsCSSPropertyID gAnimationSubpropTable[] = {
@@ -3031,300 +2735,27 @@ nsCSSProps::kSubpropertyTable[eCSSProper
 #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_) \
   NSCSSPROPS_INNER_MACRO(method_)
 #include "nsCSSPropList.h"
 #undef CSS_PROP_SHORTHAND
 #undef NSCSSPROPS_INNER_MACRO
 #undef CSS_PROP_PUBLIC_OR_PRIVATE
 };
 
-
-static const nsCSSPropertyID gOffsetLogicalGroupTable[] = {
-  eCSSProperty_top,
-  eCSSProperty_right,
-  eCSSProperty_bottom,
-  eCSSProperty_left,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gMaxSizeLogicalGroupTable[] = {
-  eCSSProperty_max_height,
-  eCSSProperty_max_width,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gMinSizeLogicalGroupTable[] = {
-  eCSSProperty_min_height,
-  eCSSProperty_min_width,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gSizeLogicalGroupTable[] = {
-  eCSSProperty_height,
-  eCSSProperty_width,
-  eCSSProperty_UNKNOWN
-};
-
-const nsCSSPropertyID* const
-nsCSSProps::kLogicalGroupTable[eCSSPropertyLogicalGroup_COUNT] = {
-#define CSS_PROP_LOGICAL_GROUP_SHORTHAND(id_) g##id_##SubpropTable,
-#define CSS_PROP_LOGICAL_GROUP_AXIS(name_) g##name_##LogicalGroupTable,
-#define CSS_PROP_LOGICAL_GROUP_BOX(name_) g##name_##LogicalGroupTable,
-#include "nsCSSPropLogicalGroupList.h"
-#undef CSS_PROP_LOGICAL_GROUP_BOX
-#undef CSS_PROP_LOGICAL_GROUP_AXIS
-#undef CSS_PROP_LOGICAL_GROUP_SHORTHAND
-};
-
-// Mapping of logical longhand properties to their logical group (which
-// represents the physical longhands the logical properties an correspond
-// to).  The format is pairs of values, where the first is the logical
-// longhand property (an nsCSSPropertyID) and the second is the logical group
-// (an nsCSSPropertyLogicalGroup), stored in a flat array (like KTableEntry
-// arrays).
-static const int gLogicalGroupMappingTable[] = {
-#define CSS_PROP_LOGICAL(name_, id_, method_, flags_, pref_, parsevariant_, \
-                         kwtable_, group_, stylestruct_,                    \
-                         stylestructoffset_, animtype_)                     \
-  eCSSProperty_##id_, eCSSPropertyLogicalGroup_##group_,
-#include "nsCSSPropList.h"
-#undef CSS_PROP_LOGICAL
-};
-
-/* static */ const nsCSSPropertyID*
-nsCSSProps::LogicalGroup(nsCSSPropertyID aProperty)
-{
-  MOZ_ASSERT(0 <= aProperty && aProperty < eCSSProperty_COUNT_no_shorthands,
-             "out of range");
-  MOZ_ASSERT(nsCSSProps::PropHasFlags(aProperty, CSS_PROPERTY_LOGICAL),
-             "aProperty must be a logical longhand property");
-
-  for (size_t i = 0; i < ArrayLength(gLogicalGroupMappingTable); i += 2) {
-    if (gLogicalGroupMappingTable[i] == aProperty) {
-      return kLogicalGroupTable[gLogicalGroupMappingTable[i + 1]];
-    }
-  }
-
-  MOZ_ASSERT(false, "missing gLogicalGroupMappingTable entry");
-  return nullptr;
-}
-
-
-#define ENUM_DATA_FOR_PROPERTY(name_, id_, method_, flags_, pref_,          \
-                               parsevariant_, kwtable_, stylestructoffset_, \
-                               animtype_)                                   \
-  ePropertyIndex_for_##id_,
-
-// The order of these enums must match the g*Flags arrays in nsRuleNode.cpp.
-
-enum FontCheckCounter {
-  #define CSS_PROP_FONT ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_FONT
-  ePropertyCount_for_Font
-};
-
-enum DisplayCheckCounter {
-  #define CSS_PROP_DISPLAY ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_DISPLAY
-  ePropertyCount_for_Display
-};
-
-enum VisibilityCheckCounter {
-  #define CSS_PROP_VISIBILITY ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_VISIBILITY
-  ePropertyCount_for_Visibility
-};
-
-enum MarginCheckCounter {
-  #define CSS_PROP_MARGIN ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_MARGIN
-  ePropertyCount_for_Margin
-};
-
-enum BorderCheckCounter {
-  #define CSS_PROP_BORDER ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_BORDER
-  ePropertyCount_for_Border
-};
-
-enum PaddingCheckCounter {
-  #define CSS_PROP_PADDING ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_PADDING
-  ePropertyCount_for_Padding
-};
-
-enum OutlineCheckCounter {
-  #define CSS_PROP_OUTLINE ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_OUTLINE
-  ePropertyCount_for_Outline
-};
-
-enum ListCheckCounter {
-  #define CSS_PROP_LIST ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_LIST
-  ePropertyCount_for_List
-};
-
-enum ColorCheckCounter {
-  #define CSS_PROP_COLOR ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_COLOR
-  ePropertyCount_for_Color
-};
-
-enum BackgroundCheckCounter {
-  #define CSS_PROP_BACKGROUND ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_BACKGROUND
-  ePropertyCount_for_Background
-};
-
-enum PositionCheckCounter {
-  #define CSS_PROP_POSITION ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_POSITION
-  ePropertyCount_for_Position
-};
-
-enum TableCheckCounter {
-  #define CSS_PROP_TABLE ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_TABLE
-  ePropertyCount_for_Table
-};
-
-enum TableBorderCheckCounter {
-  #define CSS_PROP_TABLEBORDER ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_TABLEBORDER
-  ePropertyCount_for_TableBorder
-};
-
-enum ContentCheckCounter {
-  #define CSS_PROP_CONTENT ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_CONTENT
-  ePropertyCount_for_Content
-};
-
-enum TextCheckCounter {
-  #define CSS_PROP_TEXT ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_TEXT
-  ePropertyCount_for_Text
-};
-
-enum TextResetCheckCounter {
-  #define CSS_PROP_TEXTRESET ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_TEXTRESET
-  ePropertyCount_for_TextReset
-};
-
-enum UserInterfaceCheckCounter {
-  #define CSS_PROP_USERINTERFACE ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_USERINTERFACE
-  ePropertyCount_for_UserInterface
-};
-
-enum UIResetCheckCounter {
-  #define CSS_PROP_UIRESET ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_UIRESET
-  ePropertyCount_for_UIReset
-};
-
-enum XULCheckCounter {
-  #define CSS_PROP_XUL ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_XUL
-  ePropertyCount_for_XUL
-};
-
-enum SVGCheckCounter {
-  #define CSS_PROP_SVG ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_SVG
-  ePropertyCount_for_SVG
-};
-
-enum SVGResetCheckCounter {
-  #define CSS_PROP_SVGRESET ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_SVGRESET
-  ePropertyCount_for_SVGReset
-};
-
-enum ColumnCheckCounter {
-  #define CSS_PROP_COLUMN ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_COLUMN
-  ePropertyCount_for_Column
-};
-
-enum VariablesCheckCounter {
-  #define CSS_PROP_VARIABLES ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_VARIABLES
-  ePropertyCount_for_Variables
-};
-
-enum EffectsCheckCounter {
-  #define CSS_PROP_EFFECTS ENUM_DATA_FOR_PROPERTY
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP_EFFECTS
-  ePropertyCount_for_Effects
-};
-
-#undef ENUM_DATA_FOR_PROPERTY
-
-/* static */ const size_t
-nsCSSProps::gPropertyCountInStruct[nsStyleStructID_Length] = {
-  #define STYLE_STRUCT(name) ePropertyCount_for_##name,
-  #include "nsStyleStructList.h"
-  #undef STYLE_STRUCT
-};
-
-/* static */ const size_t
-nsCSSProps::gPropertyIndexInStruct[eCSSProperty_COUNT_no_shorthands] = {
-
-  #define CSS_PROP_LOGICAL(name_, id_, method_, flags_, pref_, parsevariant_, \
-                           kwtable_, group_, stylestruct_,                    \
-                           stylestructoffset_, animtype_)                     \
-      size_t(-1),
-  #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_,     \
-                   kwtable_, stylestruct_, stylestructoffset_, animtype_) \
-    ePropertyIndex_for_##id_,
-  #include "nsCSSPropList.h"
-  #undef CSS_PROP
-  #undef CSS_PROP_LOGICAL
-
-};
-
 /* static */ bool
 nsCSSProps::gPropertyEnabled[eCSSProperty_COUNT_with_aliases] = {
   // If the property has any "ENABLED_IN" flag set, it is disabled by
   // default. Note that, if a property has pref, whatever its default
   // value is, it will later be changed in nsCSSProps::AddRefTable().
   // If the property has "ENABLED_IN" flags but doesn't have a pref,
   // it is an internal property which is disabled elsewhere.
   #define IS_ENABLED_BY_DEFAULT(flags_) \
     (!((flags_) & CSS_PROPERTY_ENABLED_MASK))
 
-  #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_,     \
-                   kwtable_, stylestruct_, stylestructoffset_, animtype_) \
+  #define CSS_PROP(name_, id_, method_, flags_, ...) \
     IS_ENABLED_BY_DEFAULT(flags_),
   #define CSS_PROP_LIST_INCLUDE_LOGICAL
   #include "nsCSSPropList.h"
   #undef CSS_PROP_LIST_INCLUDE_LOGICAL
   #undef CSS_PROP
 
   #define  CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_) \
     IS_ENABLED_BY_DEFAULT(flags_),
@@ -3340,61 +2771,27 @@ nsCSSProps::gPropertyEnabled[eCSSPropert
 };
 
 #include "../../dom/base/PropertyUseCounterMap.inc"
 
 /* static */ const UseCounter
 nsCSSProps::gPropertyUseCounter[eCSSProperty_COUNT_no_shorthands] = {
   #define CSS_PROP_PUBLIC_OR_PRIVATE(publicname_, privatename_) privatename_
   #define CSS_PROP_LIST_INCLUDE_LOGICAL
-  #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_,     \
-                   kwtable_, stylestruct_, stylestructoffset_, animtype_) \
+  #define CSS_PROP(name_, id_, method_, ...) \
     static_cast<UseCounter>(USE_COUNTER_FOR_CSS_PROPERTY_##method_),
   #include "nsCSSPropList.h"
   #undef CSS_PROP
   #undef CSS_PROP_LIST_INCLUDE_LOGICAL
   #undef CSS_PROP_PUBLIC_OR_PRIVATE
 };
 
 const uint32_t
 nsCSSProps::kParserVariantTable[eCSSProperty_COUNT_no_shorthands] = {
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \
-                 stylestruct_, stylestructoffset_, animtype_)                 \
+#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, ...) \
   parsevariant_,
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
 #include "nsCSSPropList.h"
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP
 };
 
-// Check that all logical property flags are used appropriately.
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_,         \
-                 kwtable_, stylestruct_, stylestructoffset_, animtype_)     \
-  static_assert(!((flags_) & CSS_PROPERTY_LOGICAL),                         \
-                "only properties defined with CSS_PROP_LOGICAL can use "    \
-                "the CSS_PROPERTY_LOGICAL flag");                           \
-  static_assert(!((flags_) & CSS_PROPERTY_LOGICAL_AXIS),                    \
-                "only properties defined with CSS_PROP_LOGICAL can use "    \
-                "the CSS_PROPERTY_LOGICAL_AXIS flag");                      \
-  static_assert(!((flags_) & CSS_PROPERTY_LOGICAL_BLOCK_AXIS),              \
-                "only properties defined with CSS_PROP_LOGICAL can use "    \
-                "the CSS_PROPERTY_LOGICAL_BLOCK_AXIS flag");                \
-  static_assert(!((flags_) & CSS_PROPERTY_LOGICAL_END_EDGE),                \
-                "only properties defined with CSS_PROP_LOGICAL can use "    \
-                "the CSS_PROPERTY_LOGICAL_END_EDGE flag");
-#define CSS_PROP_LOGICAL(name_, id_, method_, flags_, pref_, parsevariant_, \
-                         kwtable_, group_, stylestruct_,                    \
-                         stylestructoffset_, animtype_)                     \
-  static_assert((flags_) & CSS_PROPERTY_LOGICAL,                            \
-                "properties defined with CSS_PROP_LOGICAL must also use "   \
-                "the CSS_PROPERTY_LOGICAL flag");                           \
-  static_assert(!((flags_) & CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED),    \
-                "CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED has no effect "  \
-                "on logical properties");                                   \
-  static_assert(!(((flags_) & CSS_PROPERTY_LOGICAL_AXIS) &&                 \
-                  ((flags_) & CSS_PROPERTY_LOGICAL_END_EDGE)),              \
-                "CSS_PROPERTY_LOGICAL_END_EDGE makes no sense when used "   \
-                "with CSS_PROPERTY_LOGICAL_AXIS");
-#include "nsCSSPropList.h"
-#undef CSS_PROP_LOGICAL
-#undef CSS_PROP
-
 #include "nsCSSPropsGenerated.inc"
--- a/layout/style/nsCSSProps.h
+++ b/layout/style/nsCSSProps.h
@@ -119,111 +119,38 @@
 #define VARIANT_LPCALC (VARIANT_LCALC | VARIANT_PERCENT)
 #define VARIANT_LNCALC (VARIANT_LCALC | VARIANT_NUMBER)
 #define VARIANT_LPNCALC (VARIANT_LNCALC | VARIANT_PERCENT)
 #define VARIANT_IMAGE   (VARIANT_URL | VARIANT_NONE | VARIANT_GRADIENT | \
                         VARIANT_IMAGE_RECT | VARIANT_ELEMENT)
 
 // Flags for the kFlagsTable bitfield (flags_ in nsCSSPropList.h)
 
-// This property is a logical property (such as padding-inline-start).
-#define CSS_PROPERTY_LOGICAL                      (1<<0)
-
 #define CSS_PROPERTY_VALUE_LIST_USES_COMMAS       (1<<1) /* otherwise spaces */
 
-#define CSS_PROPERTY_APPLIES_TO_FIRST_LETTER      (1<<2)
-#define CSS_PROPERTY_APPLIES_TO_FIRST_LINE        (1<<3)
-#define CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE \
-  (CSS_PROPERTY_APPLIES_TO_FIRST_LETTER | CSS_PROPERTY_APPLIES_TO_FIRST_LINE)
-
-// Note that 'background-color' is ignored differently from the other
-// properties that have this set, but that's just special-cased.
-#define CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED (1<<4)
-
-// A property that needs to have image loads started when a URL value
-// for the property is used for an element.  This is supported only
-// for a few possible value formats: image directly in the value; list
-// of images; and with CSS_PROPERTY_IMAGE_IS_IN_ARRAY_0, image in slot
-// 0 of an array, or list of such arrays.
-#define CSS_PROPERTY_START_IMAGE_LOADS            (1<<5)
-
-// Should be set only for properties with START_IMAGE_LOADS.  Indicates
-// that the property has an array value with a URL/image value at index
-// 0 in the array, rather than the URL/image being in the value or value
-// list.
-#define CSS_PROPERTY_IMAGE_IS_IN_ARRAY_0          (1<<6)
-
-// This is a logical property that represents some value associated with
-// a logical axis rather than a logical box side, and thus has two
-// corresponding physical properties it could set rather than four.  For
-// example, the block-size logical property has this flag set, as it
-// represents the size in either the block or inline axis dimensions, and
-// has two corresponding physical properties, width and height.  Must not
-// be used in conjunction with CSS_PROPERTY_LOGICAL_END_EDGE.
-#define CSS_PROPERTY_LOGICAL_AXIS                 (1<<7)
-
-// This property allows calc() between lengths and percentages and
-// stores such calc() expressions in its style structs (typically in an
-// nsStyleCoord, although this is not the case for 'background-position'
-// and 'background-size').
-#define CSS_PROPERTY_STORES_CALC                  (1<<8)
-
 // Define what mechanism the CSS parser uses for parsing the property.
 // See CSSParserImpl::ParseProperty(nsCSSPropertyID).  Don't use 0 so that
 // we can verify that every property sets one of the values.
-//
-// CSS_PROPERTY_PARSE_FUNCTION must be used for shorthand properties,
-// since it's the only mechanism that allows appending values for
-// separate properties.  Longhand properties that require custom parsing
-// functions should prefer using CSS_PROPERTY_PARSE_VALUE (or
-// CSS_PROPERTY_PARSE_VALUE_LIST) and
-// CSS_PROPERTY_VALUE_PARSER_FUNCTION, though a number of existing
-// longhand properties use CSS_PROPERTY_PARSE_FUNCTION instead.
 #define CSS_PROPERTY_PARSE_PROPERTY_MASK          (7<<9)
 #define CSS_PROPERTY_PARSE_INACCESSIBLE           (1<<9)
 #define CSS_PROPERTY_PARSE_FUNCTION               (2<<9)
-#define CSS_PROPERTY_PARSE_VALUE                  (3<<9)
-#define CSS_PROPERTY_PARSE_VALUE_LIST             (4<<9)
 
 // See CSSParserImpl::ParseSingleValueProperty and comment above
 // CSS_PROPERTY_PARSE_FUNCTION (which is different).
 #define CSS_PROPERTY_VALUE_PARSER_FUNCTION        (1<<12)
 static_assert((CSS_PROPERTY_PARSE_PROPERTY_MASK &
                CSS_PROPERTY_VALUE_PARSER_FUNCTION) == 0,
               "didn't leave enough room for the parse property constants");
 
-#define CSS_PROPERTY_VALUE_RESTRICTION_MASK       (3<<13)
-// The parser (in particular, CSSParserImpl::ParseSingleValueProperty)
-// should enforce that the value of this property must be 0 or larger.
-#define CSS_PROPERTY_VALUE_NONNEGATIVE            (1<<13)
-// The parser (in particular, CSSParserImpl::ParseSingleValueProperty)
-// should enforce that the value of this property must be 1 or larger.
-#define CSS_PROPERTY_VALUE_AT_LEAST_ONE           (2<<13)
-
-// Does this property support the hashless hex color quirk in quirks mode?
-#define CSS_PROPERTY_HASHLESS_COLOR_QUIRK         (1<<15)
-
-// Does this property support the unitless length quirk in quirks mode?
-#define CSS_PROPERTY_UNITLESS_LENGTH_QUIRK        (1<<16)
-
 // There's a free bit here.
 
-// Does the property apply to ::placeholder?
-#define CSS_PROPERTY_APPLIES_TO_PLACEHOLDER       (1<<18)
-
-// This property is allowed in an @page rule.
-#define CSS_PROPERTY_APPLIES_TO_PAGE_RULE         (1<<19)
-
 // This property's getComputedStyle implementation requires layout to be
 // flushed.
 #define CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH     (1<<20)
 
-// This property requires a stacking context.
-#define CSS_PROPERTY_CREATES_STACKING_CONTEXT     (1<<21)
-
 // The following two flags along with the pref defines where the this
 // property can be used:
 // * If none of the two flags is presented, the pref completely controls
 //   the availability of this property. And in that case, if it has no
 //   pref, this property is usable everywhere.
 // * If any of the flags is set, this property is always enabled in the
 //   specific contexts regardless of the value of the pref. If there is
 //   no pref for this property at all in this case, it is an internal-
@@ -236,63 +163,24 @@ static_assert((CSS_PROPERTY_PARSE_PROPER
 // by a pref, we will *not* run animations or transitions on it even in
 // UA sheets or chrome.
 #define CSS_PROPERTY_ENABLED_MASK                 (3<<22)
 #define CSS_PROPERTY_ENABLED_IN_UA_SHEETS         (1<<22)
 #define CSS_PROPERTY_ENABLED_IN_CHROME            (1<<23)
 #define CSS_PROPERTY_ENABLED_IN_UA_SHEETS_AND_CHROME \
   (CSS_PROPERTY_ENABLED_IN_UA_SHEETS | CSS_PROPERTY_ENABLED_IN_CHROME)
 
-// This property's unitless values are pixels.
-#define CSS_PROPERTY_NUMBERS_ARE_PIXELS           (1<<24)
-
-// This property is a logical property for one of the two block axis
-// sides (such as margin-block-start or margin-block-end).  Must only be
-// set if CSS_PROPERTY_LOGICAL is set.  When not set, the logical
-// property is for one of the two inline axis sides (such as
-// margin-inline-start or margin-inline-end).
-#define CSS_PROPERTY_LOGICAL_BLOCK_AXIS           (1<<25)
-
-// This property is a logical property for the "end" edge of the
-// axis determined by the presence or absence of
-// CSS_PROPERTY_LOGICAL_BLOCK_AXIS (such as margin-block-end or
-// margin-inline-end).  Must only be set if CSS_PROPERTY_LOGICAL is set.
-// When not set, the logical property is for the "start" edge (such as
-// margin-block-start or margin-inline-start).
-#define CSS_PROPERTY_LOGICAL_END_EDGE             (1<<26)
-
 // This property can be animated on the compositor.
 #define CSS_PROPERTY_CAN_ANIMATE_ON_COMPOSITOR    (1<<27)
 
 // This property is an internal property that is not represented
 // in the DOM.  Properties with this flag must be defined in an #ifndef
 // CSS_PROP_LIST_EXCLUDE_INTERNAL section of nsCSSPropList.h.
 #define CSS_PROPERTY_INTERNAL                     (1<<28)
 
-// This property has values that can establish a containing block for
-// fixed positioned and absolutely positioned elements.
-// This should be set for any properties that can cause an element to be
-// such a containing block, as implemented in
-// nsStyleDisplay::IsFixedPosContainingBlock.
-#define CSS_PROPERTY_FIXPOS_CB                    (1<<29)
-
-// This property has values that can establish a containing block for
-// absolutely positioned elements.
-// This should be set for any properties that can cause an element to be
-// such a containing block, as implemented in
-// nsStyleDisplay::IsAbsPosContainingBlock.
-// It does not need to be set for properties that also have
-// CSS_PROPERTY_FIXPOS_CB set.
-#define CSS_PROPERTY_ABSPOS_CB                    (1<<30)
-
-// This property should add Cross Origin Request headers to any loads
-// that it triggers. Currently this is only used for properties that
-// also use CSS_PROPERTY_START_IMAGE_LOADS.
-#define CSS_PROPERTY_LOAD_USE_CORS                (1U<<31)
-
 /**
  * Types of animatable values.
  */
 enum nsStyleAnimType {
   // requires a custom implementation in
   // StyleAnimationValue::ExtractComputedValue
   eStyleAnimType_Custom,
 
@@ -375,52 +263,37 @@ public:
   static void AddRefTable(void);
   static void ReleaseTable(void);
 
   // Looks up the property with name aProperty and returns its corresponding
   // nsCSSPropertyID value.  If aProperty is the name of a custom property,
   // then eCSSPropertyExtra_variable will be returned.
   static nsCSSPropertyID LookupProperty(const nsAString& aProperty,
                                       EnabledState aEnabled);
-  static nsCSSPropertyID LookupProperty(const nsACString& aProperty,
-                                      EnabledState aEnabled);
   // As above, but looked up using a property's IDL name.
   // eCSSPropertyExtra_variable won't be returned from these methods.
   static nsCSSPropertyID LookupPropertyByIDLName(
       const nsAString& aPropertyIDLName,
       EnabledState aEnabled);
   static nsCSSPropertyID LookupPropertyByIDLName(
       const nsACString& aPropertyIDLName,
       EnabledState aEnabled);
 
   // Returns whether aProperty is a custom property name, i.e. begins with
   // "--".  This assumes that the CSS Variables pref has been enabled.
   static bool IsCustomPropertyName(const nsAString& aProperty);
-  static bool IsCustomPropertyName(const nsACString& aProperty);
 
   static inline bool IsShorthand(nsCSSPropertyID aProperty) {
     MOZ_ASSERT(0 <= aProperty && aProperty < eCSSProperty_COUNT,
                "out of range");
     return (aProperty >= eCSSProperty_COUNT_no_shorthands);
   }
 
-  // Must be given a longhand property.
-  static bool IsInherited(nsCSSPropertyID aProperty);
-
   // Same but for @font-face descriptors
   static nsCSSFontDesc LookupFontDesc(const nsAString& aProperty);
-  static nsCSSFontDesc LookupFontDesc(const nsACString& aProperty);
-
-  // For @counter-style descriptors
-  static nsCSSCounterDesc LookupCounterDesc(const nsAString& aProperty);
-  static nsCSSCounterDesc LookupCounterDesc(const nsACString& aProperty);
-
-  // For predefined counter styles which need to be lower-cased during parse
-  static bool IsPredefinedCounterStyle(const nsAString& aStyle);
-  static bool IsPredefinedCounterStyle(const nsACString& aStyle);
 
   // Given a property enum, get the string value
   static const nsCString& GetStringValue(nsCSSPropertyID aProperty);
   static const nsCString& GetStringValue(nsCSSFontDesc aFontDesc);
   static const nsCString& GetStringValue(nsCSSCounterDesc aCounterDesc);
 
   // Given a CSS Property and a Property Enum Value
   // Return back a const nsString& representation of the
@@ -464,18 +337,16 @@ public:
     static_assert(mozilla::EnumTypeFitsWithin<T, int16_t>::value,
                   "aValue must be an enum that fits within KTableEntry::mValue");
     return ValueToKeyword(static_cast<int16_t>(aValue), aTable);
   }
 
   static const nsStyleStructID kSIDTable[eCSSProperty_COUNT_no_shorthands];
   static const KTableEntry* const kKeywordTableTable[eCSSProperty_COUNT_no_shorthands];
   static const nsStyleAnimType kAnimTypeTable[eCSSProperty_COUNT_no_shorthands];
-  static const ptrdiff_t
-    kStyleStructOffsetTable[eCSSProperty_COUNT_no_shorthands];
 
 private:
   static const uint32_t        kFlagsTable[eCSSProperty_COUNT];
 
 public:
   static inline bool PropHasFlags(nsCSSPropertyID aProperty, uint32_t aFlags)
   {
     MOZ_ASSERT(0 <= aProperty && aProperty < eCSSProperty_COUNT,
@@ -490,24 +361,16 @@ public:
   static inline uint32_t PropertyParseType(nsCSSPropertyID aProperty)
   {
     MOZ_ASSERT(0 <= aProperty && aProperty < eCSSProperty_COUNT,
                "out of range");
     return nsCSSProps::kFlagsTable[aProperty] &
            CSS_PROPERTY_PARSE_PROPERTY_MASK;
   }
 
-  static inline uint32_t ValueRestrictions(nsCSSPropertyID aProperty)
-  {
-    MOZ_ASSERT(0 <= aProperty && aProperty < eCSSProperty_COUNT,
-               "out of range");
-    return nsCSSProps::kFlagsTable[aProperty] &
-           CSS_PROPERTY_VALUE_RESTRICTION_MASK;
-  }
-
 private:
   static const uint32_t kParserVariantTable[eCSSProperty_COUNT_no_shorthands];
 
 public:
   static inline uint32_t ParserVariant(nsCSSPropertyID aProperty) {
     MOZ_ASSERT(0 <= aProperty && aProperty < eCSSProperty_COUNT_no_shorthands,
                "out of range");
     return nsCSSProps::kParserVariantTable[aProperty];
@@ -524,85 +387,16 @@ public:
   const nsCSSPropertyID * SubpropertyEntryFor(nsCSSPropertyID aProperty) {
     MOZ_ASSERT(eCSSProperty_COUNT_no_shorthands <= aProperty &&
                aProperty < eCSSProperty_COUNT,
                "out of range");
     return nsCSSProps::kSubpropertyTable[aProperty -
                                          eCSSProperty_COUNT_no_shorthands];
   }
 
-  // Returns an eCSSProperty_UNKNOWN-terminated array of the shorthand
-  // properties containing |aProperty|, sorted from those that contain
-  // the most properties to those that contain the least.
-  static const nsCSSPropertyID * ShorthandsContaining(nsCSSPropertyID aProperty) {
-    MOZ_ASSERT(gShorthandsContainingPool, "uninitialized");
-    MOZ_ASSERT(0 <= aProperty && aProperty < eCSSProperty_COUNT_no_shorthands,
-               "out of range");
-    return gShorthandsContainingTable[aProperty];
-  }
-private:
-  // gShorthandsContainingTable is an array of the return values for
-  // ShorthandsContaining (arrays of nsCSSPropertyID terminated by
-  // eCSSProperty_UNKNOWN) pointing into memory in
-  // gShorthandsContainingPool (which contains all of those arrays in a
-  // single allocation, and is the one pointer that should be |free|d).
-  static nsCSSPropertyID *gShorthandsContainingTable[eCSSProperty_COUNT_no_shorthands];
-  static nsCSSPropertyID* gShorthandsContainingPool;
-  static bool BuildShorthandsContainingTable();
-
-private:
-  static const size_t gPropertyCountInStruct[nsStyleStructID_Length];
-  static const size_t gPropertyIndexInStruct[eCSSProperty_COUNT_no_shorthands];
-public:
-  /**
-   * Return the number of properties that must be cascaded when
-   * nsRuleNode builds the nsStyle* for aSID.
-   */
-  static size_t PropertyCountInStruct(nsStyleStructID aSID) {
-    MOZ_ASSERT(0 <= aSID && aSID < nsStyleStructID_Length,
-               "out of range");
-    return gPropertyCountInStruct[aSID];
-  }
-  /**
-   * Return an index for aProperty that is unique within its SID and in
-   * the range 0 <= index < PropertyCountInStruct(aSID).
-   */
-  static size_t PropertyIndexInStruct(nsCSSPropertyID aProperty) {
-    MOZ_ASSERT(0 <= aProperty && aProperty < eCSSProperty_COUNT_no_shorthands,
-               "out of range");
-    return gPropertyIndexInStruct[aProperty];
-  }
-
-private:
-  // A table for logical property groups.  Indexes are
-  // nsCSSPropertyLogicalGroup values.
-  static const nsCSSPropertyID* const
-    kLogicalGroupTable[eCSSPropertyLogicalGroup_COUNT];
-
-public:
-  /**
-   * Returns an array of longhand physical properties which can be set by
-   * the argument, which must be a logical longhand property.  The returned
-   * array is terminated by an eCSSProperty_UNKNOWN value.  For example,
-   * given eCSSProperty_margin_block_start, returns an array of the four
-   * properties eCSSProperty_margin_top, eCSSProperty_margin_right,
-   * eCSSProperty_margin_bottom and eCSSProperty_margin_left, followed
-   * by the sentinel.
-   *
-   * When called with a property that has the CSS_PROPERTY_LOGICAL_AXIS
-   * flag, the returned array will have two values preceding the sentinel;
-   * otherwise it will have four.
-   *
-   * (Note that the running time of this function is proportional to the
-   * number of logical longhand properties that exist.  If we start
-   * getting too many of these properties, we should make kLogicalGroupTable
-   * be a simple array of eCSSProperty_COUNT length.)
-   */
-  static const nsCSSPropertyID* LogicalGroup(nsCSSPropertyID aProperty);
-
 private:
   static bool gPropertyEnabled[eCSSProperty_COUNT_with_aliases];
 
 private:
   // Defined in the generated nsCSSPropsGenerated.inc.
   static const char* const kIDLNameTable[eCSSProperty_COUNT];
 
 public:
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -7160,35 +7160,33 @@ nsComputedDOMStyle::RegisterPrefChangeCa
   // just those that are implemented on computed style objects, as it's not
   // easy to grab specific property data from nsCSSPropList.h based on the
   // entries iterated in nsComputedDOMStylePropertyList.h.
   ComputedStyleMap* data = GetComputedStyleMap();
 #define REGISTER_CALLBACK(pref_)                                             \
   if (pref_[0]) {                                                            \
     Preferences::RegisterCallback(MarkComputedStyleMapDirty, pref_, data);   \
   }
-#define CSS_PROP(prop_, id_, method_, flags_, pref_, parsevariant_,          \
-                 kwtable_, stylestruct_, stylestructoffset_, animtype_)      \
+#define CSS_PROP(prop_, id_, method_, flags_, pref_, ...) \
   REGISTER_CALLBACK(pref_)
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
 #include "nsCSSPropList.h"
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP
 #undef REGISTER_CALLBACK
 }
 
 /* static */ void
 nsComputedDOMStyle::UnregisterPrefChangeCallbacks()
 {
   ComputedStyleMap* data = GetComputedStyleMap();
 #define UNREGISTER_CALLBACK(pref_)                                             \
   if (pref_[0]) {                                                              \
     Preferences::UnregisterCallback(MarkComputedStyleMapDirty, pref_, data);   \
   }
-#define CSS_PROP(prop_, id_, method_, flags_, pref_, parsevariant_,            \
-                 kwtable_, stylestruct_, stylestructoffset_, animtype_)        \
+#define CSS_PROP(prop_, id_, method_, flags_, pref_, ...) \
   UNREGISTER_CALLBACK(pref_)
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
 #include "nsCSSPropList.h"
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP
 #undef UNREGISTER_CALLBACK
 }
--- a/layout/style/nsDOMCSSDeclaration.h
+++ b/layout/style/nsDOMCSSDeclaration.h
@@ -78,39 +78,37 @@ public:
   NS_IMETHOD SetProperty(const nsAString& propertyName,
                          const nsAString& value,
                          const nsAString& priority,
                          nsIPrincipal* aSubjectPrincipal) override;
   uint32_t Length() override;
 
   // WebIDL interface for CSS2Properties
 #define CSS_PROP_PUBLIC_OR_PRIVATE(publicname_, privatename_) publicname_
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_,          \
-                 kwtable_, stylestruct_, stylestructoffset_, animtype_)      \
+#define CSS_PROP(name_, id_, method_, ...)                                   \
   void                                                                       \
   Get##method_(nsAString& aValue, mozilla::ErrorResult& rv)                  \
   {                                                                          \
     rv = GetPropertyValue(eCSSProperty_##id_, aValue);                       \
   }                                                                          \
                                                                              \
   void                                                                       \
   Set##method_(const nsAString& aValue, nsIPrincipal* aSubjectPrincipal,     \
                mozilla::ErrorResult& rv)                                     \
   {                                                                          \
     rv = SetPropertyValue(eCSSProperty_##id_, aValue, aSubjectPrincipal);    \
   }
 
 #define CSS_PROP_LIST_EXCLUDE_INTERNAL
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
-#define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_)  \
-  CSS_PROP(name_, id_, method_, flags_, pref_, X, X, X, X, X)
+#define CSS_PROP_SHORTHAND(name_, id_, method_, ...)  CSS_PROP(name_, id_, method_, )
 #include "nsCSSPropList.h"
 
-#define CSS_PROP_ALIAS(aliasname_, aliasid_, propid_, aliasmethod_, pref_)  \
-  CSS_PROP(X, propid_, aliasmethod_, X, pref_, X, X, X, X, X)
+#define CSS_PROP_ALIAS(aliasname_, aliasid_, propid_, aliasmethod_, ...)  \
+  CSS_PROP(X, propid_, aliasmethod_, )
 #include "nsCSSPropAliasList.h"
 #undef CSS_PROP_ALIAS
 
 #undef CSS_PROP_SHORTHAND
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP_LIST_EXCLUDE_INTERNAL
 #undef CSS_PROP
 #undef CSS_PROP_PUBLIC_OR_PRIVATE
--- a/layout/style/nsStyleStructInlines.h
+++ b/layout/style/nsStyleStructInlines.h
@@ -148,17 +148,17 @@ nsStyleDisplay::HasTransform(const nsIFr
 }
 
 template<class ComputedStyleLike>
 bool
 nsStyleDisplay::HasFixedPosContainingBlockStyleInternal(
                   ComputedStyleLike* aComputedStyle) const
 {
   // NOTE: Any CSS properties that influence the output of this function
-  // should have the CSS_PROPERTY_FIXPOS_CB set on them.
+  // should have the FIXPOS_CB flag set on them.
   NS_ASSERTION(aComputedStyle->ThreadsafeStyleDisplay() == this,
                "unexpected aComputedStyle");
 
   if (IsContainPaint() || HasPerspectiveStyle()) {
     return true;
   }
 
   if (mWillChangeBitField & NS_STYLE_WILL_CHANGE_FIXPOS_CB) {
@@ -169,62 +169,62 @@ nsStyleDisplay::HasFixedPosContainingBlo
 }
 
 template<class ComputedStyleLike>
 bool
 nsStyleDisplay::IsFixedPosContainingBlockForAppropriateFrame(
                   ComputedStyleLike* aComputedStyle) const
 {
   // NOTE: Any CSS properties that influence the output of this function
-  // should have the CSS_PROPERTY_FIXPOS_CB set on them.
+  // should have the FIXPOS_CB flag set on them.
   return HasFixedPosContainingBlockStyleInternal(aComputedStyle) ||
          HasTransformStyle();
 }
 
 bool
 nsStyleDisplay::IsFixedPosContainingBlock(const nsIFrame* aContextFrame) const
 {
   // NOTE: Any CSS properties that influence the output of this function
-  // should have the CSS_PROPERTY_FIXPOS_CB set on them.
+  // should have the FIXPOS_CB flag set on them.
   if (!HasFixedPosContainingBlockStyleInternal(aContextFrame->Style()) &&
       !HasTransform(aContextFrame)) {
     return false;
   }
   return !nsSVGUtils::IsInSVGTextSubtree(aContextFrame);
 }
 
 template<class ComputedStyleLike>
 bool
 nsStyleDisplay::HasAbsPosContainingBlockStyleInternal(
                   ComputedStyleLike* aComputedStyle) const
 {
   // NOTE: Any CSS properties that influence the output of this function
-  // should have the CSS_PROPERTY_ABSPOS_CB set on them.
+  // should have the ABSPOS_CB set on them.
   NS_ASSERTION(aComputedStyle->ThreadsafeStyleDisplay() == this,
                "unexpected aComputedStyle");
   return IsAbsolutelyPositionedStyle() ||
          IsRelativelyPositionedStyle() ||
          (mWillChangeBitField & NS_STYLE_WILL_CHANGE_ABSPOS_CB);
 }
 
 template<class ComputedStyleLike>
 bool
 nsStyleDisplay::IsAbsPosContainingBlockForAppropriateFrame(ComputedStyleLike* aComputedStyle) const
 {
   // NOTE: Any CSS properties that influence the output of this function
-  // should have the CSS_PROPERTY_ABSPOS_CB set on them.
+  // should have the ABSPOS_CB set on them.
   return HasAbsPosContainingBlockStyleInternal(aComputedStyle) ||
          IsFixedPosContainingBlockForAppropriateFrame(aComputedStyle);
 }
 
 bool
 nsStyleDisplay::IsAbsPosContainingBlock(const nsIFrame* aContextFrame) const
 {
   // NOTE: Any CSS properties that influence the output of this function
-  // should have the CSS_PROPERTY_ABSPOS_CB set on them.
+  // should have the ABSPOS_CB set on them.
   mozilla::ComputedStyle* sc = aContextFrame->Style();
   if (!HasAbsPosContainingBlockStyleInternal(sc) &&
       !HasFixedPosContainingBlockStyleInternal(sc) &&
       !HasTransform(aContextFrame)) {
     return false;
   }
   return !nsSVGUtils::IsInSVGTextSubtree(aContextFrame);
 }
--- a/layout/style/test/ListCSSProperties.cpp
+++ b/layout/style/test/ListCSSProperties.cpp
@@ -14,18 +14,17 @@ struct PropertyInfo {
     const char *propName;
     const char *domName;
     const char *pref;
 };
 
 const PropertyInfo gLonghandProperties[] = {
 
 #define CSS_PROP_PUBLIC_OR_PRIVATE(publicname_, privatename_) publicname_
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \
-                 stylestruct_, stylestructoffset_, animtype_)                 \
+#define CSS_PROP(name_, id_, method_, flags_, pref_, ...) \
     { #name_, #method_, pref_ },
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
 
 #include "nsCSSPropList.h"
 
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP
 #undef CSS_PROP_PUBLIC_OR_PRIVATE
@@ -35,19 +34,17 @@ const PropertyInfo gLonghandProperties[]
 /*
  * These are the properties for which domName in the above list should
  * be used.  They're in the same order as the above list, with some
  * items skipped.
  */
 const char* gLonghandPropertiesWithDOMProp[] = {
 
 #define CSS_PROP_LIST_EXCLUDE_INTERNAL
-#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \
-                 stylestruct_, stylestructoffset_, animtype_)                 \
-    #name_,
+#define CSS_PROP(name_, ...) #name_,
 #define CSS_PROP_LIST_INCLUDE_LOGICAL
 
 #include "nsCSSPropList.h"
 
 #undef CSS_PROP_LIST_INCLUDE_LOGICAL
 #undef CSS_PROP
 #undef CSS_PROP_LIST_EXCLUDE_INTERNAL
 
--- a/layout/svg/nsSVGImageFrame.cpp
+++ b/layout/svg/nsSVGImageFrame.cpp
@@ -351,16 +351,17 @@ nsSVGImageFrame::PaintSVG(gfxContext& aC
     } else { // mImageContainer->GetType() == TYPE_RASTER
       aImgParams.result &= nsLayoutUtils::DrawSingleUnscaledImage(
         aContext,
         PresContext(),
         mImageContainer,
         nsLayoutUtils::GetSamplingFilterForFrame(this),
         nsPoint(0, 0),
         aDirtyRect ? &dirtyRect : nullptr,
+        Nothing(),
         flags);
     }
 
     if (opacity != 1.0f || StyleEffects()->mMixBlendMode != NS_STYLE_BLEND_NORMAL) {
       aContext.PopGroupAndBlend();
     }
     // gfxContextAutoSaveRestore goes out of scope & cleans up our gfxContext
   }
--- a/layout/xul/tree/nsTreeBodyFrame.cpp
+++ b/layout/xul/tree/nsTreeBodyFrame.cpp
@@ -3489,29 +3489,34 @@ nsTreeBodyFrame::PaintTwisty(int32_t    
         twistyRect.x = rightEdge - twistyRect.width;
       imageSize.Deflate(bp);
 
       // Get the image for drawing.
       nsCOMPtr<imgIContainer> image;
       bool useImageRegion = true;
       GetImage(aRowIndex, aColumn, true, twistyContext, useImageRegion, getter_AddRefs(image));
       if (image) {
-        nsPoint pt = twistyRect.TopLeft();
+        nsPoint anchorPoint = twistyRect.TopLeft();
 
         // Center the image. XXX Obey vertical-align style prop?
         if (imageSize.height < twistyRect.height) {
-          pt.y += (twistyRect.height - imageSize.height)/2;
+          anchorPoint.y += (twistyRect.height - imageSize.height)/2;
         }
 
+        // Apply context paint if applicable
+        Maybe<SVGImageContext> svgContext;
+        SVGImageContext::MaybeStoreContextPaint(svgContext, twistyContext,
+                                                image);
+
         // Paint the image.
         result &=
           nsLayoutUtils::DrawSingleUnscaledImage(
               aRenderingContext, aPresContext, image,
-              SamplingFilter::POINT, pt, &aDirtyRect,
-              imgIContainer::FLAG_NONE, &imageSize);
+              SamplingFilter::POINT, anchorPoint, &aDirtyRect,
+              svgContext, imgIContainer::FLAG_NONE, &imageSize);
       }
     }
   }
 
   return result;
 }
 
 ImgDrawResult
@@ -3876,22 +3881,26 @@ nsTreeBodyFrame::PaintCheckbox(int32_t  
     if (imageSize.height < checkboxRect.height) {
       pt.y += (checkboxRect.height - imageSize.height)/2;
     }
 
     if (imageSize.width < checkboxRect.width) {
       pt.x += (checkboxRect.width - imageSize.width)/2;
     }
 
+    // Apply context paint if applicable
+    Maybe<SVGImageContext> svgContext;
+    SVGImageContext::MaybeStoreContextPaint(svgContext, checkboxContext,
+                                            image);
     // Paint the image.
     result &=
       nsLayoutUtils::DrawSingleUnscaledImage(aRenderingContext,
         aPresContext,
         image, SamplingFilter::POINT, pt, &aDirtyRect,
-        imgIContainer::FLAG_NONE, &imageSize);
+        svgContext, imgIContainer::FLAG_NONE, &imageSize);
   }
 
   return result;
 }
 
 ImgDrawResult
 nsTreeBodyFrame::PaintDropFeedback(const nsRect&        aDropFeedbackRect,
                                    nsPresContext*      aPresContext,
--- a/media/libtheora/README_MOZILLA
+++ b/media/libtheora/README_MOZILLA
@@ -1,5 +1,5 @@
-The source from this directory was copied from the theora subversion trunk
+The source from this directory was copied from the theora git master
 using the update.sh script. The changes made were those applied by update.sh,
 the addition/update of Makefile.in files for the Mozilla build system.
 
-The subversion revision used was r17578.
+The git commit used was 74b57560775804bf248e3e5b4e57964112ccd7af
--- a/memory/mozalloc/mozalloc.h
+++ b/memory/mozalloc/mozalloc.h
@@ -193,16 +193,31 @@ void operator delete[](void* ptr) MOZALL
 }
 
 MOZALLOC_EXPORT_NEW MOZ_ALWAYS_INLINE_EVEN_DEBUG
 void operator delete[](void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
 {
     return free_impl(ptr);
 }
 
+#if defined(XP_WIN)
+// We provide the global sized delete overloads unconditionally because the
+// MSVC runtime headers do, despite compiling with /Zc:sizedDealloc-
+MOZALLOC_EXPORT_NEW MOZ_ALWAYS_INLINE_EVEN_DEBUG
+void operator delete(void* ptr, size_t /*size*/) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    return free_impl(ptr);
+}
+
+MOZALLOC_EXPORT_NEW MOZ_ALWAYS_INLINE_EVEN_DEBUG
+void operator delete[](void* ptr, size_t /*size*/) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    return free_impl(ptr);
+}
+#endif
 
 /*
  * This policy is identical to MallocAllocPolicy, except it uses
  * moz_xmalloc/moz_xcalloc/moz_xrealloc instead of
  * malloc/calloc/realloc.
  */
 class InfallibleAllocPolicy
 {
--- a/mobile/android/chrome/content/aboutLogins.js
+++ b/mobile/android/chrome/content/aboutLogins.js
@@ -432,16 +432,17 @@ var Logins = {
 
   _createItemForLogin: function(login) {
     let loginItem = document.createElement("div");
 
     loginItem.setAttribute("loginID", login.guid);
     loginItem.className = "login-item list-item";
 
     loginItem.addEventListener("click", this, true);
+    loginItem.addEventListener("contextmenu", this, true);
 
     // Create item icon.
     let img = document.createElement("div");
     img.className = "icon";
 
     this._loadFavicon(img, login.hostname);
     loginItem.appendChild(img);
 
@@ -474,16 +475,17 @@ var Logins = {
   },
 
   handleEvent: function(event) {
     switch (event.type) {
       case "popstate": {
         this._onPopState(event);
         break;
       }
+      case "contextmenu":
       case "click": {
         this._onLoginClick(event);
         break;
       }
     }
   },
 
   observe: function(subject, topic, data) {
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -1425,17 +1425,17 @@ pref("privacy.resistFingerprinting", fal
 // If you do set it, to work around some broken website, please file a bug with
 // information so we can understand why it is needed.
 pref("privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", true);
 // A subset of Resist Fingerprinting protections focused specifically on timers for testing
 // This affects the Animation API, the performance APIs, Date.getTime, Event.timestamp,
 //   File.lastModified, audioContext.currentTime, canvas.captureStream.currentTime
 pref("privacy.reduceTimerPrecision", true);
 // Dynamically tune the resolution of the timer reduction for both of the two above prefs
-pref("privacy.resistFingerprinting.reduceTimerPrecision.microseconds", 2000);
+pref("privacy.resistFingerprinting.reduceTimerPrecision.microseconds", 100);
 // Enable jittering the clock one precision value forward
 pref("privacy.resistFingerprinting.reduceTimerPrecision.jitter", true);
 // Lower the priority of network loads for resources on the tracking protection list.
 // Note that this requires the privacy.trackingprotection.annotate_channels pref to be on in order to have any effect.
 #ifdef NIGHTLY_BUILD
 pref("privacy.trackingprotection.lower_network_priority", true);
 #else
 pref("privacy.trackingprotection.lower_network_priority", false);
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1158,9 +1158,9 @@ static const TransportSecurityPreload kP
   { "za.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
   { "zh.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
 };
 
 // Pinning Preload List Length = 485;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1530562667213000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1530649968432000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -40,20 +40,20 @@ 3vlnaeet.cz: could not connect to host
 404.guide: could not connect to host
 404forest.com: could not connect to host
 41844.de: could not connect to host
 42t.ru: could not connect to host
 439191.com: could not connect to host
 47tech.com: could not connect to host
 4baby.com.br: could not connect to host
 4d2.xyz: could not connect to host
-4host.ch: could not connect to host
 4loc.us: could not connect to host
 4web-hosting.com: could not connect to host
 5000yz.com: could not connect to host
+517vpn.cn: could not connect to host
 52kb1.com: could not connect to host
 52neptune.com: could not connect to host
 5w5.la: could not connect to host
 68277.me: could not connect to host
 692b8c32.de: could not connect to host
 69mentor.com: could not connect to host
 6w6.la: could not connect to host
 7183.org: could not connect to host
@@ -73,16 +73,17 @@ a-intel.com: could not connect to host
 a-ix.net: could not connect to host
 aaron.xin: could not connect to host
 abi-fvs.de: could not connect to host
 abigailstark.com: could not connect to host
 abloop.com: could not connect to host
 abolition.co: could not connect to host
 abstractbarista.com: could not connect to host
 abstractbarista.net: could not connect to host
+abthorpe.org: could not connect to host
 ac.milan.it: could not connect to host
 acat.io: could not connect to host
 accelerate.network: could not connect to host
 accolade.com.br: could not connect to host
 accwing.com: could not connect to host
 acgaudio.com: could not connect to host
 achterhoekseveiligheidsbeurs.nl: could not connect to host
 acpinformatique.fr: could not connect to host
@@ -108,16 +109,17 @@ agingstop.net: could not connect to host
 agoravm.tk: could not connect to host
 agowa.eu: could not connect to host
 agowa338.de: could not connect to host
 agrilinks.org: could not connect to host
 ahelos.tk: could not connect to host
 ahlz.sk: could not connect to host
 aikenorganics.com: could not connect to host
 aim-consultants.com: could not connect to host
+aimrom.org: could not connect to host
 ajetaci.cz: could not connect to host
 akiba-server.info: could not connect to host
 akita-stream.com: could not connect to host
 akoch.net: could not connect to host
 akoww.de: could not connect to host
 akul.co.in: could not connect to host
 al-f.net: could not connect to host
 alasta.info: could not connect to host
@@ -140,16 +142,17 @@ allthingsfpl.com: could not connect to h
 alocato.com: could not connect to host
 alpe-d-or.dyn-o-saur.com: could not connect to host
 alphabrock.cn: could not connect to host
 alphahunks.com: could not connect to host
 altahrim.net: could not connect to host
 altered.network: could not connect to host
 amaderelectronics.com: could not connect to host
 amdouglas.uk: could not connect to host
+amees.me: could not connect to host
 ameho.me: could not connect to host
 americandistribuidora.com: could not connect to host
 amilum.org: could not connect to host
 amua.fr: could not connect to host
 amunoz.org: could not connect to host
 anadoluefessk.org: could not connect to host
 analyzemyfriends.com: could not connect to host
 anassiriphotography.com: could not connect to host
@@ -168,24 +171,26 @@ anecuni-club.com: could not connect to h
 anecuni-rec.com: could not connect to host
 angrydragonproductions.com: could not connect to host
 anitube-nocookie.ch: could not connect to host
 anivar.net: could not connect to host
 annetaan.fi: could not connect to host
 anshumanbiswas.com: could not connect to host
 antimatiere.space: could not connect to host
 anyways.at: could not connect to host
+aobogo.com: could not connect to host
 aojiao.org: could not connect to host
 apkoyunlar.club: could not connect to host
 appdrinks.com: could not connect to host
 apple.ax: could not connect to host
 apps4all.sytes.net: could not connect to host
 apptoutou.com: could not connect to host
 aqqrate.com: could not connect to host
 aquireceitas.com: could not connect to host
+ardor.noip.me: could not connect to host
 area3.org: could not connect to host
 arent.kz: could not connect to host
 arenzanaphotography.com: could not connect to host
 argh.io: could not connect to host
 arksan.com.tr: could not connect to host
 armazemdaminiatura.com.br: could not connect to host
 armenians.online: could not connect to host
 arnesolutions.com: could not connect to host
@@ -204,16 +209,17 @@ asphyxia.su: could not connect to host
 aspisdata.com: could not connect to host
 asral7.com: could not connect to host
 assdecoeur.org: could not connect to host
 assetsupervision.com: could not connect to host
 assindia.nl: could not connect to host
 asthon.cn: could not connect to host
 astrath.net: could not connect to host
 astrea-voetbal-groningen.nl: could not connect to host
+astutr.co: could not connect to host
 asuhe.win: could not connect to host
 asuhe.xyz: could not connect to host
 async.be: could not connect to host
 at1.co: could not connect to host
 athi.pl: could not connect to host
 atigerseye.com: could not connect to host
 atlas-5.site: could not connect to host
 aufmerksamkeitsstudie.com: could not connect to host
@@ -243,17 +249,17 @@ awxg.eu.org: could not connect to host
 axel-fischer.science: could not connect to host
 axxial.tk: could not connect to host
 b-landia.net: could not connect to host
 b9winner.com: could not connect to host
 babelfisch.eu: could not connect to host
 babystep.tv: could not connect to host
 bacimg.com: could not connect to host
 badbee.cc: could not connect to host
-bailbondsaffordable.com: could not connect to host
+bakabt.info: could not connect to host
 balonmano.co: could not connect to host
 bandally.net: could not connect to host
 bandarifamily.com: could not connect to host
 bannisbierblog.de: could not connect to host
 bardiharborow.com: could not connect to host
 bardiharborow.tk: could not connect to host
 bargainmovingcompany.com: could not connect to host
 baropkamp.be: could not connect to host
@@ -272,19 +278,17 @@ beamitapp.com: could not connect to host
 beasel.biz: could not connect to host
 beauty-italy.ru: could not connect to host
 beccajoshwedding.com: could not connect to host
 beelen.fr: could not connect to host
 beersandco.ch: could not connect to host
 bellavistaoutdoor.com: could not connect to host
 belpbleibtbelp.ch: could not connect to host
 belwederczykow.eu: could not connect to host
-bemcorp.de: could not connect to host
 ben.ninja: could not connect to host
-benediktdichgans.de: could not connect to host
 benfairclough.com: could not connect to host
 benjamin-horvath.com: could not connect to host
 benjamin-suess.de: could not connect to host
 benjaminblack.net: could not connect to host
 benzou-space.com: could not connect to host
 berduri.com: could not connect to host
 berlin-kohlefrei.de: could not connect to host
 berry.cat: could not connect to host
@@ -349,17 +353,16 @@ bonobo.cz: could not connect to host
 bookreport.ga: could not connect to host
 booter.es: could not connect to host
 boozinyan.com: could not connect to host
 borchers-media.de: could not connect to host
 borisbesemer.com: could not connect to host
 boxdevigneron.fr: could not connect to host
 bpadvisors.eu: could not connect to host
 bqcp.net: could not connect to host
-bradkovach.com: could not connect to host
 bragaweb.com.br: could not connect to host
 brage.info: could not connect to host
 braintensive.com: could not connect to host
 brakstad.org: could not connect to host
 brandontaylor-black.com: could not connect to host
 brianmwaters.net: could not connect to host
 brideandgroomdirect.ie: could not connect to host
 bridgeout.com: could not connect to host
@@ -376,17 +379,16 @@ btcp.space: could not connect to host
 buck.com: could not connect to host
 buenotour.ru: could not connect to host
 buffalodrinkinggame.beer: could not connect to host
 bugsmashed.com: could not connect to host
 bugtrack.co.uk: could not connect to host
 buka.jp: could not connect to host
 bulletbabu.com: could not connect to host
 bunadarbankinn.is: could not connect to host
-bunnyvishal.com: could not connect to host
 bupu.ml: could not connect to host
 businessamongus.com: could not connect to host
 businessetmarketing.com: could not connect to host
 businessfurs.info: could not connect to host
 businesshub.cz: could not connect to host
 businessmodeler.se: could not connect to host
 buyharpoon.com: could not connect to host
 buyingsellingflorida.com: could not connect to host
@@ -395,33 +397,32 @@ buywood.shop: could not connect to host
 bvexplained.co.uk: could not connect to host
 bxdev.me: could not connect to host
 by1898.com: could not connect to host
 byji.com: could not connect to host
 bypass.kr: could not connect to host
 byteshift.ca: could not connect to host
 bytesunlimited.com: could not connect to host
 byteturtle.eu: could not connect to host
-bziaks.xyz: could not connect to host
+byvshie.com: could not connect to host
 c2o2.xyz: could not connect to host
 cafechesscourt.com: could not connect to host
 cafesg.net: could not connect to host
 caipai.fm: could not connect to host
 cairnterrier.com.br: could not connect to host
 cal.goip.de: could not connect to host
 calculatoaresecondhand.xyz: could not connect to host
 callabs.net: could not connect to host
 calleveryday.com: could not connect to host
 callsigns.ca: could not connect to host
 calories.org: could not connect to host
 calypso-tour.net: could not connect to host
 camda.online: could not connect to host
 campaign-ad.com: could not connect to host
 campingcarlovers.com: could not connect to host
-canadianchristianity.com: could not connect to host
 cancelmyprofile.com: could not connect to host
 canifis.net: could not connect to host
 cardelmar.es: could not connect to host
 cardloan-manual.net: could not connect to host
 carey.bio: could not connect to host
 carloshmm.com: could not connect to host
 carloshmm.stream: could not connect to host
 carlovanwyk.com: could not connect to host
@@ -444,23 +445,24 @@ cdnk39.com: could not connect to host
 cee.io: could not connect to host
 cegfw.com: could not connect to host
 cencalvia.org: could not connect to host
 centerforpolicy.org: could not connect to host
 centos.pub: could not connect to host
 centrallead.net: could not connect to host
 centrolavoro.org: could not connect to host
 cgtx.us: could not connect to host
+chalker.io: could not connect to host
 challengeskins.com: could not connect to host
 championnat-romand-cuisiniers-amateurs.ch: could not connect to host
-chancat.blog: could not connect to host
 channellife.asia: could not connect to host
 chaouby.com: could not connect to host
 charge.co: could not connect to host
 charmyadesara.com: could not connect to host
+chatnbook.com: could not connect to host
 chatsworthelectrical.com: could not connect to host
 cheah.xyz: could not connect to host
 chemicalguys-ruhrpott.de: could not connect to host
 chez-janine.de: could not connect to host
 chicorycom.net: could not connect to host
 china-line.org: could not connect to host
 chinternet.xyz: could not connect to host
 chloe.re: could not connect to host
@@ -512,59 +514,58 @@ code.fm: could not connect to host
 codeloop.pw: could not connect to host
 codenlife.xyz: could not connect to host
 coderhangout.com: could not connect to host
 codewiz.xyz: could not connect to host
 cogumelosmagicos.org: could not connect to host
 colarelli.ch: could not connect to host
 colleencornez.com: could not connect to host
 collins.kg: could not connect to host
-coltonrb.com: could not connect to host
 com-in.de: could not connect to host
 com.cc: could not connect to host
-combatshield.cz: could not connect to host
 comicrelief.com: could not connect to host
 comiq.io: could not connect to host
 communityflow.info: could not connect to host
 compeuphoria.com: could not connect to host
 complex-organization.com: could not connect to host
 complt.xyz: could not connect to host
 comprehensiveihc.com: could not connect to host
 conception.sk: could not connect to host
 conejovalleyelectrical.com: could not connect to host
 conrad.am: could not connect to host
 constructive.men: could not connect to host
 corecdn.org: could not connect to host
 corinnanese.de: could not connect to host
+corlija.com: could not connect to host
 correct.horse: could not connect to host
 cosmeticosdelivery.com.br: could not connect to host
 cosmeticosnet.com.br: could not connect to host
 cosmiatria.pe: could not connect to host
 cosplayer.com: could not connect to host
 cotta.dk: could not connect to host
 coumoul.fr: could not connect to host
 cpaneltips.com: could not connect to host
 crackslut.eu: could not connect to host
 craftination.net: could not connect to host
 craftydev.design: could not connect to host
 crashsec.com: could not connect to host
 creativecommonscatpictures.com: could not connect to host
+creato.top: could not connect to host
 credential.eu: could not connect to host
 cristianhares.com: could not connect to host
 criticalaim.com: could not connect to host
 crow.tw: could not connect to host
 crox.co: could not connect to host
 cryptoki.fr: could not connect to host
 cryptolosophy.io: could not connect to host
 cryptoparty.dk: could not connect to host
 cryptopartynewcastle.org: could not connect to host
 cryptoshot.pw: could not connect to host
 cselzer.com: could not connect to host
 csgo77.com: could not connect to host
-csgogamers.com: could not connect to host
 csilies.de: could not connect to host
 cunha.be: could not connect to host
 cuni-cuni-club.com: could not connect to host
 cuni-rec.com: could not connect to host
 cuonic.com: could not connect to host
 curacao-license.com: could not connect to host
 customfilmworks.com: could not connect to host
 customizeyourshower.com: could not connect to host
@@ -581,17 +582,17 @@ czlx.co: could not connect to host
 d-bood.site: could not connect to host
 d3x.pw: could not connect to host
 d4rkdeagle.tk: could not connect to host
 d8studio.net: could not connect to host
 daltonedwards.me: could not connect to host
 dam74.com.ar: could not connect to host
 damjanovic.work: could not connect to host
 daniel-stahl.net: could not connect to host
-danieljireh.com: could not connect to host
+danifabi.eu: could not connect to host
 darkdestiny.ch: could not connect to host
 daropia.org: could not connect to host
 darrienworth.com: could not connect to host
 daryl.moe: could not connect to host
 dashboard.yt: could not connect to host
 data-detox.com: could not connect to host
 datastream.re: could not connect to host
 datengrab.ws: could not connect to host
@@ -610,16 +611,17 @@ dcc.moe: could not connect to host
 dden.website: could not connect to host
 dden.xyz: could not connect to host
 ddmeportal.com: could not connect to host
 de-servers.de: could not connect to host
 deadmann.com: could not connect to host
 deborahmarinelli.eu: could not connect to host
 decormiernissanparts.com: could not connect to host
 decoyrouting.com: could not connect to host
+deep.club: could not connect to host
 deepcreampie.com: could not connect to host
 deeps.cat: could not connect to host
 deepsouthsounds.com: could not connect to host
 deloittequant.com: could not connect to host
 dengchangdong.com: could not connect to host
 depedtayo.ph: could not connect to host
 derchris.me: could not connect to host
 derivativeshub.pro: could not connect to host
@@ -636,17 +638,16 @@ developersclub.website: could not connec
 devops.moe: could not connect to host
 dezintranet.com: could not connect to host
 dfixit.com: could not connect to host
 dharamkot.com: could not connect to host
 dhl-smart.ch: could not connect to host
 dhub.xyz: could not connect to host
 dhxxls.com: could not connect to host
 diceduels.com: could not connect to host
-dichgans-besserer.de: could not connect to host
 dick.red: could not connect to host
 didierlaumen.be: could not connect to host
 die-gruenen-teufel.de: could not connect to host
 diemogebhardt.com: could not connect to host
 dieser.me: could not connect to host
 digihyp.ch: could not connect to host
 digioccumss.ddns.net: could not connect to host
 digitalrxcloud.com: could not connect to host
@@ -667,16 +668,17 @@ disclosure.io: could not connect to host
 disco-crazy-world.de: could not connect to host
 discord-chan.net: could not connect to host
 discoveringdocker.com: could not connect to host
 discoveryballoon.org: could not connect to host
 disinisharing.com: could not connect to host
 distinctivephotography.com.au: could not connect to host
 distrilogservices.com: could not connect to host
 ditch.ch: could not connect to host
+divegearexpress.com.cn: could not connect to host
 dixmag.com: could not connect to host
 diyosun.com: could not connect to host
 diz.in.ua: could not connect to host
 djul.net: could not connect to host
 dlouwrink.nl: could not connect to host
 dlyl888.com: could not connect to host
 dna.li: could not connect to host
 dnfc.rocks: could not connect to host
@@ -749,16 +751,17 @@ eggplant.today: could not connect to hos
 ehrlichesbier.de: could not connect to host
 ehuber.info: could not connect to host
 einhorn.space: could not connect to host
 einsatzstiefel.info: could not connect to host
 einsteinathome.org: could not connect to host
 ekobudisantoso.net: could not connect to host
 ekong366.com: could not connect to host
 electricalcontrolpanels.co.uk: could not connect to host
+electronicafacil.net: could not connect to host
 elenorsmadness.org: could not connect to host
 elevateandprosper.com: could not connect to host
 elexel.ru: could not connect to host
 elitesensual.com.br: could not connect to host
 elonbase.com: could not connect to host
 elsword.moe: could not connect to host
 eltransportquevolem.org: could not connect to host
 elytronsecurity.com: could not connect to host
@@ -776,33 +779,31 @@ endspamwith.us: could not connect to hos
 enoou.com: could not connect to host
 enpalmademallorca.info: could not connect to host
 enskat.de: could not connect to host
 enskatson-sippe.de: could not connect to host
 enterprisey.enterprises: could not connect to host
 envelope.co.nz: could not connect to host
 eolme.ml: could not connect to host
 epichouse.net: could not connect to host
-epublibre.org: could not connect to host
 er-music.com: could not connect to host
 erad.fr: could not connect to host
 erclab.kr: could not connect to host
 ericloud.tk: could not connect to host
 erigrid.eu: could not connect to host
 erspro.net: could not connect to host
 es888999.com: could not connect to host
 esoterik.link: could not connect to host
 espanova.com: could not connect to host
 essentialoilsimports.com: could not connect to host
 esseriumani.com: could not connect to host
 ethanfaust.com: could not connect to host
 etzi.myds.me: could not connect to host
 euexia.fr: could not connect to host
 eung.ga: could not connect to host
-eupay.de: could not connect to host
 euph.eu: could not connect to host
 eurostrategy.vn.ua: could not connect to host
 evankurniawan.com: could not connect to host
 evasioncreole.com: could not connect to host
 eventaro.com: could not connect to host
 eventmake.es: could not connect to host
 everyarti.st: could not connect to host
 everygayporn.com: could not connect to host
@@ -822,29 +823,30 @@ faber.org.ru: could not connect to host
 fabian-kluge.de: could not connect to host
 fabienbaker.com: could not connect to host
 fabulouslyyouthfulskin.com: could not connect to host
 fabulouslyyouthfulskineyeserum.com: could not connect to host
 facebook.ax: could not connect to host
 facesnf.com: could not connect to host
 facilitrak.com: could not connect to host
 factureenlinea.com: could not connect to host
+faerb.it: could not connect to host
 faeriecakes.be: could not connect to host
 fafatiger.com: could not connect to host
 faithwatch.org: could not connect to host
-fakerli.com: could not connect to host
 fakti.bg: could not connect to host
 falkus.net: could not connect to host
 fallenangeldrinks.eu: could not connect to host
 famer.me: could not connect to host
 fameuxhosting.co.uk: could not connect to host
 familie-leu.ch: could not connect to host
 faretravel.co.uk: could not connect to host
 farm24.co.uk: could not connect to host
 farmacia.pt: could not connect to host
+fascia.fit: could not connect to host
 fastaim.de: could not connect to host
 fastbackmbg.be: could not connect to host
 faxreader.net: could not connect to host
 fcapartsdb.com: could not connect to host
 feac.us: could not connect to host
 fedn.it: could not connect to host
 feedstringer.com: could not connect to host
 feirlane.org: could not connect to host
@@ -856,37 +858,39 @@ feras-alhajjaji.com: could not connect t
 fetclips.se: could not connect to host
 feudaltactics.com: could not connect to host
 fhsseniormens.club: could not connect to host
 ficklenote.net: could not connect to host
 fierman.eu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116"  data: no]
 fierman.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116"  data: no]
 fierman.us: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116"  data: no]
 fifieldtech.com: could not connect to host
+figurasdelinguagem.com.br: could not connect to host
 figuurzagers.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116"  data: no]
 filebox.space: could not connect to host
 fileio.io: could not connect to host
 filesense.com: could not connect to host
 findmybottleshop.com.au: could not connect to host
 findyour.diet: could not connect to host
 finstererlebnis.de: could not connect to host
 firexarxa.de: could not connect to host
 first-time-offender.com: could not connect to host
 fix-the-timeline.com: could not connect to host
 fix-the-timeline.org: could not connect to host
-fixmycomputerdude.com: could not connect to host
 fixmyglitch.com: could not connect to host
 fixthetimeline.com: could not connect to host
 fixthetimeline.org: could not connect to host
 flam.io: could not connect to host
 flamingcow.tv: could not connect to host
+flemingtonaudiparts.com: could not connect to host
 flexinvesting.fi: could not connect to host
 floth.at: could not connect to host
 flugplatz-edvc.de: could not connect to host
 flyingdoggy.net: could not connect to host
+fmapplication.com: could not connect to host
 fmovies.life: could not connect to host
 focalforest.com: could not connect to host
 fognini-depablo.eu: could not connect to host
 foodserve.in: could not connect to host
 forcamp.ga: could not connect to host
 forsyththeatre.com: could not connect to host
 fortuna-loessnitz.de: could not connect to host
 foshanshequ.com: could not connect to host
@@ -912,41 +916,42 @@ freshcode.nl: could not connect to host
 frickenate.com: could not connect to host
 friedhelm-wolf.de: could not connect to host
 friller.com.au: could not connect to host
 frodriguez.xyz: could not connect to host
 frolov.net: could not connect to host
 fromlemaytoz.com: could not connect to host
 frosty-gaming.xyz: could not connect to host
 frp-roleplay.de: could not connect to host
-frydrychit.cz: could not connect to host
 fsfi.is: could not connect to host
 ftgho.com: could not connect to host
 fuckcf.cf: could not connect to host
 fugle.de: could not connect to host
 fuitedeau.ch: could not connect to host
 fukuko.biz: could not connect to host
 fukuko.xyz: could not connect to host
 fun9.cc: could not connect to host
 fun99.cc: could not connect to host
 funksteckdosen24.de: could not connect to host
 funoverip.net: could not connect to host
+funspins.com: could not connect to host
 futos.de: could not connect to host
 futuresonline.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116"  data: no]
 fuzoku-sodan.com: could not connect to host
 fxgame.online: could not connect to host
 fyol.pw: could not connect to host
 g01.in.ua: could not connect to host
 g1jeu.com: could not connect to host
 gabriele-kluge.de: could not connect to host
 gafachi.com: could not connect to host
 galgoafegao.com.br: could not connect to host
 galgoingles.com.br: could not connect to host
 gam3rs.de: could not connect to host
 game-gentle.com: could not connect to host
+gameofpwnz.com: could not connect to host
 gameswitchers.uk: could not connect to host
 gametium.com: could not connect to host
 gametium.es: could not connect to host
 gamhealth.net: could not connect to host
 garage-door.pro: could not connect to host
 gasbarkenora.com: could not connect to host
 gasnews.net: could not connect to host
 gautham.pro: could not connect to host
@@ -984,17 +989,16 @@ getgeek.pl: could not connect to host
 getyourphix.tk: could not connect to host
 gevaulug.fr: could not connect to host
 gfoss.gr: could not connect to host
 gglks.com: could not connect to host
 ggss.cf: could not connect to host
 gh16.com.ar: could not connect to host
 gifzilla.net: could not connect to host
 gina-architektur.design: could not connect to host
-ginniemae.gov: could not connect to host
 git.co: could not connect to host
 gix.net.pl: could not connect to host
 globalelite.black: could not connect to host
 globalnewsdaily.cf: could not connect to host
 globaltennis.ca: could not connect to host
 globalvisions-events.ch: could not connect to host
 glutenfreelife.co.nz: could not connect to host
 glyph.ws: could not connect to host
@@ -1022,32 +1026,31 @@ great.nagoya: could not connect to host
 greggsfoundation.org.uk: could not connect to host
 gregmartyn.com: could not connect to host
 greuel.online: could not connect to host
 greyhash.se: could not connect to host
 gritte.net: could not connect to host
 grossberger-ge.org: could not connect to host
 grossmisconduct.news: could not connect to host
 growingmetrics.com: could not connect to host
-grusenmeyer.be: could not connect to host
 grusig-geil.ch: could not connect to host
 gugaltika-ipb.org: could not connect to host
 guinea-pig.co: could not connect to host
-gummibande.noip.me: could not connect to host
 gunhunter.com: could not connect to host
 gus.moe: could not connect to host
 gvchannel.xyz: could not connect to host
-gviedu.com: could not connect to host
 gxgx.org: could not connect to host
 gzitech.net: could not connect to host
 gzpblog.com: could not connect to host
 h2cdn.cloud: could not connect to host
 h3artbl33d.nl: could not connect to host
 habeo.si: could not connect to host
+hack.club: could not connect to host
 hackbubble.me: could not connect to host
+hacker.club: could not connect to host
 hacker.deals: could not connect to host
 hackmeplz.com: could not connect to host
 haktec.de: could not connect to host
 hakugin.me: could not connect to host
 halcyonsbastion.com: could not connect to host
 half-logic.eu.org: could not connect to host
 halta.info: could not connect to host
 hamking.tk: could not connect to host
@@ -1173,16 +1176,17 @@ ifxnet.com: could not connect to host
 igamingforums.com: could not connect to host
 igd.chat: could not connect to host
 ihatethissh.it: could not connect to host
 iideaz.org: could not connect to host
 ikenmeyer.com: could not connect to host
 ikenmeyer.eu: could not connect to host
 ikzoekeengoedkopeauto.nl: could not connect to host
 ileat.com: could not connect to host
+ilemonrain.com: could not connect to host
 ilya.pp.ua: could not connect to host
 imaginarymakings.me: could not connect to host
 img.ovh: could not connect to host
 imgencrypt.com: could not connect to host
 imgul.net: could not connect to host
 imlinan.cn: could not connect to host
 imlinan.info: could not connect to host
 imlinan.net: could not connect to host
@@ -1206,34 +1210,31 @@ inschrijfformulier.com: could not connec
 inscript.pl: could not connect to host
 insouciant.org: could not connect to host
 inst.mobi: could not connect to host
 instasex.ch: could not connect to host
 int-ext-design.fr: could not connect to host
 intarweb.ca: could not connect to host
 integrityingovernmentidaho.com: could not connect to host
 intelldynamics.com: could not connect to host
-intensifyrsvp.com.au: could not connect to host
 interiordesignsconcept.com: could not connect to host
 internaluse.net: could not connect to host
 interspot.nl: could not connect to host
 interviewpipeline.co.uk: could not connect to host
 intracom.com: could not connect to host
 invenio.software: could not connect to host
 investingdiary.cn: could not connect to host
 iodu.re: could not connect to host
 ionc.ca: could not connect to host
 ip.or.at: could not connect to host
 iphonechina.net: could not connect to host
 iplog.info: could not connect to host
 ipnetworking.net: could not connect to host
 irinkeby.nu: could not connect to host
-isamiok.com: could not connect to host
 isisfighters.info: could not connect to host
-isopres.de: could not connect to host
 isoroc-nidzica.pl: could not connect to host
 isscouncil.com: could not connect to host
 isslshop.com: could not connect to host
 isthefieldcontrolsystemdown.com: could not connect to host
 istherrienstillcoach.com: could not connect to host
 it-adminio.ru: could not connect to host
 itad.top: could not connect to host
 itnews-bg.com: could not connect to host
@@ -1256,81 +1257,81 @@ jamieweb.org: could not connect to host
 jan-bucher.ch: could not connect to host
 janheidler.dynv6.net: could not connect to host
 janssen.fm: could not connect to host
 japan4you.org: could not connect to host
 jasonwindholz.com: could not connect to host
 javascriptlab.fr: could not connect to host
 jazzinutrecht.info: could not connect to host
 jbbd.fr: could not connect to host
-jcaicedo.com: could not connect to host
-jcaicedo.tk: could not connect to host
 jccars-occasions.be: could not connect to host
 jccrew.org: could not connect to host
 jcraft.us: could not connect to host
+jdgonzalez95.com: could not connect to host
 jean-remy.ch: could not connect to host
 jecho.cn: could not connect to host
 jeffersonregan.org: could not connect to host
 jeffhuxley.com: could not connect to host
+jenniferchan.id.au: could not connect to host
 jens.hk: could not connect to host
 jerrypau.ca: could not connect to host
 jhburton.co.uk: could not connect to host
+jhermsmeier.de: could not connect to host
 jhuang.me: could not connect to host
 jiangzm.com: could not connect to host
 jiaqiang.vip: could not connect to host
-jimslop.nl: could not connect to host
 jmb.lc: could not connect to host
 jmk.hu: could not connect to host
 jmvbmx.ch: could not connect to host
 jobmedic.com: could not connect to host
 joecod.es: could not connect to host
 joetyson.io: could not connect to host
 johntomasowa.com: could not connect to host
-jonarcher.info: could not connect to host
 jonathanmassacand.ch: could not connect to host
 jonathansanchez.pro: could not connect to host
 jonfor.net: could not connect to host
 jooto.com: could not connect to host
 jornadasciberdefensa2016.es: could not connect to host
 jpod.cc: could not connect to host
 jsjyhzy.cc: could not connect to host
 juliaoantiguidades.com.br: could not connect to host
 juliawebber.co.za: could not connect to host
 jumbopan.com: could not connect to host
 jumbopan.net: could not connect to host
+juniwalk.cz: could not connect to host
 jurriaan.ninja: could not connect to host
 just-pools.co.za: could not connect to host
 justinharrison.ca: could not connect to host
 justzz.xyz: could not connect to host
 juventusmania1897.com: could not connect to host
 kabus.org: could not connect to host
-kaeru-seitai.com: could not connect to host
 kaika-facilitymanagement.de: could not connect to host
 kainz.be: could not connect to host
 kalender.goip.de: could not connect to host
+kalilinux.tech: could not connect to host
 kaloix.de: could not connect to host
 kamalame.co: could not connect to host
 kamitech.ch: could not connect to host
 kancolle.me: could not connect to host
-kandalife.com: could not connect to host
 kanganer.com: could not connect to host
 kangzaber.com: could not connect to host
 kapo.info: could not connect to host
 karuneshjohri.com: could not connect to host
 kat.al: could not connect to host
 katyusha.net: could not connect to host
 kauperwood.ovh: could not connect to host
 kawaiiku.com: could not connect to host
 kawaiiku.de: could not connect to host
 kaydan.io: could not connect to host
-kb3.net: could not connect to host
+kayipmurekkep.com: could not connect to host
 kearney.io: could not connect to host
 keezin.ga: could not connect to host
 kellyandantony.com: could not connect to host
 kelm.me: could not connect to host
+kennynet.co.uk: could not connect to host
 kermadec.com: could not connect to host
 keshausconsulting.com: could not connect to host
 kevindekoninck.com: could not connect to host
 kevinfoley.cc: could not connect to host
 kevinfoley.org: could not connect to host
 keyserver.sexy: could not connect to host
 keystoneok.com: could not connect to host
 kgb.us: could not connect to host
@@ -1339,16 +1340,17 @@ kieranweightman.me: could not connect to
 kievradio.com: could not connect to host
 kikuzuki.org: could not connect to host
 kinepolis-studio.ga: could not connect to host
 kingbird.me: could not connect to host
 kingclass.cn: could not connect to host
 kingpincages.com: could not connect to host
 kingtecservices.com: could not connect to host
 kirill.ws: could not connect to host
+kirrie.pe.kr: could not connect to host
 kj1396.net: could not connect to host
 kjoglum.me: could not connect to host
 kleinblogje.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116"  data: no]
 klingeletest.de: could not connect to host
 knep.me: could not connect to host
 kngk-azs.ru: could not connect to host
 kngkng.com: could not connect to host
 knightsweep.com: could not connect to host
@@ -1359,16 +1361,17 @@ kollawat.me: could not connect to host
 kollega.it: could not connect to host
 kongbaofang.com: could not connect to host
 konicaprinterdriver.com: could not connect to host
 konventseliten.se: could not connect to host
 kopfsalat.eu: could not connect to host
 koppelvlak.net: could not connect to host
 kotitesti.fi: could not connect to host
 kotorimusic.ga: could not connect to host
+kouten-jp.com: could not connect to host
 kozmik.co: could not connect to host
 krampus-fischamend.at: could not connect to host
 kriegskindernothilfe.de: could not connect to host
 kruin.net: could not connect to host
 ktube.yt: could not connect to host
 kubusadvocaten.nl: could not connect to host
 kuko-crews.org: could not connect to host
 kwikmed.eu: could not connect to host
@@ -1422,16 +1425,17 @@ legaltip.eu: could not connect to host
 leifdreizler.com: could not connect to host
 leolana.com: could not connect to host
 leonardcamacho.me: could not connect to host
 lerlivros.online: could not connect to host
 lescomptoirsdepierrot.com: could not connect to host
 lesdouceursdeliyana.com: could not connect to host
 lesjardinsdemathieu.net: could not connect to host
 letsgetintouch.com: could not connect to host
+lettland-firma.com: could not connect to host
 leveredge.net: could not connect to host
 lezdomsm.com: could not connect to host
 lfaz.org: could not connect to host
 lheinrich.org: could not connect to host
 lhsj28.com: could not connect to host
 lhsj68.com: could not connect to host
 lhsj78.com: could not connect to host
 liaozheqi.cn: could not connect to host
@@ -1454,16 +1458,17 @@ linuxcode.net: could not connect to host
 linvx.org: could not connect to host
 liquidcomm.net: could not connect to host
 lissabon.guide: could not connect to host
 litcc.com: could not connect to host
 litcomphonors.com: could not connect to host
 littlelundgrenladies.com: could not connect to host
 liukang.tech: could not connect to host
 llvm.us: could not connect to host
+lmrcouncil.gov: could not connect to host
 loanstreet.be: could not connect to host
 lobosdomain.no-ip.info: could not connect to host
 locker3.com: could not connect to host
 logcat.info: could not connect to host
 logic8.ml: could not connect to host
 logimagine.com: could not connect to host
 lojavirtualfct.com.br: could not connect to host
 lookasik.eu: could not connect to host
@@ -1487,17 +1492,16 @@ lucassoler.com.ar: could not connect to 
 lucidlogs.com: could not connect to host
 luisgf.es: could not connect to host
 luk.photo: could not connect to host
 lukasunger.cz: could not connect to host
 lukasunger.net: could not connect to host
 lukasztkacz.com: could not connect to host
 luminancy.com: could not connect to host
 luom.net: could not connect to host
-luxe-it.co.uk: could not connect to host
 luxonetwork.com: could not connect to host
 luxvacuos.net: could not connect to host
 lzqii.cn: could not connect to host
 m-generator.com: could not connect to host
 m4570.xyz: could not connect to host
 m4g.ru: could not connect to host
 maartenterpstra.xyz: could not connect to host
 mach-politik.ch: could not connect to host
@@ -1532,17 +1536,16 @@ martins.im: could not connect to host
 marxist.party: could not connect to host
 mastodon.expert: could not connect to host
 mastodon.my: could not connect to host
 mat99.dk: could not connect to host
 matarrosabierzo.com: could not connect to host
 mathijskingma.nl: could not connect to host
 matrix.ac: could not connect to host
 matthey.nl: could not connect to host
-maxhoechtl.at: could not connect to host
 maxpl0it.com: could not connect to host
 maybeul.com: could not connect to host
 maynardnetworks.com: could not connect to host
 mazternet.ru: could not connect to host
 mazurlabs.tk: could not connect to host
 mb-is.info: could not connect to host
 mbdrogenbos-usedcars.be: could not connect to host
 mbsec.net: could not connect to host
@@ -1561,16 +1564,17 @@ mediadandy.com: could not connect to hos
 mediadex.be: could not connect to host
 medicinskavranje.edu.rs: could not connect to host
 mediweed.tk: could not connect to host
 medy-me.com: could not connect to host
 meetings2.com: could not connect to host
 megadrol.com: could not connect to host
 meizufans.eu: could not connect to host
 melenchatsmelenchiens.fr: could not connect to host
+melhoresmarcasdenotebook.com.br: could not connect to host
 melhorproduto.com.br: could not connect to host
 melodic.com.au: could not connect to host
 melody-lyrics.com: could not connect to host
 melonstudios.net: could not connect to host
 melpomene.me: could not connect to host
 melvinlammerts.nl: could not connect to host
 memdoc.org: could not connect to host
 memepasmal.org: could not connect to host
@@ -1588,16 +1592,17 @@ michaelsulzer.com: could not connect to 
 michaelsulzer.eu: could not connect to host
 michasfahrschule.com: could not connect to host
 michele.ml: could not connect to host
 microblading.pe: could not connect to host
 microlinks.org: could not connect to host
 mieterschutzkartei.de: could not connect to host
 mikeybot.com: could not connect to host
 millionairessecrets.com: could not connect to host
+min.kiwi: could not connect to host
 minantavla.se: could not connect to host
 mingy.ddns.net: could not connect to host
 mingyueli.com: could not connect to host
 minhanossasenhora.com.br: could not connect to host
 minimaliston.com: could not connect to host
 minitruckin.net: could not connect to host
 misconfigured.io: could not connect to host
 missycosmeticos.com.br: could not connect to host
@@ -1625,17 +1630,16 @@ modernibytovytextil.cz: could not connec
 moderntld.net: could not connect to host
 moe-max.jp: could not connect to host
 moefi.xyz: could not connect to host
 moeyi.xyz: could not connect to host
 mongla168.net: could not connect to host
 mongla88.net: could not connect to host
 monitori.ng: could not connect to host
 monnyonle.hu: could not connect to host
-monochrometoys.com: could not connect to host
 monotsuku.com: could not connect to host
 moobo.xyz: could not connect to host
 mooselook.de: could not connect to host
 moparcraft.com: could not connect to host
 moparcraft.org: could not connect to host
 mordrum.com: could not connect to host
 morfitronik.pl: could not connect to host
 morganino.eu: could not connect to host
@@ -1664,17 +1668,16 @@ mtirc.co: could not connect to host
 mtn.cc: could not connect to host
 muchohentai.com: could not connect to host
 muj-svet.cz: could not connect to host
 multivpn.fr: could not connect to host
 munduch.cz: could not connect to host
 murraycoin.org: could not connect to host
 murraycolin.org: could not connect to host
 murz.tv: could not connect to host
-museumstreak.com: could not connect to host
 mushman.tk: could not connect to host
 muslimbanter.co.za: could not connect to host
 mxawei.cn: could not connect to host
 mxlife.org: could not connect to host
 my-demo.co: could not connect to host
 my-dick.ru: could not connect to host
 my-dns.co.il: could not connect to host
 my-floor.com: could not connect to host
@@ -1695,27 +1698,29 @@ nakedfacts.co.uk: could not connect to h
 namaleaks.com: could not connect to host
 namikawatetsuji.jp: could not connect to host
 naphex.rocks: could not connect to host
 nasmocopati.com: could not connect to host
 nastysclaw.com: could not connect to host
 nataniel-perissier.fr: could not connect to host
 natur-udvar.hu: could not connect to host
 natuterra.com.br: could not connect to host
+nc99.co: could not connect to host
 ncdesigns-studio.com: could not connect to host
 ndtblog.com: could not connect to host
 necesitodinero.org: could not connect to host
 necio.ca: could not connect to host
 neer.io: could not connect to host
 nekoku.io: could not connect to host
 nella-project.org: could not connect to host
 nella.io: could not connect to host
 nellacms.com: could not connect to host
 nellacms.org: could not connect to host
 nellafw.org: could not connect to host
+neobits.nl: could not connect to host
 nerdjokes.de: could not connect to host
 nerfroute.com: could not connect to host
 nestone.ru: could not connect to host
 netbuzz.ru: could not connect to host
 netica.fr: could not connect to host
 netscaler.expert: could not connect to host
 netsight.org: could not connect to host
 netsystems.pro: could not connect to host
@@ -1729,26 +1734,24 @@ nexusbyte.de: could not connect to host
 nexusconnectinternational.eu: could not connect to host
 nexuscorporation.in: could not connect to host
 ngiemboon.net: could not connect to host
 nginxyii.tk: could not connect to host
 ngocuong.net: could not connect to host
 nhome.ba: could not connect to host
 nicoleoquendo.com: could not connect to host
 nienfun.com: could not connect to host
-nienkeslop.nl: could not connect to host
 nikksno.io: could not connect to host
 niklas.pw: could not connect to host
 nikobradshaw.com: could not connect to host
 nikolasbradshaw.com: could not connect to host
 nimidam.com: could not connect to host
 ninofink.com: could not connect to host
 ninreiei.jp: could not connect to host
 niouininon.eu: could not connect to host
-nippon.fr: could not connect to host
 nirada.info: could not connect to host
 nishikino-maki.com: could not connect to host
 nkadvertising.online: could not connect to host
 nodelab-it.de: could not connect to host
 nodeselect.com: could not connect to host
 noelblog.ga: could not connect to host
 noisebridge.social: could not connect to host
 nolimits.net.nz: could not connect to host
@@ -1765,16 +1768,17 @@ novfishing.ru: could not connect to host
 nsdev.cn: could not connect to host
 nsmail.cn: could not connect to host
 nudel.ninja: could not connect to host
 nulltime.net: could not connect to host
 number.me: could not connect to host
 nyanpasu.tv: could not connect to host
 nyffo.com: could not connect to host
 oaksbloom.com: could not connect to host
+oasis-conference.org.nz: could not connect to host
 oatberry.me: could not connect to host
 obdolbacca.ru: could not connect to host
 oberam.de: could not connect to host
 oberhof.co: could not connect to host
 observatory.se: could not connect to host
 ocapic.com: could not connect to host
 ocsr.nl: could not connect to host
 octo.im: could not connect to host
@@ -1784,39 +1788,37 @@ offgames.pro: could not connect to host
 office-ruru.com: could not connect to host
 ohnemusik.com: could not connect to host
 oinky.ddns.net: could not connect to host
 oklahomamoversassociation.org: could not connect to host
 oklahomanotepro.com: could not connect to host
 oldandyounglesbians.us: could not connect to host
 oldtimer-trifft-flugplatz.de: could not connect to host
 oliverspringer.eu: could not connect to host
-omnigon.network: could not connect to host
 oneazcu.com: could not connect to host
 onewebdev.info: could not connect to host
+onionsburg.com: could not connect to host
 onsennuie.fr: could not connect to host
 onsite4u.de: could not connect to host
 onstud.com: could not connect to host
 onwie.com: could not connect to host
 onwie.fr: could not connect to host
 ooeste.com: could not connect to host
 openclub24.ru: could not connect to host
 openconnect.com.au: could not connect to host
 opinion8td.com: could not connect to host
 opinionipannolini.it: could not connect to host
 orangekey.tk: could not connect to host
-oranic.com: could not connect to host
 oricejoc.com: could not connect to host
 oscarmashauri.com: could not connect to host
 oscillation-services.fr: could not connect to host
 oscsdp.cz: could not connect to host
 oshinagaki.jp: could not connect to host
 osmanlitorunu.com: could not connect to host
 ospree.me: could not connect to host
-oticasvisao.net.br: could not connect to host
 otinane.eu: could not connect to host
 ourchoice2016.com: could not connect to host
 overkillshop.com: could not connect to host
 ovpn.to: could not connect to host
 owensmith.website: could not connect to host
 owlscrap.ru: could not connect to host
 oxynux.xyz: could not connect to host
 pabloartea.ga: could not connect to host
@@ -1826,16 +1828,17 @@ pactf-flag-4boxdpa21ogonzkcrs9p.com: cou
 paichai.space: could not connect to host
 painosso.org: could not connect to host
 paio2-rec.com: could not connect to host
 paio2.com: could not connect to host
 palationtrade.com: could not connect to host
 panascais.io: could not connect to host
 pandapsy.com: could not connect to host
 pardnoy.com: could not connect to host
+parkingpoint.co.uk: could not connect to host
 pasteros.io: could not connect to host
 pastie.se: could not connect to host
 patrickbusch.net: could not connect to host
 patrickneuro.de: could not connect to host
 paulshir.com: could not connect to host
 paulshir.is: could not connect to host
 paveljanda.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116"  data: no]
 pay.ubuntu.com: could not connect to host
@@ -1884,17 +1887,16 @@ plaasprodukte.com: could not connect to 
 placefade.com: could not connect to host
 planbox.info: could not connect to host
 playsharp.com: could not connect to host
 playsource.co: could not connect to host
 please-deny.me: could not connect to host
 plussizereviews.com: could not connect to host
 pmbremer.de: could not connect to host
 pogs.us: could not connect to host
-polishtranslation.com: could not connect to host
 polit.im: could not connect to host
 pookl.com: could not connect to host
 poolinstallers.co.za: could not connect to host
 popkins.cf: could not connect to host
 popkins.ga: could not connect to host
 popkins.gq: could not connect to host
 popkins.tk: could not connect to host
 pornblog.org: could not connect to host
@@ -1918,28 +1920,28 @@ precedecaritas.com.br: could not connect
 prekladysanca.cz: could not connect to host
 premioambiente.it: could not connect to host
 prestigerepairs.com.au: could not connect to host
 pretty.hu: could not connect to host
 prettytunesapp.com: could not connect to host
 prifo.se: could not connect to host
 princessbackpack.de: could not connect to host
 printsos.com: could not connect to host
-priorityessays.com: could not connect to host
 prism-communication.com: could not connect to host
 privacyforjournalists.org.au: could not connect to host
 privacymanatee.com: could not connect to host
 privatestatic.com: could not connect to host
 privcloud.org: could not connect to host
 privilegevisa.fr: could not connect to host
 proactive.run: could not connect to host
 professional.cleaning: could not connect to host
 profinetz.de: could not connect to host
 progolfjourney.com: could not connect to host
 progressivecfo.co.nz: could not connect to host
+proj.org.cn: could not connect to host
 projectasterk.com: could not connect to host
 projectte.ch: could not connect to host
 projectx.top: could not connect to host
 projekt-umbriel.de: could not connect to host
 prokop.ovh: could not connect to host
 promhadan.com: could not connect to host
 promocao.email: could not connect to host
 promotiongeeks.com: could not connect to host
@@ -1956,40 +1958,40 @@ pruikshop.nl: could not connect to host
 prytkov.com: could not connect to host
 psncardplus.be: could not connect to host
 psncardplus.com: could not connect to host
 psncardplus.dk: could not connect to host
 psncardplus.nl: could not connect to host
 psncardplus.se: could not connect to host
 psychoco.net: could not connect to host
 psyk.yt: could not connect to host
+pub-online.ro: could not connect to host
 publimepa.it: could not connect to host
 pugilares.com.pl: could not connect to host
 puhe.se: could not connect to host
 puikheid.nl: could not connect to host
 pwdgen.net: could not connect to host
 pwntr.com: could not connect to host
 pyjiaoyi.cf: could not connect to host
 pythia.nz: could not connect to host
 pyzlnar.com: could not connect to host
 qforum.org: could not connect to host
 qikan.net: could not connect to host
 qnatek.org: could not connect to host
 qoqo.us: could not connect to host
 qqvips.com: could not connect to host
 qrlfinancial.com: could not connect to host
 qto.net: could not connect to host
-questsocial.it: could not connect to host
+quanwuji.com: could not connect to host
 quietus.gq: could not connect to host
 quikpay.com.au: could not connect to host
 r-cut.fr: could not connect to host
 r0t.co: could not connect to host
 racasdecachorro.org: could not connect to host
 rackblue.com: could not connect to host
-radiorsvp.com: could not connect to host
 radtke.bayern: could not connect to host
 railgun.com.cn: could not connect to host
 rainbin.com: could not connect to host
 ranos.org: could not connect to host
 raphrfg.com: could not connect to host
 ravengergaming.net: could not connect to host
 ravse.dk: could not connect to host
 raycarruthersphotography.co.uk: could not connect to host
@@ -2076,30 +2078,28 @@ run-forrest.run: could not connect to ho
 runcarina.com: could not connect to host
 rundumcolumn.xyz: could not connect to host
 rushball.net: could not connect to host
 ruurdboomsma.nl: could not connect to host
 rzegroup.com: could not connect to host
 s0923.com: could not connect to host
 s16e.no: could not connect to host
 s3n.se: could not connect to host
-sabahattin-gucukoglu.com: could not connect to host
 safe.moe: could not connect to host
 safedevice.net: could not connect to host
 saferedirectlink.com: could not connect to host
 sagemontchurch.org: could not connect to host
 saintw.com: could not connect to host
 sallysubs.com: could not connect to host
 salzamt.tk: could not connect to host
 samaritan.tech: could not connect to host
 sammyjohnson.com: could not connect to host
 samsonova.de: could not connect to host
 sanael.net: could not connect to host
 sanatrans.com: could not connect to host
-sandrainden.nl: could not connect to host
 santanderideas.com: could not connect to host
 sapuncheta.com: could not connect to host
 sarahlicity.me.uk: could not connect to host
 sarindia.com: could not connect to host
 sarindia.de: could not connect to host
 sarkisozleri.us: could not connect to host
 sarndipity.com: could not connect to host
 savecashindia.com: could not connect to host
@@ -2136,16 +2136,17 @@ secureindia.co: could not connect to hos
 security.xn--q9jyb4c: could not connect to host
 securitymap.wiki: could not connect to host
 securitysoapbox.com: could not connect to host
 securitytalk.pl: could not connect to host
 securon.io: could not connect to host
 securoswiss.ch: could not connect to host
 seehimnaked.com: could not connect to host
 seehisnudes.com: could not connect to host
+seekthe.net: could not connect to host
 seen.life: could not connect to host
 selent.me: could not connect to host
 seleondar.ru: could not connect to host
 selfhosters.com: could not connect to host
 selfmade4u.de: could not connect to host
 selfserverx.com: could not connect to host
 sellmoretires.com: could not connect to host
 seoscribe.net: could not connect to host
@@ -2190,16 +2191,17 @@ siku.pro: could not connect to host
 silqueskineyeserum.com: could not connect to host
 silverback.is: could not connect to host
 silvistefi.com: could not connect to host
 silvobeat.blog: could not connect to host
 simhaf.cf: could not connect to host
 simonschmitt.ch: could not connect to host
 simplerses.com: could not connect to host
 sims4hub.ga: could not connect to host
+sinfulforums.net: could not connect to host
 sinsojb.me: could not connect to host
 siqi.wang: could not connect to host
 sistem-maklumat.com: could not connect to host
 sitemaxiphilippe.ch: could not connect to host
 skarox.ru: could not connect to host
 sketchmyroom.com: could not connect to host
 skoda-im-dialog.de: could not connect to host
 skontakt.cz: could not connect to host
@@ -2215,16 +2217,17 @@ slash64.uk: could not connect to host
 sliceone.com: could not connect to host
 slytech.ch: could not connect to host
 smallchat.nl: could not connect to host
 smartbiz.vn: could not connect to host
 smarthouse.de: could not connect to host
 smdavis.us: could not connect to host
 smith.is: could not connect to host
 sml.lc: could not connect to host
+smmcab.ru: could not connect to host
 smuhelper.cn: could not connect to host
 sneed.company: could not connect to host
 snowdy.eu: could not connect to host
 soboleva-pr.com.ua: could not connect to host
 soci.ml: could not connect to host
 socialworkout.com: could not connect to host
 socialworkout.net: could not connect to host
 socialworkout.org: could not connect to host
@@ -2271,29 +2274,29 @@ startup.melbourne: could not connect to 
 startupum.ru: could not connect to host
 state-of-body-and-mind.com: could not connect to host
 statgram.me: could not connect to host
 static-assets.io: could not connect to host
 static.hosting: could not connect to host
 staticisnoise.com: could not connect to host
 statusbot.io: could not connect to host
 staxflax.tk: could not connect to host
+steelrhino.co: could not connect to host
 steffi-in-australien.com: could not connect to host
 stevengoodpaster.com: could not connect to host
 stickswag.cf: could not connect to host
 stiger.me: could not connect to host
 stilettomoda.com.br: could not connect to host
 stoianlawfirm.com: could not connect to host
 stonefusion.org.uk: could not connect to host
 stonemanbrasil.com.br: could not connect to host
 stopakwardhandshakes.org: could not connect to host
 store10.de: could not connect to host
 stormwatcher.org: could not connect to host
 stpip.com: could not connect to host
-strategiccapital.com: could not connect to host
 streams.dyndns.org: could not connect to host
 stressfreehousehold.com: could not connect to host
 stuarts.xyz: could not connect to host
 sturge.co.uk: could not connect to host
 stylle.me: could not connect to host
 subrain.com: could not connect to host
 sudo.im: could not connect to host
 sudosu.fr: could not connect to host
@@ -2326,16 +2329,18 @@ swisscannabis.club: could not connect to
 swissentreprises.ch: could not connect to host
 sx3.no: could not connect to host
 sydney-sehen.com: could not connect to host
 syhost.at: could not connect to host
 syncaddict.net: could not connect to host
 syncmylife.net: could not connect to host
 synergisticsoccer.com: could not connect to host
 sysert.tv: could not connect to host
+systea.fr: could not connect to host
+systea.net: could not connect to host
 system12.pl: could not connect to host
 t-stonegroup.com: could not connect to host
 t3rror.net: could not connect to host
 tab.watch: could not connect to host
 tabla-periodica.com: could not connect to host
 tacoma-games.com: could not connect to host
 taidu.news: could not connect to host
 takedownthissite.com: could not connect to host
@@ -2380,17 +2385,16 @@ thatgudstuff.com: could not connect to h
 the-earth-yui.net: could not connect to host
 the-finance-blog.com: could not connect to host
 the-gist.io: could not connect to host