Rewild Your Web

chore: update Servo to b76354f058b38af89ee8e53e0a30ffbe3ae62f87

+381 -183
+235 -53
Cargo.lock
··· 1906 1906 "headers 0.4.1", 1907 1907 "http 1.4.0", 1908 1908 "log", 1909 + "malloc_size_of_derive", 1909 1910 "net", 1910 1911 "net_traits", 1911 1912 "rand 0.9.2", ··· 1913 1914 "serde", 1914 1915 "serde_json", 1915 1916 "servo_config", 1917 + "servo_malloc_size_of", 1916 1918 "servo_url", 1917 1919 "uuid", 1918 1920 ] ··· 2231 2233 version = "0.1.4" 2232 2234 source = "registry+https://github.com/rust-lang/crates.io-index" 2233 2235 checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" 2234 - dependencies = [ 2235 - "log", 2236 - "regex", 2237 - ] 2238 - 2239 - [[package]] 2240 - name = "env_logger" 2241 - version = "0.8.4" 2242 - source = "registry+https://github.com/rust-lang/crates.io-index" 2243 - checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" 2244 2236 dependencies = [ 2245 2237 "log", 2246 2238 "regex", ··· 2910 2902 ] 2911 2903 2912 2904 [[package]] 2905 + name = "getrandom" 2906 + version = "0.4.1" 2907 + source = "registry+https://github.com/rust-lang/crates.io-index" 2908 + checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" 2909 + dependencies = [ 2910 + "cfg-if", 2911 + "libc", 2912 + "r-efi", 2913 + "rand_core 0.10.0", 2914 + "wasip2", 2915 + "wasip3", 2916 + ] 2917 + 2918 + [[package]] 2913 2919 name = "ghash" 2914 2920 version = "0.5.1" 2915 2921 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3994 4000 3995 4001 [[package]] 3996 4002 name = "hyper-util" 3997 - version = "0.1.19" 4003 + version = "0.1.20" 3998 4004 source = "registry+https://github.com/rust-lang/crates.io-index" 3999 - checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" 4005 + checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" 4000 4006 dependencies = [ 4001 4007 "base64 0.22.1", 4002 4008 "bytes", 4003 4009 "futures-channel", 4004 - "futures-core", 4005 4010 "futures-util", 4006 4011 "http 1.4.0", 4007 4012 "http-body 1.0.1", ··· 4550 4555 checksum = "1adcf7b613a268af025bc2a2532b4b9ee294e6051c5c0832d8bff20ac0232e68" 4551 4556 4552 4557 [[package]] 4558 + name = "id-arena" 4559 + version = "2.3.0" 4560 + source = "registry+https://github.com/rust-lang/crates.io-index" 4561 + checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" 4562 + 4563 + [[package]] 4553 4564 name = "ident_case" 4554 4565 version = "1.0.1" 4555 4566 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4635 4646 dependencies = [ 4636 4647 "equivalent", 4637 4648 "hashbrown 0.16.1", 4649 + "serde", 4650 + "serde_core", 4638 4651 ] 4639 4652 4640 4653 [[package]] ··· 4671 4684 4672 4685 [[package]] 4673 4686 name = "ipc-channel" 4674 - version = "0.20.2" 4687 + version = "0.21.0" 4675 4688 source = "registry+https://github.com/rust-lang/crates.io-index" 4676 - checksum = "f93600b5616c2d075f8af8dbd23c1d69278c5d24e4913d220cbc60b14c95c180" 4689 + checksum = "a441490012d80e9aea75fb27503df8e87e9557dcfc6fe4244dde86bfc12e94e3" 4677 4690 dependencies = [ 4678 - "bincode", 4679 4691 "crossbeam-channel", 4680 - "fnv", 4681 4692 "libc", 4682 4693 "mio", 4694 + "postcard", 4683 4695 "rand 0.9.2", 4684 - "serde", 4696 + "rustc-hash 2.1.1", 4697 + "serde_core", 4685 4698 "tempfile", 4699 + "thiserror 2.0.18", 4686 4700 "uuid", 4687 4701 "windows 0.61.3", 4688 4702 ] ··· 5015 5029 ] 5016 5030 5017 5031 [[package]] 5032 + name = "leb128fmt" 5033 + version = "0.1.0" 5034 + source = "registry+https://github.com/rust-lang/crates.io-index" 5035 + checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" 5036 + 5037 + [[package]] 5018 5038 name = "lebe" 5019 5039 version = "0.5.3" 5020 5040 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5046 5066 5047 5067 [[package]] 5048 5068 name = "libc" 5049 - version = "0.2.180" 5069 + version = "0.2.181" 5050 5070 source = "registry+https://github.com/rust-lang/crates.io-index" 5051 - checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" 5071 + checksum = "459427e2af2b9c839b132acb702a1c654d95e10f8c326bfc2ad11310e458b1c5" 5052 5072 5053 5073 [[package]] 5054 5074 name = "libdbus-sys" ··· 5061 5081 5062 5082 [[package]] 5063 5083 name = "libfuzzer-sys" 5064 - version = "0.4.10" 5084 + version = "0.4.12" 5065 5085 source = "registry+https://github.com/rust-lang/crates.io-index" 5066 - checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404" 5086 + checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" 5067 5087 dependencies = [ 5068 5088 "arbitrary", 5069 5089 "cc", ··· 5125 5145 "devtools_traits", 5126 5146 "dpi", 5127 5147 "embedder_traits", 5128 - "env_logger 0.11.8", 5148 + "env_logger", 5129 5149 "euclid", 5130 5150 "fonts", 5131 5151 "gaol", ··· 5351 5371 "euclid", 5352 5372 "ipc-channel", 5353 5373 "log", 5374 + "malloc_size_of_derive", 5354 5375 "paint_api", 5355 5376 "rustc-hash 2.1.1", 5356 5377 "serde", 5357 5378 "servo-media", 5358 5379 "servo_config", 5380 + "servo_malloc_size_of", 5359 5381 "webrender_api", 5360 5382 ] 5361 5383 ··· 7168 7190 7169 7191 [[package]] 7170 7192 name = "quickcheck" 7171 - version = "1.0.3" 7193 + version = "1.1.0" 7172 7194 source = "registry+https://github.com/rust-lang/crates.io-index" 7173 - checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" 7195 + checksum = "95c589f335db0f6aaa168a7cd27b1fc6920f5e1470c804f814d9cd6e62a0f70b" 7174 7196 dependencies = [ 7175 - "env_logger 0.8.4", 7197 + "env_logger", 7176 7198 "log", 7177 - "rand 0.8.5", 7199 + "rand 0.10.0", 7178 7200 ] 7179 7201 7180 7202 [[package]] ··· 7227 7249 ] 7228 7250 7229 7251 [[package]] 7252 + name = "rand" 7253 + version = "0.10.0" 7254 + source = "registry+https://github.com/rust-lang/crates.io-index" 7255 + checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" 7256 + dependencies = [ 7257 + "getrandom 0.4.1", 7258 + "rand_core 0.10.0", 7259 + ] 7260 + 7261 + [[package]] 7230 7262 name = "rand_chacha" 7231 7263 version = "0.2.2" 7232 7264 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 7284 7316 ] 7285 7317 7286 7318 [[package]] 7319 + name = "rand_core" 7320 + version = "0.10.0" 7321 + source = "registry+https://github.com/rust-lang/crates.io-index" 7322 + checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" 7323 + 7324 + [[package]] 7287 7325 name = "rand_hc" 7288 7326 version = "0.2.0" 7289 7327 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 8064 8102 [[package]] 8065 8103 name = "selectors" 8066 8104 version = "0.35.0" 8067 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 8105 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 8068 8106 dependencies = [ 8069 8107 "bitflags 2.10.0", 8070 8108 "cssparser", ··· 8209 8247 "byte-slice-cast", 8210 8248 "euclid", 8211 8249 "log", 8250 + "malloc_size_of_derive", 8212 8251 "num-complex", 8213 8252 "num-traits", 8214 8253 "petgraph", ··· 8218 8257 "servo-media-player", 8219 8258 "servo-media-streams", 8220 8259 "servo-media-traits", 8260 + "servo_malloc_size_of", 8221 8261 "smallvec", 8222 8262 "speexdsp-resampler", 8223 8263 ] ··· 8318 8358 version = "0.1.0" 8319 8359 dependencies = [ 8320 8360 "ipc-channel", 8361 + "malloc_size_of_derive", 8321 8362 "serde", 8322 8363 "serde_derive", 8323 8364 "servo-media-streams", 8324 8365 "servo-media-traits", 8366 + "servo_malloc_size_of", 8325 8367 ] 8326 8368 8327 8369 [[package]] 8328 8370 name = "servo-media-streams" 8329 8371 version = "0.1.0" 8330 8372 dependencies = [ 8373 + "malloc_size_of_derive", 8374 + "servo_malloc_size_of", 8331 8375 "uuid", 8332 8376 ] 8333 8377 8334 8378 [[package]] 8335 8379 name = "servo-media-traits" 8336 8380 version = "0.1.0" 8381 + dependencies = [ 8382 + "malloc_size_of_derive", 8383 + "servo_malloc_size_of", 8384 + ] 8337 8385 8338 8386 [[package]] 8339 8387 name = "servo-media-webrtc" ··· 8370 8418 [[package]] 8371 8419 name = "servo_arc" 8372 8420 version = "0.4.3" 8373 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 8421 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 8374 8422 dependencies = [ 8375 8423 "serde", 8376 8424 "stable_deref_trait", ··· 8808 8856 8809 8857 [[package]] 8810 8858 name = "stylo" 8811 - version = "0.11.0" 8812 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 8859 + version = "0.12.0" 8860 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 8813 8861 dependencies = [ 8814 8862 "app_units", 8815 8863 "arrayvec", ··· 8844 8892 "smallvec", 8845 8893 "static_assertions", 8846 8894 "string_cache", 8895 + "strum", 8896 + "strum_macros", 8847 8897 "stylo_atoms", 8848 8898 "stylo_config", 8849 8899 "stylo_derive", ··· 8863 8913 8864 8914 [[package]] 8865 8915 name = "stylo_atoms" 8866 - version = "0.11.0" 8867 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 8916 + version = "0.12.0" 8917 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 8868 8918 dependencies = [ 8869 8919 "string_cache", 8870 8920 "string_cache_codegen", ··· 8872 8922 8873 8923 [[package]] 8874 8924 name = "stylo_config" 8875 - version = "0.11.0" 8876 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 8925 + version = "0.12.0" 8926 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 8877 8927 8878 8928 [[package]] 8879 8929 name = "stylo_derive" 8880 - version = "0.11.0" 8881 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 8930 + version = "0.12.0" 8931 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 8882 8932 dependencies = [ 8883 8933 "darling", 8884 8934 "proc-macro2", ··· 8889 8939 8890 8940 [[package]] 8891 8941 name = "stylo_dom" 8892 - version = "0.11.0" 8893 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 8942 + version = "0.12.0" 8943 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 8894 8944 dependencies = [ 8895 8945 "bitflags 2.10.0", 8896 8946 "stylo_malloc_size_of", ··· 8898 8948 8899 8949 [[package]] 8900 8950 name = "stylo_malloc_size_of" 8901 - version = "0.11.0" 8902 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 8951 + version = "0.12.0" 8952 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 8903 8953 dependencies = [ 8904 8954 "app_units", 8905 8955 "cssparser", ··· 8915 8965 8916 8966 [[package]] 8917 8967 name = "stylo_static_prefs" 8918 - version = "0.11.0" 8919 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 8968 + version = "0.12.0" 8969 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 8920 8970 dependencies = [ 8921 8971 "stylo_config", 8922 8972 ] 8923 8973 8924 8974 [[package]] 8925 8975 name = "stylo_traits" 8926 - version = "0.11.0" 8927 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 8976 + version = "0.12.0" 8977 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 8928 8978 dependencies = [ 8929 8979 "app_units", 8930 8980 "bitflags 2.10.0", ··· 9357 9407 [[package]] 9358 9408 name = "to_shmem" 9359 9409 version = "0.3.0" 9360 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 9410 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 9361 9411 dependencies = [ 9362 9412 "cssparser", 9363 9413 "servo_arc", ··· 9370 9420 [[package]] 9371 9421 name = "to_shmem_derive" 9372 9422 version = "0.1.0" 9373 - source = "git+https://github.com/servo/stylo?rev=d99b4a52f71b423363626d58506a731f3d06ccf6#d99b4a52f71b423363626d58506a731f3d06ccf6" 9423 + source = "git+https://github.com/servo/stylo?rev=d9831d464bd254e2d71e2ec58c78feaa85fb2a27#d9831d464bd254e2d71e2ec58c78feaa85fb2a27" 9374 9424 dependencies = [ 9375 9425 "darling", 9376 9426 "proc-macro2", ··· 9522 9572 9523 9573 [[package]] 9524 9574 name = "toml_parser" 9525 - version = "1.0.6+spec-1.1.0" 9575 + version = "1.0.7+spec-1.1.0" 9526 9576 source = "registry+https://github.com/rust-lang/crates.io-index" 9527 - checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" 9577 + checksum = "247eaa3197818b831697600aadf81514e577e0cba5eab10f7e064e78ae154df1" 9528 9578 dependencies = [ 9529 9579 "winnow 0.7.14", 9530 9580 ] ··· 9817 9867 9818 9868 [[package]] 9819 9869 name = "unicode-ident" 9820 - version = "1.0.22" 9870 + version = "1.0.23" 9821 9871 source = "registry+https://github.com/rust-lang/crates.io-index" 9822 - checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" 9872 + checksum = "537dd038a89878be9b64dd4bd1b260315c1bb94f4d784956b81e27a088d9a09e" 9823 9873 9824 9874 [[package]] 9825 9875 name = "unicode-properties" ··· 9852 9902 checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 9853 9903 9854 9904 [[package]] 9905 + name = "unicode-xid" 9906 + version = "0.2.6" 9907 + source = "registry+https://github.com/rust-lang/crates.io-index" 9908 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 9909 + 9910 + [[package]] 9855 9911 name = "universal-hash" 9856 9912 version = "0.5.1" 9857 9913 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 10136 10192 ] 10137 10193 10138 10194 [[package]] 10195 + name = "wasip3" 10196 + version = "0.4.0+wasi-0.3.0-rc-2026-01-06" 10197 + source = "registry+https://github.com/rust-lang/crates.io-index" 10198 + checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" 10199 + dependencies = [ 10200 + "wit-bindgen", 10201 + ] 10202 + 10203 + [[package]] 10139 10204 name = "wasm-bindgen" 10140 10205 version = "0.2.108" 10141 10206 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 10195 10260 ] 10196 10261 10197 10262 [[package]] 10263 + name = "wasm-encoder" 10264 + version = "0.244.0" 10265 + source = "registry+https://github.com/rust-lang/crates.io-index" 10266 + checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" 10267 + dependencies = [ 10268 + "leb128fmt", 10269 + "wasmparser", 10270 + ] 10271 + 10272 + [[package]] 10273 + name = "wasm-metadata" 10274 + version = "0.244.0" 10275 + source = "registry+https://github.com/rust-lang/crates.io-index" 10276 + checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" 10277 + dependencies = [ 10278 + "anyhow", 10279 + "indexmap", 10280 + "wasm-encoder", 10281 + "wasmparser", 10282 + ] 10283 + 10284 + [[package]] 10285 + name = "wasmparser" 10286 + version = "0.244.0" 10287 + source = "registry+https://github.com/rust-lang/crates.io-index" 10288 + checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" 10289 + dependencies = [ 10290 + "bitflags 2.10.0", 10291 + "hashbrown 0.15.5", 10292 + "indexmap", 10293 + "semver", 10294 + ] 10295 + 10296 + [[package]] 10198 10297 name = "wayland-backend" 10199 10298 version = "0.3.12" 10200 10299 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 10407 10506 dependencies = [ 10408 10507 "arrayvec", 10409 10508 "base", 10509 + "malloc_size_of_derive", 10410 10510 "pixels", 10411 10511 "serde", 10412 10512 "servo_malloc_size_of", ··· 11246 11346 version = "0.51.0" 11247 11347 source = "registry+https://github.com/rust-lang/crates.io-index" 11248 11348 checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" 11349 + dependencies = [ 11350 + "wit-bindgen-rust-macro", 11351 + ] 11352 + 11353 + [[package]] 11354 + name = "wit-bindgen-core" 11355 + version = "0.51.0" 11356 + source = "registry+https://github.com/rust-lang/crates.io-index" 11357 + checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" 11358 + dependencies = [ 11359 + "anyhow", 11360 + "heck 0.5.0", 11361 + "wit-parser", 11362 + ] 11363 + 11364 + [[package]] 11365 + name = "wit-bindgen-rust" 11366 + version = "0.51.0" 11367 + source = "registry+https://github.com/rust-lang/crates.io-index" 11368 + checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" 11369 + dependencies = [ 11370 + "anyhow", 11371 + "heck 0.5.0", 11372 + "indexmap", 11373 + "prettyplease", 11374 + "syn 2.0.114", 11375 + "wasm-metadata", 11376 + "wit-bindgen-core", 11377 + "wit-component", 11378 + ] 11379 + 11380 + [[package]] 11381 + name = "wit-bindgen-rust-macro" 11382 + version = "0.51.0" 11383 + source = "registry+https://github.com/rust-lang/crates.io-index" 11384 + checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" 11385 + dependencies = [ 11386 + "anyhow", 11387 + "prettyplease", 11388 + "proc-macro2", 11389 + "quote", 11390 + "syn 2.0.114", 11391 + "wit-bindgen-core", 11392 + "wit-bindgen-rust", 11393 + ] 11394 + 11395 + [[package]] 11396 + name = "wit-component" 11397 + version = "0.244.0" 11398 + source = "registry+https://github.com/rust-lang/crates.io-index" 11399 + checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" 11400 + dependencies = [ 11401 + "anyhow", 11402 + "bitflags 2.10.0", 11403 + "indexmap", 11404 + "log", 11405 + "serde", 11406 + "serde_derive", 11407 + "serde_json", 11408 + "wasm-encoder", 11409 + "wasm-metadata", 11410 + "wasmparser", 11411 + "wit-parser", 11412 + ] 11413 + 11414 + [[package]] 11415 + name = "wit-parser" 11416 + version = "0.244.0" 11417 + source = "registry+https://github.com/rust-lang/crates.io-index" 11418 + checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" 11419 + dependencies = [ 11420 + "anyhow", 11421 + "id-arena", 11422 + "indexmap", 11423 + "log", 11424 + "semver", 11425 + "serde", 11426 + "serde_derive", 11427 + "serde_json", 11428 + "unicode-xid", 11429 + "wasmparser", 11430 + ] 11249 11431 11250 11432 [[package]] 11251 11433 name = "wr_glyph_rasterizer" ··· 11642 11824 11643 11825 [[package]] 11644 11826 name = "zmij" 11645 - version = "1.0.19" 11827 + version = "1.0.20" 11646 11828 source = "registry+https://github.com/rust-lang/crates.io-index" 11647 - checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" 11829 + checksum = "4de98dfa5d5b7fef4ee834d0073d560c9ca7b6c46a71d058c48db7960f8cfaf7" 11648 11830 11649 11831 [[package]] 11650 11832 name = "zstd"
+9 -9
Cargo.toml
··· 103 103 image = { version = "0.25", default-features = false, features = ["avif", "rayon", "bmp", "gif", "ico", "jpeg", "png", "webp"] } 104 104 imsz = "0.4" 105 105 indexmap = { version = "2.11.4", features = ["std"] } 106 - ipc-channel = "0.20.2" 106 + ipc-channel = "0.21" 107 107 itertools = "0.14" 108 108 js = { package = "mozjs", version = "=0.14.8", default-features = false, features = ["libz-sys", "intl"] } 109 109 keyboard-types = { version = "0.8.3", features = ["serde", "webdriver"] } ··· 163 163 sea-query = { version = "1.0.0-rc.30", default-features = false, features = ["backend-sqlite", "derive"] } 164 164 sea-query-rusqlite = { version = "0.8.0-rc.15" } 165 165 sec1 = "0.7" 166 - selectors = { git = "https://github.com/servo/stylo", rev = "d99b4a52f71b423363626d58506a731f3d06ccf6" } 166 + selectors = { git = "https://github.com/servo/stylo", rev = "d9831d464bd254e2d71e2ec58c78feaa85fb2a27" } 167 167 serde = "1.0.228" 168 168 serde_bytes = "0.11" 169 169 serde_core = "1.0.226" ··· 172 172 servo-media-dummy = { path = "source/components/media/backends/dummy" } 173 173 servo-media-gstreamer = { path = "source/components/media/backends/gstreamer" } 174 174 servo-tracing = { path = "source/components/servo_tracing" } 175 - servo_arc = { git = "https://github.com/servo/stylo", rev = "d99b4a52f71b423363626d58506a731f3d06ccf6" } 175 + servo_arc = { git = "https://github.com/servo/stylo", rev = "d9831d464bd254e2d71e2ec58c78feaa85fb2a27" } 176 176 sha1 = "0.10" 177 177 sha2 = "0.10" 178 178 sha3 = "0.10" ··· 181 181 storage_traits = { path = "source/components/shared/storage" } 182 182 string_cache = "0.9" 183 183 strum = { version = "0.27", features = ["derive"] } 184 - stylo = { git = "https://github.com/servo/stylo", rev = "d99b4a52f71b423363626d58506a731f3d06ccf6" } 185 - stylo_atoms = { git = "https://github.com/servo/stylo", rev = "d99b4a52f71b423363626d58506a731f3d06ccf6" } 186 - stylo_config = { git = "https://github.com/servo/stylo", rev = "d99b4a52f71b423363626d58506a731f3d06ccf6" } 187 - stylo_dom = { git = "https://github.com/servo/stylo", rev = "d99b4a52f71b423363626d58506a731f3d06ccf6" } 188 - stylo_malloc_size_of = { git = "https://github.com/servo/stylo", rev = "d99b4a52f71b423363626d58506a731f3d06ccf6" } 189 - stylo_traits = { git = "https://github.com/servo/stylo", rev = "d99b4a52f71b423363626d58506a731f3d06ccf6" } 184 + stylo = { git = "https://github.com/servo/stylo", rev = "d9831d464bd254e2d71e2ec58c78feaa85fb2a27" } 185 + stylo_atoms = { git = "https://github.com/servo/stylo", rev = "d9831d464bd254e2d71e2ec58c78feaa85fb2a27" } 186 + stylo_config = { git = "https://github.com/servo/stylo", rev = "d9831d464bd254e2d71e2ec58c78feaa85fb2a27" } 187 + stylo_dom = { git = "https://github.com/servo/stylo", rev = "d9831d464bd254e2d71e2ec58c78feaa85fb2a27" } 188 + stylo_malloc_size_of = { git = "https://github.com/servo/stylo", rev = "d9831d464bd254e2d71e2ec58c78feaa85fb2a27" } 189 + stylo_traits = { git = "https://github.com/servo/stylo", rev = "d9831d464bd254e2d71e2ec58c78feaa85fb2a27" } 190 190 surfman = { version = "0.11.0", features = ["chains"] } 191 191 syn = { version = "2", default-features = false, features = ["clone-impls", "derive", "parsing"] } 192 192 synstructure = "0.13"
+1 -1
forkme.lock
··· 1 - 7488c127db4609584f113dfdeb451a81b6d99f79 1 + b76354f058b38af89ee8e53e0a30ffbe3ae62f87
+1 -1
patches/components/config/macro/lib.rs.patch
··· 13 13 14 14 /// A derive macro that adds string-based getter and setter for each field of this struct 15 15 /// (enums and other types are not supported). Each field must be able to be convertable 16 - @@ -65,3 +66,127 @@ 16 + @@ -104,3 +105,127 @@ 17 17 } 18 18 } 19 19 }
+18 -18
patches/components/constellation/constellation.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -114,6 +114,7 @@ 3 + @@ -116,6 +116,7 @@ 4 4 use canvas_traits::webgl::WebGLThreads; 5 5 use constellation_traits::{ 6 6 AuxiliaryWebViewCreationRequest, AuxiliaryWebViewCreationResponse, DocumentState, ··· 8 8 EmbedderToConstellationMessage, IFrameLoadInfo, IFrameLoadInfoWithData, IFrameSizeMsg, Job, 9 9 LoadData, LogEntry, MessagePortMsg, NavigationHistoryBehavior, PaintMetricEvent, 10 10 PortMessageTask, PortTransferInfo, SWManagerMsg, SWManagerSenders, ScreenshotReadinessResponse, 11 - @@ -129,12 +130,12 @@ 11 + @@ -131,12 +132,12 @@ 12 12 use embedder_traits::resources::{self, Resource}; 13 13 use embedder_traits::user_contents::{UserContentManagerId, UserContents}; 14 14 use embedder_traits::{ ··· 27 27 }; 28 28 use euclid::Size2D; 29 29 use euclid::default::Size2D as UntypedSize2D; 30 - @@ -507,6 +508,19 @@ 30 + @@ -509,6 +510,19 @@ 31 31 /// to the `UserContents` need to be forwared to all the `ScriptThread`s that host 32 32 /// the relevant `WebView`. 33 33 pub(crate) user_contents_for_manager_id: FxHashMap<UserContentManagerId, UserContents>, ··· 47 47 } 48 48 49 49 /// State needed to construct a constellation. 50 - @@ -725,6 +739,9 @@ 50 + @@ -727,6 +741,9 @@ 51 51 pending_viewport_changes: Default::default(), 52 52 screenshot_readiness_requests: Vec::new(), 53 53 user_contents_for_manager_id: Default::default(), ··· 57 57 }; 58 58 59 59 constellation.run(); 60 - @@ -750,6 +767,18 @@ 60 + @@ -752,6 +769,18 @@ 61 61 fn clean_up_finished_script_event_loops(&mut self) { 62 62 self.event_loop_join_handles 63 63 .retain(|join_handle| !join_handle.is_finished()); ··· 76 76 self.event_loops 77 77 .retain(|event_loop| event_loop.upgrade().is_some()); 78 78 } 79 - @@ -1041,6 +1070,11 @@ 79 + @@ -1043,6 +1072,11 @@ 80 80 .get(&webview_id) 81 81 .and_then(|webview| webview.user_content_manager_id); 82 82 ··· 88 88 let new_pipeline_info = NewPipelineInfo { 89 89 parent_info: parent_pipeline_id, 90 90 new_pipeline_id, 91 - @@ -1051,6 +1085,13 @@ 91 + @@ -1053,6 +1087,13 @@ 92 92 viewport_details: initial_viewport_details, 93 93 user_content_manager_id, 94 94 theme, ··· 102 102 }; 103 103 let pipeline = match Pipeline::spawn(new_pipeline_info, event_loop, self, throttled) { 104 104 Ok(pipeline) => pipeline, 105 - @@ -1522,11 +1563,7 @@ 105 + @@ -1524,11 +1565,7 @@ 106 106 } 107 107 }, 108 108 EmbedderToConstellationMessage::PreferencesUpdated(updates) => { ··· 115 115 let _ = event_loop.send(ScriptThreadMessage::PreferencesUpdated( 116 116 updates 117 117 .iter() 118 - @@ -1550,6 +1587,18 @@ 118 + @@ -1552,6 +1589,18 @@ 119 119 EmbedderToConstellationMessage::UpdatePinchZoomInfos(pipeline_id, pinch_zoom) => { 120 120 self.handle_update_pinch_zoom_infos(pipeline_id, pinch_zoom); 121 121 }, ··· 134 134 } 135 135 } 136 136 137 - @@ -1773,6 +1822,12 @@ 137 + @@ -1775,6 +1824,12 @@ 138 138 self.broadcast_channels 139 139 .remove_broadcast_channel_router(router_id); 140 140 }, ··· 147 147 ScriptToConstellationMessage::ScheduleBroadcast(router_id, message) => { 148 148 if self 149 149 .check_origin_against_pipeline(&source_pipeline_id, &message.origin) 150 - @@ -1803,6 +1858,12 @@ 150 + @@ -1805,6 +1860,12 @@ 151 151 ScriptToConstellationMessage::CreateAuxiliaryWebView(load_info) => { 152 152 self.handle_script_new_auxiliary(load_info); 153 153 }, ··· 160 160 ScriptToConstellationMessage::ChangeRunningAnimationsState(animation_state) => { 161 161 self.handle_change_running_animations_state(source_pipeline_id, animation_state) 162 162 }, 163 - @@ -1969,6 +2030,23 @@ 163 + @@ -1971,6 +2032,23 @@ 164 164 new_value, 165 165 ); 166 166 }, ··· 184 184 ScriptToConstellationMessage::MediaSessionEvent(pipeline_id, event) => { 185 185 // Unlikely at this point, but we may receive events coming from 186 186 // different media sessions, so we set the active media session based 187 - @@ -2037,6 +2115,129 @@ 187 + @@ -2039,6 +2117,129 @@ 188 188 ScriptToConstellationMessage::RespondToScreenshotReadinessRequest(response) => { 189 189 self.handle_screenshot_readiness_response(source_pipeline_id, response); 190 190 }, ··· 314 314 } 315 315 } 316 316 317 - @@ -3135,6 +3336,13 @@ 317 + @@ -3137,6 +3338,13 @@ 318 318 /// <https://html.spec.whatwg.org/multipage/#destroy-a-top-level-traversable> 319 319 fn handle_close_top_level_browsing_context(&mut self, webview_id: WebViewId) { 320 320 debug!("{webview_id}: Closing"); ··· 328 328 let browsing_context_id = BrowsingContextId::from(webview_id); 329 329 // Step 5. Remove traversable from the user agent's top-level traversable set. 330 330 let browsing_context = 331 - @@ -3411,8 +3619,27 @@ 331 + @@ -3413,8 +3621,27 @@ 332 332 opener_webview_id, 333 333 opener_pipeline_id, 334 334 response_sender, ··· 356 356 let Some((webview_id_sender, webview_id_receiver)) = generic_channel::channel() else { 357 357 warn!("Failed to create channel"); 358 358 let _ = response_sender.send(None); 359 - @@ -3510,6 +3737,359 @@ 359 + @@ -3512,6 +3739,359 @@ 360 360 }); 361 361 } 362 362 ··· 716 716 #[servo_tracing::instrument(skip_all)] 717 717 fn handle_refresh_cursor(&self, pipeline_id: PipelineId) { 718 718 let Some(pipeline) = self.pipelines.get(&pipeline_id) else { 719 - @@ -4632,7 +5212,7 @@ 719 + @@ -4634,7 +5214,7 @@ 720 720 } 721 721 722 722 #[servo_tracing::instrument(skip_all)] ··· 725 725 // Send a flat projection of the history to embedder. 726 726 // The final vector is a concatenation of the URLs of the past 727 727 // entries, the current entry and the future entries. 728 - @@ -4735,9 +5315,23 @@ 728 + @@ -4737,9 +5317,23 @@ 729 729 ); 730 730 self.embedder_proxy.send(EmbedderMsg::HistoryChanged( 731 731 webview_id,
+10 -10
patches/components/paint/webview_renderer.rs.patch
··· 78 78 hit_test_result 79 79 }, 80 80 None => None, 81 - @@ -678,6 +704,89 @@ 81 + @@ -680,6 +706,89 @@ 82 82 self.on_scroll_window_event(scroll, point); 83 83 } 84 84 ··· 168 168 fn on_scroll_window_event(&mut self, scroll: Scroll, cursor: DevicePoint) { 169 169 self.pending_scroll_zoom_events 170 170 .push(ScrollZoomEvent::Scroll(ScrollEvent { 171 - @@ -687,18 +796,25 @@ 171 + @@ -689,18 +798,25 @@ 172 172 })); 173 173 } 174 174 ··· 199 199 } 200 200 201 201 // Batch up all scroll events and changes to pinch zoom into a single change, or 202 - @@ -752,15 +868,24 @@ 202 + @@ -754,15 +870,24 @@ 203 203 } 204 204 } 205 205 ··· 230 230 231 231 let scroll_result = combined_scroll_event.and_then(|combined_event| { 232 232 self.scroll_node_at_device_point( 233 - @@ -769,6 +894,21 @@ 233 + @@ -771,6 +896,21 @@ 234 234 combined_event.scroll, 235 235 ) 236 236 }); ··· 252 252 if let Some(ref scroll_result) = scroll_result { 253 253 self.send_scroll_positions_to_layout_for_pipeline( 254 254 scroll_result.hit_test_result.pipeline_id, 255 - @@ -787,7 +927,11 @@ 255 + @@ -789,7 +929,11 @@ 256 256 self.send_pinch_zoom_infos_to_script(); 257 257 } 258 258 ··· 265 265 } 266 266 267 267 /// Perform a hit test at the given [`DevicePoint`] and apply the [`Scroll`] 268 - @@ -794,7 +938,7 @@ 268 + @@ -796,7 +940,7 @@ 269 269 /// scrolling to the applicable scroll node under that point. If a scroll was 270 270 /// performed, returns the hit test result contains [`PipelineId`] of the node 271 271 /// scrolled, the id, and the final scroll delta. ··· 274 274 &mut self, 275 275 render_api: &RenderApi, 276 276 cursor: DevicePoint, 277 - @@ -822,7 +966,10 @@ 277 + @@ -824,7 +968,10 @@ 278 278 // its ancestor pipelines. 279 279 let mut previous_pipeline_id = None; 280 280 for hit_test_result in hit_test_results { ··· 286 286 if previous_pipeline_id.replace(hit_test_result.pipeline_id) != 287 287 Some(hit_test_result.pipeline_id) 288 288 { 289 - @@ -849,7 +996,11 @@ 289 + @@ -851,7 +998,11 @@ 290 290 } 291 291 } 292 292 } ··· 299 299 } 300 300 301 301 /// Scroll the viewport (root pipeline, root scroll node) of this WebView, but first 302 - @@ -1005,20 +1156,45 @@ 302 + @@ -1007,20 +1158,45 @@ 303 303 } 304 304 305 305 fn send_window_size_message(&self) { ··· 357 357 } 358 358 359 359 /// Set the `hidpi_scale_factor` for this renderer, returning `true` if the value actually changed. 360 - @@ -1084,8 +1260,21 @@ 360 + @@ -1086,8 +1262,21 @@ 361 361 if let Some(wheel_event) = self.pending_wheel_events.remove(&id) { 362 362 if !result.contains(InputEventResult::DefaultPrevented) { 363 363 // A scroll delta for a wheel event is the inverse of the wheel delta.
+1 -1
patches/components/script/dom/debuggerglobalscope.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -94,9 +94,11 @@ 3 + @@ -102,9 +102,11 @@ 4 4 None, 5 5 #[cfg(feature = "webgpu")] 6 6 gpu_id_hub,
+12 -12
patches/components/script/dom/document.rs.patch
··· 25 25 use fonts::WebFontDocumentContext; 26 26 use html5ever::{LocalName, Namespace, QualName, local_name, ns}; 27 27 use hyper_serde::Serde; 28 - @@ -613,6 +616,9 @@ 29 - #[ignore_malloc_size_of = "TODO: unimplemented on Image"] 28 + @@ -612,6 +615,9 @@ 29 + #[no_trace] 30 30 favicon: RefCell<Option<Image>>, 31 31 32 32 + /// The cached theme color for that document. ··· 35 35 /// All websockets created that are associated with this document. 36 36 websockets: DOMTracker<WebSocket>, 37 37 38 - @@ -845,6 +851,12 @@ 38 + @@ -844,6 +850,12 @@ 39 39 40 40 // Set the document's activity level, reflow if necessary, and suspend or resume timers. 41 41 self.activity.set(activity); ··· 48 48 let media = ServoMedia::get(); 49 49 let pipeline_id = self.window().pipeline_id(); 50 50 let client_context_id = 51 - @@ -858,6 +870,7 @@ 51 + @@ -857,6 +869,7 @@ 52 52 53 53 self.title_changed(); 54 54 self.notify_embedder_favicon(); ··· 56 56 self.dirty_all_nodes(); 57 57 self.window().resume(can_gc); 58 58 media.resume(&client_context_id); 59 - @@ -1262,6 +1275,9 @@ 59 + @@ -1261,6 +1274,9 @@ 60 60 LoadStatus::Started, 61 61 )); 62 62 self.send_to_embedder(EmbedderMsg::Status(self.webview_id(), None)); ··· 66 66 } 67 67 }, 68 68 DocumentReadyState::Complete => { 69 - @@ -1270,6 +1286,9 @@ 69 + @@ -1269,6 +1285,9 @@ 70 70 self.webview_id(), 71 71 LoadStatus::Complete, 72 72 )); ··· 76 76 } 77 77 update_with_current_instant(&self.dom_complete); 78 78 }, 79 - @@ -1678,7 +1697,13 @@ 79 + @@ -1677,7 +1696,13 @@ 80 80 let window = self.window(); 81 81 if window.is_top_level() { 82 82 let title = self.title().map(String::from); ··· 91 91 } 92 92 } 93 93 94 - @@ -1687,6 +1712,18 @@ 94 + @@ -1686,6 +1711,18 @@ 95 95 window.send_to_embedder(msg); 96 96 } 97 97 ··· 110 110 pub(crate) fn dirty_all_nodes(&self) { 111 111 let root = match self.GetDocumentElement() { 112 112 Some(root) => root, 113 - @@ -3172,9 +3209,59 @@ 113 + @@ -3171,9 +3208,59 @@ 114 114 current_rendering_epoch, 115 115 ); 116 116 ··· 170 170 pub(crate) fn handle_no_longer_waiting_on_asynchronous_image_updates(&self) { 171 171 self.waiting_on_canvas_image_updates.set(false); 172 172 } 173 - @@ -3908,6 +3995,7 @@ 173 + @@ -3907,6 +3994,7 @@ 174 174 active_sandboxing_flag_set: Cell::new(SandboxingFlagSet::empty()), 175 175 creation_sandboxing_flag_set: Cell::new(creation_sandboxing_flag_set), 176 176 favicon: RefCell::new(None), ··· 178 178 websockets: DOMTracker::new(), 179 179 details_name_groups: Default::default(), 180 180 protocol_handler_automation_mode: Default::default(), 181 - @@ -5007,6 +5095,36 @@ 181 + @@ -5006,6 +5094,36 @@ 182 182 183 183 pub(crate) fn notify_embedder_favicon(&self) { 184 184 if let Some(ref image) = *self.favicon.borrow() { ··· 215 215 self.send_to_embedder(EmbedderMsg::NewFavicon(self.webview_id(), image.clone())); 216 216 } 217 217 } 218 - @@ -5015,6 +5133,20 @@ 218 + @@ -5014,6 +5132,20 @@ 219 219 *self.favicon.borrow_mut() = Some(favicon); 220 220 self.notify_embedder_favicon(); 221 221 }
+3 -3
patches/components/script/dom/document_embedder_controls.rs.patch
··· 273 273 + } 274 274 + 275 275 pub(crate) fn show_context_menu(&self, hit_test_result: &HitTestResult) { 276 - let mut anchor_element = None; 277 - let mut image_element = None; 278 - @@ -410,8 +542,11 @@ 276 + { 277 + let mut visible_elements = self.visible_elements.borrow_mut(); 278 + @@ -428,8 +560,11 @@ 279 279 let Some(browsing_context) = document.browsing_context() else { 280 280 return; 281 281 };
+34 -34
patches/components/script/dom/document_event_handler.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -10,12 +10,15 @@ 3 + @@ -11,12 +11,15 @@ 4 4 use std::time::{Duration, Instant}; 5 5 6 6 use base::generic_channel::GenericCallback; ··· 18 18 }; 19 19 #[cfg(feature = "gamepad")] 20 20 use embedder_traits::{ 21 - @@ -27,8 +30,10 @@ 21 + @@ -28,8 +31,10 @@ 22 22 use layout_api::{ScrollContainerQueryFlags, node_id_from_scroll_id}; 23 23 use script_bindings::codegen::GenericBindings::DocumentBinding::DocumentMethods; 24 24 use script_bindings::codegen::GenericBindings::EventBinding::EventMethods; ··· 29 29 use script_bindings::codegen::GenericBindings::PerformanceBinding::PerformanceMethods; 30 30 use script_bindings::codegen::GenericBindings::TouchBinding::TouchMethods; 31 31 use script_bindings::codegen::GenericBindings::WindowBinding::{ScrollBehavior, WindowMethods}; 32 - @@ -47,12 +52,13 @@ 32 + @@ -48,12 +53,13 @@ 33 33 use crate::dom::bindings::refcounted::Trusted; 34 34 use crate::dom::bindings::root::MutNullableDom; 35 35 use crate::dom::clipboardevent::ClipboardEventType; ··· 43 43 +use crate::dom::html::htmliframeelement::HTMLIFrameElement; 44 44 use crate::dom::inputevent::HitTestResult; 45 45 use crate::dom::node::{self, Node, NodeTraits, ShadowIncluding}; 46 - use crate::dom::pointerevent::PointerId; 46 + use crate::dom::pointerevent::{PointerEvent, PointerId}; 47 47 @@ -64,6 +70,7 @@ 48 48 }; 49 49 use crate::drag_data_store::{DragDataStore, Kind, Mode}; ··· 109 109 /// The [`DocumentEventHandler`] is a structure responsible for handling input events for 110 110 /// the [`crate::Document`] and storing data related to event handling. It exists to 111 111 /// decrease the size of the [`crate::Document`] structure. 112 - @@ -161,6 +218,20 @@ 113 - /// The active keyboard modifiers for the WebView. This is updated when receiving any input event. 114 - #[no_trace] 115 - active_keyboard_modifiers: Cell<Modifiers>, 112 + @@ -168,6 +225,20 @@ 113 + active_pointer_ids: DomRefCell<HashMap<i32, i32>>, 114 + /// Counter for generating unique pointer IDs for touch inputs 115 + next_touch_pointer_id: Cell<i32>, 116 116 + /// Long-press state for context menu detection. 117 117 + long_press_state: DomRefCell<Option<LongPressState>>, 118 118 + /// Touch ID that triggered a context menu via long-press. ··· 130 130 } 131 131 132 132 impl DocumentEventHandler { 133 - @@ -177,6 +248,9 @@ 134 - current_cursor: Default::default(), 135 - active_touch_points: Default::default(), 133 + @@ -187,6 +258,9 @@ 136 134 active_keyboard_modifiers: Default::default(), 135 + active_pointer_ids: Default::default(), 136 + next_touch_pointer_id: Cell::new(1), 137 137 + long_press_state: Default::default(), 138 138 + context_menu_touch_id: Default::default(), 139 139 + forwarded_touches: Default::default(), 140 140 } 141 141 } 142 142 143 - @@ -421,6 +495,198 @@ 143 + @@ -431,6 +505,198 @@ 144 144 } 145 145 } 146 146 ··· 249 249 + if touch.event_type == TouchEventType::Down { 250 250 + self.forwarded_touches 251 251 + .borrow_mut() 252 - + .push((touch.id, embedded_webview_id)); 252 + + .push((touch.touch_id, embedded_webview_id)); 253 253 + } 254 254 + } 255 255 + ··· 322 322 + 323 323 + // Create transformed touch event 324 324 + let mut transformed_touch = 325 - + EmbedderTouchEvent::new(event.event_type, event.id, transformed_point); 325 + + EmbedderTouchEvent::new(event.event_type, event.touch_id, transformed_point); 326 326 + 327 327 + // Preserve the cancelable state from the original event 328 328 + if !event.is_cancelable() { ··· 339 339 /// <https://w3c.github.io/uievents/#handle-native-mouse-move> 340 340 fn handle_native_mouse_move_event(&self, input_event: &ConstellationInputEvent, can_gc: CanGc) { 341 341 // Ignore all incoming events without a hit test. 342 - @@ -435,6 +701,57 @@ 342 + @@ -445,6 +711,57 @@ 343 343 return; 344 344 } 345 345 ··· 397 397 // Update the cursor when the mouse moves, if it has changed. 398 398 self.set_cursor(Some(hit_test_result.cursor)); 399 399 400 - @@ -615,6 +932,12 @@ 400 + @@ -635,6 +952,12 @@ 401 401 return; 402 402 }; 403 403 ··· 410 410 debug!( 411 411 "{:?}: at {:?}", 412 412 event.action, hit_test_result.point_in_frame 413 - @@ -685,11 +1008,18 @@ 413 + @@ -720,11 +1043,18 @@ 414 414 let target_el = element.find_focusable_shadow_host_if_necessary(); 415 415 416 416 let document = self.window.Document(); ··· 433 433 434 434 // Step 7. Let result = dispatch event at target 435 435 let result = dom_event.dispatch(node.upcast(), false, can_gc); 436 - @@ -696,7 +1026,7 @@ 436 + @@ -731,7 +1061,7 @@ 437 437 438 438 // Step 8. If result is true and target is a focusable area 439 439 // that is click focusable, then Run the focusing steps at target. ··· 442 442 document.commit_focus_transaction(FocusInitiator::Local, can_gc); 443 443 } 444 444 445 - @@ -706,7 +1036,7 @@ 445 + @@ -741,7 +1071,7 @@ 446 446 self.maybe_show_context_menu( 447 447 node.upcast(), 448 448 &hit_test_result, ··· 451 451 can_gc, 452 452 ); 453 453 } 454 - @@ -817,9 +1147,30 @@ 454 + @@ -869,9 +1199,30 @@ 455 455 &self, 456 456 target: &EventTarget, 457 457 hit_test_result: &HitTestResult, ··· 483 483 // <https://w3c.github.io/uievents/#contextmenu> 484 484 let menu_event = PointerEvent::new( 485 485 &self.window, // window 486 - @@ -833,25 +1184,25 @@ 486 + @@ -885,25 +1236,25 @@ 487 487 hit_test_result 488 488 .point_relative_to_initial_containing_block 489 489 .to_i32(), ··· 528 528 can_gc, 529 529 ); 530 530 531 - @@ -867,6 +1218,89 @@ 531 + @@ -919,6 +1270,89 @@ 532 532 }; 533 533 } 534 534 ··· 618 618 fn handle_touch_event( 619 619 &self, 620 620 event: EmbedderTouchEvent, 621 - @@ -873,6 +1307,29 @@ 621 + @@ -925,6 +1359,29 @@ 622 622 input_event: &ConstellationInputEvent, 623 623 can_gc: CanGc, 624 624 ) -> InputEventResult { ··· 627 627 + // This ensures touch sequences stay with their original target. 628 628 + { 629 629 + let mut forwarded = self.forwarded_touches.borrow_mut(); 630 - + if let Some(pos) = forwarded.iter().position(|(id, _)| *id == event.id) { 630 + + if let Some(pos) = forwarded.iter().position(|(id, _)| *id == event.touch_id) { 631 631 + let (_, webview_id) = forwarded[pos]; 632 632 + 633 633 + // Forward this event to the same webview ··· 648 648 // Ignore all incoming events without a hit test. 649 649 let Some(hit_test_result) = self.window.hit_test_from_input_event(input_event) else { 650 650 self.update_active_touch_points_when_early_return(event); 651 - @@ -879,6 +1336,16 @@ 651 + @@ -931,6 +1388,16 @@ 652 652 return Default::default(); 653 653 }; 654 654 ··· 662 662 + return InputEventResult::DefaultPrevented; 663 663 + } 664 664 + 665 - let TouchId(identifier) = event.id; 665 + let TouchId(identifier) = event.touch_id; 666 666 let event_name = match event.event_type { 667 667 TouchEventType::Down => "touchstart", 668 - @@ -918,8 +1385,31 @@ 668 + @@ -994,8 +1461,31 @@ 669 669 self.active_touch_points 670 670 .borrow_mut() 671 671 .push(Dom::from_ref(&*touch)); 672 672 + 673 673 + // Start the long-press timer for context menu detection 674 - + self.start_long_press_timer(event.id, hit_test_result.point_in_frame); 674 + + self.start_long_press_timer(event.touch_id, hit_test_result.point_in_frame); 675 675 }, 676 676 TouchEventType::Move => { 677 677 + // Check if this is the tracked touch and if moved too far ··· 680 680 + .borrow() 681 681 + .as_ref() 682 682 + .is_some_and(|state| { 683 - + if state.touch_id == event.id { 683 + + if state.touch_id == event.touch_id { 684 684 + let dx = hit_test_result.point_in_frame.x - state.start_point.x; 685 685 + let dy = hit_test_result.point_in_frame.y - state.start_point.y; 686 686 + let distance = dx * dx + dy * dy; ··· 697 697 // Replace an existing touch point 698 698 let mut active_touch_points = self.active_touch_points.borrow_mut(); 699 699 match active_touch_points 700 - @@ -931,6 +1421,17 @@ 700 + @@ -1007,6 +1497,17 @@ 701 701 } 702 702 }, 703 703 TouchEventType::Up | TouchEventType::Cancel => { ··· 706 706 + .long_press_state 707 707 + .borrow() 708 708 + .as_ref() 709 - + .is_some_and(|state| state.touch_id == event.id); 709 + + .is_some_and(|state| state.touch_id == event.touch_id); 710 710 + 711 711 + if should_cancel { 712 712 + self.cancel_long_press_timer(); ··· 715 715 // Remove an existing touch point 716 716 let mut active_touch_points = self.active_touch_points.borrow_mut(); 717 717 match active_touch_points 718 - @@ -973,6 +1474,19 @@ 718 + @@ -1051,6 +1552,19 @@ 719 719 720 720 let event = touch_event.upcast::<Event>(); 721 721 event.fire(&target, can_gc); ··· 725 725 + if matches!( 726 726 + touch_ev.event_type, 727 727 + TouchEventType::Up | TouchEventType::Cancel 728 - + ) && self.context_menu_touch_id.get() == Some(touch_ev.id) 728 + + ) && self.context_menu_touch_id.get() == Some(touch_ev.touch_id) 729 729 + { 730 730 + self.context_menu_touch_id.set(None); 731 731 + return InputEventResult::DefaultPrevented; ··· 735 735 event.flags().into() 736 736 } 737 737 738 - @@ -1158,6 +1672,16 @@ 738 + @@ -1238,6 +1752,16 @@ 739 739 return Default::default(); 740 740 }; 741 741
+4 -4
patches/components/script/dom/globalscope.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -369,6 +369,16 @@ 3 + @@ -365,6 +365,16 @@ 4 4 /// Is considered in a secure context 5 5 inherited_secure_context: Option<bool>, 6 6 ··· 17 17 /// Directory to store unminified scripts for this window if unminify-js 18 18 /// opt is enabled. 19 19 unminified_js_dir: Option<String>, 20 - @@ -769,6 +779,8 @@ 20 + @@ -765,6 +775,8 @@ 21 21 #[cfg(feature = "webgpu")] gpu_id_hub: Arc<IdentityHub>, 22 22 inherited_secure_context: Option<bool>, 23 23 unminify_js: bool, ··· 26 26 font_context: Option<Arc<FontContext>>, 27 27 ) -> Self { 28 28 Self { 29 - @@ -812,6 +824,8 @@ 29 + @@ -808,6 +820,8 @@ 30 30 console_group_stack: DomRefCell::new(Vec::new()), 31 31 console_count_map: Default::default(), 32 32 inherited_secure_context, ··· 35 35 unminified_js_dir: unminify_js.then(|| unminified_path("unminified-js")), 36 36 byte_length_queuing_strategy_size_function: OnceCell::new(), 37 37 count_queuing_strategy_size_function: OnceCell::new(), 38 - @@ -3116,6 +3130,16 @@ 38 + @@ -3112,6 +3126,16 @@ 39 39 self.inherited_secure_context 40 40 } 41 41
+3 -3
patches/components/script/dom/mod.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -286,6 +286,7 @@ 3 + @@ -287,6 +287,7 @@ 4 4 #[expect(dead_code)] 5 5 pub(crate) mod element; 6 6 pub(crate) mod elementinternals; ··· 8 8 pub(crate) mod errorevent; 9 9 pub(crate) mod event; 10 10 pub(crate) mod eventsource; 11 - @@ -319,6 +320,7 @@ 11 + @@ -320,6 +321,7 @@ 12 12 pub(crate) mod inputevent; 13 13 pub(crate) mod intersectionobserver; 14 14 pub(crate) mod intersectionobserverentry; ··· 16 16 pub(crate) mod keyboardevent; 17 17 pub(crate) mod location; 18 18 pub(crate) mod media; 19 - @@ -346,6 +348,8 @@ 19 + @@ -347,6 +349,8 @@ 20 20 pub(crate) mod pagetransitionevent; 21 21 pub(crate) mod paintsize; 22 22 pub(crate) mod paintworkletglobalscope;
+29 -13
patches/components/script/dom/servointernals.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -9,14 +9,16 @@ 4 - use js::rust::HandleObject; 3 + @@ -13,9 +13,10 @@ 5 4 use profile_traits::mem::MemoryReportResult; 5 + use script_bindings::conversions::SafeToJSValConvertible; 6 6 use script_bindings::error::{Error, Fallible}; 7 7 -use script_bindings::interfaces::ServoInternalsHelpers; 8 8 +use script_bindings::interfaces::{EmbedderHelpers, ServoInternalsHelpers}; 9 9 use script_bindings::script_runtime::JSContext; 10 10 use script_bindings::str::USVString; 11 11 +use servo_config::embedder_prefs; 12 - use servo_config::prefs::{self, PrefValue}; 12 + use servo_config::prefs::{self, PrefValue, Preferences}; 13 13 14 14 use crate::dom::bindings::codegen::Bindings::ServoInternalsBinding::ServoInternalsMethods; 15 + @@ -22,6 +23,7 @@ 16 + use crate::dom::bindings::import::base::SafeJSContext; 15 17 use crate::dom::bindings::reflector::{DomGlobal, Reflector, reflect_dom_object}; 16 18 use crate::dom::bindings::root::DomRoot; 17 19 +use crate::dom::embedder::Embedder; 18 20 use crate::dom::globalscope::GlobalScope; 19 21 use crate::dom::promise::Promise; 20 22 use crate::realms::{AlreadyInRealm, InRealm}; 21 - @@ -61,8 +63,17 @@ 23 + @@ -132,22 +134,38 @@ 22 24 23 25 /// <https://servo.org/internal-no-spec> 24 26 fn GetBoolPreference(&self, name: USVString) -> Fallible<bool> { 25 - - if let PrefValue::Bool(b) = prefs::get().get_value(&name) { 26 - - return Ok(b); 27 + - if !Preferences::exists(&name) { 28 + - return Err(Error::NotFound(None)); 27 29 + // Check if this is an embedder preference (contains a namespace separator) 28 30 + if name.contains('.') { 29 31 + // Look up in embedder preferences registry ··· 31 33 + return Ok(b); 32 34 + } 33 35 + } else { 34 - + // Core Servo preference 36 + + if !Preferences::exists(&name) { 37 + + return Err(Error::NotFound(None)); 38 + + } 35 39 + if let PrefValue::Bool(b) = prefs::get().get_value(&name) { 36 40 + return Ok(b); 37 41 + } 38 42 } 43 + - if let PrefValue::Bool(b) = prefs::get().get_value(&name) { 44 + - return Ok(b); 45 + - } 39 46 Err(Error::TypeMismatch(None)) 40 47 } 41 - @@ -69,8 +80,17 @@ 42 48 43 49 /// <https://servo.org/internal-no-spec> 44 50 fn GetIntPreference(&self, name: USVString) -> Fallible<i64> { 51 + - if !Preferences::exists(&name) { 52 + - return Err(Error::NotFound(None)); 53 + - } 45 54 - if let PrefValue::Int(i) = prefs::get().get_value(&name) { 46 55 - return Ok(i); 47 56 + // Check if this is an embedder preference (contains a namespace separator) ··· 51 60 + return Ok(i); 52 61 + } 53 62 + } else { 54 - + // Core Servo preference 63 + + if !Preferences::exists(&name) { 64 + + return Err(Error::NotFound(None)); 65 + + } 55 66 + if let PrefValue::Int(i) = prefs::get().get_value(&name) { 56 67 + return Ok(i); 57 68 + } 58 69 } 59 70 Err(Error::TypeMismatch(None)) 60 71 } 61 - @@ -77,8 +97,17 @@ 72 + @@ -154,11 +172,19 @@ 62 73 63 74 /// <https://servo.org/internal-no-spec> 64 75 fn GetStringPreference(&self, name: USVString) -> Fallible<USVString> { 76 + - if !Preferences::exists(&name) { 77 + - return Err(Error::NotFound(None)); 78 + - } 65 79 - if let PrefValue::Str(s) = prefs::get().get_value(&name) { 66 80 - return Ok(s.into()); 67 81 + // Check if this is an embedder preference (contains a namespace separator) ··· 71 85 + return Ok(s.into()); 72 86 + } 73 87 + } else { 74 - + // Core Servo preference 88 + + if !Preferences::exists(&name) { 89 + + return Err(Error::NotFound(None)); 90 + + } 75 91 + if let PrefValue::Str(s) = prefs::get().get_value(&name) { 76 92 + return Ok(s.into()); 77 93 + } 78 94 } 79 95 Err(Error::TypeMismatch(None)) 80 96 } 81 - @@ -85,23 +114,59 @@ 97 + @@ -165,23 +191,59 @@ 82 98 83 99 /// <https://servo.org/internal-no-spec> 84 100 fn SetBoolPreference(&self, name: USVString, value: bool) { ··· 147 163 } 148 164 } 149 165 150 - @@ -117,7 +182,10 @@ 166 + @@ -197,7 +259,10 @@ 151 167 /// The navigator.servo api is exposed to about: pages except about:blank, as 152 168 /// well as any URLs provided by embedders that register new protocol handlers. 153 169 #[expect(unsafe_code)]
+8 -8
patches/components/script/dom/window.rs.patch
··· 9 9 }; 10 10 use euclid::default::Rect as UntypedRect; 11 11 use euclid::{Point2D, Rect, Scale, Size2D, Vector2D}; 12 - @@ -1139,12 +1139,22 @@ 12 + @@ -1138,12 +1138,22 @@ 13 13 14 14 let (sender, receiver) = 15 15 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); ··· 33 33 receiver.recv().unwrap_or_else(|_| { 34 34 // If the receiver is closed, we assume the dialog was cancelled. 35 35 debug!("Alert dialog was cancelled or failed to show."); 36 - @@ -1172,13 +1182,22 @@ 36 + @@ -1171,13 +1181,22 @@ 37 37 // the user to respond with a positive or negative response. 38 38 let (sender, receiver) = 39 39 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); ··· 57 57 // Step 5: Let userPromptHandler be WebDriver BiDi user prompt opened with this, 58 58 // "confirm", and message. 59 59 // 60 - @@ -1223,6 +1242,7 @@ 60 + @@ -1222,6 +1241,7 @@ 61 61 // defaulted to the value given by default. 62 62 let (sender, receiver) = 63 63 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); ··· 65 65 let dialog = SimpleDialogRequest::Prompt { 66 66 id: self.Document().embedder_controls().next_control_id(), 67 67 message: message.to_string(), 68 - @@ -1229,8 +1249,16 @@ 68 + @@ -1228,8 +1248,16 @@ 69 69 default: default.to_string(), 70 70 response_sender: sender, 71 71 }; ··· 83 83 // Step 6: Let userPromptHandler be WebDriver BiDi user prompt opened with this, 84 84 // "prompt", and message. 85 85 // TODO: Add support for WebDriver BiDi. 86 - @@ -3053,9 +3081,33 @@ 86 + @@ -3052,9 +3080,33 @@ 87 87 &self, 88 88 input_event: &ConstellationInputEvent, 89 89 ) -> Option<HitTestResult> { ··· 120 120 } 121 121 122 122 #[expect(unsafe_code)] 123 - @@ -3074,8 +3126,25 @@ 123 + @@ -3073,8 +3125,25 @@ 124 124 // SAFETY: This is safe because `Window::query_elements_from_point` has ensured that 125 125 // layout has run and any OpaqueNodes that no longer refer to real nodes are gone. 126 126 let address = UntrustedNodeAddress(result.node.0 as *const c_void); ··· 147 147 cursor: result.cursor, 148 148 point_in_node: result.point_in_target, 149 149 point_in_frame, 150 - @@ -3755,6 +3824,8 @@ 150 + @@ -3754,6 +3823,8 @@ 151 151 player_context: WindowGLContext, 152 152 #[cfg(feature = "webgpu")] gpu_id_hub: Arc<IdentityHub>, 153 153 inherited_secure_context: Option<bool>, ··· 156 156 theme: Theme, 157 157 weak_script_thread: Weak<ScriptThread>, 158 158 ) -> DomRoot<Self> { 159 - @@ -3781,6 +3852,8 @@ 159 + @@ -3780,6 +3851,8 @@ 160 160 gpu_id_hub, 161 161 inherited_secure_context, 162 162 unminify_js,
+7 -7
patches/components/script/script_thread.rs.patch
··· 76 76 } 77 77 } 78 78 79 - @@ -2925,6 +2947,9 @@ 79 + @@ -2929,6 +2951,9 @@ 80 80 .documents 81 81 .borrow() 82 82 .find_iframe(parent_pipeline_id, browsing_context_id); ··· 86 86 if let Some(frame_element) = frame_element { 87 87 frame_element.update_pipeline_id(new_pipeline_id, reason, can_gc); 88 88 } 89 - @@ -2943,6 +2968,7 @@ 89 + @@ -2947,6 +2972,7 @@ 90 90 // is no need to pass along existing opener information that 91 91 // will be discarded. 92 92 None, ··· 94 94 ); 95 95 } 96 96 } 97 - @@ -3222,6 +3248,44 @@ 97 + @@ -3226,6 +3252,44 @@ 98 98 } 99 99 } 100 100 ··· 139 139 fn ask_constellation_for_top_level_info( 140 140 &self, 141 141 sender_webview_id: WebViewId, 142 - @@ -3334,7 +3398,13 @@ 142 + @@ -3338,7 +3402,13 @@ 143 143 self.senders.pipeline_to_embedder_sender.clone(), 144 144 self.senders.constellation_sender.clone(), 145 145 incomplete.pipeline_id, ··· 154 154 incomplete.viewport_details, 155 155 origin.clone(), 156 156 final_url.clone(), 157 - @@ -3356,6 +3426,8 @@ 157 + @@ -3360,6 +3430,8 @@ 158 158 #[cfg(feature = "webgpu")] 159 159 self.gpu_id_hub.clone(), 160 160 incomplete.load_data.inherited_secure_context, ··· 163 163 incomplete.theme, 164 164 self.this.clone(), 165 165 ); 166 - @@ -3377,6 +3449,7 @@ 166 + @@ -3381,6 +3453,7 @@ 167 167 incomplete.webview_id, 168 168 incomplete.parent_info, 169 169 incomplete.opener, ··· 171 171 ); 172 172 if window_proxy.parent().is_some() { 173 173 // https://html.spec.whatwg.org/multipage/#navigating-across-documents:delaying-load-events-mode-2 174 - @@ -4084,6 +4157,24 @@ 174 + @@ -4088,6 +4161,24 @@ 175 175 document.event_handler().handle_refresh_cursor(); 176 176 } 177 177
+6 -6
patches/components/shared/embedder/lib.rs.patch
··· 87 87 + } 88 88 +} 89 89 + 90 - #[derive(Clone, Copy, Deserialize, Eq, Hash, PartialEq, Serialize)] 90 + #[derive(Clone, Copy, Deserialize, Eq, Hash, PartialEq, Serialize, MallocSizeOf)] 91 91 pub enum PixelFormat { 92 92 /// Luminance channel only 93 - @@ -411,6 +450,12 @@ 93 + @@ -412,6 +451,12 @@ 94 94 } 95 95 } 96 96 ··· 103 103 /// Messages towards the embedder. 104 104 #[derive(Deserialize, IntoStaticStr, Serialize)] 105 105 pub enum EmbedderMsg { 106 - @@ -436,6 +481,21 @@ 106 + @@ -437,6 +482,21 @@ 107 107 ), 108 108 /// Whether or not to allow script to open a new tab/browser 109 109 AllowOpeningWebView(WebViewId, GenericSender<Option<NewWebViewDetails>>), ··· 125 125 /// A webview was destroyed. 126 126 WebViewClosed(WebViewId), 127 127 /// A webview potentially gained focus for keyboard events. 128 - @@ -517,6 +577,24 @@ 128 + @@ -518,6 +578,24 @@ 129 129 InputEventHandled(WebViewId, InputEventId, InputEventResult), 130 130 /// Send the embedder an accessibility tree update. 131 131 AccessibilityTreeUpdate(WebViewId, accesskit::TreeUpdate), ··· 150 150 } 151 151 152 152 impl Debug for EmbedderMsg { 153 - @@ -1073,6 +1151,54 @@ 153 + @@ -1074,6 +1152,54 @@ 154 154 WebViewDoesNotExist, 155 155 } 156 156 ··· 205 205 #[derive(Clone, Copy, Debug, Deserialize, Serialize)] 206 206 pub struct RgbColor { 207 207 pub red: u8, 208 - @@ -1119,3 +1245,26 @@ 208 + @@ -1120,3 +1246,26 @@ 209 209 pub viewport_details: ViewportDetails, 210 210 pub user_content_manager_id: Option<UserContentManagerId>, 211 211 }