diff --git a/Cargo.lock b/Cargo.lock index 97c630c..0ba7dcf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -276,7 +276,7 @@ dependencies = [ "ndk-context", "ndk-sys", "num_enum", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -488,9 +488,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.91" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", @@ -586,7 +586,7 @@ dependencies = [ "serde_bytes", "sha2 0.11.0", "tempfile", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "tracing", "url", @@ -619,7 +619,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.11.0", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "tracing", "url", @@ -658,7 +658,7 @@ dependencies = [ "num-traits", "pastey 0.1.1", "rayon", - "thiserror 2.0.19", + "thiserror 2.0.20", "v_frame", "y4m", ] @@ -688,9 +688,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.17.3" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00bdb5da18dac48ca2cc7cd4a98e533e8635a58e2361d13a1a4ee3888e0d72f1" +checksum = "ce2b2dcc879c3bae0d371e77c99f2238400ef24ec001394befa67b6e543add9e" dependencies = [ "aws-lc-sys", "zeroize", @@ -698,9 +698,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.43.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43103168cc76fe62678a375e722fc9cb3a0146159ac5828bc4f0dfd755c2224c" +checksum = "f09fae7be8bb3174e05c6afdb34199e6dc0c7c04ba9fa237b1967adfbde27483" dependencies = [ "cc", "cmake", @@ -781,6 +781,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "base64ct" version = "1.8.3" @@ -814,7 +820,7 @@ dependencies = [ "postcard", "rand 0.9.5", "serde", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", ] @@ -1019,7 +1025,7 @@ dependencies = [ "log", "serde", "serde-xml-rs", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "uuid", ] @@ -1082,7 +1088,7 @@ dependencies = [ "objc2-foundation 0.2.2", "once_cell", "static_assertions", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "tokio-stream", "uuid", @@ -1136,13 +1142,13 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f65693059b6b9c588b9f62fed1cedbf0a8b805631457ea162d68f0de186f3de5" +checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1250,9 +1256,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" +checksum = "5d262e149917187838d5b42777c8253bcb64500067342904e7d429499a6f277e" dependencies = [ "find-msvc-tools", "jobserver", @@ -1519,7 +1525,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2173,7 +2179,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" dependencies = [ - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2724,7 +2730,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc89bf99e5dc15954a60f707c1e09d7540e5cd9af85fa75caa0b510bc08c5342" dependencies = [ "euclid", - "serde", "svg_fmt", ] @@ -2848,9 +2853,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "26b73573e6edcd2af0cdf47bd6cb58f0b3839491263c314eaad1ccf24430e1de" [[package]] name = "fixed_decimal" @@ -2942,16 +2947,15 @@ dependencies = [ [[package]] name = "fontdb" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905" +checksum = "2660c5e9157bf76d2db1294e4a9feba604ef610819a3b591088d0d8392a3290f" dependencies = [ "fontconfig-parser", "log", "memmap2", "slotmap", "tinyvec", - "ttf-parser", ] [[package]] @@ -3494,9 +3498,9 @@ dependencies = [ [[package]] name = "glifo" -version = "0.1.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d99fc21d493812643aae86d53b7bbd02f376434a90317e8a790bc209fdd6605e" +checksum = "282a26c1e23de04bdab3e34a21b6f877a479b96737792516b9b8b8f69b6661be" dependencies = [ "bytemuck", "foldhash 0.2.0", @@ -3504,7 +3508,7 @@ dependencies = [ "log", "peniko", "png 0.18.1", - "skrifa 0.42.1", + "skrifa 0.44.0", "smallvec", "vello_common", ] @@ -3526,7 +3530,7 @@ dependencies = [ "objc2 0.6.4", "objc2-app-kit 0.3.2", "once_cell", - "thiserror 2.0.19", + "thiserror 2.0.20", "windows-sys 0.59.0", "x11rb", "xkeysym", @@ -3606,7 +3610,7 @@ dependencies = [ "hashbrown 0.16.1", "log", "presser", - "thiserror 2.0.19", + "thiserror 2.0.20", "windows 0.62.2", ] @@ -3630,12 +3634,6 @@ dependencies = [ "bitflags 2.13.1", ] -[[package]] -name = "grid" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5" - [[package]] name = "group" version = "0.13.0" @@ -3680,7 +3678,7 @@ dependencies = [ "pastey 0.2.3", "pin-project-lite", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -3947,7 +3945,7 @@ dependencies = [ "gstreamer-base", "gstreamer-video-sys", "libc", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -4104,9 +4102,9 @@ dependencies = [ [[package]] name = "harfbuzz-sys" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975b6181d2b2d16236036ae09f51cc2b1cdc1506cadd1958d9c6d88a06f8a1a4" +checksum = "b13f1cead31867a0d5b5e8905c262bc02b77701b8cd45ef402988f33745f9b7c" dependencies = [ "cc", "freetype-sys", @@ -4116,6 +4114,18 @@ dependencies = [ "windows 0.62.2", ] +[[package]] +name = "harfrust" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03d949a14aa089bbb282f7dd76a498a7f684428e4257202efc119ec010376f9" +dependencies = [ + "bitflags 2.13.1", + "bytemuck", + "read-fonts 0.41.0", + "smallvec", +] + [[package]] name = "hash2curve" version = "0.14.0" @@ -4296,7 +4306,7 @@ dependencies = [ "jni 0.22.4", "rand 0.10.2", "rustls", - "thiserror 2.0.19", + "thiserror 2.0.20", "tinyvec", "tokio", "tokio-rustls", @@ -4322,7 +4332,7 @@ dependencies = [ "once_cell", "rand 0.9.5", "ring", - "thiserror 2.0.19", + "thiserror 2.0.20", "tinyvec", "tokio", "tracing", @@ -4343,7 +4353,7 @@ dependencies = [ "prefix-trie", "rand 0.10.2", "ring", - "thiserror 2.0.19", + "thiserror 2.0.20", "tinyvec", "tracing", "url", @@ -4365,7 +4375,7 @@ dependencies = [ "rand 0.9.5", "resolv-conf", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "tracing", ] @@ -4392,7 +4402,7 @@ dependencies = [ "rustls", "smallvec", "system-configuration", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "tokio-rustls", "tracing", @@ -5261,9 +5271,9 @@ dependencies = [ [[package]] name = "imagesize" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c" +checksum = "65b27460c2c92b037f3f94c538ed9a3342f3fdf923606781629ccb35f82d042a" [[package]] name = "imgref" @@ -5342,7 +5352,7 @@ dependencies = [ "rustc-hash 2.1.3", "serde_core", "tempfile", - "thiserror 2.0.19", + "thiserror 2.0.20", "uuid", "windows 0.61.3", ] @@ -5723,7 +5733,7 @@ dependencies = [ "jni-sys 0.4.1", "log", "simd_cesu8", - "thiserror 2.0.19", + "thiserror 2.0.20", "walkdir", "windows-link 0.2.1", ] @@ -5781,9 +5791,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ "cfg-if", "futures-util", @@ -6391,9 +6401,9 @@ dependencies = [ [[package]] name = "mozjs" -version = "0.21.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a98fbcb42b13894ad89fcab77fef45980679f3b24c93b3d2b823f9f0a899583e" +checksum = "e6fff40896bf504f30c85dbadd34ddbb148a80d5dde0f878984806b1568fb0d6" dependencies = [ "bindgen", "cc", @@ -6406,9 +6416,9 @@ dependencies = [ [[package]] name = "mozjs_sys" -version = "140.13.0-0" +version = "140.13.0-2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6e165f0cafe59573217f788efb4c3def70c915c8107abaf89791b7ec56850d" +checksum = "08abcc45d1d261688f60ca6f2ed051e60e3b8e4de5a96e2581dfa7fa637b63f2" dependencies = [ "bindgen", "cc", @@ -6439,7 +6449,7 @@ dependencies = [ "objc2-foundation 0.3.2", "once_cell", "png 0.17.16", - "thiserror 2.0.19", + "thiserror 2.0.20", "windows-sys 0.60.2", ] @@ -6547,7 +6557,7 @@ dependencies = [ "once_cell", "rustc-hash 1.1.0", "spirv", - "thiserror 2.0.19", + "thiserror 2.0.20", "unicode-ident", ] @@ -6573,7 +6583,7 @@ dependencies = [ "once_cell", "rustc-hash 1.1.0", "spirv", - "thiserror 2.0.19", + "thiserror 2.0.20", "unicode-ident", ] @@ -6587,7 +6597,7 @@ dependencies = [ "indexmap", "rustc-hash 1.1.0", "serde", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -6680,7 +6690,7 @@ dependencies = [ "log", "netlink-packet-core", "netlink-sys", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -6797,7 +6807,7 @@ dependencies = [ "itertools 0.14.0", "nom 8.0.0", "nom-language", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -6821,7 +6831,7 @@ dependencies = [ "rustc-hash 2.1.3", "rustls", "socket2 0.6.5", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "tokio-stream", "tracing", @@ -6850,7 +6860,7 @@ dependencies = [ "rustls-pki-types", "slab", "sorted-index-buffer", - "thiserror 2.0.19", + "thiserror 2.0.20", "tinyvec", "tracing", "web-time", @@ -8505,7 +8515,7 @@ dependencies = [ "rustc-hash 2.1.3", "rustls", "socket2 0.6.5", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "tracing", "web-time", @@ -8527,7 +8537,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.19", + "thiserror 2.0.20", "tinyvec", "tracing", "web-time", @@ -8689,7 +8699,7 @@ dependencies = [ "rand 0.9.5", "rand_chacha 0.9.0", "simd_helpers", - "thiserror 2.0.19", + "thiserror 2.0.20", "v_frame", "wasm-bindgen", ] @@ -8818,7 +8828,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -8951,10 +8961,11 @@ checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "resvg" -version = "0.47.0" +version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be183ad6a216aa96f33e4c8033b0988b8b3ea6fd2359d19af5bac4643fd8e81" +checksum = "67e3803f97b999e80cbf7c6ecdd07a8102204d92e1633cf48783720c521196bd" dependencies = [ + "bytemuck", "gif", "image-webp", "log", @@ -9009,20 +9020,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "ron" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3" -dependencies = [ - "bitflags 2.13.1", - "once_cell", - "serde", - "serde_derive", - "typeid", - "unicode-ident", -] - [[package]] name = "roxmltree" version = "0.20.0" @@ -9084,7 +9081,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c51c9ae4df8a7fba42103df5c621fa3c37eccf3a3c650879e90fc48b11cc192c" dependencies = [ "hashbrown 0.16.1", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -9259,24 +9256,6 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" -[[package]] -name = "rustybuzz" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" -dependencies = [ - "bitflags 2.13.1", - "bytemuck", - "core_maths", - "log", - "smallvec", - "ttf-parser", - "unicode-bidi-mirroring", - "unicode-ccc", - "unicode-properties", - "unicode-script", -] - [[package]] name = "ryu" version = "1.0.23" @@ -9346,7 +9325,7 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.119", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -9483,7 +9462,7 @@ checksum = "cc2215ce3e6a77550b80a1c37251b7d294febaf42e36e21b7b411e0bf54d540d" dependencies = [ "log", "serde", - "thiserror 2.0.19", + "thiserror 2.0.20", "xml", ] @@ -11981,7 +11960,7 @@ dependencies = [ "hickory-proto 0.26.1", "rand 0.10.2", "socket2 0.6.5", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "tracing", ] @@ -12096,14 +12075,14 @@ dependencies = [ [[package]] name = "taffy" -version = "0.12.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "340a09581f29809fc0df82a3955501dc7f2a21f887e5d1c13dbe288fe1c0bef4" +checksum = "c034e05f6ee85a12daa63863c2245797715075c70649947aa0da54f3f2ab1d0f" dependencies = [ "arrayvec", - "grid", "serde", "slotmap", + "smallvec", ] [[package]] @@ -12216,11 +12195,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ - "thiserror-impl 2.0.19", + "thiserror-impl 2.0.20", ] [[package]] @@ -12236,9 +12215,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", @@ -12789,7 +12768,7 @@ dependencies = [ "objc2-foundation 0.3.2", "once_cell", "png 0.18.1", - "thiserror 2.0.19", + "thiserror 2.0.20", "windows-sys 0.61.2", ] @@ -12804,9 +12783,6 @@ name = "ttf-parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" -dependencies = [ - "core_maths", -] [[package]] name = "tungstenite" @@ -12823,7 +12799,7 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1 0.10.7", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -12837,12 +12813,6 @@ dependencies = [ "sponge-cursor", ] -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" - [[package]] name = "typenum" version = "1.20.1" @@ -12870,18 +12840,6 @@ version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" -[[package]] -name = "unicode-bidi-mirroring" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe" - -[[package]] -name = "unicode-ccc" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" - [[package]] name = "unicode-ident" version = "1.0.24" @@ -12987,26 +12945,26 @@ dependencies = [ [[package]] name = "usvg" -version = "0.47.0" +version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d46cf96c5f498d36b7a9693bc6a7075c0bb9303189d61b2249b0dc3d309c07de" +checksum = "977d0a4abdef933f424a99fe09f95576e089b90aebc6f016a3bc813762493e91" dependencies = [ - "base64 0.22.1", + "base64 0.23.1", "data-url", "flate2", "fontdb", + "harfrust", "imagesize", "kurbo", "log", "pico-args", "roxmltree 0.21.1", - "rustybuzz", "simplecss", "siphasher", + "skrifa 0.44.0", "strict-num", "svgtypes", "tiny-skia-path 0.12.0", - "ttf-parser", "unicode-bidi", "unicode-script", "unicode-vo", @@ -13080,7 +13038,7 @@ dependencies = [ "png 0.18.1", "skrifa 0.42.1", "static_assertions", - "thiserror 2.0.19", + "thiserror 2.0.20", "vello_encoding", "vello_shaders", "wgpu", @@ -13088,26 +13046,25 @@ dependencies = [ [[package]] name = "vello_common" -version = "0.0.9" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d672facaa2d697285a786cd9d44d614cd2ce54cdc022504bf339f8fff3b750" +checksum = "bbb2141a2bca6e6d598e471fd4d1d7eed8e020aad6a28187edda07f091a325dd" dependencies = [ "bytemuck", "fearless_simd", "guillotiere", - "hashbrown 0.17.1", "log", "peniko", "png 0.18.1", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] name = "vello_cpu" -version = "0.0.9" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "588691169aed86b5c8fb487266afee01323234e6fd0a3f2aaec0eaa8e4007f23" +checksum = "ace506ca414548966fcf3c283be94eb1cad8254de488791ee698bf438b0890a9" dependencies = [ "bytemuck", "crossbeam-channel", @@ -13142,7 +13099,7 @@ dependencies = [ "bytemuck", "log", "naga 29.0.4", - "thiserror 2.0.19", + "thiserror 2.0.20", "vello_encoding", ] @@ -13256,9 +13213,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -13269,9 +13226,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.76" +version = "0.4.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" dependencies = [ "js-sys", "wasm-bindgen", @@ -13279,9 +13236,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -13289,9 +13246,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", @@ -13302,9 +13259,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] @@ -13433,9 +13390,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" dependencies = [ "js-sys", "wasm-bindgen", @@ -13527,7 +13484,6 @@ dependencies = [ "peek-poke", "plane-split", "rayon", - "ron", "rustc-hash 2.1.3", "serde", "smallvec", @@ -13631,7 +13587,7 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", "wgpu-core-deps-apple 29.0.4", "wgpu-core-deps-emscripten 29.0.4", "wgpu-core-deps-windows-linux-android 29.0.4", @@ -13666,7 +13622,7 @@ dependencies = [ "rustc-hash 1.1.0", "serde", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", "wgpu-core-deps-apple 30.0.0", "wgpu-core-deps-emscripten 30.0.0", "wgpu-core-deps-windows-linux-android 30.0.0", @@ -13772,7 +13728,7 @@ dependencies = [ "raw-window-metal", "renderdoc-sys", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", "wasm-bindgen", "wayland-sys", "web-sys", @@ -13825,7 +13781,7 @@ dependencies = [ "raw-window-metal", "smallvec", "static_assertions", - "thiserror 2.0.19", + "thiserror 2.0.20", "wasm-bindgen", "wayland-sys", "web-sys", @@ -14460,7 +14416,7 @@ dependencies = [ "futures", "log", "serde", - "thiserror 2.0.19", + "thiserror 2.0.20", "windows 0.62.2", "windows-core 0.62.2", ] @@ -14495,7 +14451,6 @@ dependencies = [ "objc", "rayon", "rustc-hash 2.1.3", - "serde", "smallvec", "tracy-rs", "webrender_api", @@ -14546,7 +14501,7 @@ dependencies = [ "pharos", "rustc_version", "send_wrapper", - "thiserror 2.0.19", + "thiserror 2.0.20", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -14773,9 +14728,9 @@ dependencies = [ [[package]] name = "yuv" -version = "0.8.16" +version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d85a782d94ee43f078bcfd6fa82d4e6a5b2d1cfbbad168e4df5a9f7b39ef48c" +checksum = "220655e1c245693beb13b377d3174b9efcb1645018d1d4ec53903fc211b135ae" dependencies = [ "num-traits", "rayon", @@ -14958,9 +14913,9 @@ dependencies = [ [[package]] name = "zune-core" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" [[package]] name = "zune-inflate" diff --git a/Cargo.toml b/Cargo.toml index 4a4a0f9..38e4748 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -110,7 +110,7 @@ gstreamer-sys = "0.25" gstreamer-video = "0.25" gstreamer-webrtc = { version = "0.25", features = ["v1_18"] } half = "2" -harfbuzz-sys = { version = "0.7", default-features = false } +harfbuzz-sys = { version = "0.8", default-features = false } headers = "0.4" hitrace = "0.1.6" hkdf = "0.13" @@ -210,7 +210,7 @@ raw-window-handle = "0.6" rayon = "1" read-fonts = "0.41.0" regex = "1.12" -resvg = "0.47.0" +resvg = "0.48.1" rsa = "=0.10.0-rc.18" rustc-demangle = "0.1" rusqlite = "0.38" @@ -288,7 +288,7 @@ swapper = "0.1" syn = { version = "2", default-features = false, features = ["clone-impls", "derive", "parsing"] } synstructure = "0.13" sys-locale = "0.3" -taffy = { version = "0.12.1", default-features = false, features = ["calc", "detailed_layout_info", "grid", "std"] } +taffy = { version = "0.13.0", default-features = false, features = ["calc", "detailed_layout_info", "grid", "std"] } tempfile = "3" tendril = { version = "0.5", features = ["encoding_rs"] } tikv-jemalloc-sys = "0.6.1" @@ -315,7 +315,7 @@ urlpattern = "0.6" utf-8 = "0.7" uuid = { version = "1.20.0", features = ["v4", "v5"] } vello = "0.9" -vello_cpu = { version = "0.0.9", features = ["multithreading"] } +vello_cpu = { version = "0.2.0", features = ["multithreading"] } warp = "0.4.2" web_atoms = "0.2" webdriver = "0.53.0" @@ -323,7 +323,7 @@ webgl = { package = "servo-webgl", version = "0.4.0", path = "source/components/ webgpu = { package = "servo-webgpu", version = "0.4.0", path = "source/components/webgpu" } webgpu_traits = { package = "servo-webgpu-traits", path = "source/components/shared/webgpu" } webpki-roots = "1.0" -webrender = { version = "0.70", features = ["capture"] } +webrender = { version = "0.70", features = ["serde"] } webrender_api = "0.70" webxr = { package = "servo-webxr", version = "0.4.0", path = "source/components/webxr" } webxr-api = { package = "servo-webxr-api", path = "source/components/shared/webxr" } diff --git a/forkme.lock b/forkme.lock index 28116a5..727fb05 100644 --- a/forkme.lock +++ b/forkme.lock @@ -1 +1 @@ -b29cc74b7cb51976ade6481949f1ea91545b9fd0 +76f48dc9e3afa0503045a964c937014ba049eaa7 diff --git a/patches/Cargo.lock.patch b/patches/Cargo.lock.patch index 0fc2522..472d122 100644 --- a/patches/Cargo.lock.patch +++ b/patches/Cargo.lock.patch @@ -230,7 +230,7 @@ ] [[package]] -@@ -3802,6 +3925,52 @@ +@@ -3796,6 +3919,52 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] @@ -283,7 +283,7 @@ name = "hilog" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -3974,6 +4143,22 @@ +@@ -3968,6 +4137,22 @@ ] [[package]] @@ -306,7 +306,7 @@ name = "hyper-util" version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -3994,6 +4179,7 @@ +@@ -3988,6 +4173,7 @@ "tokio", "tower-service", "tracing", @@ -314,7 +314,7 @@ ] [[package]] -@@ -4598,6 +4784,29 @@ +@@ -4592,6 +4778,29 @@ ] [[package]] @@ -344,7 +344,7 @@ name = "ipnet" version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -4604,6 +4813,27 @@ +@@ -4598,6 +4807,27 @@ checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" [[package]] @@ -372,7 +372,7 @@ name = "is_terminal_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -5094,6 +5324,17 @@ +@@ -5088,6 +5318,17 @@ ] [[package]] @@ -390,7 +390,7 @@ name = "matchers" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -5287,6 +5528,29 @@ +@@ -5281,6 +5522,29 @@ checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0" [[package]] @@ -420,7 +420,7 @@ name = "naga" version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -5409,6 +5673,23 @@ +@@ -5403,6 +5667,23 @@ ] [[package]] @@ -444,7 +444,7 @@ name = "ndk" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -6135,6 +6416,10 @@ +@@ -6129,6 +6410,10 @@ version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" @@ -455,7 +455,7 @@ [[package]] name = "once_cell_polyfill" -@@ -6155,6 +6440,18 @@ +@@ -6149,6 +6434,18 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] @@ -474,7 +474,7 @@ name = "openxr" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -6878,6 +7175,61 @@ +@@ -6872,6 +7169,61 @@ ] [[package]] @@ -536,7 +536,7 @@ name = "quote" version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -7191,6 +7543,56 @@ +@@ -7185,6 +7537,56 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] @@ -593,7 +593,7 @@ name = "resvg" version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -7361,6 +7763,7 @@ +@@ -7355,6 +7757,7 @@ "aws-lc-rs", "log", "once_cell", @@ -601,7 +601,7 @@ "rustls-pki-types", "rustls-webpki", "subtle", -@@ -7385,6 +7788,7 @@ +@@ -7379,6 +7782,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ @@ -609,7 +609,7 @@ "zeroize", ] -@@ -7656,6 +8060,18 @@ +@@ -7650,6 +8054,18 @@ ] [[package]] @@ -628,7 +628,7 @@ name = "serde_json" version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -7998,6 +8414,7 @@ +@@ -7992,6 +8408,7 @@ "rand 0.10.2", "rustc-hash 2.1.3", "serde", @@ -636,7 +636,7 @@ "servo-background-hang-monitor", "servo-background-hang-monitor-api", "servo-base", -@@ -8024,6 +8441,8 @@ +@@ -8018,6 +8435,8 @@ "servo-webxr-api", "stylo", "stylo_traits", @@ -645,7 +645,7 @@ "tracing", ] -@@ -8665,6 +9084,7 @@ +@@ -8659,6 +9078,7 @@ name = "servo-net" version = "0.5.0" dependencies = [ @@ -653,7 +653,7 @@ "async-compression", "async-recursion", "async-tungstenite", -@@ -8698,6 +9118,7 @@ +@@ -8692,6 +9112,7 @@ "quick_cache", "rand 0.10.2", "regex", @@ -661,7 +661,7 @@ "resvg", "rustc-hash 2.1.3", "rustls", -@@ -8704,9 +9125,11 @@ +@@ -8698,9 +9119,11 @@ "rustls-pki-types", "rustls-platform-verifier", "serde", @@ -673,7 +673,7 @@ "servo-devtools-traits", "servo-embedder-traits", "servo-fonts", -@@ -8759,6 +9182,7 @@ +@@ -8753,6 +9176,7 @@ "rustc-hash 2.1.3", "rustls-pki-types", "serde", @@ -681,7 +681,7 @@ "servo-base", "servo-config", "servo-default-resources", -@@ -8770,8 +9194,10 @@ +@@ -8764,8 +9188,10 @@ "servo-profile-traits", "servo-url", "servo_arc", @@ -692,7 +692,7 @@ "url", "uuid", "webrender_api", -@@ -9382,6 +9808,7 @@ +@@ -9376,6 +9802,7 @@ "bpaf", "cc", "cfg-if", @@ -700,7 +700,7 @@ "crossbeam-channel", "dirs", "dpi", -@@ -9396,6 +9823,7 @@ +@@ -9390,6 +9817,7 @@ "headers", "hilog", "hitrace", @@ -708,7 +708,7 @@ "image", "ipc-channel", "jni 0.22.4", -@@ -9418,6 +9846,7 @@ +@@ -9412,6 +9840,7 @@ "ohos-window-sys", "raw-window-handle", "rustls", @@ -716,7 +716,7 @@ "serde_json", "servo", "servo-allocator", -@@ -9424,6 +9853,7 @@ +@@ -9418,6 +9847,7 @@ "servo-base", "servo-webdriver-server", "signal-hook-registry", @@ -724,7 +724,7 @@ "surfman", "tokio", "tracing", -@@ -10070,6 +10500,9 @@ +@@ -10064,6 +10494,9 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" @@ -734,7 +734,7 @@ [[package]] name = "synstructure" -@@ -10104,6 +10537,27 @@ +@@ -10098,6 +10531,27 @@ ] [[package]] @@ -762,7 +762,7 @@ name = "system-deps" version = "7.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10129,6 +10583,12 @@ +@@ -10123,6 +10577,12 @@ ] [[package]] @@ -775,7 +775,7 @@ name = "tar" version = "0.4.46" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10446,6 +10906,16 @@ +@@ -10440,6 +10900,16 @@ ] [[package]] @@ -792,7 +792,7 @@ name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10548,11 +11018,30 @@ +@@ -10542,11 +11012,30 @@ "futures-util", "pin-project-lite", "sync_wrapper", @@ -823,7 +823,7 @@ name = "tower-layer" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10846,6 +11335,12 @@ +@@ -10840,6 +11329,12 @@ ] [[package]] @@ -836,7 +836,7 @@ name = "urlpattern" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -11967,6 +12462,17 @@ +@@ -11960,6 +12455,17 @@ ] [[package]] diff --git a/patches/components/config/prefs.rs.patch b/patches/components/config/prefs.rs.patch index b2dbafe..30fb03c 100644 --- a/patches/components/config/prefs.rs.patch +++ b/patches/components/config/prefs.rs.patch @@ -63,7 +63,7 @@ // feature: IndexedDB | #6963 | Web/API/IndexedDB_API pub dom_indexeddb_enabled: bool, // feature: IntersectionObserver | #35767 | Web/API/Intersection_Observer_API -@@ -445,6 +468,7 @@ +@@ -455,6 +478,7 @@ dom_gamepad_enabled: true, dom_geolocation_enabled: false, dom_wakelock_enabled: false, diff --git a/patches/components/constellation/constellation.rs.patch b/patches/components/constellation/constellation.rs.patch index d5f9e94..296c7b2 100644 --- a/patches/components/constellation/constellation.rs.patch +++ b/patches/components/constellation/constellation.rs.patch @@ -172,7 +172,7 @@ } /// When we are exiting a pipeline, we can either force exiting or not. A normal exit -@@ -677,6 +746,11 @@ +@@ -678,6 +747,11 @@ let broken_image_icon_data = resources::read_bytes(Resource::BrokenImageIcon); @@ -184,7 +184,7 @@ let mut constellation: Constellation = Constellation { event_loops: Default::default(), namespace_receiver, -@@ -698,7 +772,7 @@ +@@ -699,7 +773,7 @@ script_to_devtools_callback: Default::default(), #[cfg(feature = "bluetooth")] bluetooth_ipc_sender: state.bluetooth_thread, @@ -193,7 +193,7 @@ private_resource_threads: state.private_resource_threads, public_storage_threads: state.public_storage_threads, private_storage_threads: state.private_storage_threads, -@@ -736,6 +810,7 @@ +@@ -737,6 +811,7 @@ canvas: OnceCell::new(), pending_approval_navigations: Default::default(), pressed_mouse_buttons: 0, @@ -201,7 +201,7 @@ active_keyboard_modifiers: Modifiers::empty(), hard_fail, active_media_session: None, -@@ -752,6 +827,23 @@ +@@ -753,6 +828,23 @@ pending_viewport_changes: Default::default(), screenshot_readiness_requests: Vec::new(), user_contents_for_manager_id: Default::default(), @@ -225,7 +225,7 @@ }; constellation.run(); -@@ -777,6 +869,18 @@ +@@ -778,6 +870,18 @@ fn clean_up_finished_script_event_loops(&mut self) { self.event_loop_join_handles .retain(|join_handle| !join_handle.is_finished()); @@ -244,7 +244,7 @@ self.event_loops .retain(|event_loop| event_loop.upgrade().is_some()); } -@@ -1056,6 +1160,11 @@ +@@ -1057,6 +1161,11 @@ .get(&webview_id) .and_then(|webview| webview.user_content_manager_id); @@ -256,7 +256,7 @@ let new_pipeline_info = NewPipelineInfo { parent_info: parent_pipeline_id, new_pipeline_id, -@@ -1067,6 +1176,13 @@ +@@ -1068,6 +1177,13 @@ user_content_manager_id, theme, target_snapshot_params, @@ -270,7 +270,7 @@ }; let pipeline = match Pipeline::spawn(new_pipeline_info, event_loop, self, throttled) { Ok(pipeline) => pipeline, -@@ -1232,6 +1348,9 @@ +@@ -1233,6 +1349,9 @@ Script((WebViewId, PipelineId, ScriptToConstellationMessage)), BackgroundHangMonitor(HangAlert), Embedder(EmbedderToConstellationMessage), @@ -280,7 +280,7 @@ RemoveProcess(usize), } // Get one incoming request. -@@ -1251,6 +1370,28 @@ +@@ -1252,6 +1371,28 @@ sel.recv(&self.background_hang_monitor_receiver); sel.recv(&self.embedder_to_constellation_receiver); @@ -309,7 +309,7 @@ self.process_manager.register(&mut sel); let request = { -@@ -1277,9 +1418,30 @@ +@@ -1278,9 +1419,30 @@ oper.recv(&self.embedder_to_constellation_receiver) .expect("Unexpected embedder channel panic in constellation"), )), @@ -341,7 +341,7 @@ let _ = oper.recv(self.process_manager.receiver_at(process_index)); Ok(Request::RemoveProcess(process_index)) }, -@@ -1302,10 +1464,67 @@ +@@ -1303,10 +1465,67 @@ Request::BackgroundHangMonitor(message) => { self.handle_request_from_background_hang_monitor(message); }, @@ -409,7 +409,7 @@ #[servo_tracing::instrument(skip_all)] fn handle_request_for_pipeline_namespace(&mut self, request: PipelineNamespaceRequest) { let PipelineNamespaceRequest(sender) = request; -@@ -1397,6 +1616,15 @@ +@@ -1398,6 +1617,15 @@ EmbedderToConstellationMessage::ThemeChange(webview_id, theme) => { self.handle_theme_change(webview_id, theme); }, @@ -425,7 +425,7 @@ EmbedderToConstellationMessage::TickAnimation(webview_ids) => { self.handle_tick_animation(webview_ids) }, -@@ -1415,6 +1643,16 @@ +@@ -1416,6 +1644,16 @@ EmbedderToConstellationMessage::ForwardInputEvent(webview_id, event, hit_test) => { self.forward_input_event(webview_id, event, hit_test); }, @@ -442,7 +442,7 @@ EmbedderToConstellationMessage::RefreshCursor(pipeline_id) => { self.handle_refresh_cursor(pipeline_id) }, -@@ -1464,11 +1702,7 @@ +@@ -1465,11 +1703,7 @@ } }, EmbedderToConstellationMessage::PreferencesUpdated(updates) => { @@ -455,7 +455,7 @@ let _ = event_loop.send(ScriptThreadMessage::PreferencesUpdated( updates .iter() -@@ -1495,6 +1729,18 @@ +@@ -1496,6 +1730,18 @@ EmbedderToConstellationMessage::SetAccessibilityActive(webview_id, active) => { self.set_accessibility_active(webview_id, active); }, @@ -474,7 +474,7 @@ } } -@@ -1692,7 +1938,13 @@ +@@ -1693,7 +1939,13 @@ return warn!("Attempt to add channel name from an unexpected origin."); } self.broadcast_channels @@ -489,7 +489,7 @@ }, ScriptToConstellationMessage::RemoveBroadcastChannelNameInRouter( router_id, -@@ -1706,7 +1958,13 @@ +@@ -1707,7 +1959,13 @@ return warn!("Attempt to remove channel name from an unexpected origin."); } self.broadcast_channels @@ -504,7 +504,7 @@ }, ScriptToConstellationMessage::RemoveBroadcastChannelRouter(router_id, origin) => { if self -@@ -1718,6 +1976,12 @@ +@@ -1719,6 +1977,12 @@ self.broadcast_channels .remove_broadcast_channel_router(router_id); }, @@ -517,7 +517,7 @@ ScriptToConstellationMessage::ScheduleBroadcast(router_id, message) => { if self .check_origin_against_pipeline(&source_pipeline_id, &message.origin) -@@ -1727,8 +1991,15 @@ +@@ -1728,8 +1992,15 @@ "Attempt to schedule broadcast from an origin not matching the origin of the msg." ); } @@ -534,7 +534,7 @@ }, ScriptToConstellationMessage::PipelineExited => { self.handle_pipeline_exited(source_pipeline_id); -@@ -1748,6 +2019,12 @@ +@@ -1749,6 +2020,12 @@ ScriptToConstellationMessage::CreateAuxiliaryWebView(load_info) => { self.handle_script_new_auxiliary(load_info); }, @@ -547,7 +547,7 @@ ScriptToConstellationMessage::ChangeRunningAnimationsState(animation_state) => { self.handle_change_running_animations_state(source_pipeline_id, animation_state) }, -@@ -1819,7 +2096,7 @@ +@@ -1820,7 +2097,7 @@ ScriptToConstellationMessage::SetFinalUrl(final_url) => { // The script may have finished loading after we already started shutting down. if let Some(ref mut pipeline) = self.pipelines.get_mut(&source_pipeline_id) { @@ -556,7 +556,7 @@ } else { warn!("constellation got set final url message for dead pipeline"); } -@@ -1944,6 +2221,12 @@ +@@ -1945,6 +2222,12 @@ .entry(interest) .or_default() .insert(source_pipeline_id); @@ -569,7 +569,7 @@ }, ScriptToConstellationMessage::UnregisterInterest(interest) => { if let Some(set) = self.pipeline_interests.get_mut(&interest) { -@@ -1969,6 +2252,29 @@ +@@ -1970,6 +2253,29 @@ new_value, ); }, @@ -599,7 +599,7 @@ ScriptToConstellationMessage::MediaSessionEvent(pipeline_id, event) => { // Unlikely at this point, but we may receive events coming from // different media sessions, so we set the active media session based -@@ -1987,8 +2293,13 @@ +@@ -1988,8 +2294,13 @@ }; self.active_media_session = Some(pipeline_id); self.constellation_to_embedder_proxy.send( @@ -614,7 +614,7 @@ }, #[cfg(feature = "webgpu")] ScriptToConstellationMessage::RequestAdapter(response_sender, options, ids) => self -@@ -2061,9 +2372,1088 @@ +@@ -2062,9 +2373,1088 @@ } }, }, @@ -1703,7 +1703,7 @@ /// Check the origin of a message against that of the pipeline it came from. /// Note: this is still limited as a security check, /// see -@@ -2380,6 +3770,55 @@ +@@ -2381,6 +3771,55 @@ TransferState::TransferInProgress(queue) => queue.push_back(task), TransferState::CompletionFailed(queue) => queue.push_back(task), TransferState::CompletionRequested(_, queue) => queue.push_back(task), @@ -1759,7 +1759,7 @@ } } -@@ -3193,6 +4632,101 @@ +@@ -3194,6 +4633,101 @@ ); } @@ -1861,7 +1861,7 @@ fn forward_input_event( &mut self, webview_id: WebViewId, -@@ -3212,6 +4746,66 @@ +@@ -3213,6 +4747,66 @@ let pressed_mouse_buttons = self.pressed_mouse_buttons; let active_keyboard_modifiers = self.active_keyboard_modifiers; @@ -1928,7 +1928,7 @@ let event_id = event.id; let Some(webview) = self.webviews.get_mut(&webview_id) else { warn!("Got input event for unknown WebViewId: {webview_id:?}"); -@@ -3314,6 +4908,40 @@ +@@ -3315,6 +4909,40 @@ /// fn handle_close_top_level_browsing_context(&mut self, webview_id: WebViewId) { debug!("{webview_id}: Closing"); @@ -1969,7 +1969,7 @@ let browsing_context_id = BrowsingContextId::from(webview_id); // Step 5. Remove traversable from the user agent's top-level traversable set. let browsing_context = -@@ -3590,8 +5218,27 @@ +@@ -3591,8 +5219,27 @@ opener_webview_id, opener_pipeline_id, response_sender, @@ -1997,7 +1997,7 @@ let Some((webview_id_sender, webview_id_receiver)) = generic_channel::channel() else { warn!("Failed to create channel"); let _ = response_sender.send(None); -@@ -3690,6 +5337,402 @@ +@@ -3691,6 +5338,402 @@ }); } @@ -2400,7 +2400,7 @@ #[servo_tracing::instrument(skip_all)] fn handle_refresh_cursor(&self, pipeline_id: PipelineId) { let Some(pipeline) = self.pipelines.get(&pipeline_id) else { -@@ -4527,7 +6570,7 @@ +@@ -4528,7 +6571,7 @@ }, }; @@ -2409,7 +2409,7 @@ match self.browsing_contexts.get_mut(&browsing_context_id) { Some(browsing_context) => { let old_pipeline_id = browsing_context.pipeline_id; -@@ -4536,6 +6579,7 @@ +@@ -4537,6 +6580,7 @@ old_pipeline_id, browsing_context.parent_pipeline_id, browsing_context.webview_id, @@ -2417,7 +2417,7 @@ ) }, None => { -@@ -4545,6 +6589,15 @@ +@@ -4546,6 +6590,15 @@ self.unload_document(old_pipeline_id); @@ -2433,7 +2433,7 @@ if let Some(new_pipeline) = self.pipelines.get(&new_pipeline_id) { if let Some(ref chan) = self.devtools_sender { let state = NavigationState::Start(new_pipeline.url.clone()); -@@ -5113,7 +7166,7 @@ +@@ -5114,7 +7167,7 @@ } #[servo_tracing::instrument(skip_all)] @@ -2442,7 +2442,7 @@ // Send a flat projection of the history to embedder. // The final vector is a concatenation of the URLs of the past // entries, the current entry and the future entries. -@@ -5225,9 +7278,22 @@ +@@ -5226,9 +7279,22 @@ self.constellation_to_embedder_proxy .send(ConstellationToEmbedderMsg::HistoryChanged( webview_id, @@ -2466,7 +2466,7 @@ } #[servo_tracing::instrument(skip_all)] -@@ -5246,7 +7312,7 @@ +@@ -5247,7 +7313,7 @@ webview.focused_browsing_context_id = change.browsing_context_id; } @@ -2475,7 +2475,7 @@ match self.browsing_contexts.get_mut(&change.browsing_context_id) { Some(browsing_context) => { debug!("Adding pipeline to existing browsing context."); -@@ -5253,11 +7319,15 @@ +@@ -5254,11 +7320,15 @@ let old_pipeline_id = browsing_context.pipeline_id; browsing_context.pipelines.insert(change.new_pipeline_id); browsing_context.update_current_entry(change.new_pipeline_id); @@ -2493,7 +2493,7 @@ }, }; -@@ -5265,6 +7335,18 @@ +@@ -5266,6 +7336,18 @@ self.unload_document(old_pipeline_id); } diff --git a/patches/components/layout/display_list/hit_test.rs.patch b/patches/components/layout/display_list/hit_test.rs.patch index c4d5fd9..9c12131 100644 --- a/patches/components/layout/display_list/hit_test.rs.patch +++ b/patches/components/layout/display_list/hit_test.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -278,6 +278,13 @@ +@@ -398,6 +398,13 @@ FragmentFlags::empty(), Cursor::Text, ), diff --git a/patches/components/layout/display_list/mod.rs.patch b/patches/components/layout/display_list/mod.rs.patch index ef3ec8f..7ccb3a8 100644 --- a/patches/components/layout/display_list/mod.rs.patch +++ b/patches/components/layout/display_list/mod.rs.patch @@ -149,7 +149,7 @@ for node in scroll_tree.nodes.iter().skip(2) { let parent_scroll_node_id = node .parent -@@ -1587,6 +1655,34 @@ +@@ -1599,6 +1667,34 @@ .translate(self.containing_block_origin.to_vector()) .to_webrender(), ); diff --git a/patches/components/layout/layout_impl.rs.patch b/patches/components/layout/layout_impl.rs.patch index 3d0de4a..c3a89bf 100644 --- a/patches/components/layout/layout_impl.rs.patch +++ b/patches/components/layout/layout_impl.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -230,6 +230,10 @@ +@@ -229,6 +229,10 @@ /// A callback to run whenever a web font from a `@font-face` rule finishes loading. web_font_finished_loading_callback: StylesheetWebFontLoadFinishedCallback, @@ -11,7 +11,7 @@ } pub struct LayoutFactoryImpl(); -@@ -270,12 +274,25 @@ +@@ -269,12 +273,25 @@ fn set_viewport_details(&mut self, viewport_details: ViewportDetails) -> bool { let device = self.stylist.device_mut(); let device_pixel_ratio = Scale::new(viewport_details.hidpi_scale_factor.get()); @@ -42,7 +42,7 @@ } device.set_viewport_size(viewport_details.size); -@@ -825,6 +842,7 @@ +@@ -807,6 +824,7 @@ needs_accessibility_update: Cell::new(false), web_font_finished_loading_callback: Arc::new(web_font_finished_loading_callback) as StylesheetWebFontLoadFinishedCallback, diff --git a/patches/components/layout/replaced.rs.patch b/patches/components/layout/replaced.rs.patch index 0c7dcde..2ee4026 100644 --- a/patches/components/layout/replaced.rs.patch +++ b/patches/components/layout/replaced.rs.patch @@ -10,7 +10,7 @@ } #[derive(Debug, MallocSizeOf)] -@@ -554,8 +557,18 @@ +@@ -558,8 +561,18 @@ }))] }, ReplacedContentKind::IFrame(iframe) => { @@ -31,7 +31,7 @@ layout_context.iframe_sizes.lock().insert( iframe.browsing_context_id, -@@ -564,8 +577,9 @@ +@@ -568,8 +581,9 @@ pipeline_id: iframe.pipeline_id, viewport_details: ViewportDetails { size, diff --git a/patches/components/net/image_cache.rs.patch b/patches/components/net/image_cache.rs.patch index cb2163c..8372ed0 100644 --- a/patches/components/net/image_cache.rs.patch +++ b/patches/components/net/image_cache.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -642,7 +642,9 @@ +@@ -620,7 +620,9 @@ self.key_cache.cache = KeyCacheState::PendingBatch } } else { diff --git a/patches/components/script/dom/document/document.rs.patch b/patches/components/script/dom/document/document.rs.patch index 27b34e0..ba95c30 100644 --- a/patches/components/script/dom/document/document.rs.patch +++ b/patches/components/script/dom/document/document.rs.patch @@ -34,7 +34,7 @@ #[cfg(any(feature = "webxr", feature = "gamepad"))] use crate::dom::bindings::codegen::Bindings::NavigatorBinding::Navigator_Binding::NavigatorMethods; use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; -@@ -169,6 +175,7 @@ +@@ -170,6 +176,7 @@ use crate::dom::html::htmlscriptelement::{HTMLScriptElement, ScriptResult}; use crate::dom::html::htmltitleelement::HTMLTitleElement; use crate::dom::htmldetailselement::DetailsNameGroups; @@ -51,11 +51,11 @@ + HTMLCanvasElement, HTMLInputElement, HTMLTextAreaElement, VisibilityStateEntry, +}; use crate::dom::uievent::UIEvent; - use crate::dom::websocket::WebSocket; use crate::dom::window::Window; + use crate::dom::window::scrolling_box::{ScrollAxisState, ScrollingBox}; @@ -218,6 +227,7 @@ - use crate::task_manager::TaskManager; - use crate::task_source::TaskSourceName; + use crate::tasks::task_manager::TaskManager; + use crate::tasks::task_source::TaskSourceName; use crate::timers::{OneshotTimerCallback, OneshotTimers}; +use crate::webview_collection::WebViewCollection; use crate::xpath::parse_expression; @@ -288,7 +288,7 @@ pub(crate) fn set_navigation_start(&self, navigation_start: CrossProcessInstant) { self.interactive_time .borrow_mut() -@@ -3220,6 +3364,60 @@ +@@ -3226,6 +3370,60 @@ .push(Dom::from_ref(resize_observer)); } @@ -349,7 +349,7 @@ /// /// pub(crate) fn gather_active_resize_observations_at_depth( -@@ -3804,6 +4002,7 @@ +@@ -3810,6 +4008,7 @@ anchors: Default::default(), applets: Default::default(), iframes: RefCell::new(IFrameCollection::new()), @@ -357,7 +357,7 @@ shared_style_locks, stylesheets: DomRefCell::new(DocumentStylesheetSet::new()), stylesheet_list: MutNullableDom::new(None), -@@ -3863,6 +4062,8 @@ +@@ -3869,6 +4068,8 @@ dirty_root: Default::default(), declarative_refresh: Default::default(), resize_observers: Default::default(), @@ -366,7 +366,7 @@ fonts: Default::default(), visibility_state: Cell::new(DocumentVisibilityState::Hidden), status_code, -@@ -3885,10 +4086,12 @@ +@@ -3891,10 +4092,12 @@ active_sandboxing_flag_set: Cell::new(creation_sandboxing_flag_set), creation_sandboxing_flag_set: Cell::new(creation_sandboxing_flag_set), favicon: RefCell::new(None), @@ -379,7 +379,7 @@ state_override: Default::default(), value_override: Default::default(), default_single_line_container_name: Default::default(), -@@ -3905,6 +4108,7 @@ +@@ -3911,6 +4114,7 @@ )), image_cache, history: Default::default(), @@ -387,7 +387,7 @@ } } -@@ -4656,6 +4860,33 @@ +@@ -4662,6 +4866,33 @@ .mark_animating_nodes_as_dirty(no_gc, current_timeline_value); } @@ -421,7 +421,7 @@ pub(crate) fn current_animation_timeline_value(&self) -> f64 { self.timeline .upcast::() -@@ -4715,10 +4946,8 @@ +@@ -4721,10 +4952,8 @@ /// An implementation of . pub(crate) fn update_animations_and_send_events(&self, cx: &mut CurrentRealm) { @@ -434,7 +434,7 @@ // > 1. Update the current time of all timelines associated with doc passing now // > as the timestamp. -@@ -4964,6 +5193,36 @@ +@@ -4970,6 +5199,36 @@ pub(crate) fn notify_embedder_favicon(&self) { if let Some(ref image) = *self.favicon.borrow() { @@ -471,7 +471,7 @@ self.send_to_embedder(EmbedderMsg::NewFavicon(self.webview_id(), image.clone())); } } -@@ -5042,6 +5301,30 @@ +@@ -5048,6 +5307,30 @@ pub(crate) fn set_iframe_load_in_progress(&self, value: bool) { self.iframe_load_in_progress.set(value) } diff --git a/patches/components/script/dom/document/document_event_handler.rs.patch b/patches/components/script/dom/document/document_event_handler.rs.patch index b110014..e30bdf3 100644 --- a/patches/components/script/dom/document/document_event_handler.rs.patch +++ b/patches/components/script/dom/document/document_event_handler.rs.patch @@ -39,9 +39,9 @@ use crate::dom::event::{EventBubbles, EventCancelable, EventComposed, EventFlags}; #[cfg(feature = "gamepad")] use crate::dom::gamepad::gamepad::{Gamepad, contains_user_gesture}; -@@ -70,12 +74,13 @@ +@@ -69,13 +73,14 @@ + use crate::dom::node::{self, Node, NodeTraits}; use crate::dom::pointerevent::{PointerEvent, PointerId}; - use crate::dom::scrolling_box::{ScrollAxisState, ScrollRequirement, ScrollingBoxAxis}; use crate::dom::types::{ - ClipboardEvent, CompositionEvent, DataTransfer, Element, Event, EventTarget, GlobalScope, - HTMLAnchorElement, HTMLElement, HTMLLabelElement, MouseEvent, Touch, TouchEvent, TouchList, @@ -50,6 +50,7 @@ + HTMLElement, HTMLIFrameElement, HTMLLabelElement, HTMLWebViewElement, MouseEvent, Touch, + TouchEvent, TouchList, WheelEvent, Window, }; + use crate::dom::window::scrolling_box::{ScrollAxisState, ScrollRequirement, ScrollingBoxAxis}; use crate::drag_data_store::{DragDataStore, Kind, Mode}; use crate::realms::enter_auto_realm; +use crate::timers::OneshotTimerHandle; @@ -144,7 +145,7 @@ } } -@@ -568,6 +640,220 @@ +@@ -569,6 +641,220 @@ } } @@ -365,7 +366,7 @@ /// fn handle_native_mouse_move_event( &self, -@@ -595,6 +881,57 @@ +@@ -603,6 +889,57 @@ return; } @@ -423,7 +424,7 @@ // Update the cursor when the mouse moves, if it has changed. self.set_cursor(Some(hit_test_result.cursor)); -@@ -865,6 +1202,12 @@ +@@ -880,6 +1217,12 @@ return; }; @@ -436,7 +437,7 @@ debug!( "{:?}: at {:?}", event.action, hit_test_result.point_in_frame -@@ -1005,7 +1348,12 @@ +@@ -1020,7 +1363,12 @@ // Step 9. If mbutton is the secondary mouse button, then // Maybe show context menu with native, target. if let MouseButton::Right = event.button { @@ -450,7 +451,7 @@ } }, // https://w3c.github.io/pointerevents/#dfn-handle-native-mouse-up -@@ -1159,8 +1507,29 @@ +@@ -1174,8 +1522,29 @@ cx: &mut js::context::JSContext, target: &EventTarget, hit_test_result: &HitTestResult, @@ -481,7 +482,7 @@ // let menu_event = PointerEvent::new( cx, -@@ -1175,25 +1544,25 @@ +@@ -1190,25 +1559,25 @@ hit_test_result .point_relative_to_initial_containing_block .to_i32(), @@ -526,7 +527,7 @@ ); menu_event.upcast::().set_composed(true); -@@ -1209,6 +1578,89 @@ +@@ -1224,6 +1593,91 @@ }; } @@ -591,7 +592,9 @@ + self.context_menu_touch_id.set(Some(touch_id)); + + // Hit test at the touch point -+ let Some(hit_test_result) = self.window.hit_test_from_point_in_viewport(point) else { ++ let flags = HitTestFlags::empty(); ++ let Some(hit_test_result) = self.window.hit_test_from_point_in_viewport(flags, point) ++ else { + return; + }; + @@ -616,10 +619,10 @@ fn handle_touch_event( &self, cx: &mut JSContext, -@@ -1215,6 +1667,30 @@ - event: EmbedderTouchEvent, +@@ -1231,6 +1685,30 @@ input_event: &ConstellationInputEvent, ) -> InputEventResult { + let flags = HitTestFlags::empty(); + // Check if this touch was previously forwarded to an embedded webview. + // If so, continue forwarding to the same webview regardless of current hit test. + // This ensures touch sequences stay with their original target. @@ -645,9 +648,9 @@ + } + // Ignore all incoming events without a hit test. - let Some(hit_test_result) = self.window.hit_test_from_input_event(input_event) else { - self.update_active_touch_points_when_early_return(event); -@@ -1221,6 +1697,19 @@ + let Some(hit_test_result) = self.window.hit_test_from_input_event(flags, input_event) + else { +@@ -1238,6 +1716,19 @@ return Default::default(); }; @@ -667,7 +670,7 @@ let TouchId(identifier) = event.touch_id; let Some(element) = hit_test_result -@@ -1392,6 +1881,10 @@ +@@ -1409,6 +1900,10 @@ .safe_borrow_mut(cx.no_gc()) .push(Dom::from_ref(&*pointer_touch)); self.set_active_element(&element); @@ -678,7 +681,7 @@ (current_target, pointer_touch) }, _ => { -@@ -1426,15 +1919,47 @@ +@@ -1443,15 +1938,47 @@ ); let mut active_touch_points = self.active_touch_points.safe_borrow_mut(cx.no_gc()); @@ -727,7 +730,7 @@ }, TouchEventType::Down => unreachable!("Should have been handled above"), } -@@ -1482,6 +2007,19 @@ +@@ -1499,6 +2026,19 @@ ); let event = touch_event.upcast::(); event.fire(cx, &touch_dispatch_target); @@ -747,7 +750,7 @@ event.flags().into() } -@@ -1616,6 +2154,16 @@ +@@ -1635,6 +2175,16 @@ return Default::default(); }; @@ -764,7 +767,7 @@ let Some(el) = hit_test_result .node .inclusive_ancestors(ShadowIncluding::Yes) -@@ -2180,6 +2728,26 @@ +@@ -2199,6 +2749,26 @@ return; } diff --git a/patches/components/script/dom/document/mod.rs.patch b/patches/components/script/dom/document/mod.rs.patch index 59d2e12..e6fc95b 100644 --- a/patches/components/script/dom/document/mod.rs.patch +++ b/patches/components/script/dom/document/mod.rs.patch @@ -8,5 +8,5 @@ mod tree_ordered_index_map; + pub(crate) mod visibilitystateentry; + pub(crate) mod websocket; - pub(crate) use self::document::*; diff --git a/patches/components/script/dom/globalscope/globalscope.rs.patch b/patches/components/script/dom/globalscope/globalscope.rs.patch index 042f4e2..daaa61b 100644 --- a/patches/components/script/dom/globalscope/globalscope.rs.patch +++ b/patches/components/script/dom/globalscope/globalscope.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -359,6 +359,16 @@ +@@ -360,6 +360,16 @@ /// Is considered in a secure context inherited_secure_context: Option, @@ -17,7 +17,7 @@ /// Directory to store unminified scripts for this window if unminify-js /// opt is enabled. unminified_js_dir: Option, -@@ -790,6 +800,8 @@ +@@ -791,6 +801,8 @@ #[cfg(feature = "webgpu")] gpu_id_hub: Arc, inherited_secure_context: Option, unminify_js: bool, @@ -26,7 +26,7 @@ font_context: Option>, ) -> Self { Self { -@@ -827,6 +839,8 @@ +@@ -828,6 +840,8 @@ console_group_stack: DomRefCell::new(Vec::new()), console_count_map: Default::default(), inherited_secure_context, @@ -35,7 +35,7 @@ unminified_js_dir: unminify_js.then(|| unminified_path("unminified-js")), byte_length_queuing_strategy_size_function: OnceCell::new(), count_queuing_strategy_size_function: OnceCell::new(), -@@ -1169,6 +1183,25 @@ +@@ -1170,6 +1184,25 @@ .send(ScriptToConstellationMessage::EntanglePorts(port1, port2)); } @@ -61,7 +61,7 @@ /// Handle the transfer of a port in the current task. pub(crate) fn mark_port_as_transferred(&self, port_id: &MessagePortId) -> MessagePortImpl { if let MessagePortState::Managed(_id, message_ports) = -@@ -3218,6 +3251,16 @@ +@@ -3219,6 +3252,16 @@ self.inherited_secure_context } diff --git a/patches/components/script/dom/processingoptions.rs.patch b/patches/components/script/dom/html/documentmetadata/processingoptions.rs.patch similarity index 100% rename from patches/components/script/dom/processingoptions.rs.patch rename to patches/components/script/dom/html/documentmetadata/processingoptions.rs.patch diff --git a/patches/components/script/dom/html/htmliframeelement.rs.patch b/patches/components/script/dom/html/embedded_content/htmliframeelement.rs.patch similarity index 100% rename from patches/components/script/dom/html/htmliframeelement.rs.patch rename to patches/components/script/dom/html/embedded_content/htmliframeelement.rs.patch diff --git a/patches/components/script/dom/html/form_controls/htmltextareaelement.rs.patch b/patches/components/script/dom/html/form_controls/htmltextareaelement.rs.patch index 7e2c7f9..12bb735 100644 --- a/patches/components/script/dom/html/form_controls/htmltextareaelement.rs.patch +++ b/patches/components/script/dom/html/form_controls/htmltextareaelement.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -320,6 +320,9 @@ +@@ -315,6 +315,9 @@ enabled, }; self.owner_window().layout().set_needs_new_display_list(); diff --git a/patches/components/script/dom/html/mod.rs.patch b/patches/components/script/dom/html/mod.rs.patch index 358752d..3a855af 100644 --- a/patches/components/script/dom/html/mod.rs.patch +++ b/patches/components/script/dom/html/mod.rs.patch @@ -1,8 +1,8 @@ --- original +++ modified -@@ -63,4 +63,5 @@ +@@ -48,4 +48,5 @@ + pub(crate) mod htmltimeelement; pub(crate) mod htmlulistelement; pub(crate) mod htmlunknownelement; - pub(crate) mod htmlvideoelement; +pub(crate) mod htmlwebviewelement; pub(crate) mod interactive_element_command; diff --git a/patches/components/script/dom/mod.rs.patch b/patches/components/script/dom/mod.rs.patch index 5ff1da4..de20119 100644 --- a/patches/components/script/dom/mod.rs.patch +++ b/patches/components/script/dom/mod.rs.patch @@ -13,10 +13,10 @@ #[cfg(feature = "bluetooth")] pub(crate) use self::bluetooth::*; +pub(crate) mod brightnessdevice; - pub(crate) mod broadcastchannel; mod canvas; pub(crate) use self::canvas::*; -@@ -230,8 +232,10 @@ + pub(crate) mod characterdata; +@@ -229,8 +231,10 @@ pub(crate) mod clipboard; pub(crate) use self::clipboard::*; pub(crate) mod console; @@ -27,7 +27,7 @@ pub(crate) use self::credentialmanagement::*; pub(crate) mod css; pub(crate) use self::css::*; -@@ -254,6 +258,7 @@ +@@ -253,6 +257,7 @@ pub(crate) mod elementinternals; pub(crate) mod encoding; pub(crate) use self::encoding::*; @@ -35,7 +35,7 @@ pub(crate) mod event; pub(crate) use self::event::*; pub(crate) mod eventsource; -@@ -279,10 +284,12 @@ +@@ -278,10 +283,12 @@ pub(crate) use self::globalscope::*; pub(crate) mod html; pub(crate) use self::html::*; @@ -48,10 +48,10 @@ pub(crate) mod media; pub(crate) use self::media::*; pub(crate) mod mimetype; -@@ -294,10 +301,15 @@ +@@ -292,10 +299,15 @@ + pub(crate) use self::navigator::*; pub(crate) mod node; pub(crate) use self::node::*; - pub(crate) mod notification; +pub(crate) mod pairing; +pub(crate) mod pairingpeerevent; +pub(crate) mod peer; @@ -61,6 +61,6 @@ pub(crate) mod permission; pub(crate) use self::permission::*; +pub(crate) mod power; - pub(crate) mod processingoptions; pub(crate) mod promise; pub(crate) use self::promise::*; + pub(crate) mod quotaexceedederror; diff --git a/patches/components/script/dom/notification.rs.patch b/patches/components/script/dom/serviceworker/notification.rs.patch similarity index 100% rename from patches/components/script/dom/notification.rs.patch rename to patches/components/script/dom/serviceworker/notification.rs.patch diff --git a/patches/components/script/dom/window/window.rs.patch b/patches/components/script/dom/window/window.rs.patch index 49aa70e..bbb4534 100644 --- a/patches/components/script/dom/window/window.rs.patch +++ b/patches/components/script/dom/window/window.rs.patch @@ -23,14 +23,14 @@ use js::rust::wrappers2::{JS_DefineProperty, JS_GC}; use js::rust::{ @@ -51,6 +53,7 @@ - ReflowRequestRestyle, ReflowStatistics, RestyleReason, ScrollContainerQueryFlags, - ScrollContainerResponse, TrustedNodeAddress, combine_id_with_fragment_type, + ReflowStatistics, RestyleReason, ScrollContainerQueryFlags, ScrollContainerResponse, + TrustedNodeAddress, combine_id_with_fragment_type, }; +use log::warn; use malloc_size_of::MallocSizeOf; use media::WindowGLContext; use net_traits::image_cache::{ -@@ -160,8 +163,10 @@ +@@ -161,8 +164,10 @@ use crate::dom::history::History; use crate::dom::html::htmlcollection::{CollectionFilter, HTMLCollection}; use crate::dom::html::htmliframeelement::HTMLIFrameElement; @@ -41,7 +41,7 @@ use crate::dom::location::Location; use crate::dom::medialist::MediaList; use crate::dom::mediaquerylist::{MediaQueryList, MediaQueryListMatchState}; -@@ -1204,12 +1209,22 @@ +@@ -1201,12 +1206,22 @@ let (sender, receiver) = ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); @@ -65,7 +65,7 @@ receiver.recv().unwrap_or_else(|_| { // If the receiver is closed, we assume the dialog was cancelled. debug!("Alert dialog was cancelled or failed to show."); -@@ -1243,13 +1258,22 @@ +@@ -1240,13 +1255,22 @@ // the user to respond with a positive or negative response. let (sender, receiver) = ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); @@ -89,7 +89,7 @@ // Step 5: Let userPromptHandler be WebDriver BiDi user prompt opened with this, // "confirm", and message. // -@@ -1294,6 +1318,7 @@ +@@ -1291,6 +1315,7 @@ // defaulted to the value given by default. let (sender, receiver) = ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); @@ -97,7 +97,7 @@ let dialog = SimpleDialogRequest::Prompt { id: self.Document().embedder_controls().next_control_id(), message: String::from(message), -@@ -1300,8 +1325,16 @@ +@@ -1297,8 +1322,16 @@ default: String::from(default), response_sender: sender, }; @@ -115,7 +115,7 @@ // Step 6: Let userPromptHandler be WebDriver BiDi user prompt opened with this, // "prompt", and message. // TODO: Add support for WebDriver BiDi. -@@ -1797,6 +1830,27 @@ +@@ -1794,6 +1827,27 @@ // https://html.spec.whatwg.org/multipage/#windoweventhandlers window_event_handlers!(); @@ -143,7 +143,7 @@ /// fn Screen(&self, cx: &mut JSContext) -> DomRoot { self.screen.or_init(|| Screen::new(cx, self)) -@@ -2727,6 +2781,10 @@ +@@ -2724,6 +2778,10 @@ accessibility_damage = Some(accessibility_data.drain_pending_accessibility_damage()); } @@ -154,11 +154,12 @@ // Send new document and relevant styles to layout. let reflow = ReflowRequest { document: document.upcast::().to_trusted_node_address(), -@@ -3251,9 +3309,33 @@ - &self, +@@ -3234,10 +3292,33 @@ + flags: HitTestFlags, input_event: &ConstellationInputEvent, ) -> Option { - self.hit_test_from_point_in_viewport( +- flags, - input_event.hit_test_result.as_ref()?.point_in_viewport, - ) + // For pointer events with coordinates, prefer the original event point over the @@ -187,15 +188,15 @@ + .as_ref() + .map(|r| r.point_in_viewport) + })?; -+ self.hit_test_from_point_in_viewport(point_in_viewport) ++ self.hit_test_from_point_in_viewport(flags, point_in_viewport) } #[expect(unsafe_code)] -@@ -3272,8 +3354,39 @@ - // SAFETY: This is safe because `Window::query_elements_from_point` has ensured that - // layout has run and any OpaqueNodes that no longer refer to real nodes are gone. - let address = UntrustedNodeAddress(result.node.0 as *const c_void); -+ let node = unsafe { from_untrusted_node_address(address) }; +@@ -3258,8 +3339,42 @@ + let address = UntrustedNodeAddress(node.0 as *const c_void); + unsafe { from_untrusted_node_address(address) } + }; ++ let node = from_opaque_node(item.node); + + // Verify the node belongs to this window's document + let node_doc = node.owner_doc(); @@ -219,20 +220,23 @@ + + return container_node.map(|node| HitTestResult { + node, -+ cursor: result.cursor, -+ point_in_node: result.point_in_target, ++ dom_position_for_selection: result ++ .dom_position_for_selection ++ .map(|(node, offset)| (from_opaque_node(node), offset)), ++ cursor: item.cursor, ++ point_in_node: item.point_in_target, + point_in_frame, + point_relative_to_initial_containing_block, + }); + } + Some(HitTestResult { -- node: unsafe { from_untrusted_node_address(address) }, +- node: from_opaque_node(item.node), + node, - cursor: result.cursor, - point_in_node: result.point_in_target, - point_in_frame, -@@ -3644,17 +3757,19 @@ + dom_position_for_selection: result + .dom_position_for_selection + .map(|(node, offset)| (from_opaque_node(node), offset)), +@@ -3633,17 +3748,19 @@ } pub(crate) fn send_to_embedder(&self, msg: EmbedderMsg) { @@ -258,7 +262,7 @@ } #[cfg(feature = "webxr")] -@@ -3888,6 +4003,8 @@ +@@ -3877,6 +3994,8 @@ player_context: WindowGLContext, #[cfg(feature = "webgpu")] gpu_id_hub: Arc, inherited_secure_context: Option, @@ -267,7 +271,7 @@ theme: Theme, weak_script_thread: Weak, ) -> DomRoot { -@@ -3912,6 +4029,8 @@ +@@ -3901,6 +4020,8 @@ gpu_id_hub, inherited_secure_context, unminify_js, @@ -276,7 +280,7 @@ Some(font_context), ), caches: Default::default(), -@@ -4182,3 +4301,114 @@ +@@ -4171,3 +4292,114 @@ Window::origin(self) } } diff --git a/patches/components/script/dom/window/windowproxy.rs.patch b/patches/components/script/dom/window/windowproxy.rs.patch index cc0ab95..b2a3c15 100644 --- a/patches/components/script/dom/window/windowproxy.rs.patch +++ b/patches/components/script/dom/window/windowproxy.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -305,6 +305,7 @@ +@@ -307,6 +307,7 @@ cx: &mut JSContext, name: DOMString, noopener: bool, @@ -8,7 +8,7 @@ ) -> Option> { let (response_sender, response_receiver) = generic_channel::channel().unwrap(); let window = self -@@ -357,6 +358,7 @@ +@@ -359,6 +360,7 @@ opener_webview_id: window.webview_id(), opener_pipeline_id: self.currently_active.get().unwrap(), response_sender, @@ -16,7 +16,7 @@ }; let constellation_msg = ScriptToConstellationMessage::CreateAuxiliaryWebView(load_info); window.send_to_constellation(constellation_msg); -@@ -379,6 +381,8 @@ +@@ -381,6 +383,8 @@ sandboxing_flags: sandboxing_flag_set, iframe_element_referrer_policy: ReferrerPolicy::EmptyString, }, @@ -25,7 +25,7 @@ }; with_script_thread(|script_thread| { -@@ -531,11 +535,33 @@ +@@ -557,11 +561,33 @@ // (TODO) Step 11. Let referrerPolicy be the empty string. // (TODO) Step 12. If noreferrer is true, then set referrerPolicy to "no-referrer". @@ -60,25 +60,7 @@ (Some(chosen), new) => (chosen, new), (None, _) => return Ok(None), }; -@@ -553,16 +579,12 @@ - let target_window = target_document.window(); - // Step 15.3 and 15.4 will have happened elsewhere, - // since we've created a new browsing context and loaded it with about:blank. -- if !url.is_empty() { -+ if let Some(url) = target_url { - let existing_document = self - .currently_active - .get() - .and_then(ScriptThread::find_document) - .unwrap(); -- let url = match existing_document.url().join(&url) { -- Ok(url) => url, -- Err(_) => return Err(Error::Syntax(None)), -- }; - let referrer = if noreferrer { - Referrer::NoReferrer - } else { -@@ -627,6 +649,7 @@ +@@ -647,6 +673,7 @@ cx: &mut JSContext, name: DOMString, noopener: bool, @@ -86,7 +68,7 @@ ) -> (Option>, bool) { match name.to_lowercase().as_ref() { "" | "_self" => { -@@ -645,7 +668,7 @@ +@@ -665,7 +692,7 @@ (Some(DomRoot::from_ref(self.top())), false) }, "_blank" => ( @@ -95,7 +77,7 @@ true, ), _ => { -@@ -656,7 +679,7 @@ +@@ -676,7 +703,7 @@ match ScriptThread::find_window_proxy_by_name(&name) { Some(proxy) => (Some(proxy), false), None => ( diff --git a/patches/components/script/lib.rs.patch b/patches/components/script/lib.rs.patch index fa4746f..4afe4aa 100644 --- a/patches/components/script/lib.rs.patch +++ b/patches/components/script/lib.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -66,6 +66,7 @@ +@@ -62,6 +62,7 @@ pub mod test; mod timers; mod webdriver_handlers; diff --git a/patches/components/script/script_thread.rs.patch b/patches/components/script/script_thread.rs.patch index ae513f7..0d4e47c 100644 --- a/patches/components/script/script_thread.rs.patch +++ b/patches/components/script/script_thread.rs.patch @@ -57,7 +57,7 @@ use crate::dom::servoparser::{ParserContext, ServoParser}; use crate::dom::types::DebuggerGlobalScope; #[cfg(feature = "webgpu")] -@@ -1254,18 +1262,22 @@ +@@ -1255,18 +1263,22 @@ // Unspecified, but necessary: Any of the previous callbacks may have put the // document into a render-blocked state. If that's the case, then abort the // rendering process now. @@ -89,7 +89,7 @@ } let should_generate_frame = !painters_generating_frames.is_empty(); -@@ -1793,6 +1805,14 @@ +@@ -1794,6 +1806,14 @@ ScriptThreadMessage::GetDocumentOrigin(pipeline_id, result_sender) => { self.handle_get_document_origin(pipeline_id, result_sender); }, @@ -104,7 +104,7 @@ ScriptThreadMessage::GetTitle(pipeline_id) => self.handle_get_title_msg(pipeline_id), ScriptThreadMessage::SetDocumentActivity(pipeline_id, activity) => { self.handle_set_document_activity_msg(cx, pipeline_id, activity) -@@ -1958,11 +1978,46 @@ +@@ -1959,11 +1979,46 @@ self.handle_refresh_cursor(pipeline_id); }, ScriptThreadMessage::PreferencesUpdated(updates) => { @@ -155,7 +155,7 @@ }, ScriptThreadMessage::ForwardKeyboardScroll(pipeline_id, scroll) => { if let Some(document) = self.documents.borrow().find_document(pipeline_id) { -@@ -1995,6 +2050,52 @@ +@@ -1996,6 +2051,52 @@ ScriptThreadMessage::TriggerGarbageCollection => unsafe { JS_GC(cx, GCReason::API); }, @@ -208,7 +208,7 @@ } } -@@ -3058,16 +3159,32 @@ +@@ -3059,16 +3160,32 @@ reason: UpdatePipelineIdReason, cx: &mut js::context::JSContext, ) { @@ -245,7 +245,7 @@ let Some(window) = self.documents.borrow().find_window(new_pipeline_id) else { return; -@@ -3086,6 +3203,7 @@ +@@ -3087,6 +3204,7 @@ // is no need to pass along existing opener information that // will be discarded. None, @@ -253,7 +253,7 @@ ); } -@@ -3377,6 +3495,212 @@ +@@ -3378,6 +3496,212 @@ } } @@ -466,7 +466,7 @@ fn ask_constellation_for_top_level_info( &self, sender_webview_id: WebViewId, -@@ -3489,7 +3813,13 @@ +@@ -3488,7 +3812,13 @@ self.senders.pipeline_to_embedder_sender.clone(), self.senders.constellation_sender.clone(), incomplete.pipeline_id, @@ -481,7 +481,7 @@ incomplete.viewport_details, origin.clone(), final_url.clone(), -@@ -3511,6 +3841,8 @@ +@@ -3510,6 +3840,8 @@ #[cfg(feature = "webgpu")] self.gpu_id_hub.clone(), incomplete.load_data.inherited_secure_context, @@ -490,7 +490,7 @@ incomplete.theme, self.this.clone(), ); -@@ -3616,6 +3948,8 @@ +@@ -3615,6 +3947,8 @@ ); } @@ -499,7 +499,7 @@ document.set_ready_state(cx, DocumentReadyState::Loading); self.documents -@@ -3622,8 +3956,6 @@ +@@ -3621,8 +3955,6 @@ .borrow_mut() .insert(incomplete.pipeline_id, &document); @@ -508,7 +508,7 @@ // Initialize the browsing context for the window. let window_proxy = self.window_proxies.local_window_proxy( cx, -@@ -3634,6 +3966,7 @@ +@@ -3633,6 +3965,7 @@ incomplete.webview_id, incomplete.parent_info, incomplete.opener, @@ -516,7 +516,7 @@ ); if window_proxy.parent().is_some() { // https://html.spec.whatwg.org/multipage/#navigating-across-documents:delaying-load-events-mode-2 -@@ -3806,11 +4139,11 @@ +@@ -3805,11 +4138,11 @@ target_snapshot_params: TargetSnapshotParams, cx: &mut js::context::JSContext, ) { @@ -531,7 +531,7 @@ iframe.navigate_or_reload_child_browsing_context( load_data, history_handling, -@@ -3818,7 +4151,17 @@ +@@ -3817,7 +4150,17 @@ target_snapshot_params, cx, ); @@ -549,7 +549,7 @@ } /// Turn javascript: URL into JS code to eval, according to the steps in -@@ -4367,10 +4710,88 @@ +@@ -4366,10 +4709,88 @@ document.event_handler().handle_refresh_cursor(); } @@ -638,7 +638,7 @@ fn handle_request_screenshot_readiness( &self, webview_id: WebViewId, -@@ -4411,7 +4832,7 @@ +@@ -4410,7 +4831,7 @@ pinch_zoom_infos: PinchZoomInfos, ) { let Some(window) = self.documents.borrow().find_window(pipeline_id) else { diff --git a/patches/components/script/task_manager.rs.patch b/patches/components/script/tasks/task_manager.rs.patch similarity index 100% rename from patches/components/script/task_manager.rs.patch rename to patches/components/script/tasks/task_manager.rs.patch diff --git a/patches/components/script/task_source.rs.patch b/patches/components/script/tasks/task_source.rs.patch similarity index 100% rename from patches/components/script/task_source.rs.patch rename to patches/components/script/tasks/task_source.rs.patch diff --git a/patches/components/servo/servo.rs.patch b/patches/components/servo/servo.rs.patch index a86055b..7e8e1b9 100644 --- a/patches/components/servo/servo.rs.patch +++ b/patches/components/servo/servo.rs.patch @@ -187,7 +187,7 @@ ); net::connector::prewarm_tls(); -@@ -1004,6 +1100,7 @@ +@@ -1008,6 +1104,7 @@ Servo(Rc::new(ServoInner { delegate: RefCell::new(Rc::new(DefaultServoDelegate)), paint, @@ -195,7 +195,7 @@ network_manager: Rc::new(RefCell::new(NetworkManager::new( public_resource_threads.clone(), private_resource_threads.clone(), -@@ -1038,6 +1135,10 @@ +@@ -1042,6 +1139,10 @@ *self.0.delegate.borrow_mut() = delegate; } @@ -206,7 +206,7 @@ /// **EXPERIMENTAL:** Intialize GL accelerated media playback. This currently only works on a limited number /// of platforms. This should be run *before* creating [`Servo`] and its first [`WebView`]. pub fn initialize_gl_accelerated_media(display: NativeDisplay, api: GlApi, context: GlContext) { -@@ -1078,6 +1179,22 @@ +@@ -1082,6 +1183,22 @@ .send(EmbedderToConstellationMessage::WebDriverCommand(command)); } @@ -229,7 +229,7 @@ pub fn set_preference(&self, name: &str, value: PrefValue) { let mut preferences = prefs::get().clone(); preferences.set_value(name, value); -@@ -1092,6 +1209,14 @@ +@@ -1096,6 +1213,14 @@ &self.0.site_data_manager } @@ -244,7 +244,7 @@ pub(crate) fn paint<'a>(&'a self) -> Ref<'a, Paint> { self.0.paint.borrow() } -@@ -1200,6 +1325,7 @@ +@@ -1204,6 +1329,7 @@ async_runtime: Box, public_storage_threads: StorageThreads, private_storage_threads: StorageThreads, @@ -252,7 +252,7 @@ ) { // Global configuration options, parsed from the command line. let opts = opts::get(); -@@ -1243,6 +1369,7 @@ +@@ -1247,6 +1373,7 @@ async_runtime, privileged_urls, wake_lock_provider: Box::new(DefaultWakeLockDelegate),