From d6e20fdc019aae0d6a9b69536a38cd3cb9bc5152 Mon Sep 17 00:00:00 2001 From: Robo Date: Fri, 23 Oct 2026 20:26:29 +0900 Subject: [PATCH] chore: bump electron@43.8.3 (#343490) * chore: bump electron@43.8.3 * feat: re-enable HideCursorWhileTyping * fix: enable read only compile cache on posix * fix: flicker after moving window across displays * chore: bump distro * chore: bump .nvmrc * chore: bump remote node@24.22.1 * chore: bump distro * chore: update build * chore: bump distro * fix: select supported codecs for screen recordings Centralize approved media formats and filter recording candidates using MediaRecorder and playback support APIs. Prefer explicit H.264 in MP4 instead of allowing the recorder to default to unsupported VP9. * chore: bump distro --- .npmrc | 4 +- .nvmrc | 2 +- build/checksums/electron.txt | 150 +++++++++--------- build/checksums/nodejs.txt | 13 +- build/lib/nodeCompileCache.ts | 3 +- cgmanifest.json | 12 +- extensions/copilot/.nvmrc | 2 +- package.json | 2 +- remote/.npmrc | 4 +- src/mainImpl.ts | 6 +- src/vs/base/common/media.ts | 22 +++ src/vs/base/node/nodeCompileCache.ts | 11 -- .../nativeRecordingService.ts | 19 +-- .../nativeRecordingService.test.ts | 85 +++++++--- 14 files changed, 187 insertions(+), 148 deletions(-) create mode 100644 src/vs/base/common/media.ts diff --git a/.npmrc b/.npmrc index 5277dd5c092..d3d5ca4b154 100644 --- a/.npmrc +++ b/.npmrc @@ -1,6 +1,6 @@ disturl="https://electronjs.org/headers" -target="43.7.7" -ms_build_id="15743441" +target="43.8.3" +ms_build_id="15784459" runtime="electron" ignore-scripts=false build_from_source="true" diff --git a/.nvmrc b/.nvmrc index a43a5b943d9..ce62013c39a 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -24.22.0 +24.22.1 diff --git a/build/checksums/electron.txt b/build/checksums/electron.txt index ca7700e86c6..9f22037d136 100644 --- a/build/checksums/electron.txt +++ b/build/checksums/electron.txt @@ -1,75 +1,75 @@ -b9b7d9ff132e9655a574f03edfb01add8d43a8b0d3a79320c226f6aa99c922ea *chromedriver-v43.7.7-darwin-arm64.zip -f3b26877642739e6c668e6368daada33bb1dfcf4d5fec34143195e184e984569 *chromedriver-v43.7.7-darwin-x64.zip -091707f83e4191f36848152d664c80c255572dfe36a042250ca94037c06959d2 *chromedriver-v43.7.7-linux-arm64.zip -9c3dc509c12709522a22e3c4eb3270907050391fe05d89f68ab5ea689f9aa5b2 *chromedriver-v43.7.7-linux-armv7l.zip -7ea6157ec70b065ef6a7f77fc1822dc6441f5702b0f99660e26cfca1897ecfa4 *chromedriver-v43.7.7-linux-x64.zip -cad78ce6d3399821fde0cc5701109334409aace9b2c82ab8f4c0d3fffa152906 *chromedriver-v43.7.7-mas-arm64.zip -42221fd4d828376802e644178717f1b0626bd1188d45199e958e17ab520ff9ee *chromedriver-v43.7.7-mas-x64.zip -d2c67dad42cfdcf17fce6eac8bba81502c4b2d9cd90cc16f189b1da71dde8ca3 *chromedriver-v43.7.7-win32-arm64.zip -79aedd7837ac32ec19f98677901def62d5cdbbe63d90fe5f25ca131f8609a843 *chromedriver-v43.7.7-win32-ia32.zip -8b81ca5a4add14593548f5b4042a028e4c50758d61c5a244741ca6d07be3c95d *chromedriver-v43.7.7-win32-x64.zip -aabd65bdb7a4fbd80c114af429392aa5a126382883c7c2e8f3ee11acf2e4ce08 *electron-api.json -649e6c16d4650ec4f3037daa285b9f8e72b91742b43810bba80ca5e8bfb8cfe7 *electron-v43.7.7-darwin-arm64-dsym-snapshot.zip -941f6adb5eb6dbce25db81158a8f19fd5b4b24bcc97ea5986bb901f822b93a54 *electron-v43.7.7-darwin-arm64-dsym.tar.xz -34f7acfef1ff41f81b63895f010b866c1f39ac22e0d700445eb6e9ee595276c4 *electron-v43.7.7-darwin-arm64-symbols.zip -9327d8ba5bc9e279d1a2f7da90235301c65a2e80eb4ad3bc5610d28d483340f9 *electron-v43.7.7-darwin-arm64.zip -649e6c16d4650ec4f3037daa285b9f8e72b91742b43810bba80ca5e8bfb8cfe7 *electron-v43.7.7-darwin-x64-dsym-snapshot.zip -2a0fc941390038cad45ef580cf65ee333f61f6e4504b9433447ed8fa3585e234 *electron-v43.7.7-darwin-x64-dsym.tar.xz -6f003f93738843419063adba7dbac56ac1dcfc79dcbeee39d700c335d34d831a *electron-v43.7.7-darwin-x64-symbols.zip -cbed66567d55db4a2bffad0bb6ee9795ca0037ad241039f7473fe75680d10905 *electron-v43.7.7-darwin-x64.zip -ba871fb65de9fbfd71f9aaafc1ac278434f497ee921e9f27fee9e0a5000e9eef *electron-v43.7.7-linux-arm64-debug.zip -d13b1f995845a5a138c35100944dc1264b98be3dd5540253640a66fc388d233d *electron-v43.7.7-linux-arm64-symbols.zip -16071038a9677d0f00b11d3d0f0b7b4ea3250987727aa73aa563b87789f2d5ab *electron-v43.7.7-linux-arm64.zip -bb2295977fc6d33adce9f62def5dfaa19de0e1bd29e5bbd366e0cc35d1a57a09 *electron-v43.7.7-linux-armv7l-debug.zip -07c0739157f9674827c7d55976016972cff70e0876d68287bdf24fca54d778bd *electron-v43.7.7-linux-armv7l-symbols.zip -088c2817c1b5928c5bea706cc60aa05ea328e6d1d8bd549fda75388a3552482a *electron-v43.7.7-linux-armv7l.zip -0f20d65a6f671b1966de12d3f71c2d96a1a65e7ba8c1d534b60bc08c7f82b950 *electron-v43.7.7-linux-x64-debug.zip -a5fb797b973514622f37154d5088132705ce86641f05e6b1e858269a86961868 *electron-v43.7.7-linux-x64-symbols.zip -4d0a48398c444258dbcf2f5f83b49ca5bc53583130f354e0c299dad5b22b5271 *electron-v43.7.7-linux-x64.zip -649e6c16d4650ec4f3037daa285b9f8e72b91742b43810bba80ca5e8bfb8cfe7 *electron-v43.7.7-mas-arm64-dsym-snapshot.zip -dc850f562fbf669db1d9940d458c7ba9790392cff18d95ebaec1fe94a8d583ff *electron-v43.7.7-mas-arm64-dsym.tar.xz -61cf1a0dc10498aff1d1eefa9a5b96350cba32734bdc9f7f40724f9aa17d03d9 *electron-v43.7.7-mas-arm64-symbols.zip -987eebfdc29638b9066e5484b0dcb59e7096627edebad722c7649f8472f2c8a0 *electron-v43.7.7-mas-arm64.zip -649e6c16d4650ec4f3037daa285b9f8e72b91742b43810bba80ca5e8bfb8cfe7 *electron-v43.7.7-mas-x64-dsym-snapshot.zip -8caa427ef3e1dd3f1832a3b782ace268999afcf011540fe05a62c957917487ea *electron-v43.7.7-mas-x64-dsym.tar.xz -91f67bf1b2deedf84355d98095a6060de69fb64c01caf223a35e0edef38aee55 *electron-v43.7.7-mas-x64-symbols.zip -f5eaad26bda0bc133f8d0af0f3a77d2e16adf2572306bec611424c3bab876acf *electron-v43.7.7-mas-x64.zip -b7aa250996ba4aadcbb115e951c6a46f19f246ee6178cffc6b115088189fc1d5 *electron-v43.7.7-win32-arm64-pdb.zip -e63955e73f754a249db46a2c312fd904b6405018650d22b8a16037a9c10270e0 *electron-v43.7.7-win32-arm64-symbols.zip -90386280bc7e4ac5d451e43e26a7c76ed1c8bcdc0206ec50762c7e4f09c59c28 *electron-v43.7.7-win32-arm64-toolchain-profile.zip -d3751b5046350eee0cfd88e7709697c0ef05db93bb3435195c2d0cec50f0ad1f *electron-v43.7.7-win32-arm64.zip -2e8d41b27d3c2394bfeb4ec00904d7049c8a7ccaa105e678179a983cdfb319db *electron-v43.7.7-win32-ia32-pdb.zip -67ea48dcfdcca2f7b854fbe3689d56fe047ca9a2aee0808422ef313e0bc4b52a *electron-v43.7.7-win32-ia32-symbols.zip -90386280bc7e4ac5d451e43e26a7c76ed1c8bcdc0206ec50762c7e4f09c59c28 *electron-v43.7.7-win32-ia32-toolchain-profile.zip -a170eeedf4a216b3b0672b151294e7aef0b4fdc15ae5c207ea3f9f37c4a14c42 *electron-v43.7.7-win32-ia32.zip -3b65b14be1594bba502283ae02e9af54b55b1894f3f6be961c608c9e80a74179 *electron-v43.7.7-win32-x64-pdb.zip -37d27ae6956d20fde7fa1218453ad9514c106f17cf30634c452302a7453f189f *electron-v43.7.7-win32-x64-symbols.zip -90386280bc7e4ac5d451e43e26a7c76ed1c8bcdc0206ec50762c7e4f09c59c28 *electron-v43.7.7-win32-x64-toolchain-profile.zip -97dcb75065444ef031b9b6ea814ccd2109b97934fffb0c503a555d4737ca79cc *electron-v43.7.7-win32-x64.zip -d78a11ef458b68672c35957f0252396a1fa19e73a8ca3b9178e2e75cd090453d *electron.d.ts -9cd0907e7c7c652cc6f519c8e7d75cee26bed06394bb1d51fabdb9d3ada33c67 *ffmpeg-v43.7.7-darwin-arm64.zip -fc2ecfa9bb7ab0131e073f138923ee58f01b88941e366a0be1bad821ed5386bd *ffmpeg-v43.7.7-darwin-x64.zip -ed1d9f6af263524c00ff955f50bf289e19c881625384ff421c773ef2aeb8a82d *ffmpeg-v43.7.7-linux-arm64.zip -001847bd19549781850fd6f69941a54f92356ed26bca02892e9642637215668d *ffmpeg-v43.7.7-linux-armv7l.zip -6638429b92e6d213b78114923585526aff88dbe25f91ace7f2bd5228fac08de5 *ffmpeg-v43.7.7-linux-x64.zip -cbbd298f4548e53200d6b0321bea708963e94acc699059721642183301752109 *ffmpeg-v43.7.7-mas-arm64.zip -7943078d8e3ee924f1cad1354a29aa3aceaf0b7b7414df3a71924ea9c8906223 *ffmpeg-v43.7.7-mas-x64.zip -c8ec52d6bbda2789c678211a76ffc6eaf1dc5faebe1269fc4d6aafa7fbc5510f *ffmpeg-v43.7.7-win32-arm64.zip -37f7bf4b42615e880f971d8714f2b1f4629c06bd8bbd73c8993a8713f8d3628f *ffmpeg-v43.7.7-win32-ia32.zip -df14da964d36f36c50030004bb5e93a3b5fac9e4ddd6dd4f0e4ecdd49456ee4f *ffmpeg-v43.7.7-win32-x64.zip -1987f0c54ac21514090440f4dc981245cae34b71e95ddbeffd5bcb5da9a4982e *hunspell_dictionaries.zip -cd2a8fc7973a60a60f1612d87528e07eb047fad61106f240f4e39bffe9b66969 *libcxx-objects-v43.7.7-linux-arm64.zip -76dc80ad01bf2f0da658d5e58e256bcbcfc5b5e03d5ce25c3a43b9073d0e2a4f *libcxx-objects-v43.7.7-linux-armv7l.zip -5df32a0f3b4e11575d619dfc30bd614238a616f87303142b37bcf62b6206047f *libcxx-objects-v43.7.7-linux-x64.zip -f318b7480e1e9b6149cfa83dedee6027a381f4dc7a4b99af89dddbab4f6d0261 *libcxx_headers.zip -600988a1000006cb10d8b88727c6877dfe3e0cbcb49baee317551d8131593c0c *libcxxabi_headers.zip -080d43c0521b53dc9fffe91b17f9592518230aa0c819bac3e7a6aff484126895 *mksnapshot-v43.7.7-darwin-arm64.zip -3a4cf3ca11eb4f98e66e9ef111f7be82d5d517851ef0882d71bf25ef3f5e4adb *mksnapshot-v43.7.7-darwin-x64.zip -052aa030567fe51301f4ba7c52098583868296f0ea91fa1a78158f763bec1332 *mksnapshot-v43.7.7-linux-arm64-x64.zip -de81d082e286d93e6c2baa6a2ce4b5ccf36dbf5fab512c1a8274e4ad1d6ba660 *mksnapshot-v43.7.7-linux-armv7l-x64.zip -1a222e37532fb300237eedfc6eae2a836f9b8ccf988af64507c88178a9ad3a41 *mksnapshot-v43.7.7-linux-x64.zip -4aaa40fcf9c283f9c3106523fcaff9301dac65b7d36434aa1970def061c82a20 *mksnapshot-v43.7.7-mas-arm64.zip -2a46e79869eaaee734f7f70ef5650bdba3b72cce26a201c8f1a87e15364efd16 *mksnapshot-v43.7.7-mas-x64.zip -8de088472502ed3a26b5a56b016849add2cc694eb2acc76e599d582c675ca8e1 *mksnapshot-v43.7.7-win32-arm64-x64.zip -e73d7a9ada185a6182bdf6872f6c5a7ae22f18a1f7efdb9e4fcb7b21b21b0c53 *mksnapshot-v43.7.7-win32-ia32.zip -4878c2cf511a54a3d38cab480b0f3a2699f84e0d0bdf80b7f300cfbe867ca8b5 *mksnapshot-v43.7.7-win32-x64.zip +37e278ec348a0a97b45f36f9e4a43f6b1f57c6b70baa1e91ec895cac9e912547 *chromedriver-v43.8.3-darwin-arm64.zip +e8a913dff24d2d3f3e5039fe74ef754ea642a3320282495ec8076e702612f69c *chromedriver-v43.8.3-darwin-x64.zip +929cda53a3a544cb6a3b03e75e3d0ff9f44c077be89ce0a6c66287199cd51940 *chromedriver-v43.8.3-linux-arm64.zip +4d35c68f3015b1b12c4cd58744df2e6ca66fd6ef901a76d66f3aaf88a1207d5e *chromedriver-v43.8.3-linux-armv7l.zip +110d5bf9d1e03841cdc29ae5bb6f997913b02f34de4caeedddf7e2c7b20ee396 *chromedriver-v43.8.3-linux-x64.zip +e8af5230efb24094df2a052abaa6df2cb47517c0739147d2ab4b2db4b4976da7 *chromedriver-v43.8.3-mas-arm64.zip +db091ac128d83353323d6b2db4c2e5996aa141f0778ac2502ccf311280b23157 *chromedriver-v43.8.3-mas-x64.zip +aa9b4b6a324f35dbc33c7b957ff6a69b810036e558cc9ce97f63b1ce606df6df *chromedriver-v43.8.3-win32-arm64.zip +b5ce3044526d58dbfdf561005ba877d0cd9d9ed72888703d3dd1385122d318a8 *chromedriver-v43.8.3-win32-ia32.zip +cd479d1d38d537e06b8af4a0e4fd3448da0e4ca8c57c05a7cdfa2549f8ce5da6 *chromedriver-v43.8.3-win32-x64.zip +ceef77c3b2b2064ac52753e8e5224228850b4296e4b674e7b8fdefa07aa24955 *electron-api.json +04de3d0c6e307b63db367d90bb4198d224de48a23c5101ce4e76e0de077062a9 *electron-v43.8.3-darwin-arm64-dsym-snapshot.zip +311be758b60b62eebdcb52369296b9e66b2fcba021f0e2a9742a55ff4bc5da27 *electron-v43.8.3-darwin-arm64-dsym.tar.xz +9767207cfe2d1aafa9a083d114715cfe0ec0db079b77d3923685a72135d21d1a *electron-v43.8.3-darwin-arm64-symbols.zip +08e693ae36cfd230105aabe70c626b1a243c13534a529c35a80c1b87cb8da7b4 *electron-v43.8.3-darwin-arm64.zip +04de3d0c6e307b63db367d90bb4198d224de48a23c5101ce4e76e0de077062a9 *electron-v43.8.3-darwin-x64-dsym-snapshot.zip +3159f6d3b7535138d7dbfc064202d5228426114fd5fa6fda4d41ebe4e1d5418a *electron-v43.8.3-darwin-x64-dsym.tar.xz +21919f67f27175d186cff9d5084136a81335bb727783d286f005327564b0cfe2 *electron-v43.8.3-darwin-x64-symbols.zip +3e16ccaed7473a763e1a8cd16e8f17e796229d2a269b9c36bfbb6d93a6ba8443 *electron-v43.8.3-darwin-x64.zip +c6784e7a93d961453c744f973de7ebcd1744075ed56a7cd45ddcc300f458f9a7 *electron-v43.8.3-linux-arm64-debug.zip +716b81ba0fb9d6e0bfb7d8221985dcd80e67ada1b35b39020216d91f5df5f367 *electron-v43.8.3-linux-arm64-symbols.zip +b814ab22abf0bce90fd2fffc1490efc94f388353bcdb2f744950744998fd97b1 *electron-v43.8.3-linux-arm64.zip +9f4fdf88104c7559b7e92599a3f18d3a84239eefb6f3266fa033e06c88598b73 *electron-v43.8.3-linux-armv7l-debug.zip +ba9e62897d7630fdb63a3c17818bbc810c6d84b3f70aa40c9efbde1e5a30791f *electron-v43.8.3-linux-armv7l-symbols.zip +ce65b4ba52dabe1cf8e98933d057cb656b9b9c745ac0e1c859d331bc7a5da1ae *electron-v43.8.3-linux-armv7l.zip +7287290dbe4d2b44ad264c5f9dd7b9b9361dd7c4c8620f002e2e506f74196631 *electron-v43.8.3-linux-x64-debug.zip +188580f63d124ae219265043abe2040788fe97617de6a10fca93624eb1b622a6 *electron-v43.8.3-linux-x64-symbols.zip +73d7d6fe120c998db75834c23c8ce7ce8390607c198b2e167a28acd7937bef22 *electron-v43.8.3-linux-x64.zip +04de3d0c6e307b63db367d90bb4198d224de48a23c5101ce4e76e0de077062a9 *electron-v43.8.3-mas-arm64-dsym-snapshot.zip +9043ab8c0f11fd3379966611dd760be6992846d407dbcfbffc55a9d217e1e26b *electron-v43.8.3-mas-arm64-dsym.tar.xz +7dfa7950128c413edf7f6414feabf743ed2d8b6a4dca0dfeee2e61944222f7fa *electron-v43.8.3-mas-arm64-symbols.zip +d5d19790e7fbb1de3680452ffd037c598be73bc21a3f12f19971cc4db33b1180 *electron-v43.8.3-mas-arm64.zip +04de3d0c6e307b63db367d90bb4198d224de48a23c5101ce4e76e0de077062a9 *electron-v43.8.3-mas-x64-dsym-snapshot.zip +63ab6fd4b8f07921df8104825643b66d447a7d7d767592fa2174cc7c79316875 *electron-v43.8.3-mas-x64-dsym.tar.xz +57fff11078bda253be311124131a8c5e0ef4242ef16832ffea985a599abde877 *electron-v43.8.3-mas-x64-symbols.zip +e84e2086c680c315da51968ad64624dc8918c3028223c899525965bab5d2bb00 *electron-v43.8.3-mas-x64.zip +c0ff0bf2cd2849ba440f6cdad1b284300a2c826a5d82dce832ee9aa76d7890d3 *electron-v43.8.3-win32-arm64-pdb.zip +719c20e7447008f22c2038160d40aa56ab801fa4ee9fca5046aed4e3e66e25a0 *electron-v43.8.3-win32-arm64-symbols.zip +90386280bc7e4ac5d451e43e26a7c76ed1c8bcdc0206ec50762c7e4f09c59c28 *electron-v43.8.3-win32-arm64-toolchain-profile.zip +2b3aceeb51107023e48fe5a8ccb361dd4a1af4171b23b7ff1af2d67f09cfd394 *electron-v43.8.3-win32-arm64.zip +266ddf98e579231431804b5e09c675499168e050bd202b9f76aab03c769d25c4 *electron-v43.8.3-win32-ia32-pdb.zip +8a66080bfc117c4c44571c7283bde9c6b8264e3150903c667b864ad64c58988a *electron-v43.8.3-win32-ia32-symbols.zip +90386280bc7e4ac5d451e43e26a7c76ed1c8bcdc0206ec50762c7e4f09c59c28 *electron-v43.8.3-win32-ia32-toolchain-profile.zip +476bc01495fad5c86cd4d66954f94c68ff7a79637a9da02f23eab7aebc430ab6 *electron-v43.8.3-win32-ia32.zip +9e0ee6624d938a7d862ca95d77dfd1d0f2c29ba46e0b85a79a1160b39470d77a *electron-v43.8.3-win32-x64-pdb.zip +3a3d0f9189c765c1c90980ca515029c993af55dcd3729d64eea620078f4cf7a0 *electron-v43.8.3-win32-x64-symbols.zip +90386280bc7e4ac5d451e43e26a7c76ed1c8bcdc0206ec50762c7e4f09c59c28 *electron-v43.8.3-win32-x64-toolchain-profile.zip +98efbd2d1c7bd44150c0aa800cd9ac5fefcefd2d44fd94958a95d6744d86c6de *electron-v43.8.3-win32-x64.zip +782f47bd6013fa7d0c9640f2ce38b54759ba999ca3f5070711e5cd46e726869d *electron.d.ts +64a19753539d044d60828de029eedf152d58bdd5ab3aafe39592b5355e765a3e *ffmpeg-v43.8.3-darwin-arm64.zip +b30ec07e5a56697305e78bf1504325768258fa7cc4e420590ba8396c91a12232 *ffmpeg-v43.8.3-darwin-x64.zip +b409154ef3cbbc0bdabec071bc8d8edecb07daf4a020e59e421a9fa35c741666 *ffmpeg-v43.8.3-linux-arm64.zip +001847bd19549781850fd6f69941a54f92356ed26bca02892e9642637215668d *ffmpeg-v43.8.3-linux-armv7l.zip +53e7f7ef20ab264ceec4280c865ca25bf33379433bc4413fd84282f46a2e1928 *ffmpeg-v43.8.3-linux-x64.zip +72e5f94c9c5d79304bf142b935eed8b059686e966f4f6a7c718e5a94d32ffffc *ffmpeg-v43.8.3-mas-arm64.zip +1e7768e7b01fa758a614db81359a35c3be1cc8d966c71b36fa600fcf9bcb9c0d *ffmpeg-v43.8.3-mas-x64.zip +49d81f808b94554949688a31db15f5e7f020bdd250b5d1279824d26303559ae2 *ffmpeg-v43.8.3-win32-arm64.zip +2bf9eb4cb5b9a229b2942cab9fcd8e51bd26d977a632c7346e0d9546eb428ac7 *ffmpeg-v43.8.3-win32-ia32.zip +5879bbe130206e855a7e6c53c4180116d32acb2c0c358b3503957df9c92bb28f *ffmpeg-v43.8.3-win32-x64.zip +c4112f9ffa2b4621ed6309117ba493cb05eeedf6d7210711fc08b7608aebdaaf *hunspell_dictionaries.zip +d9330f8812c88b5438af463e4fdf3a299cd2e2d7f6fbb9b878626b9598f102f0 *libcxx-objects-v43.8.3-linux-arm64.zip +d9bad76b10c9f60599a1dcbe08901d331346b56e2193f1d8a1e060485b29300d *libcxx-objects-v43.8.3-linux-armv7l.zip +338abb02e91811cd6418cd89c95dd00c36eef4f93637f230a670f17711a0591f *libcxx-objects-v43.8.3-linux-x64.zip +e26c81aef3401936f6464919f85504985d425e0b113b8433f734b0222d242c17 *libcxx_headers.zip +ff0571d69ffac9b7a1d4f31d0b7bddb0962cb578967f7777557a1adfb46abfa5 *libcxxabi_headers.zip +f38c7894642f934a04ef6812eb58c4980a33d300da4573fde616028a1a67d3c6 *mksnapshot-v43.8.3-darwin-arm64.zip +482e5a656f9ad15e2c21b9560adadc321f61b4aa3a523516896862e91545db4d *mksnapshot-v43.8.3-darwin-x64.zip +e7dac3123c49e2d4038db6391a9c1997823fbe5e0c20da176185d43000d670b1 *mksnapshot-v43.8.3-linux-arm64-x64.zip +d8a01aede948b98ce0a198c64a73004f040672d2362b857309bd7d5a41b235ab *mksnapshot-v43.8.3-linux-armv7l-x64.zip +e3865154e4aa6104da6b5100164d040c6dd1959604c3271b249e6fef56073ffa *mksnapshot-v43.8.3-linux-x64.zip +bb694b3762731ac09b9839e79a0bfbcdc37e177b69c617c6663ef104f8a15b2f *mksnapshot-v43.8.3-mas-arm64.zip +0660d896926ae1f96b4a06a42ce34572df7cf69bf95d85783840a26b35c20ba2 *mksnapshot-v43.8.3-mas-x64.zip +3bf5b705289951eb456d835d120b041a80c7b478fc56ae6f3ff3dac28db24d39 *mksnapshot-v43.8.3-win32-arm64-x64.zip +338da32ae94a25a2d050b1bbb7c2759bdf14c5f8a8d083435a1ad08d6577e136 *mksnapshot-v43.8.3-win32-ia32.zip +79de2c43512dae5ca17c3d41bace607e4ab6b9ab138685b30b1a180a12b92275 *mksnapshot-v43.8.3-win32-x64.zip diff --git a/build/checksums/nodejs.txt b/build/checksums/nodejs.txt index 653609665fa..105115f0452 100644 --- a/build/checksums/nodejs.txt +++ b/build/checksums/nodejs.txt @@ -1,6 +1,7 @@ -bed7eea5325e1108f32ce5228ddd6a5f0f08a499ee42aa7442aea583702f6057 node-v24.21.0-darwin-arm64.tar.gz -1462cb3b3046b815cf8ea436d3da450ec1a9f11dac7e5a46b0ada5305d7e8097 node-v24.21.0-darwin-x64.tar.gz -724282c3b43aec998aa9527380465b45d229e021b58035f5f4f63095eabfe5d5 node-v24.21.0-linux-arm64.tar.gz -6e1db87ef58b8819e5d5402eff1536491b18edd8eb7bee5ef7897876e88dc5ff node-v24.21.0-linux-x64.tar.gz -dff59da18b6ffe1bf1ca99e1d2af4906080c481740619f5b5098c0fca28bd9b7 win-arm64/node.exe -ba4e6d110e8c1592a1ecd390f6b05f3da124b13871a5be62b341a07a853c6c32 win-x64/node.exe +89c682593d76cd44233fa53b1563264e7de9cbb189cad169135c5b4fadfbc0a7 node-v24.22.1-darwin-arm64.tar.gz +d132557e7ee2b85af08b0c8c34338e65c6430f2238d01f727728ef42dc83b035 node-v24.22.1-darwin-x64.tar.gz +33c37be234ba8bee041961047b19160f4d7d0f164e8e246f78bdd10feff148b3 node-v24.22.1-linux-arm64.tar.gz +9b250d29d6ab8ae38dd23019e2c04a6d6b2916ab1dad721c5f6e1da2b2901c6a node-v24.22.1-linux-x64-musl.tar.gz +eb6728e77c576a35162c122c45ccadf224d89ff00abc8dae46cc2897c6002d7c node-v24.22.1-linux-x64.tar.gz +8bea91dc437fe01e7d92ef0efc6c9eaf654369aaba9b2d3e9841552ea7b95a00 win-arm64/node.exe +d702daa815eabbff763c7d3808e235cf031cf2ca70211b56847bc72f51e240e5 win-x64/node.exe diff --git a/build/lib/nodeCompileCache.ts b/build/lib/nodeCompileCache.ts index 988dc11a5e8..66dfaf4c1b5 100644 --- a/build/lib/nodeCompileCache.ts +++ b/build/lib/nodeCompileCache.ts @@ -29,8 +29,7 @@ export function shouldGenerateNodeCompileCache(platform: string, arch: string, p return false; } - // TODO: Re-enable POSIX caches once the runtime fixes portable caching with eager/read-only options. - return platform === 'win32' && arch === 'x64'; + return platform === 'darwin' ? arch === 'arm64' : (platform === 'linux' || platform === 'win32') && arch === 'x64'; } export function getNodeCompileCachePaths(platform: string, outputDirectory: string, versionedResourcesFolder: string, product: INodeCompileCacheProduct): INodeCompileCachePaths { diff --git a/cgmanifest.json b/cgmanifest.json index 4e86b48bb61..7493f509b5f 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -516,12 +516,12 @@ "git": { "name": "nodejs", "repositoryUrl": "https://github.com/nodejs/node", - "commitHash": "955266bfdd854cd280dffd47548673914484e4c0", - "tag": "24.21.0" + "commitHash": "ce7aaf1cee78b8cf0ce17364260535c418d3ed26", + "tag": "24.22.1" } }, "isOnlyProductionDependency": true, - "version": "24.21.0" + "version": "24.22.1" }, { "component": { @@ -529,13 +529,13 @@ "git": { "name": "electron", "repositoryUrl": "https://github.com/electron/electron", - "commitHash": "ddb762f50fbd70384d0385302697e60ada549024", - "tag": "43.7.7" + "commitHash": "1c0ee213f150fc4a0d06304dcedabd9b2e8ce0f7", + "tag": "43.8.3" } }, "isOnlyProductionDependency": true, "license": "MIT", - "version": "43.7.7" + "version": "43.8.3" }, { "component": { diff --git a/extensions/copilot/.nvmrc b/extensions/copilot/.nvmrc index a43a5b943d9..ce62013c39a 100644 --- a/extensions/copilot/.nvmrc +++ b/extensions/copilot/.nvmrc @@ -1 +1 @@ -24.22.0 +24.22.1 diff --git a/package.json b/package.json index bb91fffdaa3..bd9c95741db 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.144.0", - "distro": "970f5d12c6d064fc72fdd155408d94172b7b2971", + "distro": "521818f764541475ae887336c771834dbb3c71af", "author": { "name": "Microsoft Corporation" }, diff --git a/remote/.npmrc b/remote/.npmrc index e476c3d6746..562a15b1a4c 100644 --- a/remote/.npmrc +++ b/remote/.npmrc @@ -1,6 +1,6 @@ disturl="https://nodejs.org/dist" -target="24.21.0" -ms_build_id="474716" +target="24.22.1" +ms_build_id="488038" runtime="node" build_from_source="true" legacy-peer-deps="true" diff --git a/src/mainImpl.ts b/src/mainImpl.ts index 3d34aea5933..c23a61b11a6 100644 --- a/src/mainImpl.ts +++ b/src/mainImpl.ts @@ -361,15 +361,15 @@ function configureCommandlineSwitchesSync(cliArgs: NativeParsedArgs) { // `EarlyEstablishGpuChannel` - Refs https://issues.chromium.org/issues/40208065 // `EstablishGpuChannelAsync` - Refs https://issues.chromium.org/issues/40208065 // `GlobalShortcutsPortal` - Enables Electron's `globalShortcut` (system-wide keybindings) on Linux Wayland via the XDG global shortcuts portal (no-op elsewhere) + // `UpdateCompositorMemoryPolicyOnScreenChange` - Recompute the compositor memory budget on display changes (https://chromium-review.googlesource.com/c/chromium/src/+/8594621) const featuresToEnable = - `NetAdapterMaxBufSizeFeature:NetAdapterMaxBufSize/8192,DocumentPolicyIncludeJSCallStacksInCrashReports,EarlyEstablishGpuChannel,EstablishGpuChannelAsync${process.platform === 'linux' ? ',GlobalShortcutsPortal' : ''},${app.commandLine.getSwitchValue('enable-features')}`; + `NetAdapterMaxBufSizeFeature:NetAdapterMaxBufSize/8192,DocumentPolicyIncludeJSCallStacksInCrashReports,EarlyEstablishGpuChannel,EstablishGpuChannelAsync,UpdateCompositorMemoryPolicyOnScreenChange${process.platform === 'linux' ? ',GlobalShortcutsPortal' : ''},${app.commandLine.getSwitchValue('enable-features')}`; app.commandLine.appendSwitch('enable-features', featuresToEnable); // Following features are disabled from the runtime: // `CalculateNativeWinOcclusion` - Disable native window occlusion tracker (https://groups.google.com/a/chromium.org/g/embedder-dev/c/ZF3uHHyWLKw/m/VDN2hDXMAAAJ) - // `HideCursorWhileTyping` - Disable hiding the cursor while typing (https://chromium-review.googlesource.com/c/chromium/src/+/7916752) const featuresToDisable = - `CalculateNativeWinOcclusion,HideCursorWhileTyping,${app.commandLine.getSwitchValue('disable-features')}`; + `CalculateNativeWinOcclusion,${app.commandLine.getSwitchValue('disable-features')}`; app.commandLine.appendSwitch('disable-features', featuresToDisable); // Blink features to configure. diff --git a/src/vs/base/common/media.ts b/src/vs/base/common/media.ts new file mode 100644 index 00000000000..89f4f058c27 --- /dev/null +++ b/src/vs/base/common/media.ts @@ -0,0 +1,22 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +/** + * Approved video codec/container candidates, ordered by recording preference. + * Consumers must still query recording and playback support in the current runtime. + */ +export const supportedVideoFormats = [ + { mimeType: 'video/mp4;codecs=avc1.42001E', label: 'MP4', extension: 'mp4' }, + { mimeType: 'video/webm;codecs=vp8', label: 'WebM', extension: 'webm' }, +] as const; + +/** Approved audio codec/container candidates; availability must be checked at runtime. */ +export const supportedAudioFormats = [ + { mimeType: 'audio/ogg;codecs=vorbis', label: 'Ogg', extension: 'ogg' }, + { mimeType: 'audio/webm;codecs=vorbis', label: 'WebM', extension: 'webm' }, + { mimeType: 'audio/flac', label: 'FLAC', extension: 'flac' }, + { mimeType: 'audio/mpeg', label: 'MP3', extension: 'mp3' }, + { mimeType: 'audio/wav;codecs=1', label: 'WAV', extension: 'wav' }, +] as const; diff --git a/src/vs/base/node/nodeCompileCache.ts b/src/vs/base/node/nodeCompileCache.ts index b9cea60d698..081bb2d6285 100644 --- a/src/vs/base/node/nodeCompileCache.ts +++ b/src/vs/base/node/nodeCompileCache.ts @@ -61,17 +61,6 @@ export function enableNodeCompileCache(kind: NodeCompileCacheKind): boolean { return false; } - // TODO: Re-enable POSIX caches once the runtime fixes portable caching with eager/read-only options. - if (process.platform !== 'win32') { - setNodeCompileCacheStatus({ - kind, - status: 'disabled', - configuredDirectory: cacheDirectory, - isPackagedCacheEnabled: false - }); - return false; - } - const isGeneratingCache = process.env['VSCODE_GENERATE_NODE_COMPILE_CACHE'] === '1'; const runtimeCachePrefix = `${process.version}-${process.arch}-`; // eslint-disable-next-line local/code-no-sync-fs -- The cache must be validated before enableCompileCache and subsequent module imports; an async probe would miss compilation of those startup modules. diff --git a/src/vs/workbench/contrib/issue/electron-browser/nativeRecordingService.ts b/src/vs/workbench/contrib/issue/electron-browser/nativeRecordingService.ts index 1c69e7c8b24..af83d014f47 100644 --- a/src/vs/workbench/contrib/issue/electron-browser/nativeRecordingService.ts +++ b/src/vs/workbench/contrib/issue/electron-browser/nativeRecordingService.ts @@ -8,6 +8,7 @@ import { TimeoutTimer } from '../../../../base/common/async.js'; import { Emitter, Event } from '../../../../base/common/event.js'; import { CancellationError, isCancellationError } from '../../../../base/common/errors.js'; import { Disposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { supportedVideoFormats } from '../../../../base/common/media.js'; import { isMacintosh } from '../../../../base/common/platform.js'; import { localize } from '../../../../nls.js'; import { ILogService } from '../../../../platform/log/common/log.js'; @@ -96,19 +97,10 @@ export class NativeRecordingService extends Disposable implements IRecordingServ } getSupportedFormats(): { mimeType: string; label: string; extension: string }[] { - const formats: { mimeType: string; label: string; extension: string }[] = []; const MediaRecorder = this.getMediaRecorderConstructor(); - if (MediaRecorder) { - if (this.isFormatSupported(MediaRecorder, 'video/mp4')) { - formats.push({ mimeType: 'video/mp4', label: 'MP4', extension: 'mp4' }); - } - if (this.isFormatSupported(MediaRecorder, 'video/webm;codecs=vp9')) { - formats.push({ mimeType: 'video/webm;codecs=vp9', label: 'WebM', extension: 'webm' }); - } else if (this.isFormatSupported(MediaRecorder, 'video/webm')) { - formats.push({ mimeType: 'video/webm', label: 'WebM', extension: 'webm' }); - } - } - return formats; + return MediaRecorder + ? supportedVideoFormats.filter(format => this.isFormatSupported(MediaRecorder, format.mimeType)) + : []; } async startRecording(preferredMimeType?: string): Promise { @@ -142,7 +134,8 @@ export class NativeRecordingService extends Disposable implements IRecordingServ throw new Error(localize('recordingNoLiveTrack', "No live screen capture source is available. Try recording again.")); } - const mimeType = preferredMimeType && this.isFormatSupported(MediaRecorder, preferredMimeType) ? preferredMimeType : supportedFormats[0].mimeType; + const mimeType = supportedFormats.find(format => format.mimeType === preferredMimeType || format.mimeType.split(';')[0] === preferredMimeType)?.mimeType + ?? supportedFormats[0].mimeType; const recorder = this.mediaRecorder = new MediaRecorder(stream, { mimeType, videoBitsPerSecond: 2_500_000 }); recorder.ondataavailable = e => { diff --git a/src/vs/workbench/contrib/issue/test/electron-browser/nativeRecordingService.test.ts b/src/vs/workbench/contrib/issue/test/electron-browser/nativeRecordingService.test.ts index 958eb7446c5..14862d90abf 100644 --- a/src/vs/workbench/contrib/issue/test/electron-browser/nativeRecordingService.test.ts +++ b/src/vs/workbench/contrib/issue/test/electron-browser/nativeRecordingService.test.ts @@ -18,6 +18,8 @@ import { INativeHostService } from '../../../../../platform/native/common/native import { RecordingState } from '../../browser/recordingService.js'; import { NativeRecordingService } from '../../electron-browser/nativeRecordingService.js'; +const mp4RecordingMimeType = 'video/mp4;codecs=avc1.42001E'; + class TestTrack extends mock() { constructor(override readonly kind = 'video') { super(); } override readyState: MediaStreamTrackState = 'live'; @@ -82,7 +84,7 @@ suite('NativeRecordingService', () => { const recorders: TestRecorder[] = []; const recorderCreated = new DeferredPromise(); class TestRecorder extends mock() { - static isTypeSupported(mimeType: string): boolean { return (options.formats ?? ['video/mp4', 'video/webm;codecs=vp9', 'video/webm']).includes(mimeType); } + static isTypeSupported(mimeType: string): boolean { return (options.formats ?? [mp4RecordingMimeType]).includes(mimeType); } override state: 'inactive' | 'recording' | 'paused' = 'inactive'; override readonly mimeType: string; override ondataavailable: MediaRecorder['ondataavailable'] = null; @@ -163,7 +165,7 @@ suite('NativeRecordingService', () => { override async requestScreenCaptureAccess(): Promise { nativeCalls.push('request'); return true; } override async openExternal(url: string): Promise { nativeCalls.push(url); return true; } }(); - const service = store.add(new TestNativeRecordingService(devices, TestRecorder, nativeHost, options.playableFormats ?? options.formats ?? ['video/mp4', 'video/webm;codecs=vp9', 'video/webm'])); + const service = store.add(new TestNativeRecordingService(devices, TestRecorder, nativeHost, options.playableFormats ?? options.formats ?? [mp4RecordingMimeType])); return { service, tracks, recorders, devices, nativeCalls, recorderCreated }; } @@ -206,27 +208,57 @@ suite('NativeRecordingService', () => { assert.deepStrictEqual(snapshot(service, tracks, recorders), idleSnapshot); }); - for (const format of ['video/mp4', 'video/webm;codecs=vp9', 'video/webm']) { - test(`records and explicitly stops ${format} without an external stop event`, async () => { - const { service, tracks, recorders } = createService({ formats: [format] }); - const states: RecordingState[] = []; - store.add(service.onDidChangeState(state => states.push(state))); - await service.startRecording('video/mp4'); - const data = await service.stopRecording(); - assert.deepStrictEqual({ - ...snapshot(service, tracks, recorders), states, mimeType: data?.mimeType, size: data?.sizeBytes, content: await data?.blob.text(), - }, { ...idleSnapshot, states: [RecordingState.Recording, RecordingState.Idle], mimeType: format, size: 10, content: 'videovideo' }); - }); - } + test('defaults to H.264 MP4 and explicitly stops without an external stop event', async () => { + const { service, tracks, recorders } = createService(); + const states: RecordingState[] = []; + store.add(service.onDidChangeState(state => states.push(state))); + await service.startRecording(); + const data = await service.stopRecording(); + assert.deepStrictEqual({ + ...snapshot(service, tracks, recorders), states, mimeType: data?.mimeType, size: data?.sizeBytes, content: await data?.blob.text(), + }, { ...idleSnapshot, states: [RecordingState.Recording, RecordingState.Idle], mimeType: mp4RecordingMimeType, size: 10, content: 'videovideo' }); + }); test('honors a supported format preference', async () => { const { service } = createService(); - await service.startRecording('video/webm'); - assert.strictEqual((await service.stopRecording())?.mimeType, 'video/webm'); + await service.startRecording(mp4RecordingMimeType); + assert.strictEqual((await service.stopRecording())?.mimeType, mp4RecordingMimeType); + }); + + test('resolves a container preference to an explicitly supported codec', async () => { + const { service } = createService({ formats: ['video/mp4', mp4RecordingMimeType] }); + await service.startRecording('video/mp4'); + assert.strictEqual((await service.stopRecording())?.mimeType, mp4RecordingMimeType); + }); + + test('does not advertise an unspecified MP4 codec when H.264 recording is unavailable', () => { + const { service } = createService({ formats: ['video/mp4'] }); + assert.deepStrictEqual({ supported: service.isSupported, formats: service.getSupportedFormats() }, { + supported: false, formats: [], + }); + }); + + test('does not select codecs outside the approved candidates', async () => { + const { service } = createService({ formats: [mp4RecordingMimeType, 'video/mp4;codecs=vp9', 'video/webm;codecs=vp9'], playableFormats: [mp4RecordingMimeType] }); + await service.startRecording('video/mp4;codecs=vp9'); + assert.strictEqual((await service.stopRecording())?.mimeType, mp4RecordingMimeType); + }); + + test('filters approved formats using both recording and playback support', () => { + const vp8 = 'video/webm;codecs=vp8'; + const { service: recordableOnly } = createService({ formats: [mp4RecordingMimeType, vp8], playableFormats: [mp4RecordingMimeType] }); + const { service: playableOnly } = createService({ formats: [mp4RecordingMimeType], playableFormats: [mp4RecordingMimeType, vp8] }); + assert.deepStrictEqual({ + recordableOnly: recordableOnly.getSupportedFormats(), + playableOnly: playableOnly.getSupportedFormats(), + }, { + recordableOnly: [{ mimeType: mp4RecordingMimeType, label: 'MP4', extension: 'mp4' }], + playableOnly: [{ mimeType: mp4RecordingMimeType, label: 'MP4', extension: 'mp4' }], + }); }); test('only uses formats that can also be decoded', async () => { - const { service } = createService({ playableFormats: ['video/mp4'] }); + const { service } = createService({ playableFormats: [mp4RecordingMimeType] }); await service.startRecording('video/webm'); const data = await service.stopRecording(); const { service: unsupported } = createService({ playableFormats: [] }); @@ -238,8 +270,8 @@ suite('NativeRecordingService', () => { unsupported: { isSupported: unsupported.isSupported, formats: unsupported.getSupportedFormats() }, }, { supported: true, - formats: [{ mimeType: 'video/mp4', label: 'MP4', extension: 'mp4' }], - fallback: 'video/mp4', + formats: [{ mimeType: mp4RecordingMimeType, label: 'MP4', extension: 'mp4' }], + fallback: mp4RecordingMimeType, unsupported: { isSupported: false, formats: [] }, }); }); @@ -438,9 +470,9 @@ suite('NativeRecordingService', () => { : ['request']); }); - for (const mimeType of ['video/mp4', 'video/webm']) { - // The video/webm case: WebM can't be opened on the shipped (feed) Electron that product builds test with (`PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN: FFmpegDemuxer: open context failed`), so this is skipped until https://github.com/microsoft/vscode/issues/343345 is fixed. - (mimeType === 'video/webm' ? test.skip : test)(`only advertises and round-trips playable ${mimeType} without OS capture`, async () => { + for (const mimeType of ['video/mp4', 'video/webm;codecs=vp8']) { + // TODO: Enable WebM/VP8 once the shipped FFmpeg supports WebM file demuxing: https://github.com/microsoft/vscode/issues/343345. + (mimeType.startsWith('video/webm') ? test.skip : test)(`only advertises and round-trips playable ${mimeType} without OS capture`, async () => { const canvas = mainWindow.document.createElement('canvas'); const video = mainWindow.document.createElement('video'); canvas.width = 32; @@ -469,7 +501,7 @@ suite('NativeRecordingService', () => { override async getDisplayMedia(): Promise { return stream; } }(); const service = store.add(new TestNativeRecordingService(devices, ObservedMediaRecorder, new class extends mock() { }())); - const candidates = mimeType === 'video/webm' ? ['video/webm;codecs=vp9', 'video/webm'] : [mimeType]; + const candidates = [mimeType === 'video/mp4' ? mp4RecordingMimeType : mimeType]; const capabilities = candidates.map(candidate => ({ mimeType: candidate, recordable: typeof MediaRecorder !== 'undefined' && MediaRecorder.isTypeSupported(candidate), @@ -481,9 +513,12 @@ suite('NativeRecordingService', () => { return; } assert.ok(capabilities.some(capability => capability.mimeType === format.mimeType && capability.recordable && capability.playable)); - await Promise.all([service.startRecording(format.mimeType), firstChunk.p]); + await Promise.all([service.startRecording(mimeType === 'video/mp4' ? undefined : format.mimeType), firstChunk.p]); const data = await service.stopRecording(); assert.ok(data?.sizeBytes); + if (mimeType === 'video/mp4') { + assert.match(data.mimeType, /^video\/mp4;codecs=avc1\./); + } const url = URL.createObjectURL(data.blob); store.add(toDisposable(() => { @@ -503,7 +538,7 @@ suite('NativeRecordingService', () => { await video.play(); assert.deepStrictEqual({ state: service.state, width: video.videoWidth, height: video.videoHeight, mimeType: data.mimeType.split(';')[0], - }, { state: RecordingState.Idle, width: 32, height: 24, mimeType }); + }, { state: RecordingState.Idle, width: 32, height: 24, mimeType: mimeType.split(';')[0] }); })?.timeout(10000); // `test.skip` returns nothing in this runner } });