Rewild Your Web
18
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: update to Servo 7c05e1556f3c23c46aa925ec3f7c9ea22cc23da3

Signed-off-by: webbeef <me@webbeef.org>

webbeef 6728377a e64c28bf

+483 -451
+108 -83
Cargo.lock
··· 709 709 710 710 [[package]] 711 711 name = "beaver-shell" 712 - version = "0.0.6" 712 + version = "0.1.0" 713 713 dependencies = [ 714 714 "chrono", 715 715 "dirs", ··· 4955 4955 ] 4956 4956 4957 4957 [[package]] 4958 + name = "inventory" 4959 + version = "0.3.24" 4960 + source = "registry+https://github.com/rust-lang/crates.io-index" 4961 + checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" 4962 + dependencies = [ 4963 + "rustversion", 4964 + ] 4965 + 4966 + [[package]] 4958 4967 name = "ipc-channel" 4959 4968 version = "0.21.0" 4960 4969 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 8645 8654 8646 8655 [[package]] 8647 8656 name = "selectors" 8648 - version = "0.36.1" 8649 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 8657 + version = "0.37.0" 8658 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 8650 8659 dependencies = [ 8651 8660 "bitflags 2.11.0", 8652 8661 "cssparser", ··· 8798 8807 8799 8808 [[package]] 8800 8809 name = "servo" 8801 - version = "0.0.6" 8810 + version = "0.1.0" 8802 8811 dependencies = [ 8803 8812 "accesskit", 8804 8813 "accesskit_consumer", ··· 8816 8825 "hyper 1.8.1", 8817 8826 "image", 8818 8827 "ipc-channel", 8828 + "itertools 0.14.0", 8819 8829 "keyboard-types 0.8.3", 8820 8830 "log", 8821 8831 "mozangle", ··· 8832 8842 "servo-config", 8833 8843 "servo-constellation", 8834 8844 "servo-constellation-traits", 8845 + "servo-default-resources", 8835 8846 "servo-devtools", 8836 8847 "servo-devtools-traits", 8837 8848 "servo-embedder-traits", ··· 8872 8883 8873 8884 [[package]] 8874 8885 name = "servo-allocator" 8875 - version = "0.0.6" 8886 + version = "0.1.0" 8876 8887 dependencies = [ 8877 8888 "backtrace", 8878 8889 "libc", ··· 8885 8896 8886 8897 [[package]] 8887 8898 name = "servo-background-hang-monitor" 8888 - version = "0.0.6" 8899 + version = "0.1.0" 8889 8900 dependencies = [ 8890 8901 "backtrace", 8891 8902 "crossbeam-channel", ··· 8902 8913 8903 8914 [[package]] 8904 8915 name = "servo-background-hang-monitor-api" 8905 - version = "0.0.6" 8916 + version = "0.1.0" 8906 8917 dependencies = [ 8907 8918 "serde", 8908 8919 "servo-base", ··· 8910 8921 8911 8922 [[package]] 8912 8923 name = "servo-base" 8913 - version = "0.0.6" 8924 + version = "0.1.0" 8914 8925 dependencies = [ 8915 8926 "accesskit", 8916 8927 "crossbeam-channel", ··· 8934 8945 8935 8946 [[package]] 8936 8947 name = "servo-bluetooth" 8937 - version = "0.0.6" 8948 + version = "0.1.0" 8938 8949 dependencies = [ 8939 8950 "bitflags 2.11.0", 8940 8951 "blurmock", ··· 8952 8963 8953 8964 [[package]] 8954 8965 name = "servo-bluetooth-traits" 8955 - version = "0.0.6" 8966 + version = "0.1.0" 8956 8967 dependencies = [ 8957 8968 "regex", 8958 8969 "serde", ··· 8962 8973 8963 8974 [[package]] 8964 8975 name = "servo-canvas" 8965 - version = "0.0.6" 8976 + version = "0.1.0" 8966 8977 dependencies = [ 8967 8978 "bytemuck", 8968 8979 "crossbeam-channel", ··· 8990 9001 8991 9002 [[package]] 8992 9003 name = "servo-canvas-traits" 8993 - version = "0.0.6" 9004 + version = "0.1.0" 8994 9005 dependencies = [ 8995 9006 "crossbeam-channel", 8996 9007 "euclid", ··· 9010 9021 9011 9022 [[package]] 9012 9023 name = "servo-config" 9013 - version = "0.0.6" 9024 + version = "0.1.0" 9014 9025 dependencies = [ 9015 9026 "serde", 9016 9027 "serde_json", ··· 9020 9031 9021 9032 [[package]] 9022 9033 name = "servo-config-macro" 9023 - version = "0.0.6" 9034 + version = "0.1.0" 9024 9035 dependencies = [ 9025 9036 "proc-macro2", 9026 9037 "quote", ··· 9030 9041 9031 9042 [[package]] 9032 9043 name = "servo-constellation" 9033 - version = "0.0.6" 9044 + version = "0.1.0" 9034 9045 dependencies = [ 9035 9046 "accesskit", 9036 9047 "backtrace", 9048 + "base64 0.22.1", 9037 9049 "beaver-p2p", 9038 9050 "content-security-policy", 9039 9051 "crossbeam-channel", ··· 9085 9097 9086 9098 [[package]] 9087 9099 name = "servo-constellation-traits" 9088 - version = "0.0.6" 9100 + version = "0.1.0" 9089 9101 dependencies = [ 9102 + "base64 0.22.1", 9090 9103 "beaver-p2p", 9091 9104 "content-security-policy", 9092 9105 "encoding_rs", ··· 9119 9132 ] 9120 9133 9121 9134 [[package]] 9135 + name = "servo-default-resources" 9136 + version = "0.1.0" 9137 + dependencies = [ 9138 + "servo-embedder-traits", 9139 + ] 9140 + 9141 + [[package]] 9122 9142 name = "servo-deny-public-fields" 9123 - version = "0.0.6" 9143 + version = "0.1.0" 9124 9144 dependencies = [ 9125 9145 "syn 2.0.117", 9126 9146 "synstructure", ··· 9128 9148 9129 9149 [[package]] 9130 9150 name = "servo-devtools" 9131 - version = "0.0.6" 9151 + version = "0.1.0" 9132 9152 dependencies = [ 9133 9153 "atomic_refcell", 9134 9154 "base64 0.22.1", ··· 9156 9176 9157 9177 [[package]] 9158 9178 name = "servo-devtools-traits" 9159 - version = "0.0.6" 9179 + version = "0.1.0" 9160 9180 dependencies = [ 9161 9181 "http 1.4.0", 9162 9182 "malloc_size_of_derive", ··· 9172 9192 9173 9193 [[package]] 9174 9194 name = "servo-dom-struct" 9175 - version = "0.0.6" 9195 + version = "0.1.0" 9176 9196 dependencies = [ 9177 9197 "proc-macro2", 9178 9198 "quote", ··· 9181 9201 9182 9202 [[package]] 9183 9203 name = "servo-embedder-traits" 9184 - version = "0.0.6" 9204 + version = "0.1.0" 9185 9205 dependencies = [ 9186 9206 "accesskit", 9187 9207 "bitflags 2.11.0", ··· 9190 9210 "euclid", 9191 9211 "http 1.4.0", 9192 9212 "image", 9213 + "inventory", 9193 9214 "keyboard-types 0.8.3", 9194 9215 "log", 9195 9216 "malloc_size_of_derive", ··· 9213 9234 9214 9235 [[package]] 9215 9236 name = "servo-fonts" 9216 - version = "0.0.6" 9237 + version = "0.1.0" 9217 9238 dependencies = [ 9218 9239 "app_units", 9219 9240 "bitflags 2.11.0", ··· 9268 9289 9269 9290 [[package]] 9270 9291 name = "servo-fonts-traits" 9271 - version = "0.0.6" 9292 + version = "0.1.0" 9272 9293 dependencies = [ 9273 9294 "atomic_refcell", 9274 9295 "dwrote", ··· 9291 9312 9292 9313 [[package]] 9293 9314 name = "servo-geometry" 9294 - version = "0.0.6" 9315 + version = "0.1.0" 9295 9316 dependencies = [ 9296 9317 "app_units", 9297 9318 "euclid", ··· 9303 9324 9304 9325 [[package]] 9305 9326 name = "servo-hyper-serde" 9306 - version = "0.13.2" 9327 + version = "0.1.0" 9307 9328 dependencies = [ 9308 9329 "cookie 0.18.1", 9309 9330 "headers 0.4.1", ··· 9318 9339 9319 9340 [[package]] 9320 9341 name = "servo-jstraceable-derive" 9321 - version = "0.0.6" 9342 + version = "0.1.0" 9322 9343 dependencies = [ 9323 9344 "proc-macro2", 9324 9345 "syn 2.0.117", ··· 9327 9348 9328 9349 [[package]] 9329 9350 name = "servo-layout" 9330 - version = "0.0.6" 9351 + version = "0.1.0" 9331 9352 dependencies = [ 9332 9353 "app_units", 9333 9354 "atomic_refcell", ··· 9381 9402 9382 9403 [[package]] 9383 9404 name = "servo-layout-api" 9384 - version = "0.0.6" 9405 + version = "0.1.0" 9385 9406 dependencies = [ 9386 9407 "app_units", 9387 9408 "atomic_refcell", ··· 9413 9434 9414 9435 [[package]] 9415 9436 name = "servo-malloc-size-of" 9416 - version = "0.0.6" 9437 + version = "0.1.0" 9417 9438 dependencies = [ 9418 9439 "accountable-refcell", 9419 9440 "app_units", 9420 9441 "atomic_refcell", 9421 9442 "content-security-policy", 9422 9443 "crossbeam-channel", 9444 + "data-url", 9423 9445 "encoding_rs", 9424 9446 "euclid", 9425 9447 "http 1.4.0", ··· 9453 9475 9454 9476 [[package]] 9455 9477 name = "servo-media" 9456 - version = "0.0.6" 9478 + version = "0.1.0" 9457 9479 dependencies = [ 9458 9480 "once_cell", 9459 9481 "servo-media-audio", ··· 9465 9487 9466 9488 [[package]] 9467 9489 name = "servo-media-audio" 9468 - version = "0.0.6" 9490 + version = "0.1.0" 9469 9491 dependencies = [ 9470 9492 "byte-slice-cast", 9471 9493 "euclid", ··· 9487 9509 9488 9510 [[package]] 9489 9511 name = "servo-media-derive" 9490 - version = "0.0.6" 9512 + version = "0.1.0" 9491 9513 dependencies = [ 9492 9514 "proc-macro2", 9493 9515 "quote", ··· 9496 9518 9497 9519 [[package]] 9498 9520 name = "servo-media-dummy" 9499 - version = "0.0.6" 9521 + version = "0.1.0" 9500 9522 dependencies = [ 9501 9523 "ipc-channel", 9502 9524 "servo-media", ··· 9509 9531 9510 9532 [[package]] 9511 9533 name = "servo-media-gstreamer" 9512 - version = "0.0.6" 9534 + version = "0.1.0" 9513 9535 dependencies = [ 9514 9536 "byte-slice-cast", 9515 9537 "glib 0.22.3", ··· 9541 9563 9542 9564 [[package]] 9543 9565 name = "servo-media-gstreamer-render" 9544 - version = "0.0.6" 9566 + version = "0.1.0" 9545 9567 dependencies = [ 9546 9568 "gstreamer", 9547 9569 "gstreamer-video", ··· 9550 9572 9551 9573 [[package]] 9552 9574 name = "servo-media-gstreamer-render-android" 9553 - version = "0.0.6" 9575 + version = "0.1.0" 9554 9576 dependencies = [ 9555 9577 "glib 0.22.3", 9556 9578 "gstreamer", ··· 9563 9585 9564 9586 [[package]] 9565 9587 name = "servo-media-gstreamer-render-unix" 9566 - version = "0.0.6" 9588 + version = "0.1.0" 9567 9589 dependencies = [ 9568 9590 "glib 0.22.3", 9569 9591 "gstreamer", ··· 9578 9600 9579 9601 [[package]] 9580 9602 name = "servo-media-player" 9581 - version = "0.0.6" 9603 + version = "0.1.0" 9582 9604 dependencies = [ 9583 9605 "ipc-channel", 9584 9606 "malloc_size_of_derive", ··· 9591 9613 9592 9614 [[package]] 9593 9615 name = "servo-media-streams" 9594 - version = "0.0.6" 9616 + version = "0.1.0" 9595 9617 dependencies = [ 9596 9618 "malloc_size_of_derive", 9597 9619 "servo-malloc-size-of", ··· 9600 9622 9601 9623 [[package]] 9602 9624 name = "servo-media-thread" 9603 - version = "0.0.6" 9625 + version = "0.1.0" 9604 9626 dependencies = [ 9605 9627 "euclid", 9606 9628 "ipc-channel", ··· 9617 9639 9618 9640 [[package]] 9619 9641 name = "servo-media-traits" 9620 - version = "0.0.6" 9642 + version = "0.1.0" 9621 9643 dependencies = [ 9622 9644 "malloc_size_of_derive", 9623 9645 "servo-malloc-size-of", ··· 9625 9647 9626 9648 [[package]] 9627 9649 name = "servo-media-webrtc" 9628 - version = "0.0.6" 9650 + version = "0.1.0" 9629 9651 dependencies = [ 9630 9652 "log", 9631 9653 "servo-media-streams", ··· 9634 9656 9635 9657 [[package]] 9636 9658 name = "servo-metrics" 9637 - version = "0.0.6" 9659 + version = "0.1.0" 9638 9660 dependencies = [ 9639 9661 "malloc_size_of_derive", 9640 9662 "servo-base", ··· 9648 9670 9649 9671 [[package]] 9650 9672 name = "servo-net" 9651 - version = "0.0.6" 9673 + version = "0.1.0" 9652 9674 dependencies = [ 9653 9675 "anyhow", 9654 9676 "async-compression", ··· 9696 9718 "servo-base", 9697 9719 "servo-config", 9698 9720 "servo-constellation-traits", 9721 + "servo-default-resources", 9699 9722 "servo-devtools-traits", 9700 9723 "servo-embedder-traits", 9701 9724 "servo-hyper-serde", ··· 9724 9747 9725 9748 [[package]] 9726 9749 name = "servo-net-traits" 9727 - version = "0.0.6" 9750 + version = "0.1.0" 9728 9751 dependencies = [ 9729 9752 "content-security-policy", 9730 9753 "cookie 0.18.1", ··· 9747 9770 "serde_json", 9748 9771 "servo-base", 9749 9772 "servo-config", 9773 + "servo-default-resources", 9750 9774 "servo-embedder-traits", 9751 9775 "servo-hyper-serde", 9752 9776 "servo-malloc-size-of", ··· 9766 9790 9767 9791 [[package]] 9768 9792 name = "servo-paint" 9769 - version = "0.0.6" 9793 + version = "0.1.0" 9770 9794 dependencies = [ 9771 9795 "bitflags 2.11.0", 9772 9796 "crossbeam-channel", ··· 9807 9831 9808 9832 [[package]] 9809 9833 name = "servo-paint-api" 9810 - version = "0.0.6" 9834 + version = "0.1.0" 9811 9835 dependencies = [ 9812 9836 "bitflags 2.11.0", 9813 9837 "crossbeam-channel", ··· 9842 9866 9843 9867 [[package]] 9844 9868 name = "servo-pixels" 9845 - version = "0.0.6" 9869 + version = "0.1.0" 9846 9870 dependencies = [ 9847 9871 "criterion", 9848 9872 "euclid", ··· 9857 9881 9858 9882 [[package]] 9859 9883 name = "servo-profile" 9860 - version = "0.0.6" 9884 + version = "0.1.0" 9861 9885 dependencies = [ 9862 9886 "libc", 9863 9887 "log", ··· 9875 9899 9876 9900 [[package]] 9877 9901 name = "servo-profile-traits" 9878 - version = "0.0.6" 9902 + version = "0.1.0" 9879 9903 dependencies = [ 9880 9904 "crossbeam-channel", 9881 9905 "ipc-channel", ··· 9891 9915 9892 9916 [[package]] 9893 9917 name = "servo-script" 9894 - version = "0.0.6" 9918 + version = "0.1.0" 9895 9919 dependencies = [ 9896 9920 "accountable-refcell", 9897 9921 "aes", ··· 10030 10054 10031 10055 [[package]] 10032 10056 name = "servo-script-bindings" 10033 - version = "0.0.6" 10057 + version = "0.1.0" 10034 10058 dependencies = [ 10035 10059 "bitflags 2.11.0", 10036 10060 "crossbeam-channel", ··· 10069 10093 10070 10094 [[package]] 10071 10095 name = "servo-script-traits" 10072 - version = "0.0.6" 10096 + version = "0.1.0" 10073 10097 dependencies = [ 10074 10098 "accesskit", 10075 10099 "crossbeam-channel", ··· 10104 10128 10105 10129 [[package]] 10106 10130 name = "servo-storage" 10107 - version = "0.0.6" 10131 + version = "0.1.0" 10108 10132 dependencies = [ 10109 10133 "libc", 10110 10134 "log", ··· 10117 10141 "serde", 10118 10142 "servo-base", 10119 10143 "servo-config", 10144 + "servo-default-resources", 10120 10145 "servo-malloc-size-of", 10121 10146 "servo-net-traits", 10122 10147 "servo-profile", ··· 10130 10155 10131 10156 [[package]] 10132 10157 name = "servo-storage-traits" 10133 - version = "0.0.6" 10158 + version = "0.1.0" 10134 10159 dependencies = [ 10135 10160 "malloc_size_of_derive", 10136 10161 "serde", ··· 10143 10168 10144 10169 [[package]] 10145 10170 name = "servo-timers" 10146 - version = "0.0.6" 10171 + version = "0.1.0" 10147 10172 dependencies = [ 10148 10173 "crossbeam-channel", 10149 10174 "malloc_size_of_derive", ··· 10152 10177 10153 10178 [[package]] 10154 10179 name = "servo-tracing" 10155 - version = "0.0.6" 10180 + version = "0.1.0" 10156 10181 dependencies = [ 10157 10182 "prettyplease", 10158 10183 "proc-macro2", ··· 10162 10187 10163 10188 [[package]] 10164 10189 name = "servo-url" 10165 - version = "0.0.6" 10190 + version = "0.1.0" 10166 10191 dependencies = [ 10167 10192 "encoding_rs", 10168 10193 "malloc_size_of_derive", ··· 10175 10200 10176 10201 [[package]] 10177 10202 name = "servo-webgl" 10178 - version = "0.0.6" 10203 + version = "0.1.0" 10179 10204 dependencies = [ 10180 10205 "bitflags 2.11.0", 10181 10206 "byteorder", ··· 10199 10224 10200 10225 [[package]] 10201 10226 name = "servo-webgpu" 10202 - version = "0.0.6" 10227 + version = "0.1.0" 10203 10228 dependencies = [ 10204 10229 "arrayvec", 10205 10230 "euclid", ··· 10217 10242 10218 10243 [[package]] 10219 10244 name = "servo-webgpu-traits" 10220 - version = "0.0.6" 10245 + version = "0.1.0" 10221 10246 dependencies = [ 10222 10247 "arrayvec", 10223 10248 "malloc_size_of_derive", ··· 10232 10257 10233 10258 [[package]] 10234 10259 name = "servo-webxr" 10235 - version = "0.0.6" 10260 + version = "0.1.0" 10236 10261 dependencies = [ 10237 10262 "crossbeam-channel", 10238 10263 "euclid", ··· 10250 10275 10251 10276 [[package]] 10252 10277 name = "servo-webxr-api" 10253 - version = "0.0.6" 10278 + version = "0.1.0" 10254 10279 dependencies = [ 10255 10280 "euclid", 10256 10281 "ipc-channel", ··· 10265 10290 10266 10291 [[package]] 10267 10292 name = "servo-xpath" 10268 - version = "0.0.6" 10293 + version = "0.1.0" 10269 10294 dependencies = [ 10270 10295 "log", 10271 10296 "malloc_size_of_derive", ··· 10276 10301 [[package]] 10277 10302 name = "servo_arc" 10278 10303 version = "0.4.3" 10279 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 10304 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 10280 10305 dependencies = [ 10281 10306 "serde", 10282 10307 "stable_deref_trait", ··· 10748 10773 10749 10774 [[package]] 10750 10775 name = "stylo" 10751 - version = "0.14.0" 10752 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 10776 + version = "0.16.0" 10777 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 10753 10778 dependencies = [ 10754 10779 "app_units", 10755 10780 "arrayvec", ··· 10804 10829 10805 10830 [[package]] 10806 10831 name = "stylo_atoms" 10807 - version = "0.14.0" 10808 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 10832 + version = "0.16.0" 10833 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 10809 10834 dependencies = [ 10810 10835 "string_cache", 10811 10836 "string_cache_codegen", ··· 10813 10838 10814 10839 [[package]] 10815 10840 name = "stylo_derive" 10816 - version = "0.14.0" 10817 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 10841 + version = "0.16.0" 10842 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 10818 10843 dependencies = [ 10819 10844 "darling", 10820 10845 "proc-macro2", ··· 10825 10850 10826 10851 [[package]] 10827 10852 name = "stylo_dom" 10828 - version = "0.14.0" 10829 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 10853 + version = "0.16.0" 10854 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 10830 10855 dependencies = [ 10831 10856 "bitflags 2.11.0", 10832 10857 "stylo_malloc_size_of", ··· 10834 10859 10835 10860 [[package]] 10836 10861 name = "stylo_malloc_size_of" 10837 - version = "0.14.0" 10838 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 10862 + version = "0.16.0" 10863 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 10839 10864 dependencies = [ 10840 10865 "app_units", 10841 10866 "cssparser", ··· 10851 10876 10852 10877 [[package]] 10853 10878 name = "stylo_static_prefs" 10854 - version = "0.14.0" 10855 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 10879 + version = "0.16.0" 10880 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 10856 10881 10857 10882 [[package]] 10858 10883 name = "stylo_traits" 10859 - version = "0.14.0" 10860 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 10884 + version = "0.16.0" 10885 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 10861 10886 dependencies = [ 10862 10887 "app_units", 10863 10888 "bitflags 2.11.0", ··· 11047 11072 11048 11073 [[package]] 11049 11074 name = "taffy" 11050 - version = "0.9.2" 11075 + version = "0.10.0" 11051 11076 source = "registry+https://github.com/rust-lang/crates.io-index" 11052 - checksum = "41ba83ebaf2954d31d05d67340fd46cebe99da2b7133b0dd68d70c65473a437b" 11077 + checksum = "96fb9d22ffe63c7aa8996275aa0017404b513619bb6cf6309d9f822095afb414" 11053 11078 dependencies = [ 11054 11079 "arrayvec", 11055 11080 "grid", ··· 11358 11383 [[package]] 11359 11384 name = "to_shmem" 11360 11385 version = "0.3.0" 11361 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 11386 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 11362 11387 dependencies = [ 11363 11388 "cssparser", 11364 11389 "servo_arc", ··· 11371 11396 [[package]] 11372 11397 name = "to_shmem_derive" 11373 11398 version = "0.1.0" 11374 - source = "git+https://github.com/servo/stylo?rev=8557228b96c0e343764953e72a62ea503baf01b3#8557228b96c0e343764953e72a62ea503baf01b3" 11399 + source = "git+https://github.com/servo/stylo?rev=6cfce6f3293b5e13c2246838380e514b8b206a27#6cfce6f3293b5e13c2246838380e514b8b206a27" 11375 11400 dependencies = [ 11376 11401 "darling", 11377 11402 "proc-macro2",
+56 -54
Cargo.toml
··· 5 5 # Copied from the main Cargo.toml to allow 6 6 # workspace inheritance from component/ crates. 7 7 [workspace.package] 8 - version = "0.0.6" 8 + version = "0.1.0" 9 9 edition = "2024" 10 10 authors = ["The Servo Project Developers"] 11 11 license = "MPL-2.0" ··· 53 53 cssparser = { version = "0.36", features = ["serde"] } 54 54 ctr = "0.9.2" 55 55 data-url = "0.3" 56 - deny_public_fields = { package = "servo-deny-public-fields", version = "0.0.6", path = "source/components/deny_public_fields" } 56 + deny_public_fields = { package = "servo-deny-public-fields", version = "0.1.0", path = "source/components/deny_public_fields" } 57 57 der = { version = "0.7", features = ["alloc", "derive"] } 58 - devtools = { package = "servo-devtools", version = "0.0.6", path = "source/components/devtools" } 58 + devtools = { package = "servo-devtools", version = "0.1.0", path = "source/components/devtools" } 59 59 devtools_traits = { package = "servo-devtools-traits", path = "source/components/shared/devtools" } 60 60 digest = "0.10" 61 - dom_struct = { package = "servo-dom-struct", version = "0.0.6", path = "source/components/dom_struct" } 61 + dom_struct = { package = "servo-dom-struct", version = "0.1.0", path = "source/components/dom_struct" } 62 62 dpi = "0.1" 63 63 dwrote = "0.11.5" 64 64 ecdsa = "0.16" ··· 68 68 env_logger = "0.11" 69 69 euclid = "0.22" 70 70 flate2 = "1.1" 71 - fonts = { package = "servo-fonts", version = "0.0.6", path = "source/components/fonts" } 71 + fonts = { package = "servo-fonts", version = "0.1.0", path = "source/components/fonts" } 72 72 fonts_traits = { package = "servo-fonts-traits", path = "source/components/shared/fonts" } 73 73 freetype-sys = "0.20" 74 74 futures = { version = "0.3", default-features = false } ··· 109 109 image = { version = "0.25", default-features = false, features = ["avif", "rayon", "bmp", "gif", "ico", "jpeg", "png", "webp"] } 110 110 imsz = "0.4" 111 111 indexmap = { version = "2.11.4", features = ["std"] } 112 + inventory = { version = "0.3.24" } 112 113 ipc-channel = "0.21" 113 114 iroh = { version = "0.97", default-features = false, features = ["address-lookup-mdns"] } 114 115 iroh-persist = "0.1.6" 115 116 itertools = "0.14" 116 117 js = { package = "mozjs", version = "=0.15.5", default-features = false, features = ["libz-sys", "intl"] } 117 - jstraceable_derive = { package = "servo-jstraceable-derive", version = "0.0.6", path = "source/components/jstraceable_derive" } 118 + jstraceable_derive = { package = "servo-jstraceable-derive", version = "0.1.0", path = "source/components/jstraceable_derive" } 118 119 keyboard-types = { version = "0.8.3", features = ["serde", "webdriver"] } 119 120 kurbo = { version = "0.12", features = ["euclid"] } 120 - layout = { package = "servo-layout", version = "0.0.6", path = "source/components/layout" } 121 + layout = { package = "servo-layout", version = "0.1.0", path = "source/components/layout" } 121 122 layout_api = { package = "servo-layout-api", path = "source/components/shared/layout" } 122 123 libc = "0.2" 123 124 log = "0.4.29" ··· 125 126 malloc_size_of = { package = "servo-malloc-size-of", path = "source/components/malloc_size_of" } 126 127 malloc_size_of_derive = "0.1" 127 128 markup5ever = "0.39" 128 - media = { package = "servo-media-thread", version = "0.0.6", path = "source/components/media/media-thread" } 129 + media = { package = "servo-media-thread", version = "0.1.0", path = "source/components/media/media-thread" } 129 130 memmap2 = "0.9.9" 130 - metrics = { package = "servo-metrics", version = "0.0.6", path = "source/components/metrics" } 131 + metrics = { package = "servo-metrics", version = "0.1.0", path = "source/components/metrics" } 131 132 mime = "0.3.13" 132 133 mime-multipart-hyper1 = "0.10.0" 133 134 mime_guess = "2.0.5" 134 135 ml-dsa = "0.0.4" 135 136 ml-kem = { version = "0.2", features = ["deterministic"] } 136 137 mozangle = "0.5.3" 137 - net = { package = "servo-net", version = "0.0.6", path = "source/components/net" } 138 + net = { package = "servo-net", version = "0.1.0", path = "source/components/net" } 138 139 net_traits = { package = "servo-net-traits", path = "source/components/shared/net" } 139 140 nix = "0.30" 140 141 nom = "8.0.0" ··· 149 150 objc2-core-graphics = "0.3.2" 150 151 objc2-core-text = "0.3.2" 151 152 openxr = "0.20" 152 - paint = { package = "servo-paint", version = "0.0.6", path = "source/components/paint" } 153 + paint = { package = "servo-paint", version = "0.1.0", path = "source/components/paint" } 153 154 paint_api = { package = "servo-paint-api", path = "source/components/shared/paint" } 154 155 p256 = { version = "0.13", features = ["ecdh"] } 155 156 p384 = { version = "0.13", features = ["ecdh"] } ··· 157 158 parking_lot = { version = "0.12", features = ["serde"] } 158 159 peniko = "0.5" 159 160 percent-encoding = "2.3" 160 - pixels = { package = "servo-pixels", version = "0.0.6", path = "source/components/pixels" } 161 + pixels = { package = "servo-pixels", version = "0.1.0", path = "source/components/pixels" } 161 162 pkcs8 = { version = "0.10", features = ["rand_core"] } 162 163 postcard = { version = "1.1.3", default-features = false, features = ["use-std"] } 163 164 proc-macro2 = "1" 164 - profile = { package = "servo-profile", version = "0.0.6", path = "source/components/profile" } 165 + profile = { package = "servo-profile", version = "0.1.0", path = "source/components/profile" } 165 166 profile_traits = { package = "servo-profile-traits", path = "source/components/shared/profile" } 166 167 quote = "1" 167 168 rand = "0.9" ··· 176 177 rustls-pki-types = "1.14" 177 178 rustls-platform-verifier = "0.6.2" 178 179 script = { package = "servo-script", path = "source/components/script" } 179 - script_bindings = { package = "servo-script-bindings", version = "0.0.6", path = "source/components/script_bindings" } 180 + script_bindings = { package = "servo-script-bindings", version = "0.1.0", path = "source/components/script_bindings" } 180 181 script_traits = { package = "servo-script-traits", path = "source/components/shared/script" } 181 182 sea-query = { version = "1.0.0-rc.30", default-features = false, features = ["backend-sqlite", "derive"] } 182 183 sea-query-rusqlite = { version = "0.8.0-rc.15" } 183 184 sec1 = "0.7" 184 - selectors = { git = "https://github.com/servo/stylo", rev = "8557228b96c0e343764953e72a62ea503baf01b3" } 185 + selectors = { git = "https://github.com/servo/stylo", rev = "6cfce6f3293b5e13c2246838380e514b8b206a27" } 185 186 serde = "1.0.228" 186 187 serde_bytes = "0.11" 187 188 serde_core = "1.0.226" 188 189 serde_json = "1.0" 189 - servo = { version = "0.0.6", path = "source/components/servo", default-features = false } 190 - servo-allocator = { version = "0.0.6", path = "source/components/allocator" } 191 - servo-background-hang-monitor = { version = "0.0.6", path = "source/components/background_hang_monitor" } 192 - servo-background-hang-monitor-api = { version = "0.0.6", path = "source/components/shared/background_hang_monitor" } 193 - servo-base = { version = "0.0.6", path = "source/components/shared/base" } 194 - servo-bluetooth = { version = "0.0.6", path = "source/components/bluetooth" } 195 - servo-bluetooth-traits = { version = "0.0.6", path = "source/components/shared/bluetooth" } 196 - servo-canvas = { version = "0.0.6", path = "source/components/canvas" } 197 - servo-canvas-traits = { version = "0.0.6", path = "source/components/shared/canvas" } 198 - servo-config = { package = "servo-config", version = "0.0.6", path = "source/components/config" } 199 - servo-config-macro = { package = "servo-config-macro", version = "0.0.6", path = "source/components/config/macro" } 200 - servo-constellation = { version = "0.0.6", path = "source/components/constellation" } 201 - servo-constellation-traits = { version = "0.0.6", path = "source/components/shared/constellation" } 202 - servo-geometry = { package = "servo-geometry", version = "0.0.6", path = "source/components/geometry" } 190 + servo = { version = "0.1.0", path = "source/components/servo", default-features = false } 191 + servo-allocator = { version = "0.1.0", path = "source/components/allocator" } 192 + servo-background-hang-monitor = { version = "0.1.0", path = "source/components/background_hang_monitor" } 193 + servo-background-hang-monitor-api = { version = "0.1.0", path = "source/components/shared/background_hang_monitor" } 194 + servo-base = { version = "0.1.0", path = "source/components/shared/base" } 195 + servo-bluetooth = { version = "0.1.0", path = "source/components/bluetooth" } 196 + servo-bluetooth-traits = { version = "0.1.0", path = "source/components/shared/bluetooth" } 197 + servo-canvas = { version = "0.1.0", path = "source/components/canvas" } 198 + servo-canvas-traits = { version = "0.1.0", path = "source/components/shared/canvas" } 199 + servo-config = { package = "servo-config", version = "0.1.0", path = "source/components/config" } 200 + servo-config-macro = { package = "servo-config-macro", version = "0.1.0", path = "source/components/config/macro" } 201 + servo-constellation = { version = "0.1.0", path = "source/components/constellation" } 202 + servo-constellation-traits = { version = "0.1.0", path = "source/components/shared/constellation" } 203 + servo-default-resources = { version = "0.1.0", path = "source/components/default-resources" } 204 + servo-geometry = { package = "servo-geometry", version = "0.1.0", path = "source/components/geometry" } 203 205 servo-media = { path = "source/components/media/servo-media" } 204 - servo-media-audio = { version = "0.0.6", path = "source/components/media/audio" } 205 - servo-media-derive = { version = "0.0.6", path = "source/components/media/servo-media-derive" } 206 + servo-media-audio = { version = "0.1.0", path = "source/components/media/audio" } 207 + servo-media-derive = { version = "0.1.0", path = "source/components/media/servo-media-derive" } 206 208 servo-media-dummy = { path = "source/components/media/backends/dummy" } 207 209 servo-media-gstreamer = { path = "source/components/media/backends/gstreamer" } 208 - servo-media-gstreamer-render = { version = "0.0.6", path = "source/components/media/backends/gstreamer/render" } 209 - servo-media-gstreamer-render-android = { version = "0.0.6", path = "source/components/media/backends/gstreamer/render-android" } 210 - servo-media-gstreamer-render-unix = { version = "0.0.6", path = "source/components/media/backends/gstreamer/render-unix" } 211 - servo-media-player = { version = "0.0.6", path = "source/components/media/player" } 212 - servo-media-streams = { version = "0.0.6", path = "source/components/media/streams" } 213 - servo-media-traits = { version = "0.0.6", path = "source/components/media/traits" } 214 - servo-media-webrtc = { version = "0.0.6", path = "source/components/media/webrtc" } 215 - servo_allocator = { package = "servo-allocator", version = "0.0.6", path = "source/components/allocator" } 210 + servo-media-gstreamer-render = { version = "0.1.0", path = "source/components/media/backends/gstreamer/render" } 211 + servo-media-gstreamer-render-android = { version = "0.1.0", path = "source/components/media/backends/gstreamer/render-android" } 212 + servo-media-gstreamer-render-unix = { version = "0.1.0", path = "source/components/media/backends/gstreamer/render-unix" } 213 + servo-media-player = { version = "0.1.0", path = "source/components/media/player" } 214 + servo-media-streams = { version = "0.1.0", path = "source/components/media/streams" } 215 + servo-media-traits = { version = "0.1.0", path = "source/components/media/traits" } 216 + servo-media-webrtc = { version = "0.1.0", path = "source/components/media/webrtc" } 217 + servo_allocator = { package = "servo-allocator", version = "0.1.0", path = "source/components/allocator" } 216 218 servo-tracing = { path = "source/components/servo_tracing" } 217 - servo_arc = { git = "https://github.com/servo/stylo", rev = "8557228b96c0e343764953e72a62ea503baf01b3" } 218 - servo-url = { version = "0.0.6", path = "source/components/url" } 219 + servo_arc = { git = "https://github.com/servo/stylo", rev = "6cfce6f3293b5e13c2246838380e514b8b206a27" } 220 + servo-url = { version = "0.1.0", path = "source/components/url" } 219 221 sha1 = "0.10" 220 222 sha2 = "0.10" 221 223 sha3 = "0.10" 222 224 skrifa = "0.37.0" 223 225 smallvec = { version = "1.15", features = ["serde", "union"] } 224 - storage = { package = "servo-storage", version = "0.0.6", path = "source/components/storage" } 226 + storage = { package = "servo-storage", version = "0.1.0", path = "source/components/storage" } 225 227 storage_traits = { package = "servo-storage-traits", path = "source/components/shared/storage" } 226 228 string_cache = "0.9" 227 229 strum = { version = "0.27", features = ["derive"] } 228 - stylo = { git = "https://github.com/servo/stylo", rev = "8557228b96c0e343764953e72a62ea503baf01b3" } 229 - stylo_atoms = { git = "https://github.com/servo/stylo", rev = "8557228b96c0e343764953e72a62ea503baf01b3" } 230 - stylo_config = { git = "https://github.com/servo/stylo", rev = "8557228b96c0e343764953e72a62ea503baf01b3" } 231 - stylo_dom = { git = "https://github.com/servo/stylo", rev = "8557228b96c0e343764953e72a62ea503baf01b3" } 232 - stylo_malloc_size_of = { git = "https://github.com/servo/stylo", rev = "8557228b96c0e343764953e72a62ea503baf01b3" } 233 - stylo_static_prefs = { git = "https://github.com/servo/stylo", rev = "8557228b96c0e343764953e72a62ea503baf01b3" } 234 - stylo_traits = { git = "https://github.com/servo/stylo", rev = "8557228b96c0e343764953e72a62ea503baf01b3" } 230 + stylo = { git = "https://github.com/servo/stylo", rev = "6cfce6f3293b5e13c2246838380e514b8b206a27" } 231 + stylo_atoms = { git = "https://github.com/servo/stylo", rev = "6cfce6f3293b5e13c2246838380e514b8b206a27" } 232 + stylo_config = { git = "https://github.com/servo/stylo", rev = "6cfce6f3293b5e13c2246838380e514b8b206a27" } 233 + stylo_dom = { git = "https://github.com/servo/stylo", rev = "6cfce6f3293b5e13c2246838380e514b8b206a27" } 234 + stylo_malloc_size_of = { git = "https://github.com/servo/stylo", rev = "6cfce6f3293b5e13c2246838380e514b8b206a27" } 235 + stylo_static_prefs = { git = "https://github.com/servo/stylo", rev = "6cfce6f3293b5e13c2246838380e514b8b206a27" } 236 + stylo_traits = { git = "https://github.com/servo/stylo", rev = "6cfce6f3293b5e13c2246838380e514b8b206a27" } 235 237 surfman = { version = "0.11.0", features = ["chains"] } 236 238 syn = { version = "2", default-features = false, features = ["clone-impls", "derive", "parsing"] } 237 239 synstructure = "0.13" 238 - taffy = { version = "0.9.2", default-features = false, features = ["calc", "detailed_layout_info", "grid", "std"] } 240 + taffy = { version = "0.10", default-features = false, features = ["calc", "detailed_layout_info", "grid", "std"] } 239 241 tendril = { version = "0.5", features = ["encoding_rs"] } 240 242 tikv-jemalloc-sys = "0.6.1" 241 243 tikv-jemallocator = "0.6.1" 242 - timers = { package = "servo-timers", version = "0.0.6", path = "source/components/timers" } 244 + timers = { package = "servo-timers", version = "0.1.0", path = "source/components/timers" } 243 245 time = { package = "time", version = "0.3", features = ["large-dates", "local-offset", "serde"] } 244 246 tokio = "1" 245 247 tokio-rustls = { version = "0.26", default-features = false, features = ["logging"] } ··· 262 264 vello = "0.6" 263 265 vello_cpu = "0.0.4" 264 266 webdriver = "0.53.0" 265 - webgl = { package = "servo-webgl", version = "0.0.6", path = "source/components/webgl", default-features = false } 266 - webgpu = { package = "servo-webgpu", version = "0.0.6", path = "source/components/webgpu" } 267 + webgl = { package = "servo-webgl", version = "0.1.0", path = "source/components/webgl", default-features = false } 268 + webgpu = { package = "servo-webgpu", version = "0.1.0", path = "source/components/webgpu" } 267 269 webgpu_traits = { package = "servo-webgpu-traits", path = "source/components/shared/webgpu" } 268 270 webpki-roots = "1.0" 269 271 webrender = { version = "0.68", features = ["capture"] } 270 272 webrender_api = "0.68" 271 - webxr = { package = "servo-webxr", version = "0.0.6", path = "source/components/webxr" } 273 + webxr = { package = "servo-webxr", version = "0.1.0", path = "source/components/webxr" } 272 274 webxr-api = { package = "servo-webxr-api", path = "source/components/shared/webxr" } 273 275 wgpu-core = "26" 274 276 wgpu-types = "26"
+18 -9
crates/beaver_shell/src/resources.rs
··· 3 3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ 4 4 5 5 use std::path::PathBuf; 6 + use std::sync::OnceLock; 6 7 use std::{env, fs}; 7 8 8 9 use servo::resources::{self, Resource}; 10 + use servo::submit_resource_reader; 9 11 10 - struct ResourceReader { 11 - resources_dir: PathBuf, 12 + struct BeaverResourceReader { 13 + resources_dir: OnceLock<PathBuf>, 12 14 } 13 15 14 - pub fn init() { 15 - resources::set(Box::new(ResourceReader { 16 - resources_dir: ancestor_dir_path("resources"), 17 - })); 16 + static BEAVER_RESOURCE_READER: BeaverResourceReader = BeaverResourceReader { 17 + resources_dir: OnceLock::new(), 18 + }; 19 + 20 + pub(crate) fn init() { 21 + BEAVER_RESOURCE_READER 22 + .resources_dir 23 + .set(ancestor_dir_path("resources")) 24 + .expect("Already initialized.") 18 25 } 26 + 27 + submit_resource_reader!(&BEAVER_RESOURCE_READER); 19 28 20 29 pub(crate) fn ancestor_dir_path(needle: &str) -> PathBuf { 21 30 // Try ./resources relative to the directory containing the ··· 32 41 panic!("Could not find {needle} directory"); 33 42 } 34 43 35 - impl resources::ResourceReaderMethods for ResourceReader { 44 + impl resources::ResourceReaderMethods for BeaverResourceReader { 36 45 fn read(&self, file: Resource) -> Vec<u8> { 37 - let mut path = self.resources_dir.clone(); 46 + let mut path = self.resources_dir.get().unwrap().clone(); 38 47 path.push(file.filename()); 39 48 fs::read(path).expect("Can't read file") 40 49 } 41 50 42 51 fn sandbox_access_files_dirs(&self) -> Vec<PathBuf> { 43 - vec![self.resources_dir.clone()] 52 + vec![self.resources_dir.get().unwrap().clone()] 44 53 } 45 54 46 55 fn sandbox_access_files(&self) -> Vec<PathBuf> {
+1 -1
forkme.lock
··· 1 - 54bc366160b226618d2b2bf88c1c8ac8b6cb110c 1 + 7c05e1556f3c23c46aa925ec3f7c9ea22cc23da3
+55 -54
patches/Cargo.lock.patch
··· 342 342 name = "hilog" 343 343 version = "0.2.2" 344 344 source = "registry+https://github.com/rust-lang/crates.io-index" 345 - @@ -3833,6 +4020,22 @@ 345 + @@ -3832,6 +4019,22 @@ 346 346 ] 347 347 348 348 [[package]] ··· 365 365 name = "hyper-util" 366 366 version = "0.1.20" 367 367 source = "registry+https://github.com/rust-lang/crates.io-index" 368 - @@ -3850,9 +4053,11 @@ 368 + @@ -3849,9 +4052,11 @@ 369 369 "percent-encoding", 370 370 "pin-project-lite", 371 371 "socket2 0.6.1", ··· 377 377 ] 378 378 379 379 [[package]] 380 - @@ -4458,6 +4663,29 @@ 380 + @@ -4466,6 +4671,29 @@ 381 381 ] 382 382 383 383 [[package]] ··· 407 407 name = "ipnet" 408 408 version = "2.12.0" 409 409 source = "registry+https://github.com/rust-lang/crates.io-index" 410 - @@ -4464,6 +4692,16 @@ 410 + @@ -4472,6 +4700,16 @@ 411 411 checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" 412 412 413 413 [[package]] ··· 424 424 name = "is-terminal" 425 425 version = "0.4.17" 426 426 source = "registry+https://github.com/rust-lang/crates.io-index" 427 - @@ -4622,6 +4860,20 @@ 427 + @@ -4630,6 +4868,20 @@ 428 428 ] 429 429 430 430 [[package]] ··· 445 445 name = "keccak" 446 446 version = "0.1.6" 447 447 source = "registry+https://github.com/rust-lang/crates.io-index" 448 - @@ -4867,6 +5119,21 @@ 448 + @@ -4875,6 +5127,21 @@ 449 449 ] 450 450 451 451 [[package]] ··· 467 467 name = "mach2" 468 468 version = "0.6.0" 469 469 source = "registry+https://github.com/rust-lang/crates.io-index" 470 - @@ -4912,6 +5179,17 @@ 470 + @@ -4920,6 +5187,17 @@ 471 471 ] 472 472 473 473 [[package]] ··· 485 485 name = "matchers" 486 486 version = "0.2.0" 487 487 source = "registry+https://github.com/rust-lang/crates.io-index" 488 - @@ -4963,7 +5241,7 @@ 488 + @@ -4971,7 +5249,7 @@ 489 489 "bitflags 2.11.0", 490 490 "block", 491 491 "core-graphics-types 0.2.0", ··· 494 494 "log", 495 495 "objc", 496 496 "paste", 497 - @@ -5055,6 +5333,23 @@ 497 + @@ -5063,6 +5341,23 @@ 498 498 ] 499 499 500 500 [[package]] ··· 518 518 name = "mozangle" 519 519 version = "0.5.5" 520 520 source = "registry+https://github.com/rust-lang/crates.io-index" 521 - @@ -5107,6 +5402,29 @@ 521 + @@ -5115,6 +5410,29 @@ 522 522 checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0" 523 523 524 524 [[package]] ··· 548 548 name = "naga" 549 549 version = "26.0.0" 550 550 source = "registry+https://github.com/rust-lang/crates.io-index" 551 - @@ -5190,6 +5508,23 @@ 551 + @@ -5198,6 +5516,23 @@ 552 552 ] 553 553 554 554 [[package]] ··· 572 572 name = "ndk" 573 573 version = "0.9.0" 574 574 source = "registry+https://github.com/rust-lang/crates.io-index" 575 - @@ -5896,6 +6231,10 @@ 575 + @@ -5904,6 +6239,10 @@ 576 576 version = "1.21.4" 577 577 source = "registry+https://github.com/rust-lang/crates.io-index" 578 578 checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" ··· 583 583 584 584 [[package]] 585 585 name = "once_cell_polyfill" 586 - @@ -5916,6 +6255,32 @@ 586 + @@ -5924,6 +6263,32 @@ 587 587 checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" 588 588 589 589 [[package]] ··· 616 616 name = "openssl-probe" 617 617 version = "0.2.1" 618 618 source = "registry+https://github.com/rust-lang/crates.io-index" 619 - @@ -5922,6 +6287,18 @@ 619 + @@ -5930,6 +6295,18 @@ 620 620 checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" 621 621 622 622 [[package]] ··· 635 635 name = "openxr" 636 636 version = "0.20.0" 637 637 source = "registry+https://github.com/rust-lang/crates.io-index" 638 - @@ -6574,6 +6951,61 @@ 638 + @@ -6576,6 +6953,61 @@ 639 639 ] 640 640 641 641 [[package]] ··· 697 697 name = "quote" 698 698 version = "1.0.45" 699 699 source = "registry+https://github.com/rust-lang/crates.io-index" 700 - @@ -6879,6 +7311,56 @@ 700 + @@ -6881,6 +7313,56 @@ 701 701 checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" 702 702 703 703 [[package]] ··· 754 754 name = "resvg" 755 755 version = "0.45.1" 756 756 source = "registry+https://github.com/rust-lang/crates.io-index" 757 - @@ -7045,6 +7527,7 @@ 757 + @@ -7047,6 +7529,7 @@ 758 758 "aws-lc-rs", 759 759 "log", 760 760 "once_cell", ··· 762 762 "rustls-pki-types", 763 763 "rustls-webpki", 764 764 "subtle", 765 - @@ -7069,6 +7552,7 @@ 765 + @@ -7071,6 +7554,7 @@ 766 766 source = "registry+https://github.com/rust-lang/crates.io-index" 767 767 checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" 768 768 dependencies = [ ··· 770 770 "zeroize", 771 771 ] 772 772 773 - @@ -7240,6 +7724,7 @@ 773 + @@ -7242,6 +7726,7 @@ 774 774 "der", 775 775 "generic-array", 776 776 "pkcs8", ··· 778 778 "subtle", 779 779 "zeroize", 780 780 ] 781 - @@ -7346,6 +7831,18 @@ 781 + @@ -7348,6 +7833,18 @@ 782 782 ] 783 783 784 784 [[package]] ··· 797 797 name = "serde_json" 798 798 version = "1.0.149" 799 799 source = "registry+https://github.com/rust-lang/crates.io-index" 800 - @@ -7401,6 +7898,16 @@ 800 + @@ -7403,6 +7900,16 @@ 801 801 ] 802 802 803 803 [[package]] ··· 812 812 + 813 813 +[[package]] 814 814 name = "servo" 815 - version = "0.0.6" 815 + version = "0.1.0" 816 816 dependencies = [ 817 - @@ -7649,6 +8156,7 @@ 817 + @@ -7654,6 +8161,7 @@ 818 818 "rand 0.9.2", 819 819 "rustc-hash 2.1.2", 820 820 "serde", ··· 822 822 "servo-background-hang-monitor", 823 823 "servo-background-hang-monitor-api", 824 824 "servo-base", 825 - @@ -7675,6 +8183,8 @@ 825 + @@ -7680,6 +8188,8 @@ 826 826 "servo-webxr-api", 827 827 "stylo", 828 828 "stylo_traits", ··· 831 831 "tracing", 832 832 ] 833 833 834 - @@ -8263,9 +8773,11 @@ 834 + @@ -8278,9 +8788,11 @@ 835 835 name = "servo-net" 836 - version = "0.0.6" 836 + version = "0.1.0" 837 837 dependencies = [ 838 838 + "anyhow", 839 839 "async-compression", ··· 843 843 "base64 0.22.1", 844 844 "bytes", 845 845 "chrono", 846 - @@ -8296,6 +8808,7 @@ 846 + @@ -8311,6 +8823,7 @@ 847 847 "parking_lot", 848 848 "quick_cache", 849 849 "regex", ··· 851 851 "resvg", 852 852 "rustc-hash 2.1.2", 853 853 "rustls", 854 - @@ -8302,8 +8815,10 @@ 854 + @@ -8317,9 +8830,11 @@ 855 855 "rustls-pki-types", 856 856 "rustls-platform-verifier", 857 857 "serde", 858 858 + "serde_json", 859 859 "servo-base", 860 860 "servo-config", 861 + "servo-default-resources", 861 862 + "servo-constellation-traits", 862 863 "servo-devtools-traits", 863 864 "servo-embedder-traits", 864 865 "servo-hyper-serde", 865 - @@ -8316,6 +8831,7 @@ 866 + @@ -8332,6 +8847,7 @@ 866 867 "servo-url", 867 868 "servo_arc", 868 869 "sha2", ··· 870 871 "time", 871 872 "tokio", 872 873 "tokio-rustls", 873 - @@ -8351,6 +8867,7 @@ 874 + @@ -8367,6 +8883,7 @@ 874 875 "rustc-hash 2.1.2", 875 876 "rustls-pki-types", 876 877 "serde", 877 878 + "serde_json", 878 879 "servo-base", 879 880 "servo-config", 880 - "servo-embedder-traits", 881 - @@ -8361,8 +8878,10 @@ 881 + "servo-default-resources", 882 + @@ -8378,8 +8895,10 @@ 882 883 "servo-profile-traits", 883 884 "servo-url", 884 885 "servo_arc", ··· 889 890 "url", 890 891 "uuid", 891 892 "webrender_api", 892 - @@ -8921,6 +9440,7 @@ 893 + @@ -8939,6 +9458,7 @@ 893 894 "bpaf", 894 895 "cc", 895 896 "cfg-if", ··· 897 898 "crossbeam-channel", 898 899 "dirs", 899 900 "dpi", 900 - @@ -8935,6 +9455,7 @@ 901 + @@ -8953,6 +9473,7 @@ 901 902 "headers 0.4.1", 902 903 "hilog", 903 904 "hitrace", ··· 905 906 "image", 906 907 "ipc-channel", 907 908 "jni 0.21.1", 908 - @@ -8955,11 +9476,13 @@ 909 + @@ -8973,11 +9494,13 @@ 909 910 "ohos-window-manager-sys", 910 911 "raw-window-handle", 911 912 "rustls", ··· 919 920 "sig", 920 921 "surfman", 921 922 "tokio", 922 - @@ -9525,6 +10048,9 @@ 923 + @@ -9543,6 +10066,9 @@ 923 924 version = "1.0.2" 924 925 source = "registry+https://github.com/rust-lang/crates.io-index" 925 926 checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" ··· 929 930 930 931 [[package]] 931 932 name = "synstructure" 932 - @@ -9559,6 +10085,27 @@ 933 + @@ -9577,6 +10103,27 @@ 933 934 ] 934 935 935 936 [[package]] ··· 957 958 name = "system-deps" 958 959 version = "6.2.2" 959 960 source = "registry+https://github.com/rust-lang/crates.io-index" 960 - @@ -9597,6 +10144,12 @@ 961 + @@ -9615,6 +10162,12 @@ 961 962 ] 962 963 963 964 [[package]] ··· 970 971 name = "tar" 971 972 version = "0.4.45" 972 973 source = "registry+https://github.com/rust-lang/crates.io-index" 973 - @@ -9904,6 +10457,16 @@ 974 + @@ -9922,6 +10475,16 @@ 974 975 ] 975 976 976 977 [[package]] ··· 987 988 name = "tokio-rustls" 988 989 version = "0.26.4" 989 990 source = "registry+https://github.com/rust-lang/crates.io-index" 990 - @@ -10025,11 +10588,30 @@ 991 + @@ -10043,11 +10606,30 @@ 991 992 "futures-util", 992 993 "pin-project-lite", 993 994 "sync_wrapper", ··· 1018 1019 name = "tower-layer" 1019 1020 version = "0.3.3" 1020 1021 source = "registry+https://github.com/rust-lang/crates.io-index" 1021 - @@ -10308,6 +10890,12 @@ 1022 + @@ -10326,6 +10908,12 @@ 1022 1023 ] 1023 1024 1024 1025 [[package]] ··· 1031 1032 name = "untrusted" 1032 1033 version = "0.9.0" 1033 1034 source = "registry+https://github.com/rust-lang/crates.io-index" 1034 - @@ -10327,6 +10915,12 @@ 1035 + @@ -10345,6 +10933,12 @@ 1035 1036 ] 1036 1037 1037 1038 [[package]] ··· 1044 1045 name = "urlpattern" 1045 1046 version = "0.3.0" 1046 1047 source = "registry+https://github.com/rust-lang/crates.io-index" 1047 - @@ -11095,6 +11689,12 @@ 1048 + @@ -11113,6 +11707,12 @@ 1048 1049 ] 1049 1050 1050 1051 [[package]] ··· 1057 1058 name = "winapi" 1058 1059 version = "0.3.9" 1059 1060 source = "registry+https://github.com/rust-lang/crates.io-index" 1060 - @@ -11316,6 +11916,17 @@ 1061 + @@ -11334,6 +11934,17 @@ 1061 1062 ] 1062 1063 1063 1064 [[package]] ··· 1075 1076 name = "windows-result" 1076 1077 version = "0.2.0" 1077 1078 source = "registry+https://github.com/rust-lang/crates.io-index" 1078 - @@ -11381,6 +11992,15 @@ 1079 + @@ -11399,6 +12010,15 @@ 1079 1080 1080 1081 [[package]] 1081 1082 name = "windows-sys" ··· 1091 1092 version = "0.52.0" 1092 1093 source = "registry+https://github.com/rust-lang/crates.io-index" 1093 1094 checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1094 - @@ -11432,6 +12052,21 @@ 1095 + @@ -11450,6 +12070,21 @@ 1095 1096 1096 1097 [[package]] 1097 1098 name = "windows-targets" ··· 1113 1114 version = "0.52.6" 1114 1115 source = "registry+https://github.com/rust-lang/crates.io-index" 1115 1116 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1116 - @@ -11489,6 +12124,12 @@ 1117 + @@ -11507,6 +12142,12 @@ 1117 1118 1118 1119 [[package]] 1119 1120 name = "windows_aarch64_gnullvm" ··· 1126 1127 version = "0.52.6" 1127 1128 source = "registry+https://github.com/rust-lang/crates.io-index" 1128 1129 checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1129 - @@ -11507,6 +12148,12 @@ 1130 + @@ -11525,6 +12166,12 @@ 1130 1131 1131 1132 [[package]] 1132 1133 name = "windows_aarch64_msvc" ··· 1139 1140 version = "0.52.6" 1140 1141 source = "registry+https://github.com/rust-lang/crates.io-index" 1141 1142 checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1142 - @@ -11525,6 +12172,12 @@ 1143 + @@ -11543,6 +12190,12 @@ 1143 1144 1144 1145 [[package]] 1145 1146 name = "windows_i686_gnu" ··· 1152 1153 version = "0.52.6" 1153 1154 source = "registry+https://github.com/rust-lang/crates.io-index" 1154 1155 checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1155 - @@ -11555,6 +12208,12 @@ 1156 + @@ -11573,6 +12226,12 @@ 1156 1157 1157 1158 [[package]] 1158 1159 name = "windows_i686_msvc" ··· 1165 1166 version = "0.52.6" 1166 1167 source = "registry+https://github.com/rust-lang/crates.io-index" 1167 1168 checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1168 - @@ -11573,6 +12232,12 @@ 1169 + @@ -11591,6 +12250,12 @@ 1169 1170 1170 1171 [[package]] 1171 1172 name = "windows_x86_64_gnu" ··· 1178 1179 version = "0.52.6" 1179 1180 source = "registry+https://github.com/rust-lang/crates.io-index" 1180 1181 checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1181 - @@ -11591,6 +12256,12 @@ 1182 + @@ -11609,6 +12274,12 @@ 1182 1183 1183 1184 [[package]] 1184 1185 name = "windows_x86_64_gnullvm" ··· 1191 1192 version = "0.52.6" 1192 1193 source = "registry+https://github.com/rust-lang/crates.io-index" 1193 1194 checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1194 - @@ -11609,6 +12280,12 @@ 1195 + @@ -11627,6 +12298,12 @@ 1195 1196 1196 1197 [[package]] 1197 1198 name = "windows_x86_64_msvc" ··· 1204 1205 version = "0.52.6" 1205 1206 source = "registry+https://github.com/rust-lang/crates.io-index" 1206 1207 checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1207 - @@ -11681,6 +12358,16 @@ 1208 + @@ -11699,6 +12376,16 @@ 1208 1209 ] 1209 1210 1210 1211 [[package]]
+1 -1
patches/components/config/lib.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -4,6 +4,9 @@ 3 + @@ -10,6 +10,9 @@ 4 4 5 5 #![deny(unsafe_code)] 6 6
+8 -5
patches/components/config/prefs.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -2,8 +2,9 @@ 4 - * License, v. 2.0. If a copy of the MPL was not distributed with this 5 - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ 3 + @@ -4,8 +4,9 @@ 4 + 5 + //! Preferences are the global configuration options that can be changed at runtime. 6 6 7 7 +use std::collections::HashMap; 8 8 use std::env::consts::ARCH; ··· 11 11 use std::time::Duration; 12 12 13 13 use serde::{Deserialize, Serialize}; 14 - @@ -13,11 +14,16 @@ 14 + @@ -15,6 +16,11 @@ 15 15 16 16 static PREFERENCES: RwLock<Preferences> = RwLock::new(Preferences::const_default()); 17 17 ··· 20 20 +static EMBEDDER_PREFS: LazyLock<RwLock<HashMap<String, PrefValue>>> = 21 21 + LazyLock::new(|| RwLock::new(HashMap::new())); 22 22 + 23 + /// A trait to be implemented by components that wish to be notified about runtime changes to the 24 + /// global preferences for the current process. 23 25 pub trait PreferencesObserver: Send + Sync { 26 + @@ -24,7 +30,7 @@ 24 27 fn prefs_changed(&self, _changes: &[(&'static str, PrefValue)]) {} 25 28 } 26 29 ··· 29 32 30 33 #[inline] 31 34 /// Get the current set of global preferences for Servo. 32 - @@ -63,6 +69,21 @@ 35 + @@ -73,6 +79,21 @@ 33 36 } 34 37 } 35 38
+7 -7
patches/components/constellation/Cargo.toml.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -28,6 +28,7 @@ 4 - [dependencies] 3 + @@ -29,6 +29,7 @@ 5 4 accesskit = { workspace = true } 6 5 backtrace = { workspace = true } 6 + base64 = { workspace = true } 7 7 +beaver-p2p = { path = "../../../crates/beaver_p2p" } 8 8 content-security-policy = { workspace = true } 9 9 crossbeam-channel = { workspace = true } 10 10 devtools_traits = { workspace = true } 11 - @@ -35,6 +36,8 @@ 11 + @@ -36,6 +37,8 @@ 12 12 euclid = { workspace = true } 13 13 fonts = { workspace = true } 14 14 ipc-channel = { workspace = true } ··· 17 17 keyboard-types = { workspace = true } 18 18 layout_api = { workspace = true } 19 19 log = { workspace = true } 20 - @@ -41,13 +44,17 @@ 20 + @@ -42,13 +45,17 @@ 21 21 media = { workspace = true } 22 22 net = { workspace = true } 23 23 net_traits = { workspace = true } ··· 35 35 servo-background-hang-monitor = { workspace = true } 36 36 servo-background-hang-monitor-api = { workspace = true } 37 37 servo-base = { workspace = true } 38 - @@ -61,6 +68,8 @@ 38 + @@ -62,6 +69,8 @@ 39 39 storage_traits = { workspace = true } 40 40 stylo = { workspace = true } 41 41 stylo_traits = { workspace = true } 42 42 +sync_wrapper = "1.0" 43 43 +tokio = { workspace = true } 44 44 tracing = { workspace = true, optional = true } 45 - webgpu = { workspace = true } 46 - webgpu_traits = { workspace = true } 45 + webgpu = { workspace = true, optional = true } 46 + webgpu_traits = { workspace = true, optional = true }
+48 -43
patches/components/constellation/constellation.rs.patch
··· 35 35 }; 36 36 use euclid::Size2D; 37 37 use euclid::default::Size2D as UntypedSize2D; 38 - @@ -159,12 +161,14 @@ 38 + @@ -159,13 +161,14 @@ 39 39 use servo_canvas_traits::webgl::WebGLThreads; 40 40 use servo_config::{opts, pref}; 41 41 use servo_constellation_traits::{ ··· 44 44 - LoadData, LogEntry, MessagePortMsg, NavigationHistoryBehavior, PaintMetricEvent, 45 45 - PortMessageTask, PortTransferInfo, SWManagerMsg, SWManagerSenders, ScreenshotReadinessResponse, 46 46 - ScriptToConstellationMessage, ScrollStateUpdate, ServiceWorkerManagerFactory, ServiceWorkerMsg, 47 - - StructuredSerializedData, TraversalDirection, UserContentManagerAction, WindowSizeType, 47 + - StructuredSerializedData, TargetSnapshotParams, TraversalDirection, UserContentManagerAction, 48 + - WindowSizeType, 48 49 + AuxiliaryWebViewCreationRequest, AuxiliaryWebViewCreationResponse, BroadcastChannelMsg, 49 50 + DocumentState, EmbeddedWebViewCreationRequest, EmbeddedWebViewCreationResponse, 50 51 + EmbeddedWebViewEventType, EmbedderToConstellationMessage, IFrameLoadInfo, ··· 52 53 + NavigationHistoryBehavior, PaintMetricEvent, PairingEvent, PortMessageTask, PortTransferInfo, 53 54 + SWManagerMsg, SWManagerSenders, ScreenshotReadinessResponse, ScriptToConstellationMessage, 54 55 + ScrollStateUpdate, ServiceWorkerManagerFactory, ServiceWorkerMsg, StructuredSerializedData, 55 - + TraversalDirection, UserContentManagerAction, WindowSizeType, 56 + + TargetSnapshotParams, TraversalDirection, UserContentManagerAction, WindowSizeType, 56 57 }; 57 58 use servo_url::{Host, ImmutableOrigin, ServoUrl}; 58 59 use storage_traits::StorageThreads; 59 - @@ -178,6 +182,7 @@ 60 + @@ -179,6 +182,7 @@ 60 61 use webgpu_traits::{WebGPU, WebGPURequest}; 61 62 62 63 use super::embedder::ConstellationToEmbedderMsg; ··· 64 65 use crate::broadcastchannel::BroadcastChannels; 65 66 use crate::browsingcontext::{ 66 67 AllBrowsingContextsIterator, BrowsingContext, FullyActiveBrowsingContextsIterator, 67 - @@ -185,10 +190,12 @@ 68 + @@ -186,10 +190,12 @@ 68 69 }; 69 70 use crate::constellation_webview::ConstellationWebView; 70 71 use crate::event_loop::EventLoop; ··· 75 76 use crate::session_history::{NeedsToReload, SessionHistoryChange, SessionHistoryDiff}; 76 77 +use crate::tasks; 77 78 78 - type PendingApprovalNavigations = FxHashMap<PipelineId, (LoadData, NavigationHistoryBehavior)>; 79 - 80 - @@ -213,6 +220,12 @@ 79 + struct PendingApprovalNavigation { 80 + load_data: LoadData, 81 + @@ -220,6 +226,12 @@ 81 82 /// While a completion failed, another global requested to complete the transfer. 82 83 /// We are still buffering messages, and awaiting the return of the buffer from the global who failed. 83 84 CompletionRequested(MessagePortRouterId, VecDeque<PortMessageTask>), ··· 90 91 } 91 92 92 93 #[derive(Debug)] 93 - @@ -514,6 +527,31 @@ 94 + @@ -521,6 +533,31 @@ 94 95 /// to the `UserContents` need to be forwared to all the `ScriptThread`s that host 95 96 /// the relevant `WebView`. 96 97 pub(crate) user_contents_for_manager_id: FxHashMap<UserContentManagerId, UserContents>, ··· 122 123 } 123 124 124 125 /// State needed to construct a constellation. 125 - @@ -574,6 +612,9 @@ 126 + @@ -581,6 +618,9 @@ 126 127 127 128 /// The async runtime. 128 129 pub async_runtime: Box<dyn AsyncRuntime>, ··· 132 133 } 133 134 134 135 /// When we are exiting a pipeline, we can either force exiting or not. A normal exit 135 - @@ -683,7 +724,7 @@ 136 + @@ -690,7 +730,7 @@ 136 137 script_to_devtools_callback: Default::default(), 137 138 #[cfg(feature = "bluetooth")] 138 139 bluetooth_ipc_sender: state.bluetooth_thread, ··· 141 142 private_resource_threads: state.private_resource_threads, 142 143 public_storage_threads: state.public_storage_threads, 143 144 private_storage_threads: state.private_storage_threads, 144 - @@ -735,6 +776,15 @@ 145 + @@ -742,6 +782,15 @@ 145 146 pending_viewport_changes: Default::default(), 146 147 screenshot_readiness_requests: Vec::new(), 147 148 user_contents_for_manager_id: Default::default(), ··· 157 158 }; 158 159 159 160 constellation.run(); 160 - @@ -760,6 +810,18 @@ 161 + @@ -767,6 +816,18 @@ 161 162 fn clean_up_finished_script_event_loops(&mut self) { 162 163 self.event_loop_join_handles 163 164 .retain(|join_handle| !join_handle.is_finished()); ··· 176 177 self.event_loops 177 178 .retain(|event_loop| event_loop.upgrade().is_some()); 178 179 } 179 - @@ -1052,6 +1114,11 @@ 180 + @@ -1060,6 +1121,11 @@ 180 181 .get(&webview_id) 181 182 .and_then(|webview| webview.user_content_manager_id); 182 183 ··· 188 189 let new_pipeline_info = NewPipelineInfo { 189 190 parent_info: parent_pipeline_id, 190 191 new_pipeline_id, 191 - @@ -1062,6 +1129,13 @@ 192 - viewport_details: initial_viewport_details, 192 + @@ -1071,6 +1137,13 @@ 193 193 user_content_manager_id, 194 194 theme, 195 + target_snapshot_params, 195 196 + // Only set is_embedded_webview=true if this browsing context IS the embedded webview itself, 196 197 + // not for regular iframes inside the embedded webview that happen to share the same webview_id 197 198 + is_embedded_webview: self ··· 202 203 }; 203 204 let pipeline = match Pipeline::spawn(new_pipeline_info, event_loop, self, throttled) { 204 205 Ok(pipeline) => pipeline, 205 - @@ -1228,6 +1302,7 @@ 206 + @@ -1237,6 +1310,7 @@ 206 207 BackgroundHangMonitor(HangMonitorAlert), 207 208 Embedder(EmbedderToConstellationMessage), 208 209 FromSWManager(SWManagerMsg), ··· 210 211 RemoveProcess(usize), 211 212 } 212 213 // Get one incoming request. 213 - @@ -1248,6 +1323,15 @@ 214 + @@ -1257,6 +1331,15 @@ 214 215 sel.recv(&self.embedder_to_constellation_receiver); 215 216 sel.recv(&self.swmanager_receiver); 216 217 ··· 226 227 self.process_manager.register(&mut sel); 227 228 228 229 let request = { 229 - @@ -1276,9 +1360,13 @@ 230 + @@ -1285,9 +1368,13 @@ 230 231 .recv(&self.swmanager_receiver) 231 232 .expect("Unexpected SW channel panic in constellation") 232 233 .map(Request::FromSWManager), ··· 241 242 let _ = oper.recv(self.process_manager.receiver_at(process_index)); 242 243 Ok(Request::RemoveProcess(process_index)) 243 244 }, 244 - @@ -1304,6 +1392,9 @@ 245 + @@ -1313,6 +1400,9 @@ 245 246 Request::FromSWManager(message) => { 246 247 self.handle_request_from_swmanager(message); 247 248 }, ··· 251 252 Request::RemoveProcess(index) => self.process_manager.remove(index), 252 253 } 253 254 } 254 - @@ -1532,11 +1623,7 @@ 255 + @@ -1553,11 +1643,7 @@ 255 256 } 256 257 }, 257 258 EmbedderToConstellationMessage::PreferencesUpdated(updates) => { ··· 264 265 let _ = event_loop.send(ScriptThreadMessage::PreferencesUpdated( 265 266 updates 266 267 .iter() 267 - @@ -1563,6 +1650,18 @@ 268 + @@ -1584,6 +1670,18 @@ 268 269 EmbedderToConstellationMessage::SetAccessibilityActive(webview_id, active) => { 269 270 self.set_accessibility_active(webview_id, active); 270 271 }, ··· 283 284 } 284 285 } 285 286 286 - @@ -1760,7 +1859,13 @@ 287 + @@ -1781,7 +1879,13 @@ 287 288 return warn!("Attempt to add channel name from an unexpected origin."); 288 289 } 289 290 self.broadcast_channels ··· 298 299 }, 299 300 ScriptToConstellationMessage::RemoveBroadcastChannelNameInRouter( 300 301 router_id, 301 - @@ -1774,7 +1879,13 @@ 302 + @@ -1795,7 +1899,13 @@ 302 303 return warn!("Attempt to remove channel name from an unexpected origin."); 303 304 } 304 305 self.broadcast_channels ··· 313 314 }, 314 315 ScriptToConstellationMessage::RemoveBroadcastChannelRouter(router_id, origin) => { 315 316 if self 316 - @@ -1786,6 +1897,12 @@ 317 + @@ -1807,6 +1917,12 @@ 317 318 self.broadcast_channels 318 319 .remove_broadcast_channel_router(router_id); 319 320 }, ··· 326 327 ScriptToConstellationMessage::ScheduleBroadcast(router_id, message) => { 327 328 if self 328 329 .check_origin_against_pipeline(&source_pipeline_id, &message.origin) 329 - @@ -1795,8 +1912,15 @@ 330 + @@ -1816,8 +1932,15 @@ 330 331 "Attempt to schedule broadcast from an origin not matching the origin of the msg." 331 332 ); 332 333 } ··· 343 344 }, 344 345 ScriptToConstellationMessage::PipelineExited => { 345 346 self.handle_pipeline_exited(source_pipeline_id); 346 - @@ -1816,6 +1940,12 @@ 347 + @@ -1837,6 +1960,12 @@ 347 348 ScriptToConstellationMessage::CreateAuxiliaryWebView(load_info) => { 348 349 self.handle_script_new_auxiliary(load_info); 349 350 }, ··· 356 357 ScriptToConstellationMessage::ChangeRunningAnimationsState(animation_state) => { 357 358 self.handle_change_running_animations_state(source_pipeline_id, animation_state) 358 359 }, 359 - @@ -1862,7 +1992,7 @@ 360 + @@ -1888,7 +2017,7 @@ 360 361 ScriptToConstellationMessage::SetFinalUrl(final_url) => { 361 362 // The script may have finished loading after we already started shutting down. 362 363 if let Some(ref mut pipeline) = self.pipelines.get_mut(&source_pipeline_id) { ··· 365 366 } else { 366 367 warn!("constellation got set final url message for dead pipeline"); 367 368 } 368 - @@ -1989,6 +2119,29 @@ 369 + @@ -2015,6 +2144,29 @@ 369 370 new_value, 370 371 ); 371 372 }, ··· 395 396 ScriptToConstellationMessage::MediaSessionEvent(pipeline_id, event) => { 396 397 // Unlikely at this point, but we may receive events coming from 397 398 // different media sessions, so we set the active media session based 398 - @@ -2008,7 +2161,12 @@ 399 + @@ -2034,7 +2186,12 @@ 399 400 } 400 401 self.active_media_session = Some(pipeline_id); 401 402 self.constellation_to_embedder_proxy.send( ··· 409 410 ); 410 411 }, 411 412 #[cfg(feature = "webgpu")] 412 - @@ -2063,7 +2221,769 @@ 413 + @@ -2089,9 +2246,772 @@ 413 414 let _ = event_loop.send(ScriptThreadMessage::TriggerGarbageCollection); 414 415 } 415 416 }, ··· 434 435 + pipeline_id, 435 436 + load_data, 436 437 + NavigationHistoryBehavior::Push, 438 + + TargetSnapshotParams::default(), 437 439 + ); 438 440 + }, 439 441 + ScriptToConstellationMessage::EmbeddedWebViewReload(embedded_webview_id) => { ··· 856 858 + let _ = callback.send(None); 857 859 + } 858 860 + }, 859 - + } 860 - + } 861 - + 861 + } 862 + } 863 + 862 864 + fn handle_pairing_event(&mut self, event: PairingEvent) { 863 865 + if let PairingEvent::MessageReceived { ref from, ref data } = event { 864 866 + debug!("P2P message received from {from}, {} bytes", data.len()); ··· 1150 1152 + // Handle peer disconnect: clean up remote channel state. 1151 1153 + if let PairingEvent::PeerExpired { ref id } = event { 1152 1154 + self.pairing.clear_remote_peer(id); 1153 - } 1155 + + } 1154 1156 + 1155 1157 + // When a peer connects or reconnects, sync our open broadcast channels to it. 1156 1158 + if let PairingEvent::PeerDiscovered { ref id, .. } | ··· 1176 1178 + let _ = event_loop.send(ScriptThreadMessage::DispatchPairingEvent(event.clone())); 1177 1179 + } 1178 1180 + } 1179 - } 1180 - 1181 + + } 1182 + + 1181 1183 /// Check the origin of a message against that of the pipeline it came from. 1182 - @@ -2382,6 +3302,55 @@ 1184 + /// Note: this is still limited as a security check, 1185 + /// see <https://github.com/servo/servo/issues/11722> 1186 + @@ -2408,6 +3328,55 @@ 1183 1187 TransferState::TransferInProgress(queue) => queue.push_back(task), 1184 1188 TransferState::CompletionFailed(queue) => queue.push_back(task), 1185 1189 TransferState::CompletionRequested(_, queue) => queue.push_back(task), ··· 1235 1239 } 1236 1240 } 1237 1241 1238 - @@ -3273,6 +4242,40 @@ 1242 + @@ -3301,6 +4270,40 @@ 1239 1243 /// <https://html.spec.whatwg.org/multipage/#destroy-a-top-level-traversable> 1240 1244 fn handle_close_top_level_browsing_context(&mut self, webview_id: WebViewId) { 1241 1245 debug!("{webview_id}: Closing"); ··· 1276 1280 let browsing_context_id = BrowsingContextId::from(webview_id); 1277 1281 // Step 5. Remove traversable from the user agent's top-level traversable set. 1278 1282 let browsing_context = 1279 - @@ -3547,8 +4550,27 @@ 1283 + @@ -3577,8 +4580,27 @@ 1280 1284 opener_webview_id, 1281 1285 opener_pipeline_id, 1282 1286 response_sender, ··· 1304 1308 let Some((webview_id_sender, webview_id_receiver)) = generic_channel::channel() else { 1305 1309 warn!("Failed to create channel"); 1306 1310 let _ = response_sender.send(None); 1307 - @@ -3649,6 +4671,397 @@ 1311 + @@ -3679,6 +4701,398 @@ 1308 1312 }); 1309 1313 } 1310 1314 ··· 1430 1434 + viewport_details, 1431 1435 + user_content_manager_id, 1432 1436 + theme, 1437 + + target_snapshot_params: TargetSnapshotParams::default(), 1433 1438 + is_embedded_webview: true, 1434 1439 + hide_focus, 1435 1440 + }; ··· 1702 1707 #[servo_tracing::instrument(skip_all)] 1703 1708 fn handle_refresh_cursor(&self, pipeline_id: PipelineId) { 1704 1709 let Some(pipeline) = self.pipelines.get(&pipeline_id) else { 1705 - @@ -4776,7 +6189,7 @@ 1710 + @@ -4818,7 +6232,7 @@ 1706 1711 } 1707 1712 1708 1713 #[servo_tracing::instrument(skip_all)] ··· 1711 1716 // Send a flat projection of the history to embedder. 1712 1717 // The final vector is a concatenation of the URLs of the past 1713 1718 // entries, the current entry and the future entries. 1714 - @@ -4880,9 +6293,22 @@ 1719 + @@ -4922,9 +6336,22 @@ 1715 1720 self.constellation_to_embedder_proxy 1716 1721 .send(ConstellationToEmbedderMsg::HistoryChanged( 1717 1722 webview_id,
+6 -6
patches/components/constellation/constellation_webview.rs.patch
··· 12 12 } 13 13 14 14 impl ConstellationWebView { 15 - @@ -72,6 +77,22 @@ 16 - active_top_level_pipeline_id.into(), 17 - )); 15 + @@ -74,6 +79,22 @@ 16 + ), 17 + ); 18 18 19 19 + Self::new_with_hide_focus( 20 20 + webview_id, ··· 35 35 Self { 36 36 webview_id, 37 37 user_content_manager_id, 38 - @@ -82,6 +103,7 @@ 38 + @@ -84,6 +105,7 @@ 39 39 session_history: JointSessionHistory::new(), 40 40 theme: Theme::Light, 41 41 accessibility_active: false, ··· 43 43 } 44 44 } 45 45 46 - @@ -101,12 +123,41 @@ 46 + @@ -103,12 +125,41 @@ 47 47 event: &ConstellationInputEvent, 48 48 browsing_contexts: &FxHashMap<BrowsingContextId, BrowsingContext>, 49 49 ) -> Option<PipelineId> { ··· 87 87 let browsing_context_id = if matches!(event.event.event, InputEvent::MouseLeftViewport(_)) { 88 88 self.hovered_browsing_context_id 89 89 .unwrap_or(self.focused_browsing_context_id) 90 - @@ -176,11 +227,9 @@ 90 + @@ -178,11 +229,9 @@ 91 91 92 92 if let InputEvent::MouseMove(_) = &event.event.event { 93 93 update_hovered_browsing_context(Some(pipeline.browsing_context_id), true);
+1 -1
patches/components/layout/replaced.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -542,6 +542,7 @@ 3 + @@ -544,6 +544,7 @@ 4 4 viewport_details: ViewportDetails { 5 5 size, 6 6 hidpi_scale_factor: Scale::new(hidpi_scale_factor.0),
+4 -2
patches/components/net/Cargo.toml.patch
··· 1 1 --- original 2 2 +++ modified 3 3 @@ -20,12 +20,15 @@ 4 - test-util = ["hyper-util/server-graceful"] 4 + test-util = ["hyper-util/server-graceful", "dep:servo-default-resources"] 5 5 6 6 [dependencies] 7 7 +anyhow = "1.0" ··· 24 24 resvg = { workspace = true } 25 25 rustc-hash = { workspace = true } 26 26 rustls = { workspace = true, features = ["aws-lc-rs"] } 27 - @@ -66,11 +70,13 @@ 27 + @@ -66,6 +70,7 @@ 28 28 rustls-pki-types = { workspace = true } 29 29 rustls-platform-verifier = { workspace = true } 30 30 serde = { workspace = true } ··· 32 32 servo_arc = { workspace = true } 33 33 servo-base = { workspace = true } 34 34 servo-config = { workspace = true } 35 + @@ -72,6 +77,7 @@ 36 + servo-default-resources = { workspace = true, optional = true } 35 37 servo-url = { workspace = true } 36 38 sha2 = { workspace = true } 37 39 +sync_wrapper = "1.0"
+2 -2
patches/components/net/http_loader.rs.patch
··· 171 171 } 172 172 } 173 173 } 174 - @@ -1858,7 +1929,7 @@ 174 + @@ -1860,7 +1931,7 @@ 175 175 }; 176 176 177 177 // Store the credentials as a proxy-authentication entry. ··· 180 180 user_name: credentials.username, 181 181 password: credentials.password, 182 182 }; 183 - @@ -1865,7 +1936,7 @@ 183 + @@ -1867,7 +1938,7 @@ 184 184 { 185 185 let mut auth_cache = context.state.auth_cache.write(); 186 186 let key = request.current_url().origin().ascii_serialization();
+10 -10
patches/components/paint/webview_renderer.rs.patch
··· 30 30 /// dependencies, which is why we store a `dyn WebViewTrait` here instead of the `WebView` itself. 31 31 @@ -116,6 +128,10 @@ 32 32 /// and initial values for zoom derived from the `viewport` meta tag in web content. 33 - viewport_description: Option<ViewportDescription>, 33 + viewport_description: ViewportDescription, 34 34 35 35 + /// Whether this is an embedded webview. Embedded webviews have different zoom behavior: 36 36 + /// page zoom is applied inside the display list rather than as an external transform. ··· 42 42 @@ -154,6 +170,7 @@ 43 43 hidden: false, 44 44 animating: false, 45 - viewport_description: None, 45 + viewport_description: Default::default(), 46 46 + is_embedded_webview: false, 47 47 embedder_to_constellation_sender, 48 48 refresh_driver, ··· 206 206 } 207 207 208 208 // Batch up all scroll events and changes to pinch zoom into a single change, or 209 - @@ -807,15 +921,24 @@ 209 + @@ -810,15 +924,24 @@ 210 210 } 211 211 } 212 212 ··· 237 237 238 238 let scroll_result = combined_scroll_event.and_then(|combined_event| { 239 239 self.scroll_node_at_device_point( 240 - @@ -824,6 +947,21 @@ 240 + @@ -827,6 +950,21 @@ 241 241 combined_event.scroll, 242 242 ) 243 243 }); ··· 259 259 if let Some(ref scroll_result) = scroll_result { 260 260 self.send_scroll_positions_to_layout_for_pipeline( 261 261 scroll_result.hit_test_result.pipeline_id, 262 - @@ -839,7 +977,11 @@ 262 + @@ -842,7 +980,11 @@ 263 263 self.send_pinch_zoom_infos_to_script(); 264 264 } 265 265 ··· 272 272 } 273 273 274 274 /// Perform a hit test at the given [`DevicePoint`] and apply the [`Scroll`] 275 - @@ -846,7 +988,7 @@ 275 + @@ -849,7 +991,7 @@ 276 276 /// scrolling to the applicable scroll node under that point. If a scroll was 277 277 /// performed, returns the hit test result contains [`PipelineId`] of the node 278 278 /// scrolled, the id, and the final scroll delta. ··· 281 281 &mut self, 282 282 render_api: &RenderApi, 283 283 cursor: DevicePoint, 284 - @@ -874,7 +1016,10 @@ 284 + @@ -877,7 +1019,10 @@ 285 285 // its ancestor pipelines. 286 286 let mut previous_pipeline_id = None; 287 287 for hit_test_result in hit_test_results { ··· 293 293 if previous_pipeline_id.replace(hit_test_result.pipeline_id) != 294 294 Some(hit_test_result.pipeline_id) 295 295 { 296 - @@ -901,7 +1046,11 @@ 296 + @@ -904,7 +1049,11 @@ 297 297 } 298 298 } 299 299 } ··· 306 306 } 307 307 308 308 /// Scroll the viewport (root pipeline, root scroll node) of this WebView, but first 309 - @@ -1040,20 +1189,45 @@ 309 + @@ -1043,20 +1192,45 @@ 310 310 } 311 311 312 312 fn send_window_size_message(&self) { ··· 364 364 } 365 365 366 366 /// Set the `hidpi_scale_factor` for this renderer, returning `true` if the value actually changed. 367 - @@ -1117,8 +1291,21 @@ 367 + @@ -1120,8 +1294,21 @@ 368 368 if let Some(wheel_event) = self.pending_wheel_events.remove(&id) { 369 369 if !result.contains(InputEventResult::DefaultPrevented) { 370 370 // A scroll delta for a wheel event is the inverse of the wheel delta.
+1 -1
patches/components/script/dom/debugger/debuggerglobalscope.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -112,9 +112,11 @@ 3 + @@ -114,9 +114,11 @@ 4 4 None, 5 5 #[cfg(feature = "webgpu")] 6 6 gpu_id_hub,
+15 -15
patches/components/script/dom/document/document.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -26,6 +26,7 @@ 4 - Image, LoadStatus, 3 + @@ -25,6 +25,7 @@ 4 + AllowOrDeny, AnimationState, CustomHandlersAutomationMode, EmbedderMsg, Image, LoadStatus, 5 5 }; 6 6 use encoding_rs::{Encoding, UTF_8}; 7 7 +use euclid::Size2D; 8 8 use fonts::WebFontDocumentContext; 9 9 use html5ever::{LocalName, Namespace, QualName, local_name, ns}; 10 10 use hyper_serde::Serde; 11 - @@ -54,11 +55,13 @@ 11 + @@ -53,11 +54,13 @@ 12 12 use script_traits::{DocumentActivity, ProgressiveWebMetricType}; 13 13 use servo_arc::Arc; 14 14 use servo_base::cross_process_instant::CrossProcessInstant; ··· 24 24 use servo_media::{ClientContextId, ServoMedia}; 25 25 use servo_url::{ImmutableOrigin, MutableOrigin, ServoUrl}; 26 26 use style::attr::AttrValue; 27 - @@ -643,6 +646,9 @@ 27 + @@ -617,6 +620,9 @@ 28 28 #[no_trace] 29 29 favicon: RefCell<Option<Image>>, 30 30 ··· 34 34 /// All websockets created that are associated with this document. 35 35 websockets: DOMTracker<WebSocket>, 36 36 37 - @@ -890,6 +896,12 @@ 37 + @@ -864,6 +870,12 @@ 38 38 39 39 // Set the document's activity level, reflow if necessary, and suspend or resume timers. 40 40 self.activity.set(activity); ··· 47 47 let media = ServoMedia::get(); 48 48 let pipeline_id = self.window().pipeline_id(); 49 49 let client_context_id = 50 - @@ -903,6 +915,7 @@ 50 + @@ -877,6 +889,7 @@ 51 51 52 52 self.title_changed(); 53 53 self.notify_embedder_favicon(); ··· 55 55 self.dirty_all_nodes(); 56 56 self.window().resume(CanGc::from_cx(cx)); 57 57 media.resume(&client_context_id); 58 - @@ -1315,6 +1328,9 @@ 58 + @@ -1291,6 +1304,9 @@ 59 59 LoadStatus::Started, 60 60 )); 61 61 self.send_to_embedder(EmbedderMsg::Status(self.webview_id(), None)); ··· 65 65 } 66 66 }, 67 67 DocumentReadyState::Complete => { 68 - @@ -1323,6 +1339,9 @@ 68 + @@ -1299,6 +1315,9 @@ 69 69 self.webview_id(), 70 70 LoadStatus::Complete, 71 71 )); ··· 75 75 } 76 76 update_with_current_instant(&self.dom_complete); 77 77 }, 78 - @@ -1729,7 +1748,13 @@ 78 + @@ -1377,7 +1396,13 @@ 79 79 let window = self.window(); 80 80 if window.is_top_level() { 81 81 let title = self.title().map(String::from); ··· 90 90 } 91 91 } 92 92 93 - @@ -1738,6 +1763,18 @@ 93 + @@ -1386,6 +1411,18 @@ 94 94 window.send_to_embedder(msg); 95 95 } 96 96 ··· 109 109 pub(crate) fn dirty_all_nodes(&self) { 110 110 let root = match self.GetDocumentElement() { 111 111 Some(root) => root, 112 - @@ -3323,9 +3360,59 @@ 112 + @@ -2944,9 +2981,59 @@ 113 113 current_rendering_epoch, 114 114 ); 115 115 ··· 169 169 pub(crate) fn handle_no_longer_waiting_on_asynchronous_image_updates(&self) { 170 170 self.waiting_on_canvas_image_updates.set(false); 171 171 } 172 - @@ -4065,6 +4152,7 @@ 173 - active_sandboxing_flag_set: Cell::new(SandboxingFlagSet::empty()), 172 + @@ -3684,6 +3771,7 @@ 173 + active_sandboxing_flag_set: Cell::new(creation_sandboxing_flag_set), 174 174 creation_sandboxing_flag_set: Cell::new(creation_sandboxing_flag_set), 175 175 favicon: RefCell::new(None), 176 176 + theme_color: RefCell::new(None), 177 177 websockets: DOMTracker::new(), 178 178 details_name_groups: Default::default(), 179 179 protocol_handler_automation_mode: Default::default(), 180 - @@ -5182,6 +5270,36 @@ 180 + @@ -4623,6 +4711,36 @@ 181 181 182 182 pub(crate) fn notify_embedder_favicon(&self) { 183 183 if let Some(ref image) = *self.favicon.borrow() { ··· 214 214 self.send_to_embedder(EmbedderMsg::NewFavicon(self.webview_id(), image.clone())); 215 215 } 216 216 } 217 - @@ -5241,6 +5359,20 @@ 217 + @@ -4682,6 +4800,20 @@ 218 218 pub(crate) fn set_css_styling_flag(&self, value: bool) { 219 219 self.css_styling_flag.set(value) 220 220 }
+24 -54
patches/components/script/dom/document/document_event_handler.rs.patch
··· 38 38 use style::Atom; 39 39 use style_traits::CSSPixel; 40 40 use webrender_api::ExternalScrollId; 41 - @@ -58,12 +63,13 @@ 41 + @@ -58,13 +63,14 @@ 42 42 use crate::dom::bindings::root::MutNullableDom; 43 43 use crate::dom::bindings::trace::NoTrace; 44 44 use crate::dom::clipboardevent::ClipboardEventType; 45 - -use crate::dom::document::{FireMouseEventType, FocusInitiator}; 46 - +use crate::dom::document::{Document, FireMouseEventType, FocusInitiator}; 45 + -use crate::dom::document::FireMouseEventType; 46 + use crate::dom::document::focus::{FocusInitiator, FocusOperation, FocusableArea}; 47 + +use crate::dom::document::{Document, FireMouseEventType}; 47 48 use crate::dom::event::{EventBubbles, EventCancelable, EventComposed, EventFlags}; 48 49 #[cfg(feature = "gamepad")] 49 50 use crate::dom::gamepad::gamepad::{Gamepad, contains_user_gesture}; ··· 53 54 use crate::dom::inputevent::HitTestResult; 54 55 use crate::dom::interactive_element_command::InteractiveElementCommand; 55 56 use crate::dom::keyboardevent::KeyboardEvent; 56 - @@ -77,6 +83,7 @@ 57 + @@ -78,6 +84,7 @@ 57 58 }; 58 59 use crate::drag_data_store::{DragDataStore, Kind, Mode}; 59 60 use crate::realms::enter_realm; ··· 61 62 62 63 /// A data structure used for tracking the current click count. This can be 63 64 /// reset to 0 if a mouse button event happens at a sufficient distance or time 64 - @@ -140,6 +147,56 @@ 65 + @@ -141,6 +148,56 @@ 65 66 } 66 67 } 67 68 ··· 118 119 /// The [`DocumentEventHandler`] is a structure responsible for handling input events for 119 120 /// the [`crate::Document`] and storing data related to event handling. It exists to 120 121 /// decrease the size of the [`crate::Document`] structure. 121 - @@ -198,6 +255,20 @@ 122 + @@ -199,6 +256,20 @@ 122 123 access_key_handlers: DomRefCell<FxHashMap<NoTrace<Code>, Dom<HTMLElement>>>, 123 124 /// <https://html.spec.whatwg.org/multipage/#sequential-focus-navigation-starting-point> 124 125 sequential_focus_navigation_starting_point: MutNullableDom<Node>, ··· 139 140 } 140 141 141 142 impl DocumentEventHandler { 142 - @@ -222,6 +293,9 @@ 143 + @@ -223,6 +294,9 @@ 143 144 next_touch_pointer_id: Cell::new(1), 144 145 access_key_handlers: Default::default(), 145 146 sequential_focus_navigation_starting_point: Default::default(), ··· 149 150 } 150 151 } 151 152 152 - @@ -547,6 +621,198 @@ 153 + @@ -548,6 +622,198 @@ 153 154 } 154 155 } 155 156 ··· 348 349 /// <https://w3c.github.io/uievents/#handle-native-mouse-move> 349 350 fn handle_native_mouse_move_event(&self, input_event: &ConstellationInputEvent, can_gc: CanGc) { 350 351 // Ignore all incoming events without a hit test. 351 - @@ -561,6 +827,57 @@ 352 + @@ -562,6 +828,57 @@ 352 353 return; 353 354 } 354 355 ··· 406 407 // Update the cursor when the mouse moves, if it has changed. 407 408 self.set_cursor(Some(hit_test_result.cursor)); 408 409 409 - @@ -794,6 +1111,12 @@ 410 + @@ -796,6 +1113,12 @@ 410 411 return; 411 412 }; 412 413 ··· 419 420 debug!( 420 421 "{:?}: at {:?}", 421 422 event.action, hit_test_result.point_in_frame 422 - @@ -892,18 +1215,25 @@ 423 - let target_el = element.find_click_focusable_area(); 424 - 425 - let document = self.window.Document(); 426 - - document.begin_focus_transaction(); 427 - 428 - - // Try to focus `el`. If it's not focusable, focus the document instead. 429 - - document.request_focus(None, FocusInitiator::Click, can_gc); 430 - - document.request_focus(target_el.as_deref(), FocusInitiator::Click, can_gc); 431 - + // Skip focus handling for hidefocus webviews - no blur/focus events 432 - + // should be fired and focus should not be transferred. 433 - + let hide_focus = self.window.as_global_scope().hide_focus(); 434 - 435 - + if !hide_focus { 436 - + document.begin_focus_transaction(); 437 - + 438 - + // Try to focus `el`. If it's not focusable, focus the document instead. 439 - + document.request_focus(None, FocusInitiator::Click, can_gc); 440 - + document.request_focus(target_el.as_deref(), FocusInitiator::Click, can_gc); 441 - + } 442 - + 443 - // Step 7. Let result = dispatch event at target 444 - let result = dom_event.dispatch(node.upcast(), false, can_gc); 445 - 446 - // Step 8. If result is true and target is a focusable area 447 - // that is click focusable, then Run the focusing steps at target. 448 - - if result && document.has_focus_transaction() { 449 - + if !hide_focus && result && document.has_focus_transaction() { 450 - document.commit_focus_transaction(FocusInitiator::Click, can_gc); 451 - } 452 - 453 - @@ -913,7 +1243,7 @@ 423 + @@ -909,7 +1232,7 @@ 454 424 self.maybe_show_context_menu( 455 425 node.upcast(), 456 426 &hit_test_result, ··· 459 429 can_gc, 460 430 ); 461 431 } 462 - @@ -1037,9 +1367,30 @@ 432 + @@ -1038,9 +1361,30 @@ 463 433 &self, 464 434 target: &EventTarget, 465 435 hit_test_result: &HitTestResult, ··· 488 458 + }, 489 459 + }; 490 460 + 491 - // <https://w3c.github.io/uievents/#contextmenu> 461 + // <https://w3c.github.io/pointerevents/#contextmenu> 492 462 let menu_event = PointerEvent::new( 493 463 &self.window, // window 494 - @@ -1053,25 +1404,25 @@ 464 + @@ -1054,25 +1398,25 @@ 495 465 hit_test_result 496 466 .point_relative_to_initial_containing_block 497 467 .to_i32(), ··· 535 505 + vec![], // predicted_events 536 506 can_gc, 537 507 ); 538 - 539 - @@ -1087,6 +1438,89 @@ 508 + menu_event.upcast::<Event>().set_composed(true); 509 + @@ -1089,6 +1433,89 @@ 540 510 }; 541 511 } 542 512 ··· 626 596 fn handle_touch_event( 627 597 &self, 628 598 event: EmbedderTouchEvent, 629 - @@ -1093,6 +1527,29 @@ 599 + @@ -1095,6 +1522,29 @@ 630 600 input_event: &ConstellationInputEvent, 631 601 can_gc: CanGc, 632 602 ) -> InputEventResult { ··· 656 626 // Ignore all incoming events without a hit test. 657 627 let Some(hit_test_result) = self.window.hit_test_from_input_event(input_event) else { 658 628 self.update_active_touch_points_when_early_return(event); 659 - @@ -1099,6 +1556,16 @@ 629 + @@ -1101,6 +1551,16 @@ 660 630 return Default::default(); 661 631 }; 662 632 ··· 673 643 let TouchId(identifier) = event.touch_id; 674 644 675 645 let Some(element) = hit_test_result 676 - @@ -1230,6 +1697,10 @@ 646 + @@ -1232,6 +1692,10 @@ 677 647 // <https://html.spec.whatwg.org/multipage/#selector-active> 678 648 // If the element is being actively pointed at the element is being activated. 679 649 self.element_for_activation(element).set_active_state(true); ··· 684 654 (current_target, pointer_touch) 685 655 }, 686 656 _ => { 687 - @@ -1262,10 +1733,31 @@ 657 + @@ -1264,10 +1728,31 @@ 688 658 can_gc, 689 659 ); 690 660 ··· 717 687 }, 718 688 TouchEventType::Up | TouchEventType::Cancel => { 719 689 active_touch_points.swap_remove(index); 720 - @@ -1273,6 +1765,17 @@ 690 + @@ -1275,6 +1760,17 @@ 721 691 // <https://html.spec.whatwg.org/multipage/#selector-active> 722 692 // If the element is being actively pointed at the element is being activated. 723 693 self.element_for_activation(element).set_active_state(false); ··· 735 705 }, 736 706 TouchEventType::Down => unreachable!("Should have been handled above"), 737 707 } 738 - @@ -1316,6 +1819,19 @@ 708 + @@ -1318,6 +1814,19 @@ 739 709 ); 740 710 let event = touch_event.upcast::<Event>(); 741 711 event.fire(&touch_dispatch_target, can_gc); ··· 755 725 event.flags().into() 756 726 } 757 727 758 - @@ -1461,6 +1977,16 @@ 728 + @@ -1470,6 +1979,16 @@ 759 729 return Default::default(); 760 730 }; 761 731
+14
patches/components/script/dom/document/focus.rs.patch
··· 1 + --- original 2 + +++ modified 3 + @@ -190,6 +190,11 @@ 4 + focus_initiator: FocusInitiator, 5 + can_gc: CanGc, 6 + ) { 7 + + // Ignore focus changes for "hide focus" embedded webviews. 8 + + if self.window.as_global_scope().hide_focus() { 9 + + return; 10 + + } 11 + + 12 + let (mut new_focused, new_focus_state) = match focus_operation { 13 + FocusOperation::Focus(focusable_area) => ( 14 + match focusable_area {
+13 -13
patches/components/script/dom/html/htmliframeelement.rs.patch
··· 16 16 use servo_base::id::{BrowsingContextId, PipelineId, WebViewId}; 17 17 use servo_constellation_traits::{ 18 18 - IFrameLoadInfo, IFrameLoadInfoWithData, LoadData, LoadOrigin, NavigationHistoryBehavior, 19 - - ScriptToConstellationMessage, 19 + - ScriptToConstellationMessage, TargetSnapshotParams, 20 20 + EmbeddedWebViewCreationRequest, IFrameLoadInfo, IFrameLoadInfoWithData, LoadData, LoadOrigin, 21 - + NavigationHistoryBehavior, ScriptToConstellationMessage, 21 + + NavigationHistoryBehavior, ScriptToConstellationMessage, TargetSnapshotParams, 22 22 }; 23 23 use servo_url::ServoUrl; 24 24 +use style::Atom; ··· 55 55 use crate::dom::trustedtypes::trustedhtml::TrustedHTML; 56 56 use crate::dom::virtualmethods::VirtualMethods; 57 57 use crate::dom::windowproxy::WindowProxy; 58 - @@ -77,6 +84,12 @@ 58 + @@ -80,6 +87,12 @@ 59 59 SrcDoc, 60 60 } 61 61 ··· 68 68 #[dom_struct] 69 69 pub(crate) struct HTMLIFrameElement { 70 70 htmlelement: HTMLElement, 71 - @@ -113,6 +126,30 @@ 71 + @@ -116,6 +129,30 @@ 72 72 /// an empty iframe is attached. In that case, we shouldn't fire a 73 73 /// subsequent asynchronous load event. 74 74 already_fired_synchronous_load_event: Cell<bool>, ··· 99 99 } 100 100 101 101 impl HTMLIFrameElement { 102 - @@ -298,6 +335,8 @@ 103 - viewport_details, 102 + @@ -312,6 +349,8 @@ 104 103 user_content_manager_id: None, 105 104 theme: window.theme(), 105 + target_snapshot_params, 106 106 + is_embedded_webview: false, 107 107 + hide_focus: false, 108 108 }; 109 109 110 110 self.pipeline_id.set(Some(new_pipeline_id)); 111 - @@ -597,6 +636,128 @@ 111 + @@ -626,6 +665,128 @@ 112 112 ); 113 113 } 114 114 ··· 237 237 fn destroy_nested_browsing_context(&self) { 238 238 self.pipeline_id.set(None); 239 239 self.pending_pipeline_id.set(None); 240 - @@ -659,6 +820,13 @@ 240 + @@ -688,6 +849,13 @@ 241 241 lazy_load_resumption_steps: Default::default(), 242 242 pending_navigation: Default::default(), 243 243 already_fired_synchronous_load_event: Default::default(), ··· 251 251 } 252 252 } 253 253 254 - @@ -694,6 +862,157 @@ 254 + @@ -723,6 +891,157 @@ 255 255 self.webview_id.get() 256 256 } 257 257 ··· 409 409 #[inline] 410 410 pub(crate) fn sandboxing_flag_set(&self) -> SandboxingFlagSet { 411 411 self.sandboxing_flag_set 412 - @@ -1078,6 +1397,89 @@ 412 + @@ -1107,6 +1426,89 @@ 413 413 414 414 // https://html.spec.whatwg.org/multipage/#dom-iframe-longdesc 415 415 make_url_setter!(SetLongDesc, "longdesc"); ··· 499 499 } 500 500 501 501 impl VirtualMethods for HTMLIFrameElement { 502 - @@ -1133,9 +1535,54 @@ 502 + @@ -1162,9 +1564,54 @@ 503 503 // may be in a different script thread. Instead, we check to see if the parent 504 504 // is in a document tree and has a browsing context, which is what causes 505 505 // the child browsing context to be created. ··· 556 556 } 557 557 }, 558 558 local_name!("loading") => { 559 - @@ -1200,6 +1647,23 @@ 559 + @@ -1229,6 +1676,23 @@ 560 560 561 561 debug!("<iframe> running post connection steps"); 562 562 ··· 580 580 // Step 1. Create a new child navigable for insertedNode. 581 581 self.create_nested_browsing_context(cx); 582 582 583 - @@ -1223,11 +1687,25 @@ 583 + @@ -1252,11 +1716,25 @@ 584 584 fn unbind_from_tree(&self, context: &UnbindContext, can_gc: CanGc) { 585 585 self.super_type().unwrap().unbind_from_tree(context, can_gc); 586 586
+3 -3
patches/components/script/dom/mod.rs.patch
··· 15 15 +pub(crate) mod embedder; 16 16 pub(crate) mod event; 17 17 pub(crate) use self::event::*; 18 - pub(crate) mod execcommand; 19 - @@ -296,6 +298,7 @@ 18 + pub(crate) mod eventsource; 19 + @@ -298,6 +300,7 @@ 20 20 pub(crate) use self::indexeddb::*; 21 21 pub(crate) mod intersectionobserver; 22 22 pub(crate) mod intersectionobserverentry; ··· 24 24 pub(crate) mod location; 25 25 pub(crate) mod media; 26 26 pub(crate) use self::media::*; 27 - @@ -317,6 +320,10 @@ 27 + @@ -319,6 +322,10 @@ 28 28 pub(crate) mod origin; 29 29 pub(crate) mod paintsize; 30 30 pub(crate) mod paintworkletglobalscope;
+1 -1
patches/components/script/dom/navigator.rs.patch
··· 181 181 + 182 182 + fn RequestTask( 183 183 + &self, 184 - + cx: JSContext, 184 + + _cx: JSContext, 185 185 + name: DOMString, 186 186 + options: HandleValue, 187 187 + comp: InRealm,
+2 -2
patches/components/script/dom/servoparser/mod.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -1056,9 +1056,10 @@ 3 + @@ -1064,9 +1064,10 @@ 4 4 // Return the result of loading an XML document given navigationParams and type. 5 5 MediaType::Xml => self.load_xml_document(parser), 6 6 // Return the result of loading a text document given navigationParams and type. ··· 12 12 // Return the result of loading a media document given navigationParams and type. 13 13 MediaType::Image | MediaType::AudioVideo => { 14 14 self.load_media_document(parser, media_type, &mime_type, cx); 15 - @@ -1126,6 +1127,17 @@ 15 + @@ -1134,6 +1135,17 @@ 16 16 self.process_link_headers_in_media_phase_with_task(&parser.document); 17 17 } 18 18
+10 -10
patches/components/script/dom/window.rs.patch
··· 18 18 use crate::script_runtime::{CanGc, JSContext as SafeJSContext, Runtime}; 19 19 use crate::script_thread::ScriptThread; 20 20 use crate::script_window_proxies::ScriptWindowProxies; 21 - @@ -1145,12 +1145,22 @@ 21 + @@ -1144,12 +1144,22 @@ 22 22 23 23 let (sender, receiver) = 24 24 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); ··· 42 42 receiver.recv().unwrap_or_else(|_| { 43 43 // If the receiver is closed, we assume the dialog was cancelled. 44 44 debug!("Alert dialog was cancelled or failed to show."); 45 - @@ -1178,13 +1188,22 @@ 45 + @@ -1177,13 +1187,22 @@ 46 46 // the user to respond with a positive or negative response. 47 47 let (sender, receiver) = 48 48 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); ··· 66 66 // Step 5: Let userPromptHandler be WebDriver BiDi user prompt opened with this, 67 67 // "confirm", and message. 68 68 // 69 - @@ -1229,6 +1248,7 @@ 69 + @@ -1228,6 +1247,7 @@ 70 70 // defaulted to the value given by default. 71 71 let (sender, receiver) = 72 72 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); ··· 74 74 let dialog = SimpleDialogRequest::Prompt { 75 75 id: self.Document().embedder_controls().next_control_id(), 76 76 message: message.to_string(), 77 - @@ -1235,8 +1255,16 @@ 77 + @@ -1234,8 +1254,16 @@ 78 78 default: default.to_string(), 79 79 response_sender: sender, 80 80 }; ··· 92 92 // Step 6: Let userPromptHandler be WebDriver BiDi user prompt opened with this, 93 93 // "prompt", and message. 94 94 // TODO: Add support for WebDriver BiDi. 95 - @@ -1669,6 +1697,26 @@ 95 + @@ -1668,6 +1696,26 @@ 96 96 // https://html.spec.whatwg.org/multipage/#windoweventhandlers 97 97 window_event_handlers!(); 98 98 ··· 119 119 /// <https://developer.mozilla.org/en-US/docs/Web/API/Window/screen> 120 120 fn Screen(&self, can_gc: CanGc) -> DomRoot<Screen> { 121 121 self.screen.or_init(|| Screen::new(self, can_gc)) 122 - @@ -3040,9 +3088,33 @@ 122 + @@ -3039,9 +3087,33 @@ 123 123 &self, 124 124 input_event: &ConstellationInputEvent, 125 125 ) -> Option<HitTestResult> { ··· 156 156 } 157 157 158 158 #[expect(unsafe_code)] 159 - @@ -3061,8 +3133,25 @@ 159 + @@ -3060,8 +3132,25 @@ 160 160 // SAFETY: This is safe because `Window::query_elements_from_point` has ensured that 161 161 // layout has run and any OpaqueNodes that no longer refer to real nodes are gone. 162 162 let address = UntrustedNodeAddress(result.node.0 as *const c_void); ··· 183 183 cursor: result.cursor, 184 184 point_in_node: result.point_in_target, 185 185 point_in_frame, 186 - @@ -3605,6 +3694,8 @@ 186 + @@ -3604,6 +3693,8 @@ 187 187 player_context: WindowGLContext, 188 188 #[cfg(feature = "webgpu")] gpu_id_hub: Arc<IdentityHub>, 189 189 inherited_secure_context: Option<bool>, ··· 192 192 theme: Theme, 193 193 weak_script_thread: Weak<ScriptThread>, 194 194 ) -> DomRoot<Self> { 195 - @@ -3631,6 +3722,8 @@ 195 + @@ -3630,6 +3721,8 @@ 196 196 gpu_id_hub, 197 197 inherited_secure_context, 198 198 unminify_js, ··· 201 201 Some(font_context), 202 202 ), 203 203 ongoing_navigation: Default::default(), 204 - @@ -3906,3 +3999,120 @@ 204 + @@ -3905,3 +3998,120 @@ 205 205 Self::create_named_properties_object(cx, proto, object) 206 206 } 207 207 }
+11 -11
patches/components/script/dom/windowproxy.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -299,6 +299,7 @@ 3 + @@ -300,6 +300,7 @@ 4 4 &self, 5 5 name: DOMString, 6 6 noopener: bool, ··· 8 8 ) -> Option<DomRoot<WindowProxy>> { 9 9 let (response_sender, response_receiver) = generic_channel::channel().unwrap(); 10 10 let window = self 11 - @@ -334,6 +335,7 @@ 11 + @@ -351,6 +352,7 @@ 12 12 opener_webview_id: window.webview_id(), 13 13 opener_pipeline_id: self.currently_active.get().unwrap(), 14 14 response_sender, ··· 16 16 }; 17 17 let constellation_msg = ScriptToConstellationMessage::CreateAuxiliaryWebView(load_info); 18 18 window.send_to_constellation(constellation_msg); 19 - @@ -352,6 +354,8 @@ 20 - // Use the current `WebView`'s theme initially, but the embedder may 21 - // change this later. 22 - theme: window.theme(), 19 + @@ -373,6 +375,8 @@ 20 + sandboxing_flags: sandboxing_flag_set, 21 + iframe_element_referrer_policy: ReferrerPolicy::EmptyString, 22 + }, 23 23 + is_embedded_webview: false, 24 24 + hide_focus: false, 25 25 }; 26 26 27 27 with_script_thread(|script_thread| { 28 - @@ -504,14 +508,32 @@ 28 + @@ -525,14 +529,32 @@ 29 29 // (TODO) Step 11. Let referrerPolicy be the empty string. 30 30 // (TODO) Step 12. If noreferrer is true, then set referrerPolicy to "no-referrer". 31 31 ··· 62 62 // TODO Step 15.2, Set up browsing context features for targetNavigable's 63 63 // active browsing context given tokenizedFeatures. 64 64 let target_document = match chosen.document() { 65 - @@ -526,16 +548,12 @@ 65 + @@ -547,16 +569,12 @@ 66 66 let target_window = target_document.window(); 67 67 // Step 15.3 and 15.4 will have happened elsewhere, 68 68 // since we've created a new browsing context and loaded it with about:blank. ··· 80 80 let referrer = if noreferrer { 81 81 Referrer::NoReferrer 82 82 } else { 83 - @@ -599,6 +617,7 @@ 83 + @@ -620,6 +638,7 @@ 84 84 &self, 85 85 name: DOMString, 86 86 noopener: bool, ··· 88 88 ) -> (Option<DomRoot<WindowProxy>>, bool) { 89 89 match name.to_lowercase().as_ref() { 90 90 "" | "_self" => { 91 - @@ -616,7 +635,10 @@ 91 + @@ -637,7 +656,10 @@ 92 92 // Step 5 93 93 (Some(DomRoot::from_ref(self.top())), false) 94 94 }, ··· 100 100 _ => { 101 101 // Step 6. 102 102 // TODO: expand the search to all 'familiar' bc, 103 - @@ -624,7 +646,10 @@ 103 + @@ -645,7 +667,10 @@ 104 104 // See https://html.spec.whatwg.org/multipage/#familiar-with 105 105 match ScriptThread::find_window_proxy_by_name(&name) { 106 106 Some(proxy) => (Some(proxy), false),
+5 -5
patches/components/script/navigation.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -175,6 +175,10 @@ 4 - /// The [`Theme`] to use for this page, once it loads. 3 + @@ -185,6 +185,10 @@ 4 + /// The [`TargetSnapshotParams`] to use when creating this document. 5 5 #[no_trace] 6 - pub(crate) theme: Theme, 6 + pub(crate) target_snapshot_params: TargetSnapshotParams, 7 7 + /// Whether this is an embedded webview (has parent_info but should have no WindowProxy parent). 8 8 + pub(crate) is_embedded_webview: bool, 9 9 + /// Whether this document should never receive focus (hidefocus attribute on the iframe). ··· 11 11 } 12 12 13 13 impl InProgressLoad { 14 - @@ -196,6 +200,8 @@ 15 - url_list: vec![url], 14 + @@ -207,6 +211,8 @@ 16 15 user_content_manager_id: new_pipeline_info.user_content_manager_id, 17 16 theme: new_pipeline_info.theme, 17 + target_snapshot_params: new_pipeline_info.target_snapshot_params, 18 18 + is_embedded_webview: new_pipeline_info.is_embedded_webview, 19 19 + hide_focus: new_pipeline_info.hide_focus, 20 20 }
+19 -19
patches/components/script/script_thread.rs.patch
··· 9 9 }; 10 10 use encoding_rs::Encoding; 11 11 use fonts::{FontContext, SystemFontServiceProxy}; 12 - @@ -83,15 +83,16 @@ 12 + @@ -83,15 +83,17 @@ 13 13 use servo_base::generic_channel; 14 14 use servo_base::generic_channel::GenericSender; 15 15 use servo_base::id::{ ··· 24 24 use servo_constellation_traits::{ 25 25 - LoadData, LoadOrigin, NavigationHistoryBehavior, ScreenshotReadinessResponse, 26 26 - ScriptToConstellationChan, ScriptToConstellationMessage, ScrollStateUpdate, 27 - - StructuredSerializedData, TraversalDirection, WindowSizeType, 27 + - StructuredSerializedData, TargetSnapshotParams, TraversalDirection, WindowSizeType, 28 28 + EmbeddedWebViewEventType, LoadData, LoadOrigin, NavigationHistoryBehavior, PairingEvent, 29 29 + ScreenshotReadinessResponse, ScriptToConstellationChan, ScriptToConstellationMessage, 30 - + ScrollStateUpdate, StructuredSerializedData, TraversalDirection, WindowSizeType, 30 + + ScrollStateUpdate, StructuredSerializedData, TargetSnapshotParams, TraversalDirection, 31 + + WindowSizeType, 31 32 }; 32 33 use servo_url::{ImmutableOrigin, MutableOrigin, OriginSnapshot, ServoUrl}; 33 34 use storage_traits::StorageThreads; 34 - @@ -115,6 +116,8 @@ 35 + @@ -115,6 +117,8 @@ 35 36 use crate::dom::bindings::codegen::Bindings::DocumentBinding::{ 36 37 DocumentMethods, DocumentReadyState, 37 38 }; ··· 40 41 use crate::dom::bindings::codegen::Bindings::NavigatorBinding::NavigatorMethods; 41 42 use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; 42 43 use crate::dom::bindings::conversions::{ 43 - @@ -133,9 +136,13 @@ 44 - RenderingUpdateReason, 44 + @@ -133,9 +137,13 @@ 45 + Document, DocumentSource, HasBrowsingContext, IsHTMLDocument, RenderingUpdateReason, 45 46 }; 46 47 use crate::dom::element::Element; 47 48 +use crate::dom::event::Event; ··· 54 55 use crate::dom::servoparser::{ParserContext, ServoParser}; 55 56 use crate::dom::types::DebuggerGlobalScope; 56 57 #[cfg(feature = "webgpu")] 57 - @@ -1921,12 +1928,45 @@ 58 + @@ -1932,11 +1940,44 @@ 58 59 self.handle_refresh_cursor(pipeline_id); 59 60 }, 60 61 ScriptThreadMessage::PreferencesUpdated(updates) => { ··· 78 79 + 79 80 + // Dispatch preferencechanged events to all Embedder instances 80 81 + self.dispatch_preference_changed_to_embedders(&updates, CanGc::from_cx(cx)); 81 - }, 82 + + }, 82 83 + ScriptThreadMessage::ShowTaskChooser(request_id, task_name, providers_json) => { 83 84 + // Dispatch taskrequest event to all Embedder instances. 84 85 + // Only the system UI will have a handler registered. ··· 100 101 + &providers_json, 101 102 + CanGc::from_cx(cx), 102 103 + ); 103 - + }, 104 + }, 104 105 ScriptThreadMessage::ForwardKeyboardScroll(pipeline_id, scroll) => { 105 106 if let Some(document) = self.documents.borrow().find_document(pipeline_id) { 106 - document.event_handler().do_keyboard_scroll(scroll); 107 - @@ -1966,6 +2006,35 @@ 107 + @@ -1977,6 +2018,35 @@ 108 108 ScriptThreadMessage::TriggerGarbageCollection => unsafe { 109 109 JS_GC(*GlobalScope::get_cx(), GCReason::API); 110 110 }, ··· 140 140 } 141 141 } 142 142 143 - @@ -3007,6 +3076,9 @@ 143 + @@ -3030,6 +3100,9 @@ 144 144 .documents 145 145 .borrow() 146 146 .find_iframe(parent_pipeline_id, browsing_context_id); ··· 150 150 if let Some(frame_element) = frame_element { 151 151 frame_element.update_pipeline_id(new_pipeline_id, reason, cx); 152 152 } 153 - @@ -3026,6 +3098,7 @@ 153 + @@ -3049,6 +3122,7 @@ 154 154 // is no need to pass along existing opener information that 155 155 // will be discarded. 156 156 None, ··· 158 158 ); 159 159 } 160 160 } 161 - @@ -3304,6 +3377,155 @@ 161 + @@ -3328,6 +3402,155 @@ 162 162 } 163 163 } 164 164 ··· 314 314 fn ask_constellation_for_top_level_info( 315 315 &self, 316 316 sender_webview_id: WebViewId, 317 - @@ -3422,7 +3644,13 @@ 317 + @@ -3435,7 +3658,13 @@ 318 318 self.senders.pipeline_to_embedder_sender.clone(), 319 319 self.senders.constellation_sender.clone(), 320 320 incomplete.pipeline_id, ··· 329 329 incomplete.viewport_details, 330 330 origin.clone(), 331 331 final_url.clone(), 332 - @@ -3444,6 +3672,8 @@ 332 + @@ -3457,6 +3686,8 @@ 333 333 #[cfg(feature = "webgpu")] 334 334 self.gpu_id_hub.clone(), 335 335 incomplete.load_data.inherited_secure_context, ··· 338 338 incomplete.theme, 339 339 self.this.clone(), 340 340 ); 341 - @@ -3467,6 +3697,7 @@ 341 + @@ -3480,6 +3711,7 @@ 342 342 incomplete.webview_id, 343 343 incomplete.parent_info, 344 344 incomplete.opener, ··· 346 346 ); 347 347 if window_proxy.parent().is_some() { 348 348 // https://html.spec.whatwg.org/multipage/#navigating-across-documents:delaying-load-events-mode-2 349 - @@ -4287,10 +4518,71 @@ 349 + @@ -4311,10 +4543,71 @@ 350 350 document.event_handler().handle_refresh_cursor(); 351 351 } 352 352 ··· 418 418 fn handle_request_screenshot_readiness( 419 419 &self, 420 420 webview_id: WebViewId, 421 - @@ -4331,7 +4623,7 @@ 421 + @@ -4355,7 +4648,7 @@ 422 422 can_gc: CanGc, 423 423 ) { 424 424 let Some(window) = self.documents.borrow().find_window(pipeline_id) else {
+4 -4
patches/components/script_bindings/codegen/Bindings.conf.patch
··· 12 12 'Attr': { 13 13 'cx':['SetValue'], 14 14 }, 15 - @@ -288,6 +293,11 @@ 15 + @@ -289,6 +294,11 @@ 16 16 'cx': ['CheckValidity', 'ReportValidity'], 17 17 }, 18 18 ··· 24 24 'EventSource': { 25 25 'weakReferenceable': True, 26 26 }, 27 - @@ -659,8 +669,8 @@ 27 + @@ -668,8 +678,8 @@ 28 28 }, 29 29 30 30 'Navigator': { ··· 35 35 }, 36 36 37 37 'Node': { 38 - @@ -693,6 +703,11 @@ 38 + @@ -702,6 +712,11 @@ 39 39 'cx': ['CreateLinearGradient', 'CreatePattern', 'CreateRadialGradient', 'GetTransform'], 40 40 }, 41 41 ··· 47 47 'PerformanceObserver': { 48 48 'canGc': ['SupportedEntryTypes'], 49 49 }, 50 - @@ -842,7 +857,8 @@ 50 + @@ -853,7 +868,8 @@ 51 51 }, 52 52 53 53 'Window': {
+1 -1
patches/components/servo/lib.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -50,10 +50,13 @@ 3 + @@ -51,10 +51,13 @@ 4 4 // See <https://github.com/servo/servo/issues/40950>. 5 5 pub use resources; 6 6 pub use servo_base::generic_channel::GenericSender;
+2 -2
patches/components/servo/servo_delegate.rs.patch
··· 9 9 10 10 use crate::webview_delegate::{AllowOrDenyRequest, WebResourceLoad}; 11 11 12 - @@ -42,6 +44,24 @@ 13 - /// A console message was logged by content not associated with a specific [`WebView`]. 12 + @@ -44,6 +46,24 @@ 13 + /// 14 14 /// <https://developer.mozilla.org/en-US/docs/Web/API/Console_API> 15 15 fn show_console_message(&self, _level: ConsoleLogLevel, _message: String) {} 16 16 +
+3 -3
patches/components/servo/webview.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -235,6 +235,18 @@ 3 + @@ -239,6 +239,18 @@ 4 4 self.delegate().request_create_new(self.clone(), request); 5 5 } 6 6 ··· 19 19 pub(crate) fn viewport_details(&self) -> ViewportDetails { 20 20 // The division by 1 represents the page's default zoom of 100%, 21 21 // and gives us the appropriate CSSPixel type for the viewport. 22 - @@ -244,6 +256,7 @@ 22 + @@ -248,6 +260,7 @@ 23 23 ViewportDetails { 24 24 size: scaled_viewport_size / Scale::new(1.0), 25 25 hidpi_scale_factor: Scale::new(inner.hidpi_scale_factor.0), ··· 27 27 } 28 28 } 29 29 30 - @@ -768,6 +781,11 @@ 30 + @@ -782,6 +795,11 @@ 31 31 EmbedderControlRequest::FilePicker { .. } => { 32 32 unreachable!("This message should be routed through the FileManagerThread") 33 33 },
+3 -3
patches/components/servo/webview_delegate.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -18,7 +18,7 @@ 3 + @@ -16,7 +16,7 @@ 4 4 }; 5 5 use paint_api::rendering_context::RenderingContext; 6 6 use servo_base::generic_channel::{GenericSender, SendError}; ··· 9 9 use servo_constellation_traits::EmbedderToConstellationMessage; 10 10 use tokio::sync::mpsc::UnboundedSender as TokioSender; 11 11 use tokio::sync::oneshot::Sender; 12 - @@ -963,6 +963,14 @@ 12 + @@ -962,6 +962,14 @@ 13 13 /// 14 14 /// [`window.open`]: https://developer.mozilla.org/en-US/docs/Web/API/Window/open 15 15 fn request_create_new(&self, _parent_webview: WebView, _: CreateNewWebViewRequest) {} ··· 24 24 /// Content in a [`WebView`] is requesting permission to access a feature requiring 25 25 /// permission from the user. The embedder should allow or deny the request, either by 26 26 /// reading a cached value or querying the user for permission via the user interface. 27 - @@ -1034,6 +1042,25 @@ 27 + @@ -1015,6 +1023,25 @@ 28 28 _tree_update: accesskit::TreeUpdate, 29 29 ) { 30 30 }
+2 -2
patches/components/shared/constellation/Cargo.toml.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -18,6 +18,7 @@ 4 - webgpu = ["wgpu-core"] 3 + @@ -19,6 +19,7 @@ 5 4 6 5 [dependencies] 6 + base64 = { workspace = true } 7 7 +beaver-p2p = { path = "../../../../crates/beaver_p2p" } 8 8 content-security-policy = { workspace = true } 9 9 devtools_traits = { workspace = true }
+5 -5
patches/components/shared/constellation/from_script_message.rs.patch
··· 86 86 /// Specifies the information required to load an iframe. 87 87 #[derive(Debug, Deserialize, Serialize)] 88 88 pub struct IFrameLoadInfo { 89 - @@ -535,6 +573,90 @@ 89 + @@ -538,6 +576,90 @@ 90 90 NoLongerActive, 91 91 } 92 92 ··· 177 177 /// Messages from the script to the constellation. 178 178 #[derive(Deserialize, IntoStaticStr, Serialize)] 179 179 pub enum ScriptToConstellationMessage { 180 - @@ -579,6 +701,10 @@ 180 + @@ -582,6 +704,10 @@ 181 181 NewBroadcastChannelNameInRouter(BroadcastChannelRouterId, String, ImmutableOrigin), 182 182 /// A global stopped managing broadcast channels for a given channel-name. 183 183 RemoveBroadcastChannelNameInRouter(BroadcastChannelRouterId, String, ImmutableOrigin), ··· 188 188 /// Broadcast a message to all same-origin broadcast channels, 189 189 /// excluding the source of the broadcast. 190 190 ScheduleBroadcast(BroadcastChannelRouterId, BroadcastChannelMsg), 191 - @@ -591,6 +717,9 @@ 191 + @@ -594,6 +720,9 @@ 192 192 Option<String>, 193 193 Option<String>, 194 194 ), ··· 198 198 /// Indicates whether this pipeline is currently running animations. 199 199 ChangeRunningAnimationsState(AnimationState), 200 200 /// Requests that a new 2D canvas thread be created. (This is done in the constellation because 201 - @@ -673,6 +802,10 @@ 201 + @@ -676,6 +805,10 @@ 202 202 ScriptNewIFrame(IFrameLoadInfoWithData), 203 203 /// Script has opened a new auxiliary browsing context. 204 204 CreateAuxiliaryWebView(AuxiliaryWebViewCreationRequest), ··· 209 209 /// Mark a new document as active 210 210 ActivateDocument, 211 211 /// Set the document state for a pipeline (used by screenshot / reftests) 212 - @@ -722,6 +855,109 @@ 212 + @@ -725,6 +858,109 @@ 213 213 RespondToScreenshotReadinessRequest(ScreenshotReadinessResponse), 214 214 /// Request the constellation to force garbage collection in all `ScriptThread`'s. 215 215 TriggerGarbageCollection,
+2 -2
patches/components/shared/constellation/lib.rs.patch
··· 10 10 }; 11 11 use embedder_traits::{ 12 12 - EmbedderControlId, EmbedderControlResponse, InputEventAndId, JavaScriptEvaluationId, 13 - - MediaSessionActionType, NewWebViewDetails, PaintHitTestResult, Theme, TraversalId, 13 + - MediaSessionActionType, NewWebViewDetails, PaintHitTestResult, Theme, TraversalId, UrlRequest, 14 14 - ViewportDetails, WebDriverCommandMsg, 15 15 + EmbedderControlId, EmbedderControlRequest, EmbedderControlResponse, InputEventAndId, 16 16 + JavaScriptEvaluationId, LoadStatus, MediaSessionActionType, MediaSessionEvent, 17 17 + NewWebViewDetails, Notification, PaintHitTestResult, ServoErrorType, SimpleDialogRequest, 18 - + Theme, TraversalId, ViewportDetails, WebDriverCommandMsg, 18 + + Theme, TraversalId, UrlRequest, ViewportDetails, WebDriverCommandMsg, 19 19 }; 20 20 pub use from_script_message::*; 21 21 use malloc_size_of_derive::MallocSizeOf;
+1 -1
patches/components/shared/embedder/Cargo.toml.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -36,6 +36,7 @@ 3 + @@ -34,6 +34,7 @@ 4 4 rustc-hash = { workspace = true } 5 5 serde = { workspace = true } 6 6 servo-base = { workspace = true }
+4 -4
patches/components/shared/embedder/lib.rs.patch
··· 143 143 } 144 144 145 145 impl Debug for EmbedderMsg { 146 - @@ -1065,6 +1143,54 @@ 146 + @@ -1063,6 +1141,54 @@ 147 147 WebViewDoesNotExist, 148 148 } 149 149 ··· 198 198 #[derive(Clone, Copy, Debug, Deserialize, Serialize)] 199 199 pub struct RgbColor { 200 200 pub red: u8, 201 - @@ -1111,3 +1237,26 @@ 202 - pub viewport_details: ViewportDetails, 203 - pub user_content_manager_id: Option<UserContentManagerId>, 201 + @@ -1142,3 +1268,26 @@ 202 + self 203 + } 204 204 } 205 205 + 206 206 +/// Types of errors that can be reported via `navigator.embedder.onservoerror`.
+2 -2
patches/components/shared/embedder/resources.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -109,6 +109,10 @@ 3 + @@ -136,6 +136,10 @@ 4 4 DirectoryListingHTML, 5 5 /// A HTML page that is used for the about:memory url. 6 6 AboutMemoryHTML, ··· 11 11 /// RPC script for the Debugger API on behalf of devtools. 12 12 DebuggerJS, 13 13 } 14 - @@ -125,6 +129,7 @@ 14 + @@ -152,6 +156,7 @@ 15 15 Resource::CrashHTML => "crash.html", 16 16 Resource::DirectoryListingHTML => "directory-listing.html", 17 17 Resource::AboutMemoryHTML => "about-memory.html",
+2 -2
patches/components/shared/net/lib.rs.patch
··· 26 26 } 27 27 28 28 /// A loading context, for context-specific sniffing, as defined in 29 - @@ -634,6 +639,64 @@ 29 + @@ -632,6 +637,64 @@ 30 30 Prefetch, 31 31 } 32 32 ··· 91 91 #[derive(Debug, Deserialize, Serialize)] 92 92 pub enum CoreResourceMsg { 93 93 Fetch(RequestBuilder, FetchChannels), 94 - @@ -705,6 +768,10 @@ 94 + @@ -703,6 +766,10 @@ 95 95 /// and exit 96 96 Exit(GenericOneshotSender<()>), 97 97 CollectMemoryReport(ReportsChan),
+9 -8
patches/components/shared/script/lib.rs.patch
··· 9 9 }; 10 10 use euclid::{Scale, Size2D}; 11 11 use fonts_traits::SystemFontServiceProxySender; 12 - @@ -41,8 +41,8 @@ 12 + @@ -41,8 +41,9 @@ 13 13 use servo_canvas_traits::webgl::WebGLPipeline; 14 14 use servo_config::prefs::PrefValue; 15 15 use servo_constellation_traits::{ 16 16 - KeyboardScroll, LoadData, NavigationHistoryBehavior, ScriptToConstellationSender, 17 - - ScrollStateUpdate, StructuredSerializedData, WindowSizeType, 17 + - ScrollStateUpdate, StructuredSerializedData, TargetSnapshotParams, WindowSizeType, 18 18 + EmbeddedWebViewEventType, KeyboardScroll, LoadData, NavigationHistoryBehavior, PairingEvent, 19 - + ScriptToConstellationSender, ScrollStateUpdate, StructuredSerializedData, WindowSizeType, 19 + + ScriptToConstellationSender, ScrollStateUpdate, StructuredSerializedData, TargetSnapshotParams, 20 + + WindowSizeType, 20 21 }; 21 22 use servo_url::{ImmutableOrigin, ServoUrl}; 22 23 use storage_traits::StorageThreads; 23 - @@ -77,6 +77,14 @@ 24 - pub user_content_manager_id: Option<UserContentManagerId>, 25 - /// The [`Theme`] of the new layout. 24 + @@ -79,6 +80,14 @@ 26 25 pub theme: Theme, 26 + /// A snapshot of the navigation parameters of the target of this navigation. 27 + pub target_snapshot_params: TargetSnapshotParams, 27 28 + /// Whether this pipeline is for an embedded webview (created via `<iframe embed>`). 28 29 + /// Embedded webviews have `parent_info` set for rendering hierarchy, but their 29 30 + /// WindowProxy should have no parent (so `window.parent === window.self`). ··· 35 36 } 36 37 37 38 /// When a pipeline is closed, should its browsing context be discarded too? 38 - @@ -286,6 +294,15 @@ 39 + @@ -289,6 +298,15 @@ 39 40 SendImageKeysBatch(PipelineId, Vec<ImageKey>), 40 41 /// Preferences were updated in the parent process. 41 42 PreferencesUpdated(Vec<(String, PrefValue)>), ··· 51 52 /// Notify the `ScriptThread` that the Servo renderer is no longer waiting on 52 53 /// asynchronous image uploads for the given `Pipeline`. These are mainly used 53 54 /// by canvas to perform uploads while the display list is being built. 54 - @@ -322,6 +339,24 @@ 55 + @@ -325,6 +343,24 @@ 55 56 SetAccessibilityActive(PipelineId, bool), 56 57 /// Force a garbage collection in this script thread. 57 58 TriggerGarbageCollection,