diff --git a/Cargo.lock b/Cargo.lock index 0b1e873..adf12b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1256,9 +1256,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d262e149917187838d5b42777c8253bcb64500067342904e7d429499a6f277e" +checksum = "509591b7bcd67f4ef775afad7662703b4935daaa6ec0e5605cfb1090b32a2b6d" dependencies = [ "find-msvc-tools", "jobserver", @@ -2719,9 +2719,9 @@ dependencies = [ [[package]] name = "error-code" -version = "3.3.2" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" +checksum = "0b5343afd4a8365a643ac588dab4cf234a190c7f6c88c9f6dd6ffe00837661b7" [[package]] name = "etagere" @@ -2853,9 +2853,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b73573e6edcd2af0cdf47bd6cb58f0b3839491263c314eaad1ccf24430e1de" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "fixed_decimal" @@ -2929,9 +2929,9 @@ dependencies = [ [[package]] name = "font-types" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7299a780854a6d391be2ae1c8521c9368471b559dbfd6a8dbd9f407eaff100" +checksum = "75382bc7392ef10aad10935f92fc3db36d2d4dad0e5d96d8d65e04f89a07ec39" dependencies = [ "bytemuck", ] @@ -4759,16 +4759,16 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" dependencies = [ "displaydoc", "potential_utf", "utf8_iter", "yoke 0.8.3", "zerofrom", - "zerovec 0.11.6", + "zerovec 0.11.7", ] [[package]] @@ -4877,39 +4877,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52b1a7fbdbf3958f1be8354cb59ac73f165b7b7082d447ff2090355c9a069120" [[package]] -name = "icu_locale" -version = "2.2.0" +name = "icu_locale_core" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5a396343c7208121dc86e35623d3dfe19814a7613cfd14964994cdc9c9a2e26" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" dependencies = [ - "icu_collections 2.2.0", - "icu_locale_core", - "icu_locale_data", - "icu_provider 2.2.0", - "potential_utf", - "tinystr 0.8.3", - "zerovec 0.11.6", + "displaydoc", + "litemap 0.8.3", + "serde", + "tinystr 0.8.4", + "writeable 0.6.4", + "zerovec 0.11.7", ] [[package]] -name = "icu_locale_core" -version = "2.2.0" +name = "icu_locale_fallback" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "251af8e57c9400e3eb58242fe5b8b1152b2a64fdf4cf632f923c38ccee6f2fa9" dependencies = [ - "displaydoc", - "litemap 0.8.2", - "serde", - "tinystr 0.8.3", - "writeable 0.6.3", - "zerovec 0.11.6", + "icu_locale_core", + "icu_locale_fallback_data", + "icu_provider 2.3.0", + "potential_utf", + "tinystr 0.8.4", + "zerovec 0.11.7", ] [[package]] -name = "icu_locale_data" -version = "2.2.0" +name = "icu_locale_fallback_data" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fdcc9ac77c6d74ff5cf6e65ef3181d6af32003b16fce3a77fb451d2f695993" +checksum = "decf2a22ec8fa68f1a0c1129a3f8583f8f8bc24e8b9ccbe98ead99f62a4dc3a8" [[package]] name = "icu_locid" @@ -4964,16 +4963,16 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" dependencies = [ - "icu_collections 2.2.0", - "icu_normalizer_data 2.2.0", - "icu_properties 2.2.0", - "icu_provider 2.2.0", + "icu_collections 2.3.0", + "icu_normalizer_data 2.3.0", + "icu_properties 2.3.0", + "icu_provider 2.3.0", "smallvec", - "zerovec 0.11.6", + "zerovec 0.11.7", ] [[package]] @@ -4984,9 +4983,9 @@ checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" [[package]] name = "icu_normalizer_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" [[package]] name = "icu_pattern" @@ -5039,16 +5038,17 @@ dependencies = [ [[package]] name = "icu_properties" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" dependencies = [ - "icu_collections 2.2.0", + "displaydoc", + "icu_collections 2.3.0", "icu_locale_core", - "icu_properties_data 2.2.0", - "icu_provider 2.2.0", - "zerotrie 0.2.4", - "zerovec 0.11.6", + "icu_properties_data 2.3.0", + "icu_provider 2.3.0", + "zerotrie 0.2.5", + "zerovec 0.11.7", ] [[package]] @@ -5059,9 +5059,9 @@ checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" [[package]] name = "icu_properties_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" @@ -5082,19 +5082,19 @@ dependencies = [ [[package]] name = "icu_provider" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "92a7ed671a6aad807a8651a2e1782a6598fda9ce5185dd8158549e95a91c6428" dependencies = [ "displaydoc", "icu_locale_core", "serde", "stable_deref_trait", - "writeable 0.6.3", + "writeable 0.6.4", "yoke 0.8.3", "zerofrom", - "zerotrie 0.2.4", - "zerovec 0.11.6", + "zerotrie 0.2.5", + "zerovec 0.11.7", ] [[package]] @@ -5139,18 +5139,19 @@ dependencies = [ [[package]] name = "icu_segmenter" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0794db0b1a86193ac9c48768d0e6c52c54448e0870ad87907d456ee0dac964" +checksum = "82d07aafccd67af15d02512a6adf5896fbc5ed00f2e99b471d2efa14016db3db" dependencies = [ "core_maths", - "icu_collections 2.2.0", - "icu_locale", - "icu_provider 2.2.0", - "icu_segmenter_data 2.2.0", + "icu_collections 2.3.0", + "icu_locale_fallback", + "icu_provider 2.3.0", + "icu_segmenter_data 2.3.0", "potential_utf", + "smallvec", "utf8_iter", - "zerovec 0.11.6", + "zerovec 0.11.7", ] [[package]] @@ -5161,9 +5162,9 @@ checksum = "a1e52775179941363cc594e49ce99284d13d6948928d8e72c755f55e98caa1eb" [[package]] name = "icu_segmenter_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a2c462a4d927d512f5f882a033ddd62f33a05bb9f230d98f736ac3dc85938f" +checksum = "ae293c039020f9ec10710af98d29ce6aa2051486638b49c9a6409f3b4a9e98ad" [[package]] name = "icu_timezone" @@ -5213,8 +5214,8 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ - "icu_normalizer 2.2.0", - "icu_properties 2.2.0", + "icu_normalizer 2.3.0", + "icu_properties 2.3.0", ] [[package]] @@ -6008,14 +6009,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" +checksum = "28d0a00925a9f930d679b6789b721e3a7f9ed110f41b86d2497caa780c3a070a" dependencies = [ "bitflags 2.13.1", "libc", "plain", - "redox_syscall 0.9.1", + "redox_syscall 0.9.2", ] [[package]] @@ -6086,9 +6087,9 @@ checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "litemap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "litrs" @@ -6680,9 +6681,9 @@ dependencies = [ [[package]] name = "netlink-proto" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f7398dddf5f152d2a91a2921a134c6097056e292c0d4b9906007855e7cece6" +checksum = "93af8261786086024cd5e96e0a991dd65ced07bbf7c233a487bbc96b971d5539" dependencies = [ "bytes", "futures-channel", @@ -8018,9 +8019,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "plain" @@ -8242,13 +8243,13 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ "serde_core", - "writeable 0.6.3", - "zerovec 0.11.6", + "writeable 0.6.4", + "zerovec 0.11.7", ] [[package]] @@ -8441,9 +8442,9 @@ dependencies = [ [[package]] name = "psl" -version = "2.1.223" +version = "2.1.224" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0dedad316e05de220cbf3fd8bfb69f3df8755dde2d7d479211827b595168a93" +checksum = "d6fd4be744906217175e617ecbaff30e1d4574954e5ab2ad6ac0fead0e9abc3a" dependencies = [ "psl-types", ] @@ -8802,7 +8803,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", - "font-types 0.12.2", + "font-types 0.12.3", "once_cell", ] @@ -8832,9 +8833,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07507be7b4a5f9f26eeb41eeaebb1f5a7ff29dfb29739facc21d35bf8b11c21e" +checksum = "f1c93da5bb2c5d4e6c0ef7abeead62c89169a0a4882bfb83ac892f2423aea2fe" dependencies = [ "bitflags 2.13.1", ] @@ -9326,9 +9327,9 @@ dependencies = [ [[package]] name = "sea-query" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d190cfb3bcceb8a8d7d04dee5a0c77f60c7627979cdcb47fdcb8934f009badf" +checksum = "546040c653a705e60ec65ecd3191a809603734bebbc225775916dea9ae409b31" dependencies = [ "sea-query-derive", ] @@ -9428,7 +9429,7 @@ dependencies = [ [[package]] name = "selectors" version = "0.40.0" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "bitflags 2.13.1", "cssparser", @@ -9457,12 +9458,6 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" -[[package]] -name = "seq-macro" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" - [[package]] name = "serde" version = "1.0.229" @@ -10058,7 +10053,7 @@ dependencies = [ "content-security-policy", "dwrote", "euclid", - "font-types 0.12.2", + "font-types 0.12.3", "fontsan", "freetype-sys", "harfbuzz-sys", @@ -10269,6 +10264,7 @@ dependencies = [ "app_units", "atomic_refcell", "content-security-policy", + "cookie 0.18.2", "crossbeam-channel", "data-url", "encoding_rs", @@ -10530,6 +10526,7 @@ dependencies = [ "async-recursion", "async-tungstenite", "atproto-identity", + "aws-lc-rs", "base64 0.22.1", "bytes", "chrono", @@ -10595,6 +10592,7 @@ dependencies = [ "sha2 0.11.0", "smallvec", "sync_wrapper", + "tempfile", "time", "tokio", "tokio-rustls", @@ -10827,6 +10825,7 @@ dependencies = [ "ipc-channel", "itertools 0.15.0", "k12", + "keccak 0.2.1", "keyboard-types 0.8.3", "libc", "log", @@ -10856,7 +10855,6 @@ dependencies = [ "rsa 0.10.0-rc.18", "rustc-hash 2.1.3", "selectors", - "seq-macro", "serde", "serde_json", "servo-background-hang-monitor-api", @@ -10899,6 +10897,7 @@ dependencies = [ "sha2 0.11.0", "sha3 0.10.9", "smallvec", + "sponge-cursor", "strum 0.27.2", "stylo", "stylo_atoms", @@ -10910,7 +10909,6 @@ dependencies = [ "tendril", "time", "tracing", - "turboshake", "unicode-bidi", "unicode-script", "url", @@ -11250,7 +11248,7 @@ dependencies = [ [[package]] name = "servo_arc" version = "0.4.3" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "serde", "stable_deref_trait", @@ -11793,7 +11791,7 @@ dependencies = [ [[package]] name = "stylo" version = "0.20.0" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "app_units", "arrayvec", @@ -11804,7 +11802,7 @@ dependencies = [ "derive_more", "encoding_rs", "euclid", - "icu_segmenter 2.2.0", + "icu_segmenter 2.3.0", "indexmap", "itertools 0.14.0", "itoa", @@ -11849,7 +11847,7 @@ dependencies = [ [[package]] name = "stylo_atoms" version = "0.20.0" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "string_cache", "string_cache_codegen", @@ -11858,7 +11856,7 @@ dependencies = [ [[package]] name = "stylo_derive" version = "0.20.0" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "darling", "proc-macro2", @@ -11870,7 +11868,7 @@ dependencies = [ [[package]] name = "stylo_dom" version = "0.20.0" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "bitflags 2.13.1", "stylo_malloc_size_of", @@ -11879,7 +11877,7 @@ dependencies = [ [[package]] name = "stylo_malloc_size_of" version = "0.20.0" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "app_units", "cssparser", @@ -11896,7 +11894,7 @@ dependencies = [ [[package]] name = "stylo_static_prefs" version = "0.20.0" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "toml 1.1.4+spec-1.1.0", ] @@ -11904,7 +11902,7 @@ dependencies = [ [[package]] name = "stylo_traits" version = "0.20.0" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "app_units", "bitflags 2.13.1", @@ -12403,13 +12401,13 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", "serde_core", - "zerovec 0.11.6", + "zerovec 0.11.7", ] [[package]] @@ -12440,7 +12438,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "to_shmem" version = "0.5.0" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "cssparser", "servo_arc", @@ -12453,7 +12451,7 @@ dependencies = [ [[package]] name = "to_shmem_derive" version = "0.1.0" -source = "git+https://github.com/servo/stylo?rev=f6d1d525db9a7fb1aa0842926458e63faa4f44c7#f6d1d525db9a7fb1aa0842926458e63faa4f44c7" +source = "git+https://github.com/servo/stylo?rev=cc499a88513045823fc66c2b67492271023d98b2#cc499a88513045823fc66c2b67492271023d98b2" dependencies = [ "darling", "proc-macro2", @@ -12832,17 +12830,6 @@ dependencies = [ "thiserror 2.0.20", ] -[[package]] -name = "turboshake" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f892c6904b0bd5a9241eac848347abcbbbd2b9f3892bad23ac3e6efab8d6f06a" -dependencies = [ - "digest 0.11.3", - "keccak 0.2.1", - "sponge-cursor", -] - [[package]] name = "typenum" version = "1.20.1" @@ -12987,7 +12974,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df16f50ef4cc145211879a3867ba757076b25dfee812040dcb0658bd9ae7904b" dependencies = [ - "icu_properties 2.2.0", + "icu_properties 2.3.0", "regex", "serde", "url", @@ -13041,9 +13028,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.24.0" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" +checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -13331,9 +13318,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016ccf01d1c58b6f8999612813e17c9b2390f7d70671428869913310f83f54b8" +checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078" dependencies = [ "cc", "downcast-rs", @@ -14534,9 +14521,9 @@ dependencies = [ [[package]] name = "writeable" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "ws_stream_wasm" @@ -14872,14 +14859,14 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", "yoke 0.8.3", "zerofrom", - "zerovec 0.11.6", + "zerovec 0.11.7", ] [[package]] @@ -14895,14 +14882,14 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.6" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +checksum = "94b5c6b5976d66c1d703c4fd17d3f5e43c8cedaacf604961b171adc7130896d8" dependencies = [ "serde", "yoke 0.8.3", "zerofrom", - "zerovec-derive 0.11.3", + "zerovec-derive 0.11.4", ] [[package]] @@ -14918,13 +14905,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +checksum = "47402523226a02bfe5230160dc3ccc089aa6f6f19e7fcbb4e6f824bbb1b4aa62" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 623c26c..57961af 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -141,6 +141,7 @@ jstraceable_derive = { package = "servo-jstraceable-derive", version = "0.4.0", keyboard-types = { version = "0.8.3", features = ["serde", "webdriver"] } kurbo = { version = "0.13.1", features = ["euclid"] } k12 = "0.5" +keccak = "0.2" layout = { package = "servo-layout", version = "0.4.0", path = "source/components/layout" } layout_api = { package = "servo-layout-api", path = "source/components/shared/layout" } libc = "0.2" @@ -225,7 +226,7 @@ script_webgpu = { package = "servo-script-webgpu", version = "=0.4.0", path = "s script_traits = { package = "servo-script-traits", path = "source/components/shared/script" } sea-query = { version = "1.0.1", default-features = false, features = ["backend-sqlite", "derive"] } sea-query-rusqlite = "0.8.0" -selectors = { git = "https://github.com/servo/stylo", rev = "f6d1d525db9a7fb1aa0842926458e63faa4f44c7" } +selectors = { git = "https://github.com/servo/stylo", rev = "cc499a88513045823fc66c2b67492271023d98b2" } seq-macro = "0.3.6" serde = "1.0.228" serde_bytes = "0.11" @@ -265,7 +266,7 @@ servo-wakelock = { version = "0.4.0", path = "source/components/wakelock" } servo-webvtt = { version = "0.4.0", path = "source/components/webvtt" } servo_allocator = { package = "servo-allocator", version = "0.4.0", path = "source/components/allocator" } servo-tracing = { path = "source/components/servo_tracing" } -servo_arc = { git = "https://github.com/servo/stylo", rev = "f6d1d525db9a7fb1aa0842926458e63faa4f44c7" } +servo_arc = { git = "https://github.com/servo/stylo", rev = "cc499a88513045823fc66c2b67492271023d98b2" } servo-url = { version = "0.4.0", path = "source/components/url" } sha1 = "0.11" sha2 = "0.11" @@ -273,17 +274,18 @@ sha3 = "0.10" speexdsp-resampler = "0.1.0" skrifa = "0.44.0" smallvec = { version = "1.15", features = ["serde", "union"] } +sponge-cursor = "0.1" storage = { package = "servo-storage", version = "0.4.0", path = "source/components/storage" } storage_traits = { package = "servo-storage-traits", path = "source/components/shared/storage" } string_cache = "0.9" strum = { version = "0.27", features = ["derive"] } -stylo = { git = "https://github.com/servo/stylo", rev = "f6d1d525db9a7fb1aa0842926458e63faa4f44c7" } -stylo_atoms = { git = "https://github.com/servo/stylo", rev = "f6d1d525db9a7fb1aa0842926458e63faa4f44c7" } -stylo_config = { git = "https://github.com/servo/stylo", rev = "f6d1d525db9a7fb1aa0842926458e63faa4f44c7" } -stylo_dom = { git = "https://github.com/servo/stylo", rev = "f6d1d525db9a7fb1aa0842926458e63faa4f44c7" } -stylo_malloc_size_of = { git = "https://github.com/servo/stylo", rev = "f6d1d525db9a7fb1aa0842926458e63faa4f44c7" } -stylo_static_prefs = { git = "https://github.com/servo/stylo", rev = "f6d1d525db9a7fb1aa0842926458e63faa4f44c7" } -stylo_traits = { git = "https://github.com/servo/stylo", rev = "f6d1d525db9a7fb1aa0842926458e63faa4f44c7" } +stylo = { git = "https://github.com/servo/stylo", rev = "cc499a88513045823fc66c2b67492271023d98b2" } +stylo_atoms = { git = "https://github.com/servo/stylo", rev = "cc499a88513045823fc66c2b67492271023d98b2" } +stylo_config = { git = "https://github.com/servo/stylo", rev = "cc499a88513045823fc66c2b67492271023d98b2" } +stylo_dom = { git = "https://github.com/servo/stylo", rev = "cc499a88513045823fc66c2b67492271023d98b2" } +stylo_malloc_size_of = { git = "https://github.com/servo/stylo", rev = "cc499a88513045823fc66c2b67492271023d98b2" } +stylo_static_prefs = { git = "https://github.com/servo/stylo", rev = "cc499a88513045823fc66c2b67492271023d98b2" } +stylo_traits = { git = "https://github.com/servo/stylo", rev = "cc499a88513045823fc66c2b67492271023d98b2" } surfman = { version = "0.13.0", features = ["chains"] } swapper = "0.1" syn = { version = "2", default-features = false, features = ["clone-impls", "derive", "parsing"] } diff --git a/forkme.lock b/forkme.lock index 5efe070..19e4594 100644 --- a/forkme.lock +++ b/forkme.lock @@ -1 +1 @@ -22b7b75ba42474a17ff2cabf492faae181a44e95 +0be8e7b73fc931ace1eeb5803648365b38722478 diff --git a/patches/Cargo.lock.patch b/patches/Cargo.lock.patch index 30fe386..3552aa4 100644 --- a/patches/Cargo.lock.patch +++ b/patches/Cargo.lock.patch @@ -609,7 +609,7 @@ "zeroize", ] -@@ -7680,6 +8084,18 @@ +@@ -7674,6 +8078,18 @@ ] [[package]] @@ -628,7 +628,7 @@ name = "serde_json" version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -8023,6 +8439,7 @@ +@@ -8017,6 +8433,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", -@@ -8049,6 +8466,8 @@ +@@ -8043,6 +8460,8 @@ "servo-webxr-api", "stylo", "stylo_traits", @@ -645,7 +645,7 @@ "tracing", ] -@@ -8691,6 +9110,7 @@ +@@ -8686,6 +9105,7 @@ name = "servo-net" version = "0.5.0" dependencies = [ @@ -653,7 +653,7 @@ "async-compression", "async-recursion", "async-tungstenite", -@@ -8725,6 +9145,7 @@ +@@ -8721,6 +9141,7 @@ "quick_cache", "rand 0.10.2", "regex", @@ -661,7 +661,7 @@ "resvg", "rusqlite", "rustc-hash 2.1.3", -@@ -8734,9 +9155,11 @@ +@@ -8730,9 +9151,11 @@ "sea-query", "sea-query-rusqlite", "serde", @@ -673,15 +673,15 @@ "servo-devtools-traits", "servo-embedder-traits", "servo-fonts", -@@ -8789,6 +9212,7 @@ - "rustc-hash 2.1.3", +@@ -8786,6 +9209,7 @@ "rustls-pki-types", "serde", + "serde_bytes", + "serde_json", "servo-base", "servo-config", "servo-default-resources", -@@ -8800,8 +9224,10 @@ +@@ -8797,8 +9221,10 @@ "servo-profile-traits", "servo-url", "servo_arc", @@ -692,7 +692,7 @@ "url", "uuid", "webrender_api", -@@ -9417,6 +9843,7 @@ +@@ -9414,6 +9840,7 @@ "bpaf", "cc", "cfg-if", @@ -700,7 +700,7 @@ "crossbeam-channel", "dirs", "dpi", -@@ -9431,6 +9858,7 @@ +@@ -9428,6 +9855,7 @@ "headers", "hilog", "hitrace", @@ -708,7 +708,7 @@ "image", "ipc-channel", "jni 0.22.4", -@@ -9453,6 +9881,7 @@ +@@ -9450,6 +9878,7 @@ "ohos-window-sys", "raw-window-handle", "rustls", @@ -716,7 +716,7 @@ "serde_json", "servo", "servo-allocator", -@@ -9459,6 +9888,7 @@ +@@ -9456,6 +9885,7 @@ "servo-base", "servo-webdriver-server", "signal-hook-registry", @@ -724,7 +724,7 @@ "surfman", "tokio", "tracing", -@@ -10105,6 +10535,9 @@ +@@ -10102,6 +10532,9 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" @@ -734,7 +734,7 @@ [[package]] name = "synstructure" -@@ -10139,6 +10572,27 @@ +@@ -10136,6 +10569,27 @@ ] [[package]] @@ -762,7 +762,7 @@ name = "system-deps" version = "7.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10164,6 +10618,12 @@ +@@ -10161,6 +10615,12 @@ ] [[package]] @@ -775,7 +775,7 @@ name = "tar" version = "0.4.46" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10481,6 +10941,16 @@ +@@ -10478,6 +10938,16 @@ ] [[package]] @@ -792,7 +792,7 @@ name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10583,11 +11053,30 @@ +@@ -10580,11 +11050,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" -@@ -10912,6 +11401,12 @@ +@@ -10898,6 +11387,12 @@ ] [[package]] @@ -836,7 +836,7 @@ name = "urlpattern" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -12032,6 +12527,17 @@ +@@ -12018,6 +12513,17 @@ ] [[package]] diff --git a/patches/components/constellation/Cargo.toml.patch b/patches/components/constellation/Cargo.toml.patch index 0aeb1a3..f36e2c3 100644 --- a/patches/components/constellation/Cargo.toml.patch +++ b/patches/components/constellation/Cargo.toml.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -29,6 +29,8 @@ +@@ -30,6 +30,8 @@ accesskit = { workspace = true } backtrace = { workspace = true } base64 = { workspace = true } @@ -9,7 +9,7 @@ content-security-policy = { workspace = true } crossbeam-channel = { workspace = true } devtools_traits = { workspace = true } -@@ -36,6 +38,9 @@ +@@ -37,6 +39,9 @@ euclid = { workspace = true } fonts = { workspace = true } ipc-channel = { workspace = true } @@ -19,7 +19,7 @@ keyboard-types = { workspace = true } layout_api = { workspace = true } log = { workspace = true } -@@ -42,13 +47,17 @@ +@@ -43,13 +48,17 @@ media = { workspace = true } net = { workspace = true } net_traits = { workspace = true } @@ -37,7 +37,7 @@ servo-background-hang-monitor = { workspace = true } servo-background-hang-monitor-api = { workspace = true } servo-base = { workspace = true } -@@ -62,10 +71,16 @@ +@@ -63,10 +72,16 @@ storage_traits = { workspace = true } stylo = { workspace = true } stylo_traits = { workspace = true } diff --git a/patches/components/constellation/constellation.rs.patch b/patches/components/constellation/constellation.rs.patch index 8ba3c20..8074c4f 100644 --- a/patches/components/constellation/constellation.rs.patch +++ b/patches/components/constellation/constellation.rs.patch @@ -36,8 +36,8 @@ }; use euclid::Size2D; use euclid::default::Size2D as UntypedSize2D; -@@ -160,14 +163,15 @@ - use servo_canvas_traits::webgl::WebGLThreads; +@@ -159,14 +162,15 @@ + use servo_canvas_traits::canvas::{CanvasId, CanvasMsg}; use servo_config::{opts, pref}; use servo_constellation_traits::{ - AuxiliaryWebViewCreationRequest, AuxiliaryWebViewCreationResponse, ConstellationInterest, @@ -60,7 +60,7 @@ }; use servo_url::{Host, ImmutableOrigin, ServoUrl}; use storage_traits::StorageThreads; -@@ -182,6 +186,7 @@ +@@ -181,6 +185,7 @@ use webgpu_traits::{WebGPU, WebGPURequest}; use super::embedder::ConstellationToEmbedderMsg; @@ -68,7 +68,7 @@ use crate::broadcastchannel::BroadcastChannels; use crate::browsingcontext::{ AllBrowsingContextsIterator, BrowsingContext, FullyActiveBrowsingContextsIterator, -@@ -188,11 +193,18 @@ +@@ -187,11 +192,18 @@ NewBrowsingContextInfo, }; use crate::constellation_webview::ConstellationWebView; @@ -87,7 +87,7 @@ struct PendingApprovalNavigation { load_data: LoadData, -@@ -223,6 +235,12 @@ +@@ -222,6 +234,12 @@ /// While a completion failed, another global requested to complete the transfer. /// We are still buffering messages, and awaiting the return of the buffer from the global who failed. CompletionRequested(MessagePortRouterId, VecDeque), @@ -162,7 +162,7 @@ } /// State needed to construct a constellation. -@@ -596,6 +662,9 @@ +@@ -597,6 +663,9 @@ /// The wake lock provider for acquiring and releasing OS-level screen wake locks. pub wake_lock_provider: Box, @@ -172,7 +172,7 @@ } /// When we are exiting a pipeline, we can either force exiting or not. A normal exit -@@ -679,6 +748,11 @@ +@@ -680,6 +749,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, -@@ -700,7 +774,7 @@ +@@ -701,7 +775,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, -@@ -738,6 +812,7 @@ +@@ -740,6 +814,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, -@@ -754,6 +829,23 @@ +@@ -756,6 +831,23 @@ pending_viewport_changes: Default::default(), screenshot_readiness_requests: Vec::new(), user_contents_for_manager_id: Default::default(), @@ -225,7 +225,7 @@ }; constellation.run(); -@@ -779,6 +871,18 @@ +@@ -781,6 +873,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()); } -@@ -1058,6 +1162,11 @@ +@@ -1061,6 +1165,11 @@ .get(&webview_id) .and_then(|webview| webview.user_content_manager_id); @@ -256,10 +256,10 @@ let new_pipeline_info = NewPipelineInfo { parent_info: parent_pipeline_id, new_pipeline_id, -@@ -1069,6 +1178,13 @@ - user_content_manager_id, - theme, +@@ -1073,6 +1182,13 @@ + embedder_theme: theme, target_snapshot_params, + frame_name: name, + // Only set is_embedded_webview=true if this browsing context IS the embedded webview itself, + // not for regular iframes inside the embedded webview that happen to share the same webview_id + is_embedded_webview: self @@ -270,7 +270,7 @@ }; let pipeline = match Pipeline::spawn(new_pipeline_info, event_loop, self, throttled) { Ok(pipeline) => pipeline, -@@ -1234,6 +1350,9 @@ +@@ -1238,6 +1354,9 @@ Script((WebViewId, PipelineId, ScriptToConstellationMessage)), BackgroundHangMonitor(HangAlert), Embedder(EmbedderToConstellationMessage), @@ -280,7 +280,7 @@ RemoveProcess(usize), } // Get one incoming request. -@@ -1253,6 +1372,28 @@ +@@ -1257,6 +1376,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 = { -@@ -1279,9 +1420,30 @@ +@@ -1283,9 +1424,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)) }, -@@ -1304,10 +1466,67 @@ +@@ -1308,10 +1470,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; -@@ -1399,6 +1618,15 @@ +@@ -1403,6 +1622,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) }, -@@ -1417,6 +1645,16 @@ +@@ -1421,6 +1649,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) }, -@@ -1466,11 +1704,7 @@ +@@ -1470,11 +1708,7 @@ } }, EmbedderToConstellationMessage::PreferencesUpdated(updates) => { @@ -455,7 +455,7 @@ let _ = event_loop.send(ScriptThreadMessage::PreferencesUpdated( updates .iter() -@@ -1497,6 +1731,18 @@ +@@ -1501,6 +1735,18 @@ EmbedderToConstellationMessage::SetAccessibilityActive(webview_id, active) => { self.set_accessibility_active(webview_id, active); }, @@ -474,7 +474,7 @@ } } -@@ -1694,7 +1940,13 @@ +@@ -1698,7 +1944,13 @@ return warn!("Attempt to add channel name from an unexpected origin."); } self.broadcast_channels @@ -489,7 +489,7 @@ }, ScriptToConstellationMessage::RemoveBroadcastChannelNameInRouter( router_id, -@@ -1708,7 +1960,13 @@ +@@ -1712,7 +1964,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 -@@ -1720,6 +1978,12 @@ +@@ -1724,6 +1982,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) -@@ -1729,8 +1993,15 @@ +@@ -1733,8 +1997,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); -@@ -1750,6 +2021,12 @@ +@@ -1754,6 +2025,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) }, -@@ -1821,7 +2098,7 @@ +@@ -1825,7 +2102,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"); } -@@ -1946,6 +2223,12 @@ +@@ -1950,6 +2227,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) { -@@ -1971,6 +2254,29 @@ +@@ -1975,6 +2258,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 -@@ -1989,8 +2295,13 @@ +@@ -1993,8 +2299,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 -@@ -2063,9 +2374,1088 @@ +@@ -2067,9 +2378,1088 @@ } }, }, @@ -878,7 +878,7 @@ + .broadcast_channels + .open_channels() + .into_iter() -+ .map(|(origin, name)| (origin.ascii_serialization(), name)) ++ .map(|(origin, name)| (origin.ascii_serialization().into_owned(), name)) + .collect(); + if !channels.is_empty() { + self.pairing.sync_channels_to_peer(&id, &channels); @@ -1392,7 +1392,7 @@ + .broadcast_channels + .open_channels() + .into_iter() -+ .map(|(origin, name)| (origin.ascii_serialization(), name)) ++ .map(|(origin, name)| (origin.ascii_serialization().into_owned(), name)) + .collect(); + if !channels.is_empty() { + self.pairing.sync_channels_to_peer(from, &channels); @@ -1682,7 +1682,7 @@ + .broadcast_channels + .open_channels() + .into_iter() -+ .map(|(origin, name)| (origin.ascii_serialization(), name)) ++ .map(|(origin, name)| (origin.ascii_serialization().into_owned(), name)) + .collect(); + debug!( + "[P2P BC] Peer {id} connected/discovered, {} open channels to sync", @@ -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 -@@ -2382,6 +3772,55 @@ +@@ -2386,6 +3776,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 @@ } } -@@ -3195,6 +4634,101 @@ +@@ -3200,6 +4639,101 @@ ); } @@ -1861,7 +1861,7 @@ fn forward_input_event( &mut self, webview_id: WebViewId, -@@ -3214,6 +4748,66 @@ +@@ -3219,6 +4753,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:?}"); -@@ -3316,6 +4910,40 @@ +@@ -3322,6 +4916,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 = -@@ -3592,8 +5220,27 @@ +@@ -3600,8 +5228,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); -@@ -3692,6 +5339,402 @@ +@@ -3700,6 +5347,403 @@ }); } @@ -2126,8 +2126,9 @@ + load_data, + viewport_details, + user_content_manager_id, -+ theme, ++ embedder_theme: theme, + target_snapshot_params: TargetSnapshotParams::default(), ++ frame_name: Default::default(), + is_embedded_webview: true, + hide_focus, + }; @@ -2400,7 +2401,7 @@ #[servo_tracing::instrument(skip_all)] fn handle_refresh_cursor(&self, pipeline_id: PipelineId) { let Some(pipeline) = self.pipelines.get(&pipeline_id) else { -@@ -4529,7 +6572,7 @@ +@@ -4539,7 +6583,7 @@ }, }; @@ -2409,7 +2410,7 @@ match self.browsing_contexts.get_mut(&browsing_context_id) { Some(browsing_context) => { let old_pipeline_id = browsing_context.pipeline_id; -@@ -4538,6 +6581,7 @@ +@@ -4548,6 +6592,7 @@ old_pipeline_id, browsing_context.parent_pipeline_id, browsing_context.webview_id, @@ -2417,7 +2418,7 @@ ) }, None => { -@@ -4547,6 +6591,15 @@ +@@ -4557,6 +6602,15 @@ self.unload_document(old_pipeline_id); @@ -2433,7 +2434,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()); -@@ -5115,7 +7168,7 @@ +@@ -5125,7 +7179,7 @@ } #[servo_tracing::instrument(skip_all)] @@ -2442,7 +2443,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. -@@ -5227,9 +7280,22 @@ +@@ -5237,9 +7291,22 @@ self.constellation_to_embedder_proxy .send(ConstellationToEmbedderMsg::HistoryChanged( webview_id, @@ -2466,7 +2467,7 @@ } #[servo_tracing::instrument(skip_all)] -@@ -5248,7 +7314,7 @@ +@@ -5258,7 +7325,7 @@ webview.focused_browsing_context_id = change.browsing_context_id; } @@ -2475,7 +2476,7 @@ match self.browsing_contexts.get_mut(&change.browsing_context_id) { Some(browsing_context) => { debug!("Adding pipeline to existing browsing context."); -@@ -5255,11 +7321,15 @@ +@@ -5265,11 +7332,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 +2494,7 @@ }, }; -@@ -5267,6 +7337,18 @@ +@@ -5277,6 +7348,18 @@ self.unload_document(old_pipeline_id); } diff --git a/patches/components/constellation/webtasks.rs.patch b/patches/components/constellation/webtasks.rs.patch index e1247d1..c2baf32 100644 --- a/patches/components/constellation/webtasks.rs.patch +++ b/patches/components/constellation/webtasks.rs.patch @@ -212,7 +212,7 @@ + .iter() + .enumerate() + .map(|(i, p)| { -+ let origin = p.href.origin().ascii_serialization(); ++ let origin = p.href.origin().ascii_serialization().to_string(); + TaskProviderInfo { + id: format!("{}:{}", task_name, i), + title: p.title.clone(), diff --git a/patches/components/layout/display_list/mod.rs.patch b/patches/components/layout/display_list/mod.rs.patch index 7ccb3a8..7e39a7b 100644 --- a/patches/components/layout/display_list/mod.rs.patch +++ b/patches/components/layout/display_list/mod.rs.patch @@ -91,9 +91,9 @@ PrimitiveFlags::default(), (0, 0), /* tag */ ); -@@ -236,6 +274,11 @@ - PaintTraversal::traverse(&stacking_context_tree.root_stacking_context, &mut builder); +@@ -237,6 +275,11 @@ builder.paint_dom_inspector_highlight(); + builder.paint_timing_handler.compute_new_lcp_candidate(); + // Pop the zoom reference frame if we pushed one + if page_zoom_for_rendering.is_some() { @@ -103,7 +103,7 @@ webrender_display_list_builder.end().1 } -@@ -270,15 +313,40 @@ +@@ -271,15 +314,40 @@ } pub(crate) fn add_all_spatial_nodes(&mut self) { @@ -149,7 +149,7 @@ for node in scroll_tree.nodes.iter().skip(2) { let parent_scroll_node_id = node .parent -@@ -1599,6 +1667,34 @@ +@@ -1600,6 +1668,34 @@ .translate(self.containing_block_origin.to_vector()) .to_webrender(), ); diff --git a/patches/components/net/Cargo.toml.patch b/patches/components/net/Cargo.toml.patch index 6573250..ee83657 100644 --- a/patches/components/net/Cargo.toml.patch +++ b/patches/components/net/Cargo.toml.patch @@ -1,10 +1,11 @@ --- original +++ modified -@@ -21,12 +21,15 @@ +@@ -21,13 +21,16 @@ tracing = ["dep:tracing"] [dependencies] +anyhow = "1.0" + aws-lc-rs = { workspace = true } async-compression = { workspace = true, features = ["brotli", "gzip", "tokio", "zlib", "zstd"] } async-recursion = { workspace = true } async-tungstenite = { workspace = true } @@ -16,7 +17,7 @@ content-security-policy = { workspace = true } cookie = { workspace = true } crossbeam-channel = { workspace = true } -@@ -47,6 +50,7 @@ +@@ -48,6 +51,7 @@ hyper_serde = { workspace = true } imsz = { workspace = true } ipc-channel = { workspace = true } @@ -24,7 +25,7 @@ itertools = { workspace = true } log = { workspace = true } malloc_size_of = { workspace = true } -@@ -63,23 +67,28 @@ +@@ -64,22 +68,28 @@ quick_cache = { workspace = true, features = ["ahash"] } rand = { workspace = true } regex = { workspace = true } @@ -49,9 +50,9 @@ -servo_arc = { workspace = true } sea-query = { workspace = true } sea-query-rusqlite = { workspace = true } - sha2 = { workspace = true } ++sha2 = { workspace = true } smallvec = { workspace = true } +sync_wrapper = "1.0" + tempfile = { workspace = true } time = { workspace = true } tokio = { workspace = true, features = ["fs", "macros", "rt-multi-thread", "sync"] } - tokio-rustls = { workspace = true } diff --git a/patches/components/net/disk_cache.rs.patch b/patches/components/net/disk_cache.rs.patch index fd6adf6..8b3e4c7 100644 --- a/patches/components/net/disk_cache.rs.patch +++ b/patches/components/net/disk_cache.rs.patch @@ -1,8 +1,8 @@ --- original +++ modified -@@ -4,12 +4,14 @@ - +@@ -5,12 +5,14 @@ use std::collections::VecDeque; + use std::path::PathBuf; use std::sync::Arc; -use std::time::{SystemTime, UNIX_EPOCH}; +use std::time::{Duration, SystemTime, UNIX_EPOCH}; @@ -17,7 +17,7 @@ use sea_query_rusqlite::RusqliteBinder; use servo_config::pref; use servo_url::ServoUrl; -@@ -100,7 +102,18 @@ +@@ -126,7 +128,18 @@ return (None, MemoryCacheLifecycle::empty()); }; @@ -37,7 +37,7 @@ let query = Table::create() .table(DiskCacheTable::Table) .if_not_exists() -@@ -126,6 +139,8 @@ +@@ -152,6 +165,8 @@ let (query, values) = Query::select() .columns([DiskCacheTable::Key, DiskCacheTable::Size]) .from(DiskCacheTable::Table) @@ -46,7 +46,7 @@ .build_rusqlite(SqliteQueryBuilder); let (entries, size) = { -@@ -163,59 +178,45 @@ +@@ -191,59 +206,45 @@ } } @@ -140,7 +140,7 @@ }; let _span = profile_traits::trace_span!("deserialize cache request").entered(); let Ok(value) = postcard::from_bytes(&bytes) else { -@@ -229,12 +230,29 @@ +@@ -257,12 +258,29 @@ /// Stores a [`CacheEntry`]` to disk. #[servo_tracing::instrument(skip(self))] @@ -172,7 +172,7 @@ let Ok(data) = postcard::to_stdvec(&*data_to_serialize) else { error!("Could not deserialize value"); return; -@@ -241,7 +259,7 @@ +@@ -269,7 +287,7 @@ }; { @@ -181,7 +181,7 @@ let data_size = data.len(); let timestamp = SystemTime::now() -@@ -260,7 +278,6 @@ +@@ -288,7 +306,6 @@ OnConflict::column(DiskCacheTable::Key) .update_columns([ DiskCacheTable::Data, @@ -189,7 +189,7 @@ DiskCacheTable::Size, DiskCacheTable::InsertionTimestamp, ]) -@@ -276,30 +293,44 @@ +@@ -304,30 +321,44 @@ if let Err(e) = inner.db.execute(query.as_str(), &*params.as_params()) { error!("Could not insert cache data. Error {}", e); @@ -247,7 +247,7 @@ let keys_ref = keys_to_delete.iter().map(|key| key.as_ref()); let (query, values) = Query::delete() .from_table(DiskCacheTable::Table) -@@ -315,28 +346,6 @@ +@@ -343,28 +374,6 @@ } } diff --git a/patches/components/net/http_loader.rs.patch b/patches/components/net/http_loader.rs.patch index 12d8f4d..aed44ed 100644 --- a/patches/components/net/http_loader.rs.patch +++ b/patches/components/net/http_loader.rs.patch @@ -66,7 +66,7 @@ pub(crate) fn memory_reports(&self, suffix: &str, ops: &mut MallocSizeOfOps) -> Vec { vec![ Report { -@@ -160,6 +182,31 @@ +@@ -170,6 +192,31 @@ )); receiver.await.ok()? } diff --git a/patches/components/net/protocols/atproto/protocol.rs.patch b/patches/components/net/protocols/atproto/protocol.rs.patch index 2036fcd..7d4b425 100644 --- a/patches/components/net/protocols/atproto/protocol.rs.patch +++ b/patches/components/net/protocols/atproto/protocol.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -0,0 +1,337 @@ +@@ -0,0 +1,341 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +use std::future::{self, Future}; @@ -148,7 +148,11 @@ + .atproto_session + .read() + .as_ref() -+ .is_some_and(|session| session.authorized_origins.contains(&origin_str)) ++ .is_some_and(|session| { ++ session ++ .authorized_origins ++ .contains(&origin_str.into_owned()) ++ }) + } + }, + _ => false, diff --git a/patches/components/net/resource_thread.rs.patch b/patches/components/net/resource_thread.rs.patch index cfc29b8..e13c1e5 100644 --- a/patches/components/net/resource_thread.rs.patch +++ b/patches/components/net/resource_thread.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -25,10 +25,10 @@ +@@ -26,10 +26,10 @@ use net_traits::request::{Destination, PreloadEntry, PreloadId, RequestBuilder, RequestId}; use net_traits::response::{Response, ResponseInit}; use net_traits::{ @@ -15,7 +15,7 @@ }; use parking_lot::{Mutex, RwLock}; use profile_traits::mem::{ -@@ -69,6 +69,7 @@ +@@ -70,6 +70,7 @@ use crate::http_loader::{HttpState, http_redirect_fetch}; use crate::protocols::ProtocolRegistry; use crate::request_interceptor::RequestInterceptor; @@ -23,7 +23,7 @@ use crate::websocket_loader::create_handshake_request; /// Load a file with CA certificate and produce a RootCertStore with the results. -@@ -207,14 +208,19 @@ +@@ -208,14 +209,19 @@ let mut hsts_list = HstsList::default(); let mut auth_cache = AuthCache::default(); let mut cookie_jar = CookieStorage::new(150); @@ -43,7 +43,7 @@ hsts_list: RwLock::new(hsts_list), cookie_jar: RwLock::new(cookie_jar), auth_cache: RwLock::new(auth_cache), -@@ -227,10 +233,13 @@ +@@ -228,10 +234,13 @@ )), override_manager, embedder_proxy: embedder_proxy.clone(), @@ -57,7 +57,7 @@ hsts_list: RwLock::new(HstsList::default()), cookie_jar: RwLock::new(CookieStorage::new(150)), auth_cache: RwLock::new(AuthCache::default()), -@@ -243,6 +252,8 @@ +@@ -244,6 +253,8 @@ )), override_manager, embedder_proxy, @@ -66,7 +66,7 @@ }; (Arc::new(http_state), Arc::new(private_http_state)) -@@ -676,9 +687,19 @@ +@@ -677,9 +688,19 @@ return false; }, // Ignore these messages as they are only sent on very specific channels. diff --git a/patches/components/paint/Cargo.toml.patch b/patches/components/paint/Cargo.toml.patch index 8b9e0e5..2007a33 100644 --- a/patches/components/paint/Cargo.toml.patch +++ b/patches/components/paint/Cargo.toml.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -35,6 +35,7 @@ +@@ -36,6 +36,7 @@ malloc_size_of = { workspace = true } media = { workspace = true } paint_api = { workspace = true } diff --git a/patches/components/paint/paint.rs.patch b/patches/components/paint/paint.rs.patch index 6fbfb9c..23cd92a 100644 --- a/patches/components/paint/paint.rs.patch +++ b/patches/components/paint/paint.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -14,7 +14,8 @@ +@@ -15,14 +15,15 @@ use crossbeam_channel::Sender; use dpi::PhysicalSize; use embedder_traits::{ @@ -10,16 +10,24 @@ Scroll, ShutdownState, ViewportDetails, WebViewPoint, WebViewRect, }; use euclid::{Scale, Size2D}; -@@ -30,7 +31,7 @@ + use image::RgbaImage; +-use log::debug; + #[cfg(feature = "webgl")] + use log::warn; ++use log::{debug, warn}; + use paint_api::rendering_context::RenderingContext; + use paint_api::{ + PaintMessage, PaintProxy, PainterSurfmanDetails, PainterSurfmanDetailsMap, +@@ -33,7 +34,7 @@ }; use profile_traits::path; use profile_traits::time::{self as profile_time}; -use servo_base::generic_channel::{self, GenericSender, RoutedReceiver}; +use servo_base::generic_channel::{self, GenericCallback, GenericSender, RoutedReceiver}; use servo_base::id::{PainterId, PipelineId, WebViewId}; + #[cfg(feature = "webgl")] use servo_canvas_traits::webgl::{WebGLContextId, WebGLThreads}; - use servo_config::pref; -@@ -556,6 +557,44 @@ +@@ -592,6 +593,44 @@ painter.enable_lcp_calculation(&webview_id); } }, @@ -64,7 +72,7 @@ } } -@@ -613,6 +652,70 @@ +@@ -649,6 +688,70 @@ sender.send(ProcessReports::new(reports)); } @@ -135,7 +143,7 @@ /// Handle messages sent to `Paint` during the shutdown process. In general, /// the things `Paint` can do in this state are limited. It's very important to /// answer any synchronous messages though as other threads might be waiting on the -@@ -765,6 +868,9 @@ +@@ -801,6 +904,9 @@ #[cfg(feature = "webxr")] self.webxr_main_thread.borrow_mut().run_one_frame(); @@ -145,7 +153,7 @@ for painter in &self.painters { painter.borrow_mut().perform_updates(); } -@@ -818,6 +924,10 @@ +@@ -854,6 +960,10 @@ if self.shutdown_state() != ShutdownState::NotShuttingDown { return; } diff --git a/patches/components/paint/painter.rs.patch b/patches/components/paint/painter.rs.patch index 61d2693..0a3d2ad 100644 --- a/patches/components/paint/painter.rs.patch +++ b/patches/components/paint/painter.rs.patch @@ -19,7 +19,7 @@ }; use webrender_api::{ self, BuiltDisplayList, BuiltDisplayListDescriptor, ColorF, DirtyRect, DisplayListPayload, -@@ -83,8 +84,15 @@ +@@ -84,8 +85,15 @@ pub(crate) painter_id: PainterId, /// Our [`WebViewRenderer`]s, one for every `WebView`. @@ -36,7 +36,7 @@ /// Tracks whether or not the view needs to be repainted. pub(crate) needs_repaint: Cell, -@@ -276,6 +284,7 @@ +@@ -280,6 +288,7 @@ painter_id, embedder_to_constellation_sender, webview_renderers: Default::default(), @@ -44,7 +44,7 @@ rendering_context, needs_repaint: Cell::default(), pending_frames: Default::default(), -@@ -300,20 +309,37 @@ +@@ -304,20 +313,37 @@ painter } @@ -93,7 +93,7 @@ if let Some(colors) = self.web_content_animator.update(&self.webview_renderers) { let mut transaction = Transaction::new(); -@@ -326,8 +352,106 @@ +@@ -330,8 +356,106 @@ self.generate_frame(&mut transaction, RenderReasons::ANIMATED_PROPERTY); self.send_transaction(transaction); } @@ -200,7 +200,7 @@ #[track_caller] fn assert_no_gl_error(&self) { debug_assert_eq!(self.webrender_gl.get_error(), gleam::gl::NO_ERROR); -@@ -349,6 +473,20 @@ +@@ -353,6 +477,20 @@ self.webview_renderers.get(&webview_id) } @@ -221,7 +221,7 @@ pub(crate) fn webview_renderer_mut( &mut self, webview_id: WebViewId, -@@ -620,7 +758,16 @@ +@@ -624,7 +762,16 @@ let root_clip_id = builder.define_clip_rect(root_reference_frame, viewport_rect); let clip_chain_id = builder.define_clip_chain(None, [root_clip_id]); @@ -238,7 +238,7 @@ if webview_renderer.hidden() { continue; } -@@ -680,7 +827,7 @@ +@@ -684,7 +831,7 @@ /// Set the root pipeline for our WebRender scene to a display list that consists of an iframe /// for each visible top-level browsing context, applying a transformation on the root for /// pinch zoom, page zoom, and HiDPI scaling. @@ -247,7 +247,7 @@ let mut transaction = Transaction::new(); self.send_root_pipeline_display_list_in_transaction(&mut transaction); self.generate_frame(&mut transaction, RenderReasons::SCENE); -@@ -687,6 +834,115 @@ +@@ -691,6 +838,115 @@ self.send_transaction(transaction); } @@ -363,7 +363,7 @@ /// Update the given transaction with the scroll offsets of all active scroll nodes in /// the WebRender scene. This is necessary because WebRender does not preserve scroll /// offsets between scroll tree modifications. If a display list could potentially -@@ -769,7 +1025,15 @@ +@@ -773,7 +1029,15 @@ } pub(crate) fn decrement_pending_frames(&self) { @@ -380,7 +380,7 @@ } pub(crate) fn report_memory(&self) -> MemoryReport { -@@ -816,6 +1080,26 @@ +@@ -820,6 +1084,26 @@ self.send_root_pipeline_display_list(); } @@ -407,7 +407,7 @@ pub(crate) fn set_throttled( &mut self, webview_id: WebViewId, -@@ -1215,15 +1499,23 @@ +@@ -1219,15 +1503,23 @@ webview: Box, viewport_details: ViewportDetails, ) { @@ -435,7 +435,7 @@ } pub(crate) fn remove_webview(&mut self, webview_id: WebViewId) { -@@ -1425,7 +1717,6 @@ +@@ -1429,7 +1721,6 @@ result: InputEventResult, ) { let Some(webview_renderer) = self.webview_renderers.get_mut(&webview_id) else { diff --git a/patches/components/script/Cargo.toml.patch b/patches/components/script/Cargo.toml.patch index 71dd42d..73ecb17 100644 --- a/patches/components/script/Cargo.toml.patch +++ b/patches/components/script/Cargo.toml.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -53,6 +53,7 @@ +@@ -59,6 +59,7 @@ backtrace = { workspace = true } base64 = { workspace = true } base64ct = { workspace = true } diff --git a/patches/components/script/dom/abort/abortsignal.rs.patch b/patches/components/script/dom/abort/abortsignal.rs.patch index 0688142..dea0d12 100644 --- a/patches/components/script/dom/abort/abortsignal.rs.patch +++ b/patches/components/script/dom/abort/abortsignal.rs.patch @@ -7,7 +7,7 @@ +use crate::dom::idledetector::IdleDetector; +use crate::dom::promise::Promise; use crate::dom::readablestream::PipeTo; - use crate::fetch::{DeferredFetchRecordId, FetchContext}; + use crate::fetch::fetch::{DeferredFetchRecordId, FetchContext}; use crate::realms::enter_auto_realm; @@ -53,10 +55,22 @@ ), diff --git a/patches/components/script/dom/document/document.rs.patch b/patches/components/script/dom/document/document.rs.patch index ca1a49b..0237dfc 100644 --- a/patches/components/script/dom/document/document.rs.patch +++ b/patches/components/script/dom/document/document.rs.patch @@ -1,14 +1,14 @@ --- original +++ modified -@@ -25,6 +25,7 @@ - AllowOrDeny, AnimationState, CustomHandlersAutomationMode, EmbedderMsg, Image, LoadStatus, +@@ -26,6 +26,7 @@ + Theme, }; use encoding_rs::{Encoding, UTF_8}; +use euclid::Size2D; use html5ever::{LocalName, QualName, local_name, ns}; use hyper_serde::Serde; use indexmap::IndexSet; -@@ -58,11 +59,14 @@ +@@ -59,11 +60,14 @@ use script_traits::{DocumentActivity, ProgressiveWebMetricType}; use servo_arc::Arc; use servo_base::cross_process_instant::CrossProcessInstant; @@ -25,7 +25,7 @@ use servo_media::{ClientContextId, ServoMedia}; use servo_url::{ImmutableOrigin, MutableOrigin, ServoUrl}; use style::attr::AttrValue; -@@ -93,6 +97,8 @@ +@@ -96,6 +100,8 @@ use crate::dom::bindings::codegen::Bindings::ElementBinding::ScrollLogicalPosition; use crate::dom::bindings::codegen::Bindings::EventBinding::Event_Binding::EventMethods; use crate::dom::bindings::codegen::Bindings::HTMLIFrameElementBinding::HTMLIFrameElement_Binding::HTMLIFrameElementMethods; @@ -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 @@ +@@ -174,6 +180,7 @@ use crate::dom::html::htmlscriptelement::{HTMLScriptElement, ScriptResult}; use crate::dom::html::htmltitleelement::HTMLTitleElement; use crate::dom::htmldetailselement::DetailsNameGroups; @@ -42,7 +42,7 @@ use crate::dom::intersectionobserver::IntersectionObserver; use crate::dom::iterators::ShadowIncluding; use crate::dom::keyboardevent::KeyboardEvent; -@@ -197,7 +204,9 @@ +@@ -202,7 +209,9 @@ use crate::dom::touchevent::TouchEvent as DomTouchEvent; use crate::dom::touchlist::TouchList; use crate::dom::trustedtypes::trustedhtml::TrustedHTML; @@ -53,7 +53,7 @@ use crate::dom::uievent::UIEvent; use crate::dom::window::Window; use crate::dom::window::scrolling_box::{ScrollAxisState, ScrollingBox}; -@@ -218,6 +227,7 @@ +@@ -219,6 +228,7 @@ use crate::tasks::task_manager::TaskManager; use crate::tasks::task_source::TaskSourceName; use crate::timers::{OneshotTimerCallback, OneshotTimers}; @@ -61,7 +61,7 @@ use crate::xpath::parse_expression; #[derive(Clone, Copy, PartialEq)] -@@ -416,6 +426,8 @@ +@@ -417,6 +427,8 @@ applets: MutNullableDom, /// Information about the `` in this [`Document`]. iframes: RefCell, @@ -70,7 +70,7 @@ /// Shared locks used for style attributes, author-origin stylesheets, and user and /// user agent stylesheets in this document. Can be acquired once for accessing many /// objects. This is shared with the owning [`ScriptThread`]. -@@ -582,6 +594,14 @@ +@@ -583,6 +595,14 @@ /// - /// - resize_observers: DomRefCell>>, @@ -85,7 +85,7 @@ /// The set of all fonts loaded by this document. /// fonts: MutNullableDom, -@@ -661,6 +681,9 @@ +@@ -662,6 +682,9 @@ #[no_trace] favicon: RefCell>, @@ -95,7 +95,7 @@ /// All websockets created that are associated with this document. websockets: DOMTracker, -@@ -674,6 +697,18 @@ +@@ -675,6 +698,18 @@ /// Reflect the value of that preferences to prevent paying the cost of a RwLock access. layout_animations_test_enabled: bool, @@ -114,10 +114,10 @@ /// #[no_trace] state_override: DomRefCell>, -@@ -714,6 +749,11 @@ - - /// - history: MutNullableDom, +@@ -719,6 +754,11 @@ + /// Theme specific for this document, set by a meta element + #[no_trace] + theme: Cell>, + + /// Whether spatial navigation is enabled for this document. + /// When enabled, arrow keys move focus to the nearest focusable element @@ -126,7 +126,7 @@ } impl Document { -@@ -941,6 +981,68 @@ +@@ -946,6 +986,68 @@ self.dirty_root.take() } @@ -195,7 +195,7 @@ #[inline] pub(crate) fn loader(&self) -> Ref<'_, DocumentLoader> { self.loader.borrow() -@@ -1012,6 +1114,12 @@ +@@ -1017,6 +1119,12 @@ // Set the document's activity level, reflow if necessary, and suspend or resume timers. self.activity.set(activity); @@ -208,7 +208,7 @@ let media = ServoMedia::get(); let pipeline_id = self.window().pipeline_id(); let client_context_id = -@@ -1025,6 +1133,7 @@ +@@ -1030,6 +1138,7 @@ self.title_changed(); self.notify_embedder_favicon(); @@ -216,7 +216,7 @@ self.dirty_all_nodes(cx.no_gc()); self.window().resume(cx); media.resume(&client_context_id); -@@ -1415,6 +1524,9 @@ +@@ -1420,6 +1529,9 @@ )); self.send_to_embedder(EmbedderMsg::Status(self.webview_id(), None)); update_with_current_instant(&self.navigation_timing.dom_loading); @@ -226,7 +226,7 @@ } }, DocumentReadyState::Complete => { -@@ -1423,6 +1535,9 @@ +@@ -1428,6 +1540,9 @@ self.webview_id(), LoadStatus::Complete, )); @@ -236,7 +236,7 @@ } update_with_current_instant(&self.navigation_timing.dom_complete); }, -@@ -1503,7 +1618,13 @@ +@@ -1508,7 +1623,13 @@ let window = self.window(); if window.is_top_level() { let title = self.title().map(String::from); @@ -251,7 +251,7 @@ } } -@@ -1512,6 +1633,18 @@ +@@ -1517,6 +1638,18 @@ window.send_to_embedder(msg); } @@ -270,7 +270,7 @@ pub(crate) fn dirty_all_nodes(&self, no_gc: &NoGC) { let root = match self.GetDocumentElement() { Some(root) => root, -@@ -2962,6 +3095,17 @@ +@@ -2967,6 +3100,17 @@ self.iframes.borrow_mut() } @@ -288,7 +288,7 @@ pub(crate) fn set_navigation_start(&self, navigation_start: CrossProcessInstant) { self.interactive_time .borrow_mut() -@@ -3248,6 +3392,60 @@ +@@ -3253,6 +3397,60 @@ .push(Dom::from_ref(resize_observer)); } @@ -349,7 +349,7 @@ /// /// pub(crate) fn gather_active_resize_observations_at_depth( -@@ -3834,6 +4032,7 @@ +@@ -3847,6 +4045,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), -@@ -3893,6 +4092,8 @@ +@@ -3906,6 +4105,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, -@@ -3915,10 +4116,12 @@ +@@ -3928,10 +4129,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,15 +379,15 @@ state_override: Default::default(), value_override: Default::default(), default_single_line_container_name: Default::default(), -@@ -3935,6 +4138,7 @@ - )), +@@ -3949,6 +4152,7 @@ image_cache, history: Default::default(), + theme: Default::default(), + spatial_navigation_enabled: Cell::new(false), } } -@@ -4686,6 +4890,33 @@ +@@ -4700,6 +4904,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::() -@@ -4745,10 +4976,8 @@ +@@ -4759,10 +4990,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. -@@ -4994,6 +5223,36 @@ +@@ -5008,6 +5237,36 @@ pub(crate) fn notify_embedder_favicon(&self) { if let Some(ref image) = *self.favicon.borrow() { @@ -471,9 +471,9 @@ self.send_to_embedder(EmbedderMsg::NewFavicon(self.webview_id(), image.clone())); } } -@@ -5072,6 +5331,30 @@ - pub(crate) fn set_iframe_load_in_progress(&self, value: bool) { - self.iframe_load_in_progress.set(value) +@@ -5095,6 +5354,30 @@ + self.theme.set(new_theme); + self.window.refresh_theme(); } + + /// Whether spatial navigation is enabled for this document. diff --git a/patches/components/script/dom/document/document_embedder_controls.rs.patch b/patches/components/script/dom/document/document_embedder_controls.rs.patch index 1e54b07..a345f1b 100644 --- a/patches/components/script/dom/document/document_embedder_controls.rs.patch +++ b/patches/components/script/dom/document/document_embedder_controls.rs.patch @@ -13,7 +13,7 @@ + PermissionFeature, PermissionPromptRequest, SimpleDialogRequest, }; use euclid::{Point2D, Rect, Size2D}; - use js::context::JSContext; + use js::context::{JSContext, NoGC}; @@ -22,8 +23,10 @@ use script_bindings::inheritance::Castable; use script_bindings::root::{Dom, DomRoot}; @@ -272,7 +272,7 @@ + ) + } + - pub(crate) fn show_context_menu(&self, hit_test_result: &HitTestResult) { + pub(crate) fn show_context_menu(&self, no_gc: &NoGC, hit_test_result: &HitTestResult) { { let mut visible_elements = self.visible_elements.borrow_mut(); @@ -442,6 +574,7 @@ 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 4dc7744..e422458 100644 --- a/patches/components/script/dom/document/document_event_handler.rs.patch +++ b/patches/components/script/dom/document/document_event_handler.rs.patch @@ -424,7 +424,7 @@ // Update the cursor when the mouse moves, if it has changed. self.set_cursor(Some(hit_test_result.cursor)); -@@ -881,6 +1218,12 @@ +@@ -885,6 +1222,12 @@ return; }; @@ -437,7 +437,7 @@ debug!( "{:?}: at {:?}", event.action, hit_test_result.point_in_frame -@@ -1021,7 +1364,12 @@ +@@ -1025,7 +1368,12 @@ // Step 9. If mbutton is the secondary mouse button, then // Maybe show context menu with native, target. if let MouseButton::Right = event.button { @@ -451,7 +451,7 @@ } }, // https://w3c.github.io/pointerevents/#dfn-handle-native-mouse-up -@@ -1175,8 +1523,29 @@ +@@ -1179,8 +1527,29 @@ cx: &mut js::context::JSContext, target: &EventTarget, hit_test_result: &HitTestResult, @@ -482,7 +482,7 @@ // let menu_event = PointerEvent::new( cx, -@@ -1191,25 +1560,25 @@ +@@ -1195,25 +1564,25 @@ hit_test_result .point_relative_to_initial_containing_block .to_i32(), @@ -527,7 +527,7 @@ ); menu_event.upcast::().set_composed(true); -@@ -1225,6 +1594,91 @@ +@@ -1229,6 +1598,91 @@ }; } @@ -619,7 +619,7 @@ fn handle_touch_event( &self, cx: &mut JSContext, -@@ -1232,6 +1686,30 @@ +@@ -1236,6 +1690,30 @@ input_event: &ConstellationInputEvent, ) -> InputEventResult { let flags = HitTestFlags::empty(); @@ -650,7 +650,7 @@ // Ignore all incoming events without a hit test. let Some(hit_test_result) = self.window.hit_test_from_input_event(flags, input_event) else { -@@ -1239,6 +1717,19 @@ +@@ -1243,6 +1721,19 @@ return Default::default(); }; @@ -670,7 +670,7 @@ let TouchId(identifier) = event.touch_id; let Some(element) = hit_test_result -@@ -1410,6 +1901,10 @@ +@@ -1414,6 +1905,10 @@ .safe_borrow_mut(cx.no_gc()) .push(Dom::from_ref(&*pointer_touch)); self.set_active_element(&element); @@ -681,7 +681,7 @@ (current_target, pointer_touch) }, _ => { -@@ -1444,15 +1939,47 @@ +@@ -1448,15 +1943,47 @@ ); let mut active_touch_points = self.active_touch_points.safe_borrow_mut(cx.no_gc()); @@ -730,7 +730,7 @@ }, TouchEventType::Down => unreachable!("Should have been handled above"), } -@@ -1500,6 +2027,19 @@ +@@ -1504,6 +2031,19 @@ ); let event = touch_event.upcast::(); event.fire(cx, &touch_dispatch_target); @@ -750,7 +750,7 @@ event.flags().into() } -@@ -1636,6 +2176,16 @@ +@@ -1640,6 +2180,16 @@ return Default::default(); }; @@ -767,7 +767,7 @@ let Some(el) = hit_test_result .node .inclusive_ancestors(ShadowIncluding::Yes) -@@ -2200,6 +2750,26 @@ +@@ -2204,6 +2754,26 @@ return; } diff --git a/patches/components/script/dom/document/mod.rs.patch b/patches/components/script/dom/document/mod.rs.patch index e6fc95b..b7b2902 100644 --- a/patches/components/script/dom/document/mod.rs.patch +++ b/patches/components/script/dom/document/mod.rs.patch @@ -1,9 +1,9 @@ --- original +++ modified -@@ -11,7 +11,9 @@ - pub(crate) mod documentorshadowroot; - pub(crate) mod documenttype; +@@ -13,7 +13,9 @@ pub(crate) mod focus; + mod iframe_collection; + mod image_animation; +pub(crate) mod spatial_navigation; mod tree_ordered_index_map; + diff --git a/patches/components/script/dom/html/documentmetadata/htmllinkelement.rs.patch b/patches/components/script/dom/html/documentmetadata/htmllinkelement.rs.patch index 144155e..750527e 100644 --- a/patches/components/script/dom/html/documentmetadata/htmllinkelement.rs.patch +++ b/patches/components/script/dom/html/documentmetadata/htmllinkelement.rs.patch @@ -1,17 +1,17 @@ --- original +++ modified -@@ -465,6 +465,10 @@ - self.handle_preload_url(); +@@ -496,6 +496,10 @@ + }), + ); + } ++ ++ if relations.contains(LinkRelations::WEBTASKS) { ++ self.fetch_and_process_webtasks_link(&href); ++ } } -+ if relations.contains(LinkRelations::WEBTASKS) { -+ self.fetch_and_process_webtasks_link(&href); -+ } -+ - // https://html.spec.whatwg.org/multipage/#link-type-modulepreload - if relations.contains(LinkRelations::MODULE_PRELOAD) { - let link = DomRoot::from_ref(self); -@@ -653,6 +657,32 @@ + if relations.contains(LinkRelations::PRELOAD) { +@@ -680,6 +684,32 @@ document.fetch_background(request, fetch_context); } @@ -44,7 +44,7 @@ /// fn handle_stylesheet_url(&self, cx: &mut js::context::JSContext) { let document = self.owner_document(); -@@ -741,7 +771,7 @@ +@@ -768,7 +798,7 @@ if !window.is_top_level() { return; } diff --git a/patches/components/script/dom/html/documentmetadata/htmlmetaelement.rs.patch b/patches/components/script/dom/html/documentmetadata/htmlmetaelement.rs.patch index 32cbcfb..4a34405 100644 --- a/patches/components/script/dom/html/documentmetadata/htmlmetaelement.rs.patch +++ b/patches/components/script/dom/html/documentmetadata/htmlmetaelement.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -69,6 +69,9 @@ +@@ -72,6 +72,9 @@ if name == "viewport" { self.parse_and_send_viewport_if_necessary(cx); } @@ -10,7 +10,7 @@ // https://html.spec.whatwg.org/multipage/#attr-meta-http-equiv } else if !self.HttpEquiv().is_empty() { // TODO: Implement additional http-equiv candidates -@@ -92,6 +95,22 @@ +@@ -95,6 +98,22 @@ } } diff --git a/patches/components/script/dom/html/documentmetadata/processingoptions.rs.patch b/patches/components/script/dom/html/documentmetadata/processingoptions.rs.patch index 0298703..2ac218c 100644 --- a/patches/components/script/dom/html/documentmetadata/processingoptions.rs.patch +++ b/patches/components/script/dom/html/documentmetadata/processingoptions.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -425,6 +425,7 @@ +@@ -446,6 +446,7 @@ pub(crate) enum LinkFetchContextType { Prefetch, Preload, @@ -8,7 +8,7 @@ } impl From for InitiatorType { -@@ -467,7 +468,10 @@ +@@ -488,7 +489,10 @@ _: RequestId, mut chunk: Vec, ) { @@ -20,7 +20,7 @@ self.response_body.append(&mut chunk); } } -@@ -483,6 +487,11 @@ +@@ -504,6 +508,11 @@ ) { submit_timing(cx, &self, &response_result, &timing); @@ -32,7 +32,7 @@ // Step 11.6. If processResponse is given, then call processResponse with response. // // Part of Preload -@@ -510,6 +519,60 @@ +@@ -531,6 +540,60 @@ } } diff --git a/patches/components/script/dom/html/embedded_content/htmliframeelement.rs.patch b/patches/components/script/dom/html/embedded_content/htmliframeelement.rs.patch index 9e01eca..46db122 100644 --- a/patches/components/script/dom/html/embedded_content/htmliframeelement.rs.patch +++ b/patches/components/script/dom/html/embedded_content/htmliframeelement.rs.patch @@ -10,16 +10,16 @@ use crate::dom::bindings::codegen::Bindings::HTMLIFrameElementBinding::HTMLIFrameElementMethods; use crate::dom::bindings::codegen::Bindings::WindowBinding::Window_Binding::WindowMethods; -@@ -309,6 +309,8 @@ - user_content_manager_id: None, - theme: window.theme(), +@@ -316,6 +316,8 @@ + embedder_theme: window.embedder_theme(), target_snapshot_params, + frame_name: self.frozen_name.borrow().clone(), + is_embedded_webview: false, + hide_focus: false, }; self.pipeline_id.set(Some(new_pipeline_id)); -@@ -1158,7 +1160,16 @@ +@@ -1173,7 +1175,16 @@ // may be in a different script thread. Instead, we check to see if the parent // is in a document tree and has a browsing context, which is what causes // the child browsing context to be created. @@ -37,7 +37,7 @@ debug!("iframe src set while in browsing context."); self.process_the_iframe_attributes(ProcessingMode::NotFirstTime, cx); } -@@ -1251,7 +1262,7 @@ +@@ -1266,7 +1277,7 @@ } // The iframe HTML element removing steps, given removedNode, are to destroy a child diff --git a/patches/components/script/dom/html/htmlwebviewelement.rs.patch b/patches/components/script/dom/html/htmlwebviewelement.rs.patch index f689787..399bd3c 100644 --- a/patches/components/script/dom/html/htmlwebviewelement.rs.patch +++ b/patches/components/script/dom/html/htmlwebviewelement.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -0,0 +1,1747 @@ +@@ -0,0 +1,1748 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ @@ -240,7 +240,7 @@ + ipc::channel().expect("Failed to create IPC channel for embedded webview"); + + let hide_focus = self.has_hide_focus(); -+ let theme = window.theme(); ++ let theme = window.embedder_theme(); + let request = EmbeddedWebViewCreationRequest { + load_data, + parent_pipeline_id: pipeline_id, @@ -412,6 +412,7 @@ + inherited_secure_context: load_data.inherited_secure_context, + history_handling, + target_snapshot_params, ++ name: None, + }; + let viewport_details = window + .get_iframe_viewport_details_if_known(browsing_context_id) @@ -424,7 +425,7 @@ + load_data, + old_pipeline_id, + viewport_details, -+ theme: window.theme(), ++ embedder_theme: window.embedder_theme(), + }; + window + .as_global_scope() diff --git a/patches/components/script/dom/navigator/navigator.rs.patch b/patches/components/script/dom/navigator/navigator.rs.patch index 5f94d27..b8c8ae4 100644 --- a/patches/components/script/dom/navigator/navigator.rs.patch +++ b/patches/components/script/dom/navigator/navigator.rs.patch @@ -18,7 +18,7 @@ use net_traits::blob_url_store::UrlWithBlobClaim; use net_traits::request::{ CredentialsMode, Destination, RequestBuilder, RequestId, RequestMode, -@@ -25,10 +27,13 @@ +@@ -25,9 +27,12 @@ use script_bindings::cell::DomRefCell; use script_bindings::reflector::{Reflector, reflect_dom_object_with_cx}; use servo_base::generic_channel; @@ -27,12 +27,11 @@ +use servo_constellation_traits::{ScriptToConstellationMessage, StructuredSerializedData}; use servo_url::ServoUrl; - use crate::body::Extractable; +use crate::dom::atproto::AtProto; use crate::dom::bindings::codegen::Bindings::NavigatorBinding::NavigatorMethods; #[cfg(feature = "gamepad")] use crate::dom::bindings::codegen::Bindings::PermissionStatusBinding::PermissionName; -@@ -39,6 +44,7 @@ +@@ -38,6 +43,7 @@ use crate::dom::bindings::reflector::DomGlobal; use crate::dom::bindings::root::{DomRoot, MutNullableDom}; use crate::dom::bindings::str::{DOMString, USVString}; @@ -40,7 +39,7 @@ use crate::dom::bindings::utils::to_frozen_array; #[cfg(feature = "bluetooth")] use crate::dom::bluetooth::Bluetooth; -@@ -45,17 +51,21 @@ +@@ -44,17 +50,21 @@ use crate::dom::clipboard::Clipboard; use crate::dom::credentialmanagement::credentialscontainer::CredentialsContainer; use crate::dom::csp::{GlobalCspReporting, Violation}; @@ -62,15 +61,15 @@ use crate::dom::serviceworkercontainer::ServiceWorkerContainer; use crate::dom::servointernals::ServoInternals; use crate::dom::storagemanager::StorageManager; -@@ -68,6 +78,7 @@ - use crate::dom::xrsystem::XRSystem; - use crate::fetch::RequestWithGlobalScope; - use crate::network_listener::{FetchResponseListener, ResourceTimingListener, submit_timing}; +@@ -70,6 +80,7 @@ + use crate::fetch::network_listener::{ + FetchResponseListener, ResourceTimingListener, submit_timing, + }; +use crate::routed_promise::{RoutedPromiseListener, callback_promise}; pub(crate) fn hardware_concurrency() -> u64 { static CPUS: LazyLock = LazyLock::new(|| num_cpus::get().try_into().unwrap_or(1)); -@@ -138,6 +149,9 @@ +@@ -140,6 +151,9 @@ servo_internals: MutNullableDom, user_activation: MutNullableDom, wake_lock: MutNullableDom, @@ -80,7 +79,7 @@ } impl Navigator { -@@ -166,6 +180,9 @@ +@@ -168,6 +182,9 @@ servo_internals: Default::default(), user_activation: Default::default(), wake_lock: Default::default(), @@ -90,7 +89,7 @@ } } -@@ -178,6 +195,21 @@ +@@ -180,6 +197,21 @@ self.xr.get() } @@ -112,7 +111,7 @@ #[cfg(feature = "gamepad")] pub(crate) fn get_gamepad(&self, index: usize) -> Option> { self.gamepads.borrow().get(index).and_then(|g| g.get()) -@@ -617,6 +649,16 @@ +@@ -619,6 +651,16 @@ .or_init(|| ServoInternals::new(cx, &self.global())) } @@ -129,7 +128,7 @@ /// fn RegisterProtocolHandler(&self, scheme: DOMString, url: USVString) -> Fallible<()> { // Step 1. Let (normalizedScheme, normalizedURLString) be the result of -@@ -665,6 +707,209 @@ +@@ -667,6 +709,209 @@ fn WakeLock(&self, cx: &mut js::context::JSContext) -> DomRoot { self.wake_lock.or_init(|| WakeLock::new(cx, &self.global())) } @@ -339,7 +338,7 @@ } struct BeaconFetchListener { -@@ -725,3 +970,31 @@ +@@ -727,3 +972,31 @@ self.global.root() } } diff --git a/patches/components/script/dom/servoparser/mod.rs.patch b/patches/components/script/dom/servoparser/mod.rs.patch index 2c0f598..204aa60 100644 --- a/patches/components/script/dom/servoparser/mod.rs.patch +++ b/patches/components/script/dom/servoparser/mod.rs.patch @@ -9,7 +9,7 @@ use servo_constellation_traits::{LoadOrigin, TargetSnapshotParams}; use servo_url::{MutableOrigin, ServoUrl}; use style::context::QuirksMode as ServoQuirksMode; -@@ -1163,7 +1165,7 @@ +@@ -1189,7 +1191,7 @@ self.is_synthesized_document = true; parser.last_chunk_received.set(true); // Step 3. Populate with html/head/body given document. @@ -18,7 +18,7 @@ parser.push_string_input_chunk(page); parser.parse_sync(cx); -@@ -1197,6 +1199,39 @@ +@@ -1223,6 +1225,39 @@ audio.SetControls(cx, true); audio.SetSrc(cx, USVString(self.url.to_string())); DomRoot::upcast::(audio) diff --git a/patches/components/script/dom/window/window.rs.patch b/patches/components/script/dom/window/window.rs.patch index ba1edf8..7aaf5af 100644 --- a/patches/components/script/dom/window/window.rs.patch +++ b/patches/components/script/dom/window/window.rs.patch @@ -30,7 +30,7 @@ use malloc_size_of::MallocSizeOf; use media::WindowGLContext; use net_traits::image_cache::{ -@@ -162,8 +165,10 @@ +@@ -163,8 +166,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}; -@@ -1207,12 +1212,22 @@ +@@ -1212,12 +1217,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."); -@@ -1246,13 +1261,22 @@ +@@ -1251,13 +1266,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. // -@@ -1297,6 +1321,7 @@ +@@ -1302,6 +1326,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), -@@ -1303,8 +1328,16 @@ +@@ -1308,8 +1333,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. -@@ -1800,6 +1833,27 @@ +@@ -1805,6 +1838,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)) -@@ -2731,6 +2785,10 @@ +@@ -2736,6 +2790,10 @@ accessibility_damage = Some(accessibility_data.drain_pending_accessibility_damage()); } @@ -154,7 +154,7 @@ // Send new document and relevant styles to layout. let reflow = ReflowRequest { document: document.upcast::().to_trusted_node_address(), -@@ -3241,10 +3299,33 @@ +@@ -3246,10 +3304,33 @@ flags: HitTestFlags, input_event: &ConstellationInputEvent, ) -> Option { @@ -192,7 +192,7 @@ } #[expect(unsafe_code)] -@@ -3265,8 +3346,42 @@ +@@ -3270,8 +3351,42 @@ let address = UntrustedNodeAddress(node.0 as *const c_void); unsafe { from_untrusted_node_address(address) } }; @@ -236,7 +236,7 @@ dom_position_for_selection: result .dom_position_for_selection .map(|(node, offset)| (from_opaque_node(node), offset)), -@@ -3640,17 +3755,19 @@ +@@ -3651,17 +3766,19 @@ } pub(crate) fn send_to_embedder(&self, msg: EmbedderMsg) { @@ -262,16 +262,16 @@ } #[cfg(feature = "webxr")] -@@ -3883,6 +4000,8 @@ - player_context: WindowGLContext, +@@ -3895,6 +4012,8 @@ #[cfg(feature = "webgpu")] gpu_id_hub: Arc, inherited_secure_context: Option, + embedder_theme: Theme, + is_embedded_webview: bool, + hide_focus: bool, - theme: Theme, weak_script_thread: Weak, ) -> DomRoot { -@@ -3907,6 +4026,8 @@ + let error_reporter = CSSErrorReporter { +@@ -3918,6 +4037,8 @@ gpu_id_hub, inherited_secure_context, unminify_js, @@ -280,7 +280,7 @@ ), caches: Default::default(), ongoing_navigation: Default::default(), -@@ -4176,3 +4297,114 @@ +@@ -4188,3 +4309,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 b2a3c15..8fc4be4 100644 --- a/patches/components/script/dom/window/windowproxy.rs.patch +++ b/patches/components/script/dom/window/windowproxy.rs.patch @@ -16,16 +16,16 @@ }; let constellation_msg = ScriptToConstellationMessage::CreateAuxiliaryWebView(load_info); window.send_to_constellation(constellation_msg); -@@ -381,6 +383,8 @@ - sandboxing_flags: sandboxing_flag_set, +@@ -382,6 +384,8 @@ iframe_element_referrer_policy: ReferrerPolicy::EmptyString, }, + frame_name: None, + is_embedded_webview: false, + hide_focus: false, }; with_script_thread(|script_thread| { -@@ -557,11 +561,33 @@ +@@ -558,11 +562,33 @@ // (TODO) Step 11. Let referrerPolicy be the empty string. // (TODO) Step 12. If noreferrer is true, then set referrerPolicy to "no-referrer". @@ -60,7 +60,7 @@ (Some(chosen), new) => (chosen, new), (None, _) => return Ok(None), }; -@@ -647,6 +673,7 @@ +@@ -648,6 +674,7 @@ cx: &mut JSContext, name: DOMString, noopener: bool, @@ -68,7 +68,7 @@ ) -> (Option>, bool) { match name.to_lowercase().as_ref() { "" | "_self" => { -@@ -665,7 +692,7 @@ +@@ -666,7 +693,7 @@ (Some(DomRoot::from_ref(self.top())), false) }, "_blank" => ( @@ -77,7 +77,7 @@ true, ), _ => { -@@ -676,7 +703,7 @@ +@@ -677,7 +704,7 @@ match ScriptThread::find_window_proxy_by_name(&name) { Some(proxy) => (Some(proxy), false), None => ( diff --git a/patches/components/script/dom/workers/workerglobalscope.rs.patch b/patches/components/script/dom/workers/workerglobalscope.rs.patch index 86564a4..d86b098 100644 --- a/patches/components/script/dom/workers/workerglobalscope.rs.patch +++ b/patches/components/script/dom/workers/workerglobalscope.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -414,6 +414,8 @@ +@@ -420,6 +420,8 @@ gpu_id_hub, init.inherited_secure_context, init.unminify_js, diff --git a/patches/components/script/event_loop/script_thread.rs.patch b/patches/components/script/event_loop/script_thread.rs.patch index 0306efd..606d2f9 100644 --- a/patches/components/script/event_loop/script_thread.rs.patch +++ b/patches/components/script/event_loop/script_thread.rs.patch @@ -9,7 +9,7 @@ }; use encoding_rs::Encoding; use fonts::{FontContext, SystemFontServiceProxy, WebFontLoadEvent}; -@@ -83,18 +83,20 @@ +@@ -83,7 +83,8 @@ use servo_base::cross_process_instant::CrossProcessInstant; use servo_base::generic_channel::GenericSender; use servo_base::id::{ @@ -19,6 +19,8 @@ }; use servo_base::threadboost::{BoostAffinity, ThreadPriority}; use servo_base::{Epoch, generic_channel}; +@@ -90,12 +91,13 @@ + #[cfg(feature = "webgl")] use servo_canvas_traits::webgl::WebGLPipeline; use servo_config::opts::{self, DiagnosticsLoggingOption}; +use servo_config::pref_util::PrefValue; @@ -35,7 +37,7 @@ }; use servo_url::{ImmutableOrigin, MutableOrigin, OriginSnapshot, ServoUrl}; use storage_traits::StorageThreads; -@@ -115,6 +117,8 @@ +@@ -116,6 +118,8 @@ use crate::dom::bindings::codegen::Bindings::DocumentBinding::{ DocumentMethods, DocumentReadyState, }; @@ -44,7 +46,7 @@ use crate::dom::bindings::codegen::Bindings::NavigatorBinding::NavigatorMethods; use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use crate::dom::bindings::conversions::{ -@@ -133,9 +137,13 @@ +@@ -134,9 +138,13 @@ Document, DocumentSource, HasBrowsingContext, IsHTMLDocument, RenderingUpdateReason, }; use crate::dom::element::Element; @@ -58,7 +60,7 @@ use crate::dom::servoparser::{ParserContext, ServoParser}; use crate::dom::types::DebuggerGlobalScope; #[cfg(feature = "webgpu")] -@@ -1259,18 +1267,22 @@ +@@ -1262,18 +1270,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. @@ -90,7 +92,7 @@ } let should_generate_frame = !painters_generating_frames.is_empty(); -@@ -1798,6 +1810,14 @@ +@@ -1801,6 +1813,14 @@ ScriptThreadMessage::GetDocumentOrigin(pipeline_id, result_sender) => { self.handle_get_document_origin(pipeline_id, result_sender); }, @@ -105,7 +107,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) -@@ -1963,11 +1983,46 @@ +@@ -1966,11 +1986,46 @@ self.handle_refresh_cursor(pipeline_id); }, ScriptThreadMessage::PreferencesUpdated(updates) => { @@ -156,7 +158,7 @@ }, ScriptThreadMessage::ForwardKeyboardScroll(pipeline_id, scroll) => { if let Some(document) = self.documents.borrow().find_document(pipeline_id) { -@@ -2000,6 +2055,52 @@ +@@ -2003,6 +2058,52 @@ ScriptThreadMessage::TriggerGarbageCollection => unsafe { JS_GC(cx, GCReason::API); }, @@ -209,7 +211,7 @@ } } -@@ -3063,16 +3164,32 @@ +@@ -3067,16 +3168,32 @@ reason: UpdatePipelineIdReason, cx: &mut js::context::JSContext, ) { @@ -246,7 +248,7 @@ let Some(window) = self.documents.borrow().find_window(new_pipeline_id) else { return; -@@ -3091,6 +3208,7 @@ +@@ -3095,6 +3212,7 @@ // is no need to pass along existing opener information that // will be discarded. None, @@ -254,7 +256,7 @@ ); } -@@ -3382,6 +3500,212 @@ +@@ -3386,6 +3504,212 @@ } } @@ -467,7 +469,7 @@ fn ask_constellation_for_top_level_info( &self, sender_webview_id: WebViewId, -@@ -3491,7 +3815,13 @@ +@@ -3495,7 +3819,13 @@ self.senders.pipeline_to_embedder_sender.clone(), self.senders.constellation_sender.clone(), incomplete.pipeline_id, @@ -482,16 +484,16 @@ incomplete.viewport_details, origin.clone(), final_url.clone(), -@@ -3513,6 +3843,8 @@ - #[cfg(feature = "webgpu")] +@@ -3519,6 +3849,8 @@ self.gpu_id_hub.clone(), incomplete.load_data.inherited_secure_context, + incomplete.embedder_theme, + incomplete.is_embedded_webview, + incomplete.hide_focus, - incomplete.theme, self.this.clone(), ); -@@ -3618,6 +3950,8 @@ + if self.senders.devtools_server_sender.is_some() { +@@ -3627,6 +3959,8 @@ ); } @@ -500,7 +502,7 @@ document.set_ready_state(cx, DocumentReadyState::Loading); self.documents -@@ -3624,8 +3958,6 @@ +@@ -3633,8 +3967,6 @@ .borrow_mut() .insert(incomplete.pipeline_id, &document); @@ -509,15 +511,15 @@ // Initialize the browsing context for the window. let window_proxy = self.window_proxies.local_window_proxy( cx, -@@ -3636,6 +3968,7 @@ +@@ -3645,6 +3977,7 @@ incomplete.webview_id, incomplete.parent_info, incomplete.opener, + incomplete.is_embedded_webview, ); - if window_proxy.parent().is_some() { - // https://html.spec.whatwg.org/multipage/#navigating-across-documents:delaying-load-events-mode-2 -@@ -3808,11 +4141,11 @@ + if let Some(name) = incomplete.frame_name { + window_proxy.set_name(DOMString::from(name)); +@@ -3822,11 +4155,11 @@ target_snapshot_params: TargetSnapshotParams, cx: &mut js::context::JSContext, ) { @@ -532,7 +534,7 @@ iframe.navigate_or_reload_child_browsing_context( load_data, history_handling, -@@ -3820,7 +4153,17 @@ +@@ -3834,7 +4167,17 @@ target_snapshot_params, cx, ); @@ -550,7 +552,7 @@ } /// Turn javascript: URL into JS code to eval, according to the steps in -@@ -4369,10 +4712,88 @@ +@@ -4383,10 +4726,88 @@ document.event_handler().handle_refresh_cursor(); } @@ -639,7 +641,7 @@ fn handle_request_screenshot_readiness( &self, webview_id: WebViewId, -@@ -4413,7 +4834,7 @@ +@@ -4427,7 +4848,7 @@ pinch_zoom_infos: PinchZoomInfos, ) { let Some(window) = self.documents.borrow().find_window(pipeline_id) else { diff --git a/patches/components/script/lib.rs.patch b/patches/components/script/lib.rs.patch index 4a362f3..b7e8c0d 100644 --- a/patches/components/script/lib.rs.patch +++ b/patches/components/script/lib.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -57,6 +57,7 @@ +@@ -49,6 +49,7 @@ pub mod test; mod timers; mod webdriver_handlers; diff --git a/patches/components/script/navigation.rs.patch b/patches/components/script/navigation.rs.patch index adb7819..333a5e3 100644 --- a/patches/components/script/navigation.rs.patch +++ b/patches/components/script/navigation.rs.patch @@ -1,9 +1,9 @@ --- original +++ modified -@@ -184,6 +184,10 @@ - /// The [`TargetSnapshotParams`] to use when creating this document. - #[no_trace] +@@ -186,6 +186,10 @@ pub(crate) target_snapshot_params: TargetSnapshotParams, + /// Name of this iframe, if any + pub(crate) frame_name: Option, + /// Whether this is an embedded webview (has parent_info but should have no WindowProxy parent). + pub(crate) is_embedded_webview: bool, + /// Whether this document should never receive focus (hidefocus attribute on the iframe). @@ -11,10 +11,10 @@ } impl InProgressLoad { -@@ -206,6 +210,8 @@ - user_content_manager_id: new_pipeline_info.user_content_manager_id, - theme: new_pipeline_info.theme, +@@ -209,6 +213,8 @@ + embedder_theme: new_pipeline_info.embedder_theme, target_snapshot_params: new_pipeline_info.target_snapshot_params, + frame_name: new_pipeline_info.frame_name, + is_embedded_webview: new_pipeline_info.is_embedded_webview, + hide_focus: new_pipeline_info.hide_focus, } diff --git a/patches/components/script_bindings/codegen/Bindings.conf.patch b/patches/components/script_bindings/codegen/Bindings.conf.patch index 099a860..0276354 100644 --- a/patches/components/script_bindings/codegen/Bindings.conf.patch +++ b/patches/components/script_bindings/codegen/Bindings.conf.patch @@ -59,7 +59,7 @@ 'Event': { 'cx': ['TimeStamp'], }, -@@ -799,6 +837,11 @@ +@@ -801,6 +839,11 @@ 'weakReferenceable': True, }, @@ -71,7 +71,7 @@ 'IDBCursor': { 'cx': ['Key', 'PrimaryKey'] }, -@@ -835,11 +878,19 @@ +@@ -837,11 +880,19 @@ 'cx': ['Abort', 'ObjectStore', 'ObjectStoreNames'], }, @@ -91,7 +91,7 @@ 'KeyframeEffect': { 'cx': ['GetKeyframes', 'SetKeyframes'] }, -@@ -915,7 +966,7 @@ +@@ -917,7 +968,7 @@ }, 'Navigator': { @@ -100,7 +100,7 @@ 'Storage', 'Plugins', 'UserActivation', 'WakeLock', 'Xr', 'MediaDevices', 'MediaSession', 'Permissions', 'GetGamepads'], }, -@@ -969,6 +1020,10 @@ +@@ -971,6 +1022,10 @@ 'cx': ['RegisterPaint'], }, @@ -111,7 +111,7 @@ 'Performance': { 'cx': ['Mark', 'Measure'], }, -@@ -1352,6 +1407,7 @@ +@@ -1354,6 +1409,7 @@ 'additionalTraits': ['crate::interfaces::WindowHelpers', 'crate::interfaces::HasOrigin'], 'realm': ['CreateImageBitmap', 'CreateImageBitmap_', 'WebdriverCallback', 'GetOpener', 'Fetch'], 'cx': [ diff --git a/patches/components/servo/servo.rs.patch b/patches/components/servo/servo.rs.patch index a86055b..97db028 100644 --- a/patches/components/servo/servo.rs.patch +++ b/patches/components/servo/servo.rs.patch @@ -252,7 +252,7 @@ ) { // Global configuration options, parsed from the command line. let opts = opts::get(); -@@ -1243,6 +1369,7 @@ +@@ -1244,6 +1370,7 @@ async_runtime, privileged_urls, wake_lock_provider: Box::new(DefaultWakeLockDelegate), diff --git a/patches/components/shared/constellation/Cargo.toml.patch b/patches/components/shared/constellation/Cargo.toml.patch index af1a39d..a8ede51 100644 --- a/patches/components/shared/constellation/Cargo.toml.patch +++ b/patches/components/shared/constellation/Cargo.toml.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -19,6 +19,8 @@ +@@ -20,6 +20,8 @@ [dependencies] base64 = { workspace = true } @@ -9,7 +9,7 @@ content-security-policy = { workspace = true } devtools_traits = { workspace = true } embedder_traits = { workspace = true } -@@ -37,6 +39,7 @@ +@@ -38,6 +40,7 @@ profile_traits = { workspace = true } rustc-hash = { workspace = true } serde = { workspace = true } diff --git a/patches/components/shared/constellation/from_script_message.rs.patch b/patches/components/shared/constellation/from_script_message.rs.patch index 020c47d..6790400 100644 --- a/patches/components/shared/constellation/from_script_message.rs.patch +++ b/patches/components/shared/constellation/from_script_message.rs.patch @@ -13,15 +13,15 @@ }; use encoding_rs::Encoding; use euclid::default::Size2D as UntypedSize2D; -@@ -37,6 +37,7 @@ - }; +@@ -38,6 +38,7 @@ use servo_canvas_traits::canvas::{CanvasId, CanvasMsg}; + #[cfg(feature = "webgl")] use servo_canvas_traits::webgl::WebGLChan; +use servo_config::pref_util::PrefValue; use servo_url::{ImmutableOrigin, OriginSnapshot, ServoUrl}; use storage_traits::StorageThreads; use storage_traits::webstorage_thread::WebStorageType; -@@ -46,7 +47,8 @@ +@@ -47,7 +48,8 @@ use crate::structured_data::{BroadcastChannelMsg, StructuredSerializedData}; use crate::{ @@ -31,7 +31,7 @@ }; pub type ScriptToConstellationSender = -@@ -461,11 +463,14 @@ +@@ -462,11 +464,14 @@ pub opener_webview_id: WebViewId, /// The pipeline opener browsing context. pub opener_pipeline_id: PipelineId, @@ -48,7 +48,7 @@ #[derive(Debug, Deserialize, Serialize)] pub struct AuxiliaryWebViewCreationResponse { /// The new webview ID. -@@ -476,6 +481,38 @@ +@@ -477,6 +482,38 @@ pub user_content_manager_id: Option, } @@ -87,7 +87,7 @@ /// Specifies the information required to load an iframe. #[derive(Debug, Deserialize, Serialize)] pub struct IFrameLoadInfo { -@@ -614,8 +651,143 @@ +@@ -618,8 +655,143 @@ pub enum ConstellationInterest { /// Interest in `storage` events (fired when another same-origin pipeline modifies storage). StorageEvent, @@ -231,7 +231,7 @@ /// Messages from the script to the constellation. #[derive(Deserialize, IntoStaticStr, Serialize)] pub enum ScriptToConstellationMessage { -@@ -661,6 +833,10 @@ +@@ -665,6 +837,10 @@ NewBroadcastChannelNameInRouter(BroadcastChannelRouterId, String, ImmutableOrigin), /// A global stopped managing broadcast channels for a given channel-name. RemoveBroadcastChannelNameInRouter(BroadcastChannelRouterId, String, ImmutableOrigin), @@ -242,7 +242,7 @@ /// Broadcast a message to all same-origin broadcast channels, /// excluding the source of the broadcast. ScheduleBroadcast(BroadcastChannelRouterId, BroadcastChannelMsg), -@@ -679,6 +855,9 @@ +@@ -683,6 +859,9 @@ Option, Option, ), @@ -252,7 +252,7 @@ /// Indicates whether this pipeline is currently running animations. ChangeRunningAnimationsState(AnimationState), /// Register a dedicated worker that can receive animation frame ticks. -@@ -772,6 +951,10 @@ +@@ -776,6 +955,10 @@ ScriptNewIFrame(IFrameLoadInfoWithData), /// Script has opened a new auxiliary browsing context. CreateAuxiliaryWebView(AuxiliaryWebViewCreationRequest), @@ -263,7 +263,7 @@ /// Mark a new document as active ActivateDocument, /// Set the document state for a pipeline (used by screenshot / reftests) -@@ -827,6 +1010,209 @@ +@@ -831,6 +1014,209 @@ /// aggregate lock count and notify the provider only when the count transitions from N to 0. /// ReleaseWakeLock(WakeLockType), diff --git a/patches/components/shared/net/Cargo.toml.patch b/patches/components/shared/net/Cargo.toml.patch index 62dd009..1d2a70b 100644 --- a/patches/components/shared/net/Cargo.toml.patch +++ b/patches/components/shared/net/Cargo.toml.patch @@ -1,10 +1,9 @@ --- original +++ modified -@@ -44,12 +44,16 @@ - rustc-hash = { workspace = true } +@@ -45,12 +45,15 @@ rustls-pki-types = { workspace = true } serde = { workspace = true } -+serde_bytes = { workspace = true } + serde_bytes = { workspace = true } +serde_json = { workspace = true } servo-base = { workspace = true } servo-config = { workspace = true } diff --git a/patches/components/shared/net/blob_url_store.rs.patch b/patches/components/shared/net/blob_url_store.rs.patch deleted file mode 100644 index cc13a0e..0000000 --- a/patches/components/shared/net/blob_url_store.rs.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- original -+++ modified -@@ -67,7 +67,12 @@ - // See https://url.spec.whatwg.org/#origin - "blob" case - let origin = Url::parse(url.path()) - .ok() -- .filter(|url| matches!(url.scheme(), "http" | "https" | "file")) -+ .filter(|url| { -+ matches!( -+ url.scheme(), -+ "http" | "https" | "file" | "trusted" | "beaver" -+ ) -+ }) - .map(|url| ImmutableOrigin::new(&url)) - .unwrap_or(ImmutableOrigin::new_opaque()); - diff --git a/patches/components/shared/net/response.rs.patch b/patches/components/shared/net/response.rs.patch deleted file mode 100644 index a2498ec..0000000 --- a/patches/components/shared/net/response.rs.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- original -+++ modified -@@ -46,7 +46,9 @@ - #[derive(Clone, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize)] - pub enum ResponseBody { - Empty, // XXXManishearth is this necessary, or is Done(vec![]) enough? -+ #[serde(with = "serde_bytes")] - Receiving(Vec), -+ #[serde(with = "serde_bytes")] - Done(Vec), - } - diff --git a/patches/components/shared/script/lib.rs.patch b/patches/components/shared/script/lib.rs.patch index 96f2243..57bdb19 100644 --- a/patches/components/shared/script/lib.rs.patch +++ b/patches/components/shared/script/lib.rs.patch @@ -9,7 +9,7 @@ }; use euclid::{Scale, Size2D}; use fonts_traits::{SystemFontServiceProxySender, WebFontLoadEvent}; -@@ -43,9 +43,9 @@ +@@ -44,9 +44,9 @@ use servo_canvas_traits::webgl::WebGLPipeline; use servo_config::prefs::PrefValue; use servo_constellation_traits::{ @@ -22,10 +22,10 @@ }; use servo_url::{ImmutableOrigin, ServoUrl}; use storage_traits::StorageThreads; -@@ -82,6 +82,14 @@ - pub theme: Theme, - /// A snapshot of the navigation parameters of the target of this navigation. +@@ -85,6 +85,14 @@ pub target_snapshot_params: TargetSnapshotParams, + /// Name of this iframe, if any + pub frame_name: Option, + /// Whether this pipeline is for an embedded webview (created via `