pkgsrc-WIP-changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
electron32: update to 32.3.0
Module Name: pkgsrc-wip
Committed By: kikadf <kikadf.01%gmail.com@localhost>
Pushed By: kikadf
Date: Sat Feb 15 10:50:37 2025 +0100
Changeset: 1ba13d71cae9d4918a5c69f95a6cce82f35e35a5
Modified Files:
electron32/Makefile
electron32/distinfo
electron32/options.mk
electron32/patches/patch-.gn
electron32/patches/patch-base_files_file__path__watcher__bsd.cc
electron32/patches/patch-base_process_process__handle__netbsd.cc
electron32/patches/patch-base_process_process__iterator__netbsd.cc
electron32/patches/patch-base_process_process__metrics__netbsd.cc
electron32/patches/patch-base_system_sys__info__netbsd.cc
electron32/patches/patch-base_threading_platform__thread__bsd.cc
electron32/patches/patch-build_linux_unbundle_icu.gn
electron32/patches/patch-build_toolchain_freebsd_BUILD.gn
electron32/patches/patch-build_toolchain_netbsd_BUILD.gn
electron32/patches/patch-build_toolchain_openbsd_BUILD.gn
electron32/patches/patch-components_viz_service_display__embedder_software__output__device__proxy.cc
electron32/patches/patch-components_viz_service_display__embedder_software__output__device__proxy.h
electron32/patches/patch-content_browser_file__system__access_file__path__watcher_file__path__watcher__bsd.cc
electron32/patches/patch-content_common_gpu__pre__sandbox__hook__bsd.cc
electron32/patches/patch-content_common_gpu__pre__sandbox__hook__bsd.h
electron32/patches/patch-electron_BUILD.gn
electron32/patches/patch-electron_build_args_all.gn
electron32/patches/patch-electron_build_args_release.gn
electron32/patches/patch-electron_default__app_default__app.ts
electron32/patches/patch-electron_filenames.gni
electron32/patches/patch-electron_lib_browser_api_app.ts
electron32/patches/patch-electron_lib_browser_api_dialog.ts
electron32/patches/patch-electron_lib_browser_api_menu-item-roles.ts
electron32/patches/patch-electron_lib_browser_api_power-monitor.ts
electron32/patches/patch-electron_lib_browser_init.ts
electron32/patches/patch-electron_lib_browser_rpc-server.ts
electron32/patches/patch-electron_lib_renderer_api_clipboard.ts
electron32/patches/patch-electron_script_lib_config.py
electron32/patches/patch-electron_script_lib_utils.js
electron32/patches/patch-electron_script_spec-runner.js
electron32/patches/patch-electron_shell_app_electron__crash__reporter__client.cc
electron32/patches/patch-electron_shell_app_electron__crash__reporter__client.h
electron32/patches/patch-electron_shell_app_electron__main__delegate.cc
electron32/patches/patch-electron_shell_app_node__main.cc
electron32/patches/patch-electron_shell_browser_api_electron__api__app.cc
electron32/patches/patch-electron_shell_browser_api_electron__api__base__window.cc
electron32/patches/patch-electron_shell_browser_api_electron__api__base__window.h
electron32/patches/patch-electron_shell_browser_api_electron__api__crash__reporter.cc
electron32/patches/patch-electron_shell_browser_api_electron__api__desktop__capturer.cc
electron32/patches/patch-electron_shell_browser_api_electron__api__power__monitor.cc
electron32/patches/patch-electron_shell_browser_api_electron__api__power__monitor.h
electron32/patches/patch-electron_shell_browser_api_electron__api__safe__storage.cc
electron32/patches/patch-electron_shell_browser_api_electron__api__web__contents.cc
electron32/patches/patch-electron_shell_browser_api_electron__api__web__contents.h
electron32/patches/patch-electron_shell_browser_api_process__metric.h
electron32/patches/patch-electron_shell_browser_browser.cc
electron32/patches/patch-electron_shell_browser_browser.h
electron32/patches/patch-electron_shell_browser_browser__linux.cc
electron32/patches/patch-electron_shell_browser_browser__process__impl.cc
electron32/patches/patch-electron_shell_browser_browser__process__impl.h
electron32/patches/patch-electron_shell_browser_electron__browser__main__parts.cc
electron32/patches/patch-electron_shell_browser_electron__browser__main__parts.h
electron32/patches/patch-electron_shell_browser_electron__browser__main__parts__posix.cc
electron32/patches/patch-electron_shell_browser_extensions_api_runtime_electron__runtime__api__delegate.cc
electron32/patches/patch-electron_shell_browser_native__window.cc
electron32/patches/patch-electron_shell_browser_native__window__views.cc
electron32/patches/patch-electron_shell_browser_native__window__views.h
electron32/patches/patch-electron_shell_browser_net_system__network__context__manager.cc
electron32/patches/patch-electron_shell_browser_osr_osr__host__display__client.cc
electron32/patches/patch-electron_shell_browser_osr_osr__host__display__client.h
electron32/patches/patch-electron_shell_browser_printing_printing__utils.cc
electron32/patches/patch-electron_shell_browser_relauncher__linux.cc
electron32/patches/patch-electron_shell_browser_ui_inspectable__web__contents.cc
electron32/patches/patch-electron_shell_browser_ui_inspectable__web__contents__view__delegate.h
electron32/patches/patch-electron_shell_browser_ui_views_electron__views__delegate.cc
electron32/patches/patch-electron_shell_browser_ui_views_electron__views__delegate.h
electron32/patches/patch-electron_shell_browser_ui_views_inspectable__web__contents__view__views.cc
electron32/patches/patch-electron_shell_browser_ui_views_menu__bar.cc
electron32/patches/patch-electron_shell_browser_ui_views_menu__bar.h
electron32/patches/patch-electron_shell_browser_ui_views_submenu__button.cc
electron32/patches/patch-electron_shell_common_api_electron__api__clipboard.cc
electron32/patches/patch-electron_shell_common_api_electron__api__native__image.cc
electron32/patches/patch-electron_shell_common_api_electron__api__native__image.h
electron32/patches/patch-electron_shell_common_api_electron__bindings.cc
electron32/patches/patch-electron_shell_common_electron__command__line.cc
electron32/patches/patch-electron_shell_common_electron__command__line.h
electron32/patches/patch-electron_shell_common_electron__paths.h
electron32/patches/patch-electron_shell_common_gin__converters_std__converter.h
electron32/patches/patch-electron_shell_common_node__bindings.cc
electron32/patches/patch-electron_shell_common_node__bindings__linux.cc
electron32/patches/patch-electron_shell_common_platform__util.h
electron32/patches/patch-electron_shell_renderer_api_electron__api__crash__reporter__renderer.cc
electron32/patches/patch-electron_spec_api-app-spec.ts
electron32/patches/patch-electron_spec_api-browser-window-spec.ts
electron32/patches/patch-electron_spec_api-clipboard-spec.ts
electron32/patches/patch-electron_spec_api-content-tracing-spec.ts
electron32/patches/patch-electron_spec_api-crash-reporter-spec.ts
electron32/patches/patch-electron_spec_api-desktop-capturer-spec.ts
electron32/patches/patch-electron_spec_api-menu-spec.ts
electron32/patches/patch-electron_spec_api-native-image-spec.ts
electron32/patches/patch-electron_spec_api-net-log-spec.ts
electron32/patches/patch-electron_spec_api-notification-dbus-spec.ts
electron32/patches/patch-electron_spec_api-power-monitor-spec.ts
electron32/patches/patch-electron_spec_api-process-spec.ts
electron32/patches/patch-electron_spec_api-protocol-spec.ts
electron32/patches/patch-electron_spec_api-safe-storage-spec.ts
electron32/patches/patch-electron_spec_api-screen-spec.ts
electron32/patches/patch-electron_spec_api-shell-spec.ts
electron32/patches/patch-electron_spec_api-subframe-spec.ts
electron32/patches/patch-electron_spec_api-tray-spec.ts
electron32/patches/patch-electron_spec_api-utility-process-spec.ts
electron32/patches/patch-electron_spec_api-web-frame-main-spec.ts
electron32/patches/patch-electron_spec_chromium-spec.ts
electron32/patches/patch-electron_spec_crash-spec.ts
electron32/patches/patch-electron_spec_fixtures_api_safe-storage_decrypt-app_main.js
electron32/patches/patch-electron_spec_fixtures_api_safe-storage_encrypt-app_main.js
electron32/patches/patch-electron_spec_fixtures_crash-cases_safe-storage_index.js
electron32/patches/patch-electron_spec_fixtures_native-addon_uv-dlopen_index.js
electron32/patches/patch-electron_spec_node-spec.ts
electron32/patches/patch-electron_spec_version-bump-spec.ts
electron32/patches/patch-electron_spec_visibility-state-spec.ts
electron32/patches/patch-electron_spec_webview-spec.ts
electron32/patches/patch-media_audio_sndio_audio__manager__sndio.cc
electron32/patches/patch-media_audio_sndio_audio__manager__sndio.h
electron32/patches/patch-media_audio_sndio_sndio__input.cc
electron32/patches/patch-media_audio_sndio_sndio__input.h
electron32/patches/patch-media_audio_sndio_sndio__output.cc
electron32/patches/patch-media_audio_sndio_sndio__output.h
electron32/patches/patch-sandbox_policy_freebsd_sandbox__freebsd.cc
electron32/patches/patch-sandbox_policy_freebsd_sandbox__freebsd.h
electron32/patches/patch-sandbox_policy_netbsd_sandbox__netbsd.cc
electron32/patches/patch-sandbox_policy_netbsd_sandbox__netbsd.h
electron32/patches/patch-sandbox_policy_openbsd_sandbox__openbsd.cc
electron32/patches/patch-sandbox_policy_openbsd_sandbox__openbsd.h
electron32/patches/patch-services_device_hid_hid__connection__fido.cc
electron32/patches/patch-services_device_hid_hid__connection__fido.h
electron32/patches/patch-services_device_hid_hid__connection__freebsd.cc
electron32/patches/patch-services_device_hid_hid__connection__freebsd.h
electron32/patches/patch-services_device_hid_hid__service__fido.cc
electron32/patches/patch-services_device_hid_hid__service__fido.h
electron32/patches/patch-services_device_hid_hid__service__freebsd.cc
electron32/patches/patch-services_device_hid_hid__service__freebsd.h
electron32/patches/patch-services_device_usb_usb__service__fake.cc
electron32/patches/patch-services_device_usb_usb__service__fake.h
electron32/patches/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__bsd.cc
electron32/patches/patch-third__party_blink_renderer_platform_BUILD.gn
electron32/patches/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
electron32/patches/patch-third__party_dawn_src_tint_lang_wgsl_resolver_address__space__layout__validation__test.cc
electron32/patches/patch-third__party_dawn_src_tint_lang_wgsl_resolver_validator.cc
electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl
electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.dxc.hlsl
electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.fxc.hlsl
electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.glsl
electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.dxc.hlsl
electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.fxc.hlsl
electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.msl
electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.spvasm
electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.wgsl
electron32/patches/patch-third__party_speech-dispatcher_libspeechd__version.h
electron32/patches/patch-ui_shell__dialogs_select__file__dialog__linux__portal.cc
electron32/patches/patch-ui_shell__dialogs_select__file__dialog__linux__portal.h
electron32/patches/patch-v8_test_mjsunit_regress_wasm_regress-366635354.js
electron32/patches/patch-v8_test_mjsunit_wasm_regress-367818758.js
electron32/patches/patch-v8_tools_run-paxctl.py
Added Files:
electron32/patches/patch-base_metrics_field__trial.cc
electron32/patches/patch-base_metrics_persistent__histogram__allocator.cc
electron32/patches/patch-base_metrics_persistent__histogram__allocator.h
electron32/patches/patch-base_metrics_persistent__memory__allocator.cc
electron32/patches/patch-base_metrics_persistent__memory__allocator.h
electron32/patches/patch-base_metrics_persistent__memory__allocator__unittest.cc
electron32/patches/patch-cc_tiles_gpu__image__decode__cache.cc
electron32/patches/patch-components_metrics_persistent__system__profile.cc
electron32/patches/patch-content_browser_renderer__host_media_video__capture__manager.cc
electron32/patches/patch-content_browser_renderer__host_media_video__capture__manager.h
electron32/patches/patch-third__party_blink_public_platform_web__worker__fetch__context.h
electron32/patches/patch-third__party_blink_renderer_core_workers_worker__navigator.cc
electron32/patches/patch-third__party_blink_renderer_core_workers_worker__navigator.h
electron32/patches/patch-third__party_blink_renderer_modules_service__worker_web__service__worker__fetch__context__impl.cc
electron32/patches/patch-third__party_blink_renderer_modules_service__worker_web__service__worker__fetch__context__impl.h
electron32/patches/patch-third__party_blink_renderer_platform_accept__languages__watcher.h
electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_DEPS
electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_dedicated__or__shared__worker__fetch__context__impl.cc
electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_dedicated__or__shared__worker__fetch__context__impl.h
electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__printer_ast__printer__test.cc
electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__raise_packed__vec3.cc
electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__raise_packed__vec3__test.cc
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat2x3__f16_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat2x3__f32_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat3x3__f32_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat4x3__f16_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat4x3__f32_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat2x3__f16_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat2x3__f32_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat3x3__f16_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat3x3__f32_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat4x3__f16_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat4x3__f32_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat2x3__f16_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat2x3__f32_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat3x3__f16_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat3x3__f32_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat4x3__f16_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat4x3__f32_to__workgroup.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_bug_tint_366037039.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_bug_tint_366314931.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_bug_tint_942.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_builtins_workgroupUniformLoad_matrix.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_builtins_workgroupUniformLoad_structures.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_var_initialization_workgroup_matrix.wgsl.expected.msl
electron32/patches/patch-third__party_dawn_test_tint_var_initialization_workgroup_vector.wgsl.expected.msl
electron32/patches/patch-third__party_skia_src_gpu_ganesh_ops_AAHairLinePathRenderer.cpp
electron32/patches/patch-v8_src_builtins_builtins-object-gen.cc
electron32/patches/patch-v8_src_compiler_turboshaft_wasm-gc-typed-optimization-reducer.cc
electron32/patches/patch-v8_src_compiler_turboshaft_wasm-gc-typed-optimization-reducer.h
electron32/patches/patch-v8_src_interpreter_bytecode-generator.cc
electron32/patches/patch-v8_src_maglev_maglev-phi-representation-selector.cc
electron32/patches/patch-v8_src_wasm_baseline_arm_liftoff-assembler-arm-inl.h
electron32/patches/patch-v8_src_wasm_baseline_x64_liftoff-assembler-x64-inl.h
electron32/patches/patch-v8_test_mjsunit_maglev_regress-382190919.js
electron32/patches/patch-v8_test_mjsunit_regress_regress-374627491.js
electron32/patches/patch-v8_test_mjsunit_regress_wasm_regress-378779897.js
Log Message:
electron32: update to 32.3.0
To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=1ba13d71cae9d4918a5c69f95a6cce82f35e35a5
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
diffstat:
electron32/Makefile | 32 +-
electron32/distinfo | 375 +++++++++++--------
electron32/options.mk | 10 +-
electron32/patches/patch-.gn | 4 +-
.../patch-base_files_file__path__watcher__bsd.cc | 2 +-
.../patches/patch-base_metrics_field__trial.cc | 78 ++++
...ase_metrics_persistent__histogram__allocator.cc | 169 +++++++++
...base_metrics_persistent__histogram__allocator.h | 253 +++++++++++++
...h-base_metrics_persistent__memory__allocator.cc | 320 ++++++++++++++++
...ch-base_metrics_persistent__memory__allocator.h | 406 +++++++++++++++++++++
...rics_persistent__memory__allocator__unittest.cc | 55 +++
.../patch-base_process_process__handle__netbsd.cc | 2 +-
...patch-base_process_process__iterator__netbsd.cc | 2 +-
.../patch-base_process_process__metrics__netbsd.cc | 2 +-
.../patches/patch-base_system_sys__info__netbsd.cc | 2 +-
.../patch-base_threading_platform__thread__bsd.cc | 2 +-
.../patches/patch-build_linux_unbundle_icu.gn | 19 +
.../patches/patch-build_toolchain_freebsd_BUILD.gn | 2 +-
.../patches/patch-build_toolchain_netbsd_BUILD.gn | 2 +-
.../patches/patch-build_toolchain_openbsd_BUILD.gn | 2 +-
.../patch-cc_tiles_gpu__image__decode__cache.cc | 38 ++
...mponents_metrics_persistent__system__profile.cc | 54 +++
...ay__embedder_software__output__device__proxy.cc | 2 +-
...lay__embedder_software__output__device__proxy.h | 2 +-
...file__path__watcher_file__path__watcher__bsd.cc | 2 +-
...renderer__host_media_video__capture__manager.cc | 140 +++++++
..._renderer__host_media_video__capture__manager.h | 26 ++
...-content_common_gpu__pre__sandbox__hook__bsd.cc | 2 +-
...h-content_common_gpu__pre__sandbox__hook__bsd.h | 2 +-
electron32/patches/patch-electron_BUILD.gn | 2 +-
.../patches/patch-electron_build_args_all.gn | 2 +-
.../patches/patch-electron_build_args_release.gn | 2 +-
.../patch-electron_default__app_default__app.ts | 2 +-
electron32/patches/patch-electron_filenames.gni | 2 +-
.../patches/patch-electron_lib_browser_api_app.ts | 2 +-
.../patch-electron_lib_browser_api_dialog.ts | 2 +-
...tch-electron_lib_browser_api_menu-item-roles.ts | 2 +-
...patch-electron_lib_browser_api_power-monitor.ts | 2 +-
.../patches/patch-electron_lib_browser_init.ts | 2 +-
.../patch-electron_lib_browser_rpc-server.ts | 2 +-
.../patch-electron_lib_renderer_api_clipboard.ts | 2 +-
.../patches/patch-electron_script_lib_config.py | 2 +-
.../patches/patch-electron_script_lib_utils.js | 2 +-
.../patches/patch-electron_script_spec-runner.js | 4 +-
..._shell_app_electron__crash__reporter__client.cc | 2 +-
...n_shell_app_electron__crash__reporter__client.h | 2 +-
...-electron_shell_app_electron__main__delegate.cc | 2 +-
.../patches/patch-electron_shell_app_node__main.cc | 2 +-
...lectron_shell_browser_api_electron__api__app.cc | 2 +-
...hell_browser_api_electron__api__base__window.cc | 2 +-
...shell_browser_api_electron__api__base__window.h | 2 +-
...l_browser_api_electron__api__crash__reporter.cc | 2 +-
...browser_api_electron__api__desktop__capturer.cc | 2 +-
...ll_browser_api_electron__api__power__monitor.cc | 2 +-
...ell_browser_api_electron__api__power__monitor.h | 2 +-
...ell_browser_api_electron__api__safe__storage.cc | 2 +-
...ell_browser_api_electron__api__web__contents.cc | 2 +-
...hell_browser_api_electron__api__web__contents.h | 2 +-
...ch-electron_shell_browser_api_process__metric.h | 2 +-
.../patch-electron_shell_browser_browser.cc | 2 +-
.../patches/patch-electron_shell_browser_browser.h | 2 +-
.../patch-electron_shell_browser_browser__linux.cc | 2 +-
...lectron_shell_browser_browser__process__impl.cc | 2 +-
...electron_shell_browser_browser__process__impl.h | 2 +-
...shell_browser_electron__browser__main__parts.cc | 2 +-
..._shell_browser_electron__browser__main__parts.h | 2 +-
...rowser_electron__browser__main__parts__posix.cc | 2 +-
...api_runtime_electron__runtime__api__delegate.cc | 2 +-
.../patch-electron_shell_browser_native__window.cc | 2 +-
...electron_shell_browser_native__window__views.cc | 2 +-
...-electron_shell_browser_native__window__views.h | 2 +-
...rowser_net_system__network__context__manager.cc | 2 +-
...shell_browser_osr_osr__host__display__client.cc | 2 +-
..._shell_browser_osr_osr__host__display__client.h | 2 +-
...ctron_shell_browser_printing_printing__utils.cc | 2 +-
...tch-electron_shell_browser_relauncher__linux.cc | 2 +-
..._shell_browser_ui_inspectable__web__contents.cc | 2 +-
...ui_inspectable__web__contents__view__delegate.h | 2 +-
...l_browser_ui_views_electron__views__delegate.cc | 2 +-
...ll_browser_ui_views_electron__views__delegate.h | 2 +-
...iews_inspectable__web__contents__view__views.cc | 2 +-
...ch-electron_shell_browser_ui_views_menu__bar.cc | 2 +-
...tch-electron_shell_browser_ui_views_menu__bar.h | 2 +-
...ctron_shell_browser_ui_views_submenu__button.cc | 2 +-
...on_shell_common_api_electron__api__clipboard.cc | 2 +-
...hell_common_api_electron__api__native__image.cc | 2 +-
...shell_common_api_electron__api__native__image.h | 2 +-
...electron_shell_common_api_electron__bindings.cc | 2 +-
...lectron_shell_common_electron__command__line.cc | 2 +-
...electron_shell_common_electron__command__line.h | 2 +-
.../patch-electron_shell_common_electron__paths.h | 2 +-
...n_shell_common_gin__converters_std__converter.h | 2 +-
.../patch-electron_shell_common_node__bindings.cc | 2 +-
...-electron_shell_common_node__bindings__linux.cc | 2 +-
.../patch-electron_shell_common_platform__util.h | 2 +-
...api_electron__api__crash__reporter__renderer.cc | 2 +-
.../patches/patch-electron_spec_api-app-spec.ts | 2 +-
.../patch-electron_spec_api-browser-window-spec.ts | 38 +-
.../patch-electron_spec_api-clipboard-spec.ts | 2 +-
...patch-electron_spec_api-content-tracing-spec.ts | 2 +-
.../patch-electron_spec_api-crash-reporter-spec.ts | 2 +-
...atch-electron_spec_api-desktop-capturer-spec.ts | 2 +-
.../patches/patch-electron_spec_api-menu-spec.ts | 2 +-
.../patch-electron_spec_api-native-image-spec.ts | 2 +-
.../patch-electron_spec_api-net-log-spec.ts | 2 +-
...tch-electron_spec_api-notification-dbus-spec.ts | 2 +-
.../patch-electron_spec_api-power-monitor-spec.ts | 2 +-
.../patch-electron_spec_api-process-spec.ts | 2 +-
.../patch-electron_spec_api-protocol-spec.ts | 2 +-
.../patch-electron_spec_api-safe-storage-spec.ts | 2 +-
.../patches/patch-electron_spec_api-screen-spec.ts | 2 +-
.../patches/patch-electron_spec_api-shell-spec.ts | 6 +-
.../patch-electron_spec_api-subframe-spec.ts | 2 +-
.../patches/patch-electron_spec_api-tray-spec.ts | 2 +-
...patch-electron_spec_api-utility-process-spec.ts | 2 +-
.../patch-electron_spec_api-web-frame-main-spec.ts | 2 +-
.../patches/patch-electron_spec_chromium-spec.ts | 6 +-
.../patches/patch-electron_spec_crash-spec.ts | 2 +-
...c_fixtures_api_safe-storage_decrypt-app_main.js | 2 +-
...c_fixtures_api_safe-storage_encrypt-app_main.js | 2 +-
...spec_fixtures_crash-cases_safe-storage_index.js | 2 +-
...n_spec_fixtures_native-addon_uv-dlopen_index.js | 2 +-
.../patches/patch-electron_spec_node-spec.ts | 2 +-
.../patch-electron_spec_version-bump-spec.ts | 2 +-
.../patch-electron_spec_visibility-state-spec.ts | 2 +-
.../patches/patch-electron_spec_webview-spec.ts | 2 +-
...atch-media_audio_sndio_audio__manager__sndio.cc | 2 +-
...patch-media_audio_sndio_audio__manager__sndio.h | 2 +-
.../patch-media_audio_sndio_sndio__input.cc | 2 +-
.../patches/patch-media_audio_sndio_sndio__input.h | 2 +-
.../patch-media_audio_sndio_sndio__output.cc | 2 +-
.../patch-media_audio_sndio_sndio__output.h | 2 +-
...atch-sandbox_policy_freebsd_sandbox__freebsd.cc | 2 +-
...patch-sandbox_policy_freebsd_sandbox__freebsd.h | 2 +-
.../patch-sandbox_policy_netbsd_sandbox__netbsd.cc | 2 +-
.../patch-sandbox_policy_netbsd_sandbox__netbsd.h | 2 +-
...atch-sandbox_policy_openbsd_sandbox__openbsd.cc | 2 +-
...patch-sandbox_policy_openbsd_sandbox__openbsd.h | 2 +-
...ch-services_device_hid_hid__connection__fido.cc | 2 +-
...tch-services_device_hid_hid__connection__fido.h | 2 +-
...services_device_hid_hid__connection__freebsd.cc | 2 +-
...-services_device_hid_hid__connection__freebsd.h | 2 +-
...patch-services_device_hid_hid__service__fido.cc | 2 +-
.../patch-services_device_hid_hid__service__fido.h | 2 +-
...ch-services_device_hid_hid__service__freebsd.cc | 2 +-
...tch-services_device_hid_hid__service__freebsd.h | 2 +-
...patch-services_device_usb_usb__service__fake.cc | 2 +-
.../patch-services_device_usb_usb__service__fake.h | 2 +-
...cpp_memory__instrumentation_os__metrics__bsd.cc | 2 +-
...k_public_platform_web__worker__fetch__context.h | 29 ++
...link_renderer_core_workers_worker__navigator.cc | 18 +
...blink_renderer_core_workers_worker__navigator.h | 26 ++
...r_web__service__worker__fetch__context__impl.cc | 32 ++
...er_web__service__worker__fetch__context__impl.h | 36 ++
...h-third__party_blink_renderer_platform_BUILD.gn | 10 +-
..._renderer_platform_accept__languages__watcher.h | 31 ++
...renderer_platform_loader_fetch_url__loader_DEPS | 16 +
...ed__or__shared__worker__fetch__context__impl.cc | 33 ++
...ted__or__shared__worker__fetch__context__impl.h | 25 ++
...hpad_crashpad_client_crashpad__client__posix.cc | 2 +-
...g_msl_writer_ast__printer_ast__printer__test.cc | 182 +++++++++
...tint_lang_msl_writer_ast__raise_packed__vec3.cc | 77 ++++
...ang_msl_writer_ast__raise_packed__vec3__test.cc | 50 +++
...ver_address__space__layout__validation__test.cc | 75 +++-
...y_dawn_src_tint_lang_wgsl_resolver_validator.cc | 13 +-
...ray_mat2x3__f16_to__workgroup.wgsl.expected.msl | 67 ++++
...ray_mat2x3__f32_to__workgroup.wgsl.expected.msl | 65 ++++
...ray_mat3x3__f32_to__workgroup.wgsl.expected.msl | 65 ++++
...ray_mat4x3__f16_to__workgroup.wgsl.expected.msl | 65 ++++
...ray_mat4x3__f32_to__workgroup.wgsl.expected.msl | 65 ++++
...uct_mat2x3__f16_to__workgroup.wgsl.expected.msl | 85 +++++
...uct_mat2x3__f32_to__workgroup.wgsl.expected.msl | 91 +++++
...uct_mat3x3__f16_to__workgroup.wgsl.expected.msl | 91 +++++
...uct_mat3x3__f32_to__workgroup.wgsl.expected.msl | 91 +++++
...uct_mat4x3__f16_to__workgroup.wgsl.expected.msl | 91 +++++
...uct_mat4x3__f32_to__workgroup.wgsl.expected.msl | 91 +++++
...ted_mat2x3__f16_to__workgroup.wgsl.expected.msl | 59 +++
...ted_mat2x3__f32_to__workgroup.wgsl.expected.msl | 59 +++
...ted_mat3x3__f16_to__workgroup.wgsl.expected.msl | 59 +++
...ted_mat3x3__f32_to__workgroup.wgsl.expected.msl | 59 +++
...ted_mat4x3__f16_to__workgroup.wgsl.expected.msl | 59 +++
...ted_mat4x3__f32_to__workgroup.wgsl.expected.msl | 59 +++
...arty_dawn_test_tint_bug_chromium_378541479.wgsl | 2 +-
...t_bug_chromium_378541479.wgsl.expected.dxc.hlsl | 2 +-
...t_bug_chromium_378541479.wgsl.expected.fxc.hlsl | 2 +-
..._tint_bug_chromium_378541479.wgsl.expected.glsl | 2 +-
...ug_chromium_378541479.wgsl.expected.ir.dxc.hlsl | 2 +-
...ug_chromium_378541479.wgsl.expected.ir.fxc.hlsl | 2 +-
...int_bug_chromium_378541479.wgsl.expected.ir.msl | 2 +-
...t_tint_bug_chromium_378541479.wgsl.expected.msl | 2 +-
...int_bug_chromium_378541479.wgsl.expected.spvasm | 2 +-
..._tint_bug_chromium_378541479.wgsl.expected.wgsl | 2 +-
..._test_tint_bug_tint_366037039.wgsl.expected.msl | 94 +++++
..._test_tint_bug_tint_366314931.wgsl.expected.msl | 42 +++
...y_dawn_test_tint_bug_tint_942.wgsl.expected.msl | 62 ++++
...s_workgroupUniformLoad_matrix.wgsl.expected.msl | 48 +++
...rkgroupUniformLoad_structures.wgsl.expected.msl | 74 ++++
...itialization_workgroup_matrix.wgsl.expected.msl | 59 +++
...itialization_workgroup_vector.wgsl.expected.msl | 32 ++
...a_src_gpu_ganesh_ops_AAHairLinePathRenderer.cpp | 50 +++
...__party_speech-dispatcher_libspeechd__version.h | 2 +-
..._dialogs_select__file__dialog__linux__portal.cc | 105 +++++-
...__dialogs_select__file__dialog__linux__portal.h | 32 +-
.../patch-v8_src_builtins_builtins-object-gen.cc | 22 ++
...urboshaft_wasm-gc-typed-optimization-reducer.cc | 76 ++++
...turboshaft_wasm-gc-typed-optimization-reducer.h | 17 +
.../patch-v8_src_interpreter_bytecode-generator.cc | 60 +++
...rc_maglev_maglev-phi-representation-selector.cc | 18 +
...c_wasm_baseline_arm_liftoff-assembler-arm-inl.h | 46 +++
...c_wasm_baseline_x64_liftoff-assembler-x64-inl.h | 26 ++
...tch-v8_test_mjsunit_maglev_regress-382190919.js | 48 +++
...ch-v8_test_mjsunit_regress_regress-374627491.js | 35 ++
..._test_mjsunit_regress_wasm_regress-366635354.js | 2 +-
..._test_mjsunit_regress_wasm_regress-378779897.js | 31 ++
...patch-v8_test_mjsunit_wasm_regress-367818758.js | 2 +-
electron32/patches/patch-v8_tools_run-paxctl.py | 2 +-
216 files changed, 4798 insertions(+), 376 deletions(-)
diffs:
diff --git a/electron32/Makefile b/electron32/Makefile
index 5109901b13..3afc78076f 100644
--- a/electron32/Makefile
+++ b/electron32/Makefile
@@ -2,7 +2,7 @@
DISTNAME= electron32-${VERSION}
# See ${WRKSRC}/electron/DEPS for versions
-VERSION= 32.2.7
+VERSION= 32.3.0
CHROMIUM_VERSION= 128.0.6613.186
AUDIOIO_VERSION= 130.0
NODE_VERSION= 20.18.1
@@ -11,6 +11,7 @@ SQUIRREL_VERSION= 0e5d146ba13101a1302d59ea6e6e0b3cace4ae38
REACTIVEOBJC_VERSION= 74ab5baccc6f7202c8ac69a8d1e152c29dc1ea76
MANTLE_VERSION= 78d3966b3c331292ea29ec38661b25df0a245948
ENGFLOW_VERSION= 955335c30a752e9ef7bff375baab5e0819b6c00d
+LLVM_MV= 18
CATEGORIES= devel
MASTER_SITES= ${MASTER_SITE_GITHUB:=electron/}
GITHUB_PROJECT= electron
@@ -67,7 +68,7 @@ TOOL_DEPENDS+= ninja-build-[0-9]*:../../devel/ninja-build
TOOL_DEPENDS+= ${PYPKGPREFIX}-html5lib-[0-9]*:../../textproc/py-html5lib
TOOL_DEPENDS+= ${PYPKGPREFIX}-beautifulsoup4-[0-9]*:../../www/py-beautifulsoup4
TOOL_DEPENDS+= ${PYPKGPREFIX}-ply-[0-9]*:../../devel/py-ply
-TOOL_DEPENDS+= nodejs-[0-9]*:../../lang/nodejs
+TOOL_DEPENDS+= nodejs-20*:../../lang/nodejs20
#TOOL_DEPENDS+= clang-[0-9]*:../../lang/clang # clang-format
TOOL_DEPENDS+= rust-bindgen-[0-9]*:../../devel/rust-bindgen
TOOL_DEPENDS+= yarn-[0-9]*:../../devel/yarn
@@ -77,10 +78,12 @@ DEPENDS+= xdg-utils-[0-9]*:../../misc/xdg-utils
.include "../../mk/bsd.prefs.mk"
.include "../../mk/compiler.mk"
-#ONLY_FOR_PLATFORM+= *-*-arm # not yet
-#ONLY_FOR_PLATFORM+= *-*-aarch64 # not yet
-#ONLY_FOR_PLATFORM+= *-*-i386 # not yet
-ONLY_FOR_PLATFORM+= *-*-x86_64
+.for c_arch in x86_64 aarch64
+ONLY_FOR_PLATFORM+= NetBSD-1[0-9].*-${c_arch}
+ONLY_FOR_PLATFORM+= Linux-*-${c_arch}
+ONLY_FOR_PLATFORM+= Darwin-*-${c_arch}
+ONLY_FOR_PLATFORM+= FreeBSD-*-${c_arch}
+.endfor
# Workaround for brotli and other commands.
#BUILDLINK_TRANSFORM.NetBSD+= rm:-ldl
@@ -163,6 +166,7 @@ GN_ARGS+= use_kerberos=false
GN_ARGS+= use_lld=false
GN_ARGS+= use_partition_alloc=true
GN_ARGS+= use_partition_alloc_as_malloc=false
+GN_ARGS+= use_sndio=false
GN_ARGS+= use_sysroot=false
GN_ARGS+= use_system_freetype=true
GN_ARGS+= use_system_harfbuzz=true
@@ -175,7 +179,7 @@ GN_ARGS+= v8_enable_cet_ibt=true
# flags
CFLAGS+= -fno-stack-protector
-CFLAGS+= -isystem${PREFIX}/lib/clang/17/include # third_party/zlib with clang
+CFLAGS+= -isystem${PREFIX}/lib/clang/${LLVM_MV}/include # third_party/zlib with clang
CFLAGS+= -Wno-error=unused-command-line-argument
CFLAGS+= -Wno-unknown-warning-option
@@ -195,8 +199,8 @@ EXTRA_CXXFLAGS= -Wno-unknown-warning-option \
RUSTC_VERSION= rustc -V
MAKE_ENV+= RUSTC_BOOTSTRAP=1
GN_ARGS+= enable_rust=true \
- rust_sysroot_absolute=\"${PREFIX}\" \
- rustc_version=\"${RUSTC_VERSION:sh}\"
+ rust_sysroot_absolute="${PREFIX}" \
+ rustc_version="${RUSTC_VERSION:sh}"
PLIST_VARS+= swiftshader
.if ${MACHINE_ARCH} == "aarch64"
@@ -204,14 +208,10 @@ FFMPEG_TARGET= arm64
.elif ${MACHINE_ARCH} == "x86_64"
PLIST.swiftshader= yes
FFMPEG_TARGET= x64
-.elif ${MACHINE_ARCH} == "i386"
-EXTRA_LDFLAGS+= -Wl,--no-keep-memory
-PLIST.swiftshader= yes
-FFMPEG_TARGET= ia32
.endif
-GN_ARGS+= extra_cxxflags=\"${EXTRA_CXXFLAGS}\" \
- extra_ldflags=\"${EXTRA_LDFLAGS}\"
+GN_ARGS+= extra_cxxflags="${EXTRA_CXXFLAGS}" \
+ extra_ldflags="${EXTRA_LDFLAGS}"
# Proprietary codecs are enabled.
FFMPEG_BRAND= Chrome
@@ -219,7 +219,7 @@ FFMPEG_BDIR= ${WRKSRC}/third_party/ffmpeg/build.${FFMPEG_TARGET}.${LOWER_OPSYS}/
FFMPEG_CDIR= ${WRKSRC}/third_party/ffmpeg/chromium/config/${FFMPEG_BRAND}/${LOWER_OPSYS}/${FFMPEG_TARGET}
GN_ARGS+= proprietary_codecs=true \
- ffmpeg_branding=\"${FFMPEG_BRAND}\"
+ ffmpeg_branding="${FFMPEG_BRAND}"
GN_BOOTSTRAP_FLAGS+= --no-clean --no-rebuild
GN_BOOTSTRAP_FLAGS+= --skip-generate-buildfiles
diff --git a/electron32/distinfo b/electron32/distinfo
index 3fe17837a2..685beb0e2d 100644
--- a/electron32/distinfo
+++ b/electron32/distinfo
@@ -21,9 +21,9 @@ Size (chromium-128.0.6613.186.tar.xz.1) = 2000000000 bytes
BLAKE2s (chromium-128.0.6613.186.tar.xz.2) = 81efd6f5c70b9ac1e28b0cb6def0f2d917493668c8d44a223f2192ec16053d3d
SHA512 (chromium-128.0.6613.186.tar.xz.2) = d0042da4a2ffc329c732973e72cb6a0ab6625e3b933dd8e2f48c8036cd1c62e8ae06c65be5104926237d227e8a0988be44949ce193f773dd953d2e9f9e619f85
Size (chromium-128.0.6613.186.tar.xz.2) = 766712880 bytes
-BLAKE2s (electron32-32.2.7.tar.gz) = a508e3a934992c0ea066c4c8d9af423fc09571c81155e560e971724113a05a25
-SHA512 (electron32-32.2.7.tar.gz) = d61dd5491409740f5318b8b1cce9aeaf9d93ab132311fff56077e804d7c8395edb1eb61049cc9f700b44f83b5a590af45b42666fd0079fcad2acba798be47382
-Size (electron32-32.2.7.tar.gz) = 14667125 bytes
+BLAKE2s (electron32-32.3.0.tar.gz) = b3bacc4b9ee896e505cb32cff371c6121a84c5c0e9509a4210f544d3c1297da1
+SHA512 (electron32-32.3.0.tar.gz) = 0838efff6c47904c088409be68ddb54c2e81a8d3a4eaf1059bae9c4a72ab1083475f710452f7ba52169b622a517ccc0e4c6de0dea767adef79393b52e88753ce
+Size (electron32-32.3.0.tar.gz) = 14717213 bytes
BLAKE2s (kikadf-chromium-audioio-v130.0.tar.gz) = 45fe07cb8280f81b8ef490059002da426b59fe69b5ebd53951fe1dc3e9495a10
SHA512 (kikadf-chromium-audioio-v130.0.tar.gz) = 840aed119dc69982f14fd5f4767e144bfc8a66672b660f0f05f5459070d7f6a36b8719ae7c0de049f7345dec39266759aedcdd5ee37aa4e98bcd2b44d06a3a4c
Size (kikadf-chromium-audioio-v130.0.tar.gz) = 7824 bytes
@@ -34,7 +34,7 @@ BLAKE2s (nodejs-node-v20.18.1.tar.gz) = 6e6d743c5f2c0856fa3583d08cb7038dbfecc3ea
SHA512 (nodejs-node-v20.18.1.tar.gz) = 631431abf99065de2529de155d54eb26d146142ab41ff94a1a838ca609d71e548ca456ecfea591d3bb76209132407095c2b63b509247d6d27d7e5d73dfcdc949
Size (nodejs-node-v20.18.1.tar.gz) = 115585611 bytes
SHA1 (patch-.gitignore) = ff6cd20aa0738a336d1cbc9cd74ce8a7035802cf
-SHA1 (patch-.gn) = a37a736638dd4dacb4c85fdeff6b55b4b1e8d648
+SHA1 (patch-.gn) = efc53e3041ca30548c5bacac44c0ad4a8984c2c9
SHA1 (patch-BUILD.gn) = c3b3e955259dbf18c1f3a41a8bab367c9aabb612
SHA1 (patch-apps_ui_views_app__window__frame__view.cc) = fb75ba24ef0da06180784605ebb865c89adfe0a6
SHA1 (patch-ash_display_mirror__window__controller.cc) = 2b4415353f810a7a17142c35ccfdc1c1de1b44d3
@@ -74,7 +74,7 @@ SHA1 (patch-base_features.cc) = dd34f6fdfb65d83b0eee640366253cfeeacff0ae
SHA1 (patch-base_files_dir__reader__linux.h) = 65bdc31d77131ce4f40e772c1eab6772c5de28a5
SHA1 (patch-base_files_dir__reader__posix.h) = 134ff825ab4f8ea73b6d9fe15e4d349c68790e26
SHA1 (patch-base_files_file__path__watcher.h) = fe3d74e7f3e4138c1b57d34071730ca2f0c1019e
-SHA1 (patch-base_files_file__path__watcher__bsd.cc) = 1cf5f31455285aecbf5f442c2815facc010d49aa
+SHA1 (patch-base_files_file__path__watcher__bsd.cc) = c2ed34c27a9f601da13fdecb547a57325186fbec
SHA1 (patch-base_files_file__path__watcher__kqueue.cc) = 787fa43dcb0b595ee86afb9637508edeebe303cc
SHA1 (patch-base_files_file__path__watcher__kqueue.h) = b27685c96b300cc74a4506c9b1debe83899a7b0a
SHA1 (patch-base_files_file__path__watcher__unittest.cc) = ff195702853254dcff75fe9bb316e04715fc65a5
@@ -93,6 +93,12 @@ SHA1 (patch-base_memory_madv__free__discardable__memory__posix.cc) = 4b61c9a768e
SHA1 (patch-base_memory_platform__shared__memory__region.h) = c0594314de50cec0f9a0d39a908a436047d62d33
SHA1 (patch-base_memory_platform__shared__memory__region__posix.cc) = 3dce7230618a9828b2bebd15a76accffe232e9a4
SHA1 (patch-base_message__loop_message__pump__glib.cc) = 699125bead2718f08cbcd21fb16d52afa2f12b2b
+SHA1 (patch-base_metrics_field__trial.cc) = 0cb65c5c8cb2ca6c8661f952f32d77bd976a591e
+SHA1 (patch-base_metrics_persistent__histogram__allocator.cc) = 01e4b72ea5a3b2bc3eea4aa03c64161539bf495f
+SHA1 (patch-base_metrics_persistent__histogram__allocator.h) = 37c2e2ef1256808fc7acd4017c8e5a23d146bf99
+SHA1 (patch-base_metrics_persistent__memory__allocator.cc) = 2e0a40ff53cab5a9a2a527a9d1260b995eccf27e
+SHA1 (patch-base_metrics_persistent__memory__allocator.h) = b6f91c1b820797fd012cc8c06b4fe1e8872d0181
+SHA1 (patch-base_metrics_persistent__memory__allocator__unittest.cc) = a405910e40e530da08d57091ff566947e3ad6602
SHA1 (patch-base_native__library__posix.cc) = bf64b03872a2965cfb5e4858370dfe4045bcc58a
SHA1 (patch-base_native__library__unittest.cc) = 6b88a18a0088d8e2550a2758ce6a6f66d94eb8d3
SHA1 (patch-base_posix_can__lower__nice__to.cc) = 2247d688ecdba2b0db310e4fdc568d5a7f6a385c
@@ -109,17 +115,17 @@ SHA1 (patch-base_process_memory__linux.cc) = 02d1dbc034832857500fb74031b600cae21
SHA1 (patch-base_process_process__handle.cc) = 12993483b867e107599fc68d9e408081d3a4ff74
SHA1 (patch-base_process_process__handle.h) = 938fa0548a4c073bcd5dde61597fcdad8217b504
SHA1 (patch-base_process_process__handle__freebsd.cc) = 7beadd9bacf3c193f8abd506e27cea5e4ee67391
-SHA1 (patch-base_process_process__handle__netbsd.cc) = 1e8a135bc3c5490b91c47691bf39c26fa9882ed1
+SHA1 (patch-base_process_process__handle__netbsd.cc) = a4554be02815e8459641325d607ffb672864a05a
SHA1 (patch-base_process_process__handle__openbsd.cc) = 4d41557b9691d23ad3bb0e94db7930ae0553ff13
SHA1 (patch-base_process_process__info__mac.cc) = b3143603edc88facab41ad8bbcf7dfeacdc8d226
SHA1 (patch-base_process_process__iterator.h) = 0efd71c056a5b0c3a839a8423d6b958aed7fb839
SHA1 (patch-base_process_process__iterator__freebsd.cc) = f45f4cb763d490a1b7225a73a1470d303f3f2f51
-SHA1 (patch-base_process_process__iterator__netbsd.cc) = 5aef8c00c6fc6dc241c5f9df32b5f65e662be583
+SHA1 (patch-base_process_process__iterator__netbsd.cc) = f687af5e6075f6722233de310709bf1753ebaa42
SHA1 (patch-base_process_process__iterator__openbsd.cc) = a8645dc80bbf09b183662fb1550a50045b3756e4
SHA1 (patch-base_process_process__metrics.cc) = 9058fd84ebf87ea3e88a9cfcb521225a6681fdbe
SHA1 (patch-base_process_process__metrics.h) = 7ef4841b11e58fe1d6f83656e1cd19fb2ae1461c
SHA1 (patch-base_process_process__metrics__freebsd.cc) = 733cbd706a624aae5d8c3a35c2e93b8411727570
-SHA1 (patch-base_process_process__metrics__netbsd.cc) = 86051af81e03d1f2eef0813cf68cec11c977d0b3
+SHA1 (patch-base_process_process__metrics__netbsd.cc) = 1aeba2a704cd5a2186521e141e33552a0b0f3d3f
SHA1 (patch-base_process_process__metrics__openbsd.cc) = 436895b046eac074f159593712194d336522cda6
SHA1 (patch-base_process_process__metrics__posix.cc) = c971c29012de32d26b4f7c3c1b64eff8a82bb06b
SHA1 (patch-base_process_process__metrics__unittest.cc) = 7b86090ec5c1459068429922a85314f6c6d9b413
@@ -140,7 +146,7 @@ SHA1 (patch-base_syslog__logging.cc) = 3de4d20477e8841af61c7d9ec12990b029c302bf
SHA1 (patch-base_system_sys__info.cc) = cb7c69a0f0b0bc785f2dac6c37f351e586f56ca2
SHA1 (patch-base_system_sys__info.h) = d6109de6f6f1e8c3e9fd5dc53fd7ba27da8fdc0c
SHA1 (patch-base_system_sys__info__freebsd.cc) = d740b46b61dbc614bd56ff86657a7ba64d8b793c
-SHA1 (patch-base_system_sys__info__netbsd.cc) = 29bcad257401f82786b35cfa5fcb3d3d310e5d98
+SHA1 (patch-base_system_sys__info__netbsd.cc) = a4102ff22d65e3c1dcff7fc1465acff4daaa54bc
SHA1 (patch-base_system_sys__info__openbsd.cc) = 6fe6f6574aebacb583a7c4a5e278f7bb9db7ff0e
SHA1 (patch-base_system_sys__info__posix.cc) = 383316fc83eb3de0ce958e2bf2d94e561662eaa4
SHA1 (patch-base_system_sys__info__unittest.cc) = f3a59a3698aed9477190692a707f55c25a1ec1c7
@@ -150,7 +156,7 @@ SHA1 (patch-base_test_test__file__util__linux.cc) = 6bfb6716096675b3bf331c61e1b0
SHA1 (patch-base_test_test__file__util__posix.cc) = 77e6e562a2751bfb1a1bd5b84984114caa4cdadc
SHA1 (patch-base_threading_hang__watcher.cc) = 087275ee8155d625d52d3a0481c79c2fcf1b6b5f
SHA1 (patch-base_threading_platform__thread.h) = e4e5a239ffbafe64ce4c4ce49f99e4e6f86c8789
-SHA1 (patch-base_threading_platform__thread__bsd.cc) = 80c71227fd3b1f113392a5fd5dba6b1af63d51b0
+SHA1 (patch-base_threading_platform__thread__bsd.cc) = 473fefa95ac901f5c61642487d5ad0fc02949d0f
SHA1 (patch-base_threading_platform__thread__internal__posix.cc) = 1ee8d0d913d36ea93c3bb88bb5f5880d424eed0c
SHA1 (patch-base_threading_platform__thread__posix.cc) = b56a70aadf0fd75fe23031f12f4ce295e0c89b24
SHA1 (patch-base_threading_platform__thread__unittest.cc) = 61db87bec1b133414746313433b03bff01b99cb0
@@ -178,16 +184,16 @@ SHA1 (patch-build_detect__host__arch.py) = 570cf5393dd9e8e8513e276aa539374327dd6
SHA1 (patch-build_gn__run__binary.py) = 1db6935223c0d84a8d759eb4e1dd91269ce6d54b
SHA1 (patch-build_linux_chrome.map) = 4e6717709212d7d70f72532b452f7fcfbfc950d7
SHA1 (patch-build_linux_strip__binary.py) = 614e3216fc266c09cc6b74b2e928dd550f8a483b
-SHA1 (patch-build_linux_unbundle_icu.gn) = a17f45eb381ab7b542370d470162adc7d5c4c32d
+SHA1 (patch-build_linux_unbundle_icu.gn) = 45685d403252a34d31d7b5136cf859db98befaff
SHA1 (patch-build_linux_unbundle_libevent.gn) = c1848b1374b6d2b4f288f1c7933642cb3c97606a
SHA1 (patch-build_linux_unbundle_libusb.gn) = 9350cb247aab5ebd055a70b1f9242a27c42507bc
SHA1 (patch-build_rust_rust__bindgen.gni) = cf7b05069ef162b7f934bda20a1b2ac28db4d2a2
SHA1 (patch-build_rust_std_BUILD.gn) = f4ea1810e3942a121e8d5d9a49a3c603af0e55fc
-SHA1 (patch-build_toolchain_freebsd_BUILD.gn) = ee037f3d251e523aa893e56e049148eef58fea3a
+SHA1 (patch-build_toolchain_freebsd_BUILD.gn) = c75ec22a9c33daca889c3d4b58b79b0106fe7187
SHA1 (patch-build_toolchain_gcc__solink__wrapper.py) = 4db751dcd6c3b9f75f4dbbd3a9de54981c858639
SHA1 (patch-build_toolchain_gcc__toolchain.gni) = 467e24ee42f1a6b5a0227ff44719fdc9a7048561
-SHA1 (patch-build_toolchain_netbsd_BUILD.gn) = d7c5e76bbd7e5b01dc8b469f89a76e63bad173e8
-SHA1 (patch-build_toolchain_openbsd_BUILD.gn) = 8818dcf99461b31e67a2edaeb6afbf91ede4f876
+SHA1 (patch-build_toolchain_netbsd_BUILD.gn) = 0c0fb74208288246afb92b8083e808496a0a8a98
+SHA1 (patch-build_toolchain_openbsd_BUILD.gn) = 498ac86c77e29edb842de366df53b19d6c469ab3
SHA1 (patch-build_toolchain_toolchain.gni) = a28e50de5f7d6f9aef6247210e29184cbf35c91c
SHA1 (patch-build_toolchain_win_rc_rc.py) = 825bf2e83c66bd606b2453111199b7f025b8a762
SHA1 (patch-buildtools_reclient__cfgs_.gitignore) = bab57cd1945137ce1b290ca8eb22887770fa55d6
@@ -198,6 +204,7 @@ SHA1 (patch-buildtools_third__party_libc++_____config__site) = 3e9a69f457ec26487
SHA1 (patch-buildtools_third__party_libc++abi_BUILD.gn) = 57ed4223d8ef5d84f6a365a6cab4698fed79759e
SHA1 (patch-cc_BUILD.gn) = dddd71d0bf5c38d98405e817c64215c75b3f4f55
SHA1 (patch-cc_base_features.cc) = f7fdff41487125de647754aed751568444fb00f1
+SHA1 (patch-cc_tiles_gpu__image__decode__cache.cc) = bb61998beeb3608847d2bfe38a930b0c7b468186
SHA1 (patch-chrome_BUILD.gn) = fce5fe7628ab23d625f922b1841ce6b40f4cdb55
SHA1 (patch-chrome_app_chrome__command__ids.h) = 5dadfce01760d5fd4976885cc5112271567ca3e6
SHA1 (patch-chrome_app_chrome__main.cc) = a9caaf72ef553471e7de0f26a7f97e1f133de1ce
@@ -626,6 +633,7 @@ SHA1 (patch-components_media__router_common_providers_cast_channel_cast__message
SHA1 (patch-components_metrics_drive__metrics__provider__linux.cc) = b776c38c39b9b47faaa3eafc3b7980fdb7720c9a
SHA1 (patch-components_metrics_metrics__log.cc) = 0578b212acd889c48631320a205fe8258c7e8a7f
SHA1 (patch-components_metrics_motherboard.cc) = ce7bfa3e9b78504bcc5f667bbf49136bca928a29
+SHA1 (patch-components_metrics_persistent__system__profile.cc) = ba2be25ac59e531089f76c7d5f0986470ecfae8b
SHA1 (patch-components_named__mojo__ipc__server_connection__info.h) = dbad47fc623f693a359bb066df1f74f08cfc2057
SHA1 (patch-components_named__mojo__ipc__server_named__mojo__ipc__server__client__util.cc) = 436c700985b41ac4ec77ff9460254159fb1c1a79
SHA1 (patch-components_named__system__lock_lock.h) = d0d482c2d5f32b5ac524448f2f1b6968264c3ce0
@@ -731,8 +739,8 @@ SHA1 (patch-components_viz_service_display__embedder_skia__output__device__buffe
SHA1 (patch-components_viz_service_display__embedder_skia__output__surface__impl.cc) = f0c16bc9697ca1869db4735e6ed9b9644665200e
SHA1 (patch-components_viz_service_display__embedder_software__output__device__mac.cc) = d7c603561ff4a8ffc9d82024a04cbb95ddeedd5d
SHA1 (patch-components_viz_service_display__embedder_software__output__device__mac.h) = d950a491f420d9e4b85a56d5725d5c11a0e4453a
-SHA1 (patch-components_viz_service_display__embedder_software__output__device__proxy.cc) = e700c71ffab9c420b4786919fde2d3bb8cf3a49c
-SHA1 (patch-components_viz_service_display__embedder_software__output__device__proxy.h) = 664cc5d1616ff1669669450be3f286b1f13c74a4
+SHA1 (patch-components_viz_service_display__embedder_software__output__device__proxy.cc) = fe0d3ceba6754c35452031f2abcae0dc64b70874
+SHA1 (patch-components_viz_service_display__embedder_software__output__device__proxy.h) = 529e06e79b3170651e58580f3325cca592e87dbe
SHA1 (patch-components_viz_service_display__embedder_software__output__device__win.cc) = bb8b725bb5f08379be6d6dd6056cd12f85358eac
SHA1 (patch-components_viz_service_display__embedder_software__output__surface.cc) = 67e3c62527085409300dbbb52f3d4584d5d6bc4a
SHA1 (patch-components_viz_service_display__embedder_software__output__surface.h) = a9a6448a2890ecdf5edf946d79f9ac15c324c119
@@ -772,7 +780,7 @@ SHA1 (patch-content_browser_devtools_devtools__frontend__host__impl.cc) = 06bd07
SHA1 (patch-content_browser_devtools_devtools__frontend__host__impl.h) = d14b88e0c17913346b93fa07c7ca3890f1288da2
SHA1 (patch-content_browser_devtools_protocol_system__info__handler.cc) = 76e109248f5d85f19b1aedba9fde3278cbe5789d
SHA1 (patch-content_browser_file__system__access_file__path__watcher_file__path__watcher.h) = 1d09e3829d61de6cc81e160263a3559e377dca8c
-SHA1 (patch-content_browser_file__system__access_file__path__watcher_file__path__watcher__bsd.cc) = 85f95f2aec491b498f56dff2287554a4bfdaa273
+SHA1 (patch-content_browser_file__system__access_file__path__watcher_file__path__watcher__bsd.cc) = 84c5117d23cabf980a69df2e83677939ec4d32e8
SHA1 (patch-content_browser_file__system__access_file__path__watcher_file__path__watcher__kqueue.h) = be2f9bdb35e18d0afccbe0b16cadf1e8f69d4aac
SHA1 (patch-content_browser_file__system__access_file__system__access__local__path__watcher.cc) = efcdffecb1393f81e04988aa7c33312d6fe818a0
SHA1 (patch-content_browser_font__access_font__enumeration__data__source.cc) = 2cdae6e5fceaf9e77b0e77ec30e606016cca07fc
@@ -805,6 +813,8 @@ SHA1 (patch-content_browser_renderer__host_legacy__render__widget__host__win.cc)
SHA1 (patch-content_browser_renderer__host_legacy__render__widget__host__win.h) = a8da8eca5559b2930bacffdf099c6f588c7f3462
SHA1 (patch-content_browser_renderer__host_media_in__process__video__capture__device__launcher.cc) = d1b5dc4422f4140addc7cb85f3734a310e5f77b9
SHA1 (patch-content_browser_renderer__host_media_service__video__capture__device__launcher.cc) = 46afb8b3e082b5dcd8b0d2cd3ebb57f36fe824d5
+SHA1 (patch-content_browser_renderer__host_media_video__capture__manager.cc) = 15fcff9b43ac04fd574e1d7923ecc38b7bd9a964
+SHA1 (patch-content_browser_renderer__host_media_video__capture__manager.h) = f66b1c60dad353cdec170519542ce41bd505df7a
SHA1 (patch-content_browser_renderer__host_navigation__controller__impl__unittest.cc) = 4503248dacda854e0296ece52d2b429de2f0bc28
SHA1 (patch-content_browser_renderer__host_navigation__request.cc) = 265ea91da9df1b0654dd7dd123928865854367f7
SHA1 (patch-content_browser_renderer__host_navigator.cc) = 891ed2b5dbc1a2d6e3bdad4056cc2083bb59fe33
@@ -860,8 +870,8 @@ SHA1 (patch-content_common_features.cc) = 55de966ce4468aa366d330b1dc40d977e11bb5
SHA1 (patch-content_common_features.h) = 7c3a50a8aec76e29bdf7d04f844671a6fda239a5
SHA1 (patch-content_common_font__list__unittest.cc) = 39a1210d33e99d95d2ca65f5151b49171e438a96
SHA1 (patch-content_common_frame.mojom) = 96072dd0aaf7ad3947cdccafd9f1ac00141baaa2
-SHA1 (patch-content_common_gpu__pre__sandbox__hook__bsd.cc) = d48bf27784efed89a4a40b6898b1b51b0ae13b3a
-SHA1 (patch-content_common_gpu__pre__sandbox__hook__bsd.h) = 7be7e64a6f9f6c86a146bc60d74474b9a3434865
+SHA1 (patch-content_common_gpu__pre__sandbox__hook__bsd.cc) = 687d0d0a90dc4bb224d9f5711309455ce58fbe1d
+SHA1 (patch-content_common_gpu__pre__sandbox__hook__bsd.h) = 474c36594cdc84d897e8c4126d5ea9b9b23bfb04
SHA1 (patch-content_common_gpu__pre__sandbox__hook__linux.h) = 8a15c171fe3183f9be1df5e340df774c7a5e82b6
SHA1 (patch-content_common_mojo__core__library__support.cc) = 807f9cf6feb0fb61b0c99a193f215c128469d41f
SHA1 (patch-content_common_sandbox__init__win.cc) = 7a9ca804d70373aa817c70f784ef094253a677b6
@@ -939,103 +949,103 @@ SHA1 (patch-device_fido_fido__discovery__factory.cc) = f424fd88a0f05b8fda7dd0f1d
SHA1 (patch-device_gamepad_BUILD.gn) = c04c16e767a770b959f5e8d5da7df64f6428c48c
SHA1 (patch-device_gamepad_gamepad__provider.cc) = bda34e8690a652bfea2f5a67af303014f7007df2
SHA1 (patch-device_gamepad_hid__writer__linux.cc) = 4223bd0c8f2c95969ac3c7b9a295639cadae1e6e
-SHA1 (patch-electron_BUILD.gn) = 3e5b5417104e552a5ecc833ab3e7b72b7fe51df5
-SHA1 (patch-electron_build_args_all.gn) = af145f58cd6780aae7576cf23b0fb8eca021f131
-SHA1 (patch-electron_build_args_release.gn) = 7a007404fe2344c74c211909f52a545450338ab9
-SHA1 (patch-electron_default__app_default__app.ts) = 5e19efcdd48a5fa2ebbbaa5180c3b3d048c6139b
-SHA1 (patch-electron_filenames.gni) = fd70ea325a38d0b8f97d4b130616c594c992e11e
-SHA1 (patch-electron_lib_browser_api_app.ts) = 5dc2346aaa9b3444d881a959b8c419ae2ef376fe
-SHA1 (patch-electron_lib_browser_api_dialog.ts) = 28085d44b9051a26a5a16942685563cf152ebf71
-SHA1 (patch-electron_lib_browser_api_menu-item-roles.ts) = 2c88fdb403c071cfa5ca5148ce1d649590792d86
-SHA1 (patch-electron_lib_browser_api_power-monitor.ts) = fda45223e79843fe85682577cdaf5a6c454d8858
-SHA1 (patch-electron_lib_browser_init.ts) = d04d1f6cd806c69dfc6a263824a03125939a203f
-SHA1 (patch-electron_lib_browser_rpc-server.ts) = 5a1b2e291bbabffb0b2f22333d11d5dee36939f2
-SHA1 (patch-electron_lib_renderer_api_clipboard.ts) = b613fa0d2f9d916df5efe17bca87f195c1053b35
-SHA1 (patch-electron_script_lib_config.py) = dc1f870b243fdbb90f22219c740a3ae41d13f4bd
-SHA1 (patch-electron_script_lib_utils.js) = 595e2d2486cd0008254c4c1efc76c000885f5fee
-SHA1 (patch-electron_script_spec-runner.js) = a72e883c07650e4add15630c729ce137638fb4df
-SHA1 (patch-electron_shell_app_electron__crash__reporter__client.cc) = cc4ac9cc95def983e9d17c82f06b790f7e79316c
-SHA1 (patch-electron_shell_app_electron__crash__reporter__client.h) = fc8595fba6edd2bf5673c7b47d2a3ba49e0f47e0
-SHA1 (patch-electron_shell_app_electron__main__delegate.cc) = 797c8dcd31b97920f9f83f74154491f4fe33b170
-SHA1 (patch-electron_shell_app_node__main.cc) = 876dd0e83c448a063f23616ba2d850329a4c16d1
-SHA1 (patch-electron_shell_browser_api_electron__api__app.cc) = 196f556be6cf0cd5ab51dfb58473a4f78cf284f1
-SHA1 (patch-electron_shell_browser_api_electron__api__base__window.cc) = 1ad6fb2e2ac95e0781079060dbfaec469038e4ab
-SHA1 (patch-electron_shell_browser_api_electron__api__base__window.h) = f5db5c5635c8c61a18c93e03ba681e2483de6188
-SHA1 (patch-electron_shell_browser_api_electron__api__crash__reporter.cc) = 6824d03d1ac845ba2d69caab65fa1134c77abb2b
-SHA1 (patch-electron_shell_browser_api_electron__api__desktop__capturer.cc) = 9ee7fa9d0797d46c01eef4db2269b4d87af56ad0
-SHA1 (patch-electron_shell_browser_api_electron__api__power__monitor.cc) = 37954d61818b7030cd832c37dafdd16fe70ee98d
-SHA1 (patch-electron_shell_browser_api_electron__api__power__monitor.h) = d5622afb6937e457e90b4d6522405a1971b49f5c
-SHA1 (patch-electron_shell_browser_api_electron__api__safe__storage.cc) = a9a8c81a7324386f30ed3262d5e5540e3f71d8ca
-SHA1 (patch-electron_shell_browser_api_electron__api__web__contents.cc) = ef108e659457dfb5e5681f1046ad7ee5e09714bc
-SHA1 (patch-electron_shell_browser_api_electron__api__web__contents.h) = 0934b231abbfc96034c7105e4be1e98cda6e7802
-SHA1 (patch-electron_shell_browser_api_process__metric.h) = 4a8142e7d4586ccb451e2fa1d4276bd00f05993f
-SHA1 (patch-electron_shell_browser_browser.cc) = d1adfeeeeaf513578a01837fceb0b5c4eb028dfb
-SHA1 (patch-electron_shell_browser_browser.h) = f71e11c38ff394b292832042b76fb0fca89a2202
-SHA1 (patch-electron_shell_browser_browser__linux.cc) = 4441a7860878c4215d93bfe63c06e50ed16a4bc4
-SHA1 (patch-electron_shell_browser_browser__process__impl.cc) = 1cefd32aad73fc35b869c1dd2517e49cc99d2a66
-SHA1 (patch-electron_shell_browser_browser__process__impl.h) = 04c3baa74484a4acd7b43495445626040c120869
-SHA1 (patch-electron_shell_browser_electron__browser__main__parts.cc) = 9cd9b4d1a850ebe665fbd033ff8b09e638c18cbf
-SHA1 (patch-electron_shell_browser_electron__browser__main__parts.h) = acb77d13df78ad11aaab29a32977bde1368bb1eb
-SHA1 (patch-electron_shell_browser_electron__browser__main__parts__posix.cc) = cbbfc18f5d9af31509e909bd84b852e3f913f5a6
-SHA1 (patch-electron_shell_browser_extensions_api_runtime_electron__runtime__api__delegate.cc) = 87ee0afb07aa743e03736583bee9bcf1eb691a25
-SHA1 (patch-electron_shell_browser_native__window.cc) = 5d7511c4b32a988534d7ad6450810f7d5c2e1dca
-SHA1 (patch-electron_shell_browser_native__window__views.cc) = e0e54ae782d5aabd1231db822cc61bffdef07629
-SHA1 (patch-electron_shell_browser_native__window__views.h) = dfe03b1330d6cd07eb5aa9dee102bd12e5394a04
-SHA1 (patch-electron_shell_browser_net_system__network__context__manager.cc) = c4c72a33773aec47d09206376b751f9bfd4f420f
-SHA1 (patch-electron_shell_browser_osr_osr__host__display__client.cc) = f90a5c58c67f178015f090ed68b7bbb19bca1d58
-SHA1 (patch-electron_shell_browser_osr_osr__host__display__client.h) = a842f10a5bfc4571e94860856bd9a251a7d73221
-SHA1 (patch-electron_shell_browser_printing_printing__utils.cc) = 34b8871a4ad9897b8ccb8ea1ac9459d88889ee16
-SHA1 (patch-electron_shell_browser_relauncher__linux.cc) = 8837e4dcc2eb52dfa9b591c65db4ecb42d87d34b
-SHA1 (patch-electron_shell_browser_ui_inspectable__web__contents.cc) = 5771f0ff5ad7c93375412f1489440e7157b2ca9a
-SHA1 (patch-electron_shell_browser_ui_inspectable__web__contents__view__delegate.h) = 331b214f81d4faf871b47eb1430bb1a278291ddf
-SHA1 (patch-electron_shell_browser_ui_views_electron__views__delegate.cc) = 3d10a4315211369f918b530e0a0433c6c7110ba5
-SHA1 (patch-electron_shell_browser_ui_views_electron__views__delegate.h) = 6fb98b879620656538822acf6d16d5ff139e6514
-SHA1 (patch-electron_shell_browser_ui_views_inspectable__web__contents__view__views.cc) = c51827a6240d35195bf874014855f796ede69504
-SHA1 (patch-electron_shell_browser_ui_views_menu__bar.cc) = 8c3528dea12316d72a7f7f9375638cb48bfbf0f3
-SHA1 (patch-electron_shell_browser_ui_views_menu__bar.h) = 1e5cddd7b3e779744c9a3dd3118ae2d135ed4213
-SHA1 (patch-electron_shell_browser_ui_views_submenu__button.cc) = acc7b89a01d7e9133e221509fc8b94de6c264089
-SHA1 (patch-electron_shell_common_api_electron__api__clipboard.cc) = 93d468eb45bfde22f9c21e8428e5cd0c0fbe3fe8
-SHA1 (patch-electron_shell_common_api_electron__api__native__image.cc) = 8169509c3f36656e48c809996c36f58b7235c479
-SHA1 (patch-electron_shell_common_api_electron__api__native__image.h) = ac37de194a1962462a00a683cd303afb7311800b
-SHA1 (patch-electron_shell_common_api_electron__bindings.cc) = 0455182a54ee062d6a13f6500128788a10d13613
-SHA1 (patch-electron_shell_common_electron__command__line.cc) = 95207adf9138e7ec6e9b6d8fd4855b68e61e3241
-SHA1 (patch-electron_shell_common_electron__command__line.h) = 176b7c5ade4bee3258de1414f5c96482d03b52c9
-SHA1 (patch-electron_shell_common_electron__paths.h) = c0dc5d07655c7ad64835eaa0993a2fb047118ee8
-SHA1 (patch-electron_shell_common_gin__converters_std__converter.h) = 0f4d9e3f6c7d292b2ff13ca7698a591f00feb489
-SHA1 (patch-electron_shell_common_node__bindings.cc) = ddc196b2957ad420f291b6c3e154d3eff467595f
-SHA1 (patch-electron_shell_common_node__bindings__linux.cc) = ce1b7b11b8d70e5c95ee9710f9c4ef399e0bef28
-SHA1 (patch-electron_shell_common_platform__util.h) = 6820c8554d6f90dba3c6b45724c8f52aba3931f0
-SHA1 (patch-electron_shell_renderer_api_electron__api__crash__reporter__renderer.cc) = a66b602e7bb779f08a5ee644fe6862388e7400a8
-SHA1 (patch-electron_spec_api-app-spec.ts) = cb999c0566f36744cf28fc9034559cc71a61dcb4
-SHA1 (patch-electron_spec_api-browser-window-spec.ts) = baed0edb096d4bcedddda003529b35717789221b
-SHA1 (patch-electron_spec_api-clipboard-spec.ts) = 95b554171ab0a959e4cb27eb5b2fab2051f0a696
-SHA1 (patch-electron_spec_api-content-tracing-spec.ts) = e3242bbeea595935b3b16c5f02cc8be111987b73
-SHA1 (patch-electron_spec_api-crash-reporter-spec.ts) = 8de00525f8784ef90bc1db58895d1dfdc5185146
-SHA1 (patch-electron_spec_api-desktop-capturer-spec.ts) = ffd67e2d0d30e727406bd428cef9360d08689651
-SHA1 (patch-electron_spec_api-menu-spec.ts) = f7a3e7f1ed005c38aa8572933421f2c7f0e26a1d
-SHA1 (patch-electron_spec_api-native-image-spec.ts) = 8d50fe2ef33134416435618104401b7c53ec5233
-SHA1 (patch-electron_spec_api-net-log-spec.ts) = bd668caf7df29b04d299df7db06b587c8fa00ad9
-SHA1 (patch-electron_spec_api-notification-dbus-spec.ts) = 0b395900883464f47af1d1786a81cad127d07b39
-SHA1 (patch-electron_spec_api-power-monitor-spec.ts) = 3af019e043088769d2ba82cab0e8e27077c6b7a1
-SHA1 (patch-electron_spec_api-process-spec.ts) = 11e0094693d0783bdb48fa366dc08cf13ff4bbbc
-SHA1 (patch-electron_spec_api-protocol-spec.ts) = cdb46bac3c25554ec1bb7d19c59f5ac54cf0e9a3
-SHA1 (patch-electron_spec_api-safe-storage-spec.ts) = 2eb577da48e8f75ea90e1ec4d72b665f1eb360b9
-SHA1 (patch-electron_spec_api-screen-spec.ts) = 034ae09f2beda09e73e2ee1d0761c8fde132359a
-SHA1 (patch-electron_spec_api-shell-spec.ts) = 142a171c692b4d43ddfecbc5754928372372066e
-SHA1 (patch-electron_spec_api-subframe-spec.ts) = f3cad6dea856d93d274a961d054ea6f3c5eeb706
-SHA1 (patch-electron_spec_api-tray-spec.ts) = 4eddb5cfe0d8f65e891c6d67a279fb974a7f93c6
-SHA1 (patch-electron_spec_api-utility-process-spec.ts) = 15894f0183d7e1406bb6d58c356f34e7a69cc58f
-SHA1 (patch-electron_spec_api-web-frame-main-spec.ts) = ce2cf24879d7cdb29be1a8bbf250b0ff585c2834
-SHA1 (patch-electron_spec_chromium-spec.ts) = 5c787ab2208ea3b6f40270779d6c5633c050829d
-SHA1 (patch-electron_spec_crash-spec.ts) = 999ec8810095c873fd4d02346346059deb2d6c58
-SHA1 (patch-electron_spec_fixtures_api_safe-storage_decrypt-app_main.js) = 1f166da1fae535bf7aac2b3127c6fb0e3d9493e6
-SHA1 (patch-electron_spec_fixtures_api_safe-storage_encrypt-app_main.js) = f6d93e812bcf575bfc6ba279059f111f5183860c
-SHA1 (patch-electron_spec_fixtures_crash-cases_safe-storage_index.js) = f7d1f851a673409bcb21da6364396ca296bf788d
-SHA1 (patch-electron_spec_fixtures_native-addon_uv-dlopen_index.js) = c55aca178f98e8add458b6697dab60bf22cc2faf
-SHA1 (patch-electron_spec_node-spec.ts) = 4ce4db8f743d00637944c864a63a048186d61876
-SHA1 (patch-electron_spec_version-bump-spec.ts) = ca45260a24f664dc1c4c86a6078a3cc0d1272076
-SHA1 (patch-electron_spec_visibility-state-spec.ts) = 1b3de9e6ae86d4eaa0ff185ddac0677c28381d0a
-SHA1 (patch-electron_spec_webview-spec.ts) = 4b583f55f08b0eea94f64f00ba961f2b75cf581a
+SHA1 (patch-electron_BUILD.gn) = 7e02c97dd0281143f9d19ae780b6d287815813c7
+SHA1 (patch-electron_build_args_all.gn) = f40db6b98d251ca1b54414e7e13069b78cd61861
+SHA1 (patch-electron_build_args_release.gn) = 54861844bdf3c4f3cc05bac0ecba73374e9170ab
+SHA1 (patch-electron_default__app_default__app.ts) = 9fd7c1e1b4eb72b3f4eae45a6a6b2e44ce31a222
+SHA1 (patch-electron_filenames.gni) = b90649c6342408319aee7b60c941be8434afb0a5
+SHA1 (patch-electron_lib_browser_api_app.ts) = 536270f0a9f9d3a9762bc5cd1d7be5bbb5b4046d
+SHA1 (patch-electron_lib_browser_api_dialog.ts) = 60b6f2763f7a82f693f64dbc1804e3bf455a5986
+SHA1 (patch-electron_lib_browser_api_menu-item-roles.ts) = fac8ceb9117baa1e382668a2353e891d1fa7cb04
+SHA1 (patch-electron_lib_browser_api_power-monitor.ts) = 9afa645fed546971042233c3c0b30f44aa7aa2ce
+SHA1 (patch-electron_lib_browser_init.ts) = ecefa03869abb7f90c900463e94589d08b2bf76b
+SHA1 (patch-electron_lib_browser_rpc-server.ts) = 871603d2cd7bf6e082ac1511ce6f041c8077462c
+SHA1 (patch-electron_lib_renderer_api_clipboard.ts) = 56cb17366df7676c8a25a3fa771c9913f942e1cc
+SHA1 (patch-electron_script_lib_config.py) = 29eb5a21a7d8b990cce59586caa4f3703c29c634
+SHA1 (patch-electron_script_lib_utils.js) = bc2773ce9a7edab60e91a50afe905be77dbb13de
+SHA1 (patch-electron_script_spec-runner.js) = f87fe5f0a6a1d67d33b3bbc2e3b4533302ea6e7e
+SHA1 (patch-electron_shell_app_electron__crash__reporter__client.cc) = 89594e895d6728587a6e8578571c8169c12f1a43
+SHA1 (patch-electron_shell_app_electron__crash__reporter__client.h) = 2d7923ab463808a87d2970c47952c191b08c1236
+SHA1 (patch-electron_shell_app_electron__main__delegate.cc) = bfe1f8ce804741aa85ab259bfb0741a7ac2e0922
+SHA1 (patch-electron_shell_app_node__main.cc) = d1989bc60a65c62a7666616db3560c660df78211
+SHA1 (patch-electron_shell_browser_api_electron__api__app.cc) = 1ba0ff7721bc3394e155ad4ad18aa791eac79439
+SHA1 (patch-electron_shell_browser_api_electron__api__base__window.cc) = 462f35985aab506a14808e39f00921cddef3975a
+SHA1 (patch-electron_shell_browser_api_electron__api__base__window.h) = ea867423a99eecea155f6ad5f204143111648501
+SHA1 (patch-electron_shell_browser_api_electron__api__crash__reporter.cc) = 9c8c1be203042e5107ce3fd58a1eaf1b9a208723
+SHA1 (patch-electron_shell_browser_api_electron__api__desktop__capturer.cc) = eb336e40c3058398090e8b46e3c7bcdadaf2e4fc
+SHA1 (patch-electron_shell_browser_api_electron__api__power__monitor.cc) = 6e9076eaca2174acbf8765590e2b933ca0b8943a
+SHA1 (patch-electron_shell_browser_api_electron__api__power__monitor.h) = 1bb3945b2687afcca6b435c226e7e972416a09fd
+SHA1 (patch-electron_shell_browser_api_electron__api__safe__storage.cc) = 38a4067ef35cbeccb10f0e2a20f570fbc8f6c7a3
+SHA1 (patch-electron_shell_browser_api_electron__api__web__contents.cc) = aa575e01c47a7ba812f47dac86cc429a9f408af6
+SHA1 (patch-electron_shell_browser_api_electron__api__web__contents.h) = 69b4f00dfb59275bbb8febb54eca976701d64677
+SHA1 (patch-electron_shell_browser_api_process__metric.h) = 107d3bec85096fba4d026d5a19b129aaaab8020a
+SHA1 (patch-electron_shell_browser_browser.cc) = 9d2e46949c563c3c20dfea051e8d459940a2ba90
+SHA1 (patch-electron_shell_browser_browser.h) = b935f47769ef8401c615f276f0a524f7b9986874
+SHA1 (patch-electron_shell_browser_browser__linux.cc) = aeab43f1c45e30fbe8f584c7121df4b3571ad0fd
+SHA1 (patch-electron_shell_browser_browser__process__impl.cc) = 179b8b9b9791ce743b90b999a251cbdddeb50d35
+SHA1 (patch-electron_shell_browser_browser__process__impl.h) = 8559e5bd1e6db6f4f5845dda7bbc3092504403f2
+SHA1 (patch-electron_shell_browser_electron__browser__main__parts.cc) = 2f445dfeb082457badf977bb02f55173c2c69aaf
+SHA1 (patch-electron_shell_browser_electron__browser__main__parts.h) = f5bf60480a0b799d14d8fde91c9e86d1ea506d95
+SHA1 (patch-electron_shell_browser_electron__browser__main__parts__posix.cc) = f399daa181bbcadf4edaba1a6070706f6b3da0d4
+SHA1 (patch-electron_shell_browser_extensions_api_runtime_electron__runtime__api__delegate.cc) = 2a81a1c2eeb8a523988ca6ddd5c37a2640f6ecf7
+SHA1 (patch-electron_shell_browser_native__window.cc) = d99304cb8932d78f48fee52161a76777c520e4fc
+SHA1 (patch-electron_shell_browser_native__window__views.cc) = 3f2e39df820c338bdfd0a65d0b150538c8ed4b8d
+SHA1 (patch-electron_shell_browser_native__window__views.h) = a8d314073c3d3a2e48093e85bf0f43ff36340276
+SHA1 (patch-electron_shell_browser_net_system__network__context__manager.cc) = 19986cd0d323435bd5e382950445e190d792d8cf
+SHA1 (patch-electron_shell_browser_osr_osr__host__display__client.cc) = d624bdfd6b77360cdca304216345703e531f30d9
+SHA1 (patch-electron_shell_browser_osr_osr__host__display__client.h) = 6a44fe3f6f84c689ae5a6ab6bf1060bcae1be07a
+SHA1 (patch-electron_shell_browser_printing_printing__utils.cc) = 46530a55431cbd4947697879eda048993eff3b27
+SHA1 (patch-electron_shell_browser_relauncher__linux.cc) = b04b7cfbd29e9b702f07eb836d451a4a3bce0e79
+SHA1 (patch-electron_shell_browser_ui_inspectable__web__contents.cc) = 1059d4bfc2ceeb9cfe81cc1d6aa03163694cb740
+SHA1 (patch-electron_shell_browser_ui_inspectable__web__contents__view__delegate.h) = 62db51ad5e0c585813624d13231d0b974cc4c326
+SHA1 (patch-electron_shell_browser_ui_views_electron__views__delegate.cc) = b2583a42e5df486f2bddf2d521238a98d1495e0f
+SHA1 (patch-electron_shell_browser_ui_views_electron__views__delegate.h) = 64762bba6c120d168fc08969ff2e3661f79c4df5
+SHA1 (patch-electron_shell_browser_ui_views_inspectable__web__contents__view__views.cc) = a65db4c7b58e170e69fb094239278a4522fbbcec
+SHA1 (patch-electron_shell_browser_ui_views_menu__bar.cc) = 97949c625bba0d3b9b21b0fb71b807feaf9e3e84
+SHA1 (patch-electron_shell_browser_ui_views_menu__bar.h) = a31906d2ff56375125c6683e9c9a32e992acd0c6
+SHA1 (patch-electron_shell_browser_ui_views_submenu__button.cc) = 5c3ffb4c2e3568ce02097cab01666b2b92bafcf7
+SHA1 (patch-electron_shell_common_api_electron__api__clipboard.cc) = 70bd226e31badd897180172f8545210416a37e08
+SHA1 (patch-electron_shell_common_api_electron__api__native__image.cc) = 8744c62319fee42ce842d9e423637cfaeff18ea0
+SHA1 (patch-electron_shell_common_api_electron__api__native__image.h) = 241a6eb38bc54bd4cc9bdf70ce2e8dd8e808bc20
+SHA1 (patch-electron_shell_common_api_electron__bindings.cc) = 77a1d6b267133d402244aa5a0756f940db847edc
+SHA1 (patch-electron_shell_common_electron__command__line.cc) = e0a3ee7aa8952129ecdfefa3f2f7363bf4dd98a2
+SHA1 (patch-electron_shell_common_electron__command__line.h) = 376245e4a9190f6a24895fc464153ee0634a3d3b
+SHA1 (patch-electron_shell_common_electron__paths.h) = 68b9dff3757260a7169bf2d57ddb7aa74f43fc41
+SHA1 (patch-electron_shell_common_gin__converters_std__converter.h) = 9fa69e05dffbb739a14ab942b235308477c8c203
+SHA1 (patch-electron_shell_common_node__bindings.cc) = 4697f7af6e06fadf72c347c8bab15a89efcfe7eb
+SHA1 (patch-electron_shell_common_node__bindings__linux.cc) = aa3647f41686847ba6eb0f56e0cbbc3e7f3f95d1
+SHA1 (patch-electron_shell_common_platform__util.h) = dae51bba703174054a6162f03fac2ff17b95e0b5
+SHA1 (patch-electron_shell_renderer_api_electron__api__crash__reporter__renderer.cc) = 01f47033347e3d05c7aa511d2782f663130dc73e
+SHA1 (patch-electron_spec_api-app-spec.ts) = a73cb497de768e2040fd728c3347a8f3967cb27f
+SHA1 (patch-electron_spec_api-browser-window-spec.ts) = f56196c198ffdb6d1884cdb2a9a5ae115323665e
+SHA1 (patch-electron_spec_api-clipboard-spec.ts) = bb961857e4745ee61d33f876a59088d025067319
+SHA1 (patch-electron_spec_api-content-tracing-spec.ts) = 6040304632eebd3d997103c5b782d33125765507
+SHA1 (patch-electron_spec_api-crash-reporter-spec.ts) = a53efa4897029a2d34ed1be5c8d424873e526a64
+SHA1 (patch-electron_spec_api-desktop-capturer-spec.ts) = 937fdc13dc110b8d919bb10d30e018e5cb4253d7
+SHA1 (patch-electron_spec_api-menu-spec.ts) = 8121532970fa3973e7d8b548ad9d6f4d63603d0f
+SHA1 (patch-electron_spec_api-native-image-spec.ts) = eecfae375823d777a9c8bd9876920b9b138f9bbe
+SHA1 (patch-electron_spec_api-net-log-spec.ts) = d454ae8d622ad79c5ca62b5d36afb594ad1bb6ac
+SHA1 (patch-electron_spec_api-notification-dbus-spec.ts) = af1efc8e2d10a1b9894de812e5ac858eb24d1615
+SHA1 (patch-electron_spec_api-power-monitor-spec.ts) = 96c0dfe42883a0f495b812b8a09a9f5070eabd97
+SHA1 (patch-electron_spec_api-process-spec.ts) = 7ea92ad5aa85faeac87726beababebd16f2a164d
+SHA1 (patch-electron_spec_api-protocol-spec.ts) = 2bdf15708508aac760ef2e6c085f4d67ff7f0f62
+SHA1 (patch-electron_spec_api-safe-storage-spec.ts) = b7b7d233169fcd63017a12090b31a06b45dc2c93
+SHA1 (patch-electron_spec_api-screen-spec.ts) = 3e5fd5a1c19cfaf20344719b88ae6764feeaaf17
+SHA1 (patch-electron_spec_api-shell-spec.ts) = ab5a0a711b3bdab6bfbf1f70efab67f3549114a7
+SHA1 (patch-electron_spec_api-subframe-spec.ts) = 73c4b4f89d86cd601c65e3a2f47ef7cd99b988ad
+SHA1 (patch-electron_spec_api-tray-spec.ts) = c1409b647b5f9bf2bf73f57bb51abdc9ceffe079
+SHA1 (patch-electron_spec_api-utility-process-spec.ts) = d4884d78fad18a9eb45c74c817cb65004358e7ff
+SHA1 (patch-electron_spec_api-web-frame-main-spec.ts) = 5d2b8fa372238b856be20685fbea51ed6ae95c7e
+SHA1 (patch-electron_spec_chromium-spec.ts) = 22b9117f235a6d8343fb0f25cf81be5e848b17c8
+SHA1 (patch-electron_spec_crash-spec.ts) = 8918368d714297a0332f1fedd4a04c6534ab7347
+SHA1 (patch-electron_spec_fixtures_api_safe-storage_decrypt-app_main.js) = bd96fdc43fdb7018b5e9a13e4ef388e963bba562
+SHA1 (patch-electron_spec_fixtures_api_safe-storage_encrypt-app_main.js) = 932584b9eb71e5bb856a711c38fb42ac5874473e
+SHA1 (patch-electron_spec_fixtures_crash-cases_safe-storage_index.js) = 1b100e0990456f5b8398c3b868dbfa63a1bbe3b0
+SHA1 (patch-electron_spec_fixtures_native-addon_uv-dlopen_index.js) = d319fce19ae2c16d98ac199bc63d572dcc47eca2
+SHA1 (patch-electron_spec_node-spec.ts) = add344eabc09af93d7827e6d47cafa8a6726da6d
+SHA1 (patch-electron_spec_version-bump-spec.ts) = 86a4972d51cb343678626d6c4ed78321750c2904
+SHA1 (patch-electron_spec_visibility-state-spec.ts) = 6f646a84768f95336a16f0e4d68561b8dea4d2d7
+SHA1 (patch-electron_spec_webview-spec.ts) = af8981bff80ed8a1e7d43fcfd84010b0e7707f23
SHA1 (patch-extensions_browser_api_api__browser__context__keyed__service__factories.cc) = 981cb4b26d13fe705d24035460a2316093b52795
SHA1 (patch-extensions_browser_api_management_management__api.cc) = 66e0fe787b27feb285f41c63639775ba6dae716e
SHA1 (patch-extensions_browser_api_messaging_message__service.cc) = 22322447a629841645853af1611d400475be5a36
@@ -1118,12 +1128,12 @@ SHA1 (patch-media_audio_audio__input__device.cc) = 45e70373697d0fd1af9d7becca347
SHA1 (patch-media_audio_audio__output__proxy__unittest.cc) = 8d6bcc0177ff4cd200f34a55cc50710236c3ae36
SHA1 (patch-media_audio_mac_audio__manager__mac.cc) = f96d8d4ed9e854bc25924f83e90726caeaefd193
SHA1 (patch-media_audio_pulse_pulse__util.cc) = ca7c701e5aa8c068f43e178f824e74c8c0985076
-SHA1 (patch-media_audio_sndio_audio__manager__sndio.cc) = 7134a08c94658b4d4496a8760e8989390c734f70
-SHA1 (patch-media_audio_sndio_audio__manager__sndio.h) = ab47230f65eda763260ff6914a163bb1039d506a
-SHA1 (patch-media_audio_sndio_sndio__input.cc) = 972a310887dfcaccf03c893fd9e004efa27f1737
-SHA1 (patch-media_audio_sndio_sndio__input.h) = a3ac905cfe9490496031621d4ad97fb926b2d42e
-SHA1 (patch-media_audio_sndio_sndio__output.cc) = d16282ded4f5138dd6f2bd3b7db17eb47c567bb3
-SHA1 (patch-media_audio_sndio_sndio__output.h) = 710c315b1c7749bc11f2e73ff5a375e9678a6b6b
+SHA1 (patch-media_audio_sndio_audio__manager__sndio.cc) = acafa05c310ca3de84de9d0dda58b74cf4d128e2
+SHA1 (patch-media_audio_sndio_audio__manager__sndio.h) = dfa68e2d7ef1ad738ef18494245663b05342b064
+SHA1 (patch-media_audio_sndio_sndio__input.cc) = a3487e7e7ecc22eab368d02f8eeb516871502fcf
+SHA1 (patch-media_audio_sndio_sndio__input.h) = 8f55dafdced47b955bdd2dd006f9e62749f87c0d
+SHA1 (patch-media_audio_sndio_sndio__output.cc) = 90304353e7e9f95000866bdbb7df9498df5dc505
+SHA1 (patch-media_audio_sndio_sndio__output.h) = d6e7586f245aba6f71d6cea3bc4675a1e2f8980a
SHA1 (patch-media_base_audio__latency.cc) = 7b544006bc4c3343261f864c1a83ae56a44a24d8
SHA1 (patch-media_base_libaom__thread__wrapper.cc) = 233d1d9cda1caad238c99a4172345e25eab77c56
SHA1 (patch-media_base_libvpx__thread__wrapper.cc) = 5bbdfc2c97ebe3c3728b743f1b50d2b1a3b05279
@@ -1299,14 +1309,14 @@ SHA1 (patch-sandbox_mac_system__services.cc) = 7e830999a024e9487a6bfc4d0a3c72ed6
SHA1 (patch-sandbox_policy_BUILD.gn) = 39bbbf63bdbd2ea2ce431bc416bb2249539db674
SHA1 (patch-sandbox_policy_features.cc) = 6949af8feec57e1cb8632f422411dc3212bacea5
SHA1 (patch-sandbox_policy_features.h) = 8ed89b22d6079de8492e38182be5b7d08871bd90
-SHA1 (patch-sandbox_policy_freebsd_sandbox__freebsd.cc) = 73a2aa2befbb014ad2a4c850659e71c071f8f0e1
-SHA1 (patch-sandbox_policy_freebsd_sandbox__freebsd.h) = 384fcfca5e7acfee78c9b38e4c4a9286c37fa26e
+SHA1 (patch-sandbox_policy_freebsd_sandbox__freebsd.cc) = 1959be7e93faf8d7347f88165e82ccd6b8076a62
+SHA1 (patch-sandbox_policy_freebsd_sandbox__freebsd.h) = 8fa179c692ef4ce32a93a66b0d565bd7bd9cdb86
SHA1 (patch-sandbox_policy_mac_sandbox__mac.mm) = 96e9fdc382ae01c11e3047bdc733d750c8320451
SHA1 (patch-sandbox_policy_mojom_sandbox.mojom) = 8b2ae8d7f7ab7e736b88a9b6a1d9c004a03cfa60
-SHA1 (patch-sandbox_policy_netbsd_sandbox__netbsd.cc) = 68e58093395a93f18ed25d17ad680a9b3b9c370d
-SHA1 (patch-sandbox_policy_netbsd_sandbox__netbsd.h) = 283dd196ba32e350f72f0a3699723e2c5764d687
-SHA1 (patch-sandbox_policy_openbsd_sandbox__openbsd.cc) = cbda5bb217de8a4a447fe6ffbdb3c0f5052a8de6
-SHA1 (patch-sandbox_policy_openbsd_sandbox__openbsd.h) = d3160a67874d1458190bee5dfbf58ce134d4e60f
+SHA1 (patch-sandbox_policy_netbsd_sandbox__netbsd.cc) = f1b4b6e724fcdcdbe91f3642115410182f2d1357
+SHA1 (patch-sandbox_policy_netbsd_sandbox__netbsd.h) = 6a2522faaa269f473013376d5a9adf842d6ab0cf
+SHA1 (patch-sandbox_policy_openbsd_sandbox__openbsd.cc) = 73982afc255bb280e019cb526903dce34c32494e
+SHA1 (patch-sandbox_policy_openbsd_sandbox__openbsd.h) = 1c9dcaa9ffc1c089a6c08f732b082b954ec3f6df
SHA1 (patch-sandbox_policy_sandbox.cc) = c2dfc86bf3db15775475849be8d8d5547ea76656
SHA1 (patch-sandbox_policy_sandbox.h) = 56f93ec2a863ab269268e0d8f56a36133191a92f
SHA1 (patch-sandbox_policy_sandbox__type.cc) = b383680214263958b7207f6315a2d3173795f6b0
@@ -1319,15 +1329,15 @@ SHA1 (patch-services_audio_audio__sandbox__hook__linux.h) = e6e86db956f44b8c64c0
SHA1 (patch-services_device_BUILD.gn) = 25ed2beb1b9988eb28b623f30de957dbc7aaebeb
SHA1 (patch-services_device_geolocation_location__provider__manager.cc) = 4a1c4a03c6f524112c1e1188cd59c2e352c9fc0a
SHA1 (patch-services_device_hid_BUILD.gn) = 71a1b5ac30601eebce7dbbcc70a8ba4c80b94a19
-SHA1 (patch-services_device_hid_hid__connection__fido.cc) = 8557631380d2c11bb7ff5d72116fe91856adbe36
-SHA1 (patch-services_device_hid_hid__connection__fido.h) = b5ef54ee61894ac8e2028995ad6036415170c649
-SHA1 (patch-services_device_hid_hid__connection__freebsd.cc) = 6f1da8ba78d02ace60404f8230914bcbf780601e
-SHA1 (patch-services_device_hid_hid__connection__freebsd.h) = 7dd67eb88da3635830f2ee31f96f9425fc8e454c
+SHA1 (patch-services_device_hid_hid__connection__fido.cc) = fdc794608640af385a179ee4c51d44b1cf27fdbb
+SHA1 (patch-services_device_hid_hid__connection__fido.h) = df44feb830050bc0febf13eb3b857d082b9b601d
+SHA1 (patch-services_device_hid_hid__connection__freebsd.cc) = 12c155e9eb971ed4cefb75ad062c674a21bd0fb9
+SHA1 (patch-services_device_hid_hid__connection__freebsd.h) = 9a899c1e8abf4433bdac7327bbd7245511fe3bb1
SHA1 (patch-services_device_hid_hid__service.cc) = 9e12273b45eb933129544bd16df401f0ed5592b3
-SHA1 (patch-services_device_hid_hid__service__fido.cc) = 97d36c87be6d40ba1322773ef44c4a39e3a0f8ae
-SHA1 (patch-services_device_hid_hid__service__fido.h) = c619494fffd445fa04ba629bb44b2209a9c66d86
-SHA1 (patch-services_device_hid_hid__service__freebsd.cc) = 37fe79d3183dc57c4199e8bf5f20b42c1c0796f3
-SHA1 (patch-services_device_hid_hid__service__freebsd.h) = 8f419ff15ebb26fb3fb2c0e815d56c072cce66ec
+SHA1 (patch-services_device_hid_hid__service__fido.cc) = d24ffdc62f577a9e0664c6fb072b1ff4fb550fe3
+SHA1 (patch-services_device_hid_hid__service__fido.h) = c55186c5c498a961d8ea874abe05a799c895d810
+SHA1 (patch-services_device_hid_hid__service__freebsd.cc) = 49457e412a72acbb113231d960b096f447f84fdf
+SHA1 (patch-services_device_hid_hid__service__freebsd.h) = 01b50c8929e5f3fe194ac84777794e56de05b24f
SHA1 (patch-services_device_public_cpp_generic__sensor_sensor__reading.h) = ac4d96b2538bb13cceb0c6f46124c69d6736f1b7
SHA1 (patch-services_device_public_mojom_BUILD.gn) = 3d43e4d78eb82f9304447bb92eb338d186409511
SHA1 (patch-services_device_serial_BUILD.gn) = 476da861408c36b899ae67909eeeac879f91fdf0
@@ -1336,8 +1346,8 @@ SHA1 (patch-services_device_serial_serial__io__handler__posix.cc) = a7b1513d9030
SHA1 (patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc) = e34e9d0b855cb4afc3cc0457f265b848ab5c85f4
SHA1 (patch-services_device_usb_BUILD.gn) = 683e7454f47f3dd7571f0baff8a267f1c21b1ae8
SHA1 (patch-services_device_usb_usb__service.cc) = 92b7a209e07c4877311f98a8208eda3f2cb5531a
-SHA1 (patch-services_device_usb_usb__service__fake.cc) = ae33871664e5144910e95a79513fcb67ae95ce00
-SHA1 (patch-services_device_usb_usb__service__fake.h) = 116b84b07a7fcd60b69637b66aa33907ca018094
+SHA1 (patch-services_device_usb_usb__service__fake.cc) = 31e009ee6ebac07b03f6276bc8e9ff72cd34ac58
+SHA1 (patch-services_device_usb_usb__service__fake.h) = 56378de449e58a04b13c5ef287bccff69441d800
SHA1 (patch-services_device_usb_usb__service__impl.cc) = a7ba10a72251c5a237111cee4b307ffc7302665d
SHA1 (patch-services_network_BUILD.gn) = a70f1f8b068d96797630b40a7bca785bc9e03eda
SHA1 (patch-services_network_network__context.cc) = 4802950171d752d0d4f2d5a5e48024458ad8422d
@@ -1365,7 +1375,7 @@ SHA1 (patch-services_on__device__model_pre__sandbox__init.cc) = b3d8fe71488dd98b
SHA1 (patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc) = bde2937373223282923ee297bf72656d059fdaa5
SHA1 (patch-services_resource__coordinator_public_cpp_memory__instrumentation_BUILD.gn) = 8953bd4aff1547626b033f1729dc68082b28c756
SHA1 (patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h) = 23a5d8eea30eeaaa6e6885621711088ab2762e91
-SHA1 (patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__bsd.cc) = e05b856e2ac1cbfb7415f215df4b31c12e161e5c
+SHA1 (patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__bsd.cc) = 6037163b3120e8cf40965a39e57599fe3bc29a2c
SHA1 (patch-services_screen__ai_public_cpp_utilities.cc) = 36218f2c6429aa833f6b872a24063d1723ad856d
SHA1 (patch-services_screen__ai_sandbox_screen__ai__sandbox__hook__linux.cc) = f5bee8fb8637f006212a425006fa6f31cbe188f1
SHA1 (patch-services_screen__ai_sandbox_screen__ai__sandbox__hook__linux.h) = eff576ce9617098e14bcc3358bc1295cc7fee1bc
@@ -1414,6 +1424,7 @@ SHA1 (patch-third__party_blink_public_mojom_page_page.mojom) = 264741a373dc50272
SHA1 (patch-third__party_blink_public_mojom_webpreferences_web__preferences.mojom) = 90bb54a9019b3f915ec759a95ae1e0e2f35dab8c
SHA1 (patch-third__party_blink_public_platform_platform.h) = faa1fa5e5c05bac10c67ca71361a9d03ebc203a7
SHA1 (patch-third__party_blink_public_platform_web__vector.h) = 1a5eb6d3deee28dc577f88ace4594ef0c4fcbcda
+SHA1 (patch-third__party_blink_public_platform_web__worker__fetch__context.h) = 3f747a430e2edee551351f4831e318f22e4a62a0
SHA1 (patch-third__party_blink_public_web_web__blob.h) = 217c3659748e98b1460f5e82a9b13c4c1f7f0598
SHA1 (patch-third__party_blink_public_web_web__document__loader.h) = df0190ac5cc7ced481f32c6d092bcb18ea34681a
SHA1 (patch-third__party_blink_public_web_web__local__frame.h) = 863edc192451ad477ec5fecf8d816150875151af
@@ -1471,6 +1482,8 @@ SHA1 (patch-third__party_blink_renderer_core_paint_paint__layer.cc) = 9a075692ca
SHA1 (patch-third__party_blink_renderer_core_scheduler__integration__tests_virtual__time__test.cc) = 29a06ca325a981a3016ae616933c3a1293a70e04
SHA1 (patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc) = e0ec27687e5598a872b9ea4519860643256e1c56
SHA1 (patch-third__party_blink_renderer_core_testing_internals.cc) = 0eba58956137490f755c25d67c5fdc5e46f204a9
+SHA1 (patch-third__party_blink_renderer_core_workers_worker__navigator.cc) = 6f42fbec9e275c64dcb63c5d0b04790050380d8a
+SHA1 (patch-third__party_blink_renderer_core_workers_worker__navigator.h) = f61ac67a4e686d88481fcc669d5eb9dfa26054cd
SHA1 (patch-third__party_blink_renderer_core_workers_worker__thread.cc) = c41497f9cbdda56e204cc004757a5edba3f190f0
SHA1 (patch-third__party_blink_renderer_core_xml_xslt__processor.h) = fbbc9cb4ee20501fd03c4825da242d65fab537e7
SHA1 (patch-third__party_blink_renderer_core_xml_xslt__processor__libxslt.cc) = 8b212ab0aacb5953e2df519b84a85d53ce54881e
@@ -1481,11 +1494,14 @@ SHA1 (patch-third__party_blink_renderer_modules_serial_serial__port__underlying_
SHA1 (patch-third__party_blink_renderer_modules_serial_serial__port__underlying__sink.h) = 06d49cdbeb33dd4fb6ffe28c96bdeef49b1900e2
SHA1 (patch-third__party_blink_renderer_modules_serial_serial__port__underlying__source.cc) = 33112c564012f91832dcef8e9753f9efbf3414b9
SHA1 (patch-third__party_blink_renderer_modules_serial_serial__port__underlying__source.h) = 08795a686c3c9f1919016756c2061f4d4815a372
+SHA1 (patch-third__party_blink_renderer_modules_service__worker_web__service__worker__fetch__context__impl.cc) = bab78826123e389c47688ecd892cee5acd0ab61e
+SHA1 (patch-third__party_blink_renderer_modules_service__worker_web__service__worker__fetch__context__impl.h) = 06d7f10cacffec85dd809e821ba242040cbf3353
SHA1 (patch-third__party_blink_renderer_modules_webaudio_audio__worklet__thread__test.cc) = 74d5dca91325d3b8a1bae2c6eabf37198d09c926
SHA1 (patch-third__party_blink_renderer_modules_webgl_webgl__rendering__context__base.cc) = 15a4175f25d0a3e170ac50eab145821cf9cecfe5
SHA1 (patch-third__party_blink_renderer_modules_webgpu_gpu__queue.cc) = d481536b06490652a3e6f25c176460e32ecc7919
SHA1 (patch-third__party_blink_renderer_modules_websockets_websocket__channel__impl.cc) = 793c4789f3b49e01f255fcdc461a26b24b9c7870
-SHA1 (patch-third__party_blink_renderer_platform_BUILD.gn) = 78bfd68c38a3c5c45de95f8563f9c64271b66de1
+SHA1 (patch-third__party_blink_renderer_platform_BUILD.gn) = e9a8470db0af92fca7eccddfd8df71a540479916
+SHA1 (patch-third__party_blink_renderer_platform_accept__languages__watcher.h) = 5eb44a7586abf11e8097deb3888fb385fd284d6c
SHA1 (patch-third__party_blink_renderer_platform_bindings_script__state.cc) = 80c2e0d14f12e8a40b36d0cf717c7915d22478ab
SHA1 (patch-third__party_blink_renderer_platform_bindings_script__state.h) = 4ae022636cc0df8172b7968ed2f43c51c96cd6e4
SHA1 (patch-third__party_blink_renderer_platform_fonts_font__cache.cc) = cd345238b0496d894fc9c0f77b49fb999217475a
@@ -1500,6 +1516,9 @@ SHA1 (patch-third__party_blink_renderer_platform_graphics_video__frame__submitte
SHA1 (patch-third__party_blink_renderer_platform_instrumentation_partition__alloc__memory__dump__provider.cc) = a3c1270355726918aaa31b5d869e20c9276ed05c
SHA1 (patch-third__party_blink_renderer_platform_loader_fetch_resource__fetcher.cc) = c8dc6e216bdab454e172c706625b44b4baecb6da
SHA1 (patch-third__party_blink_renderer_platform_loader_fetch_resource__fetcher.h) = c2d0557de1be4ddeef0fa1a91f1463b6200ebb33
+SHA1 (patch-third__party_blink_renderer_platform_loader_fetch_url__loader_DEPS) = 40985eb4dfe9484887b05e584a072ce1f1f8526d
+SHA1 (patch-third__party_blink_renderer_platform_loader_fetch_url__loader_dedicated__or__shared__worker__fetch__context__impl.cc) = 837583fdbd4ab898c3a5f24ead65fe8c28c28e77
+SHA1 (patch-third__party_blink_renderer_platform_loader_fetch_url__loader_dedicated__or__shared__worker__fetch__context__impl.h) = 9f032ab128b3ca7ab012b18390eb103bdd05fddb
SHA1 (patch-third__party_blink_renderer_platform_media_multi__buffer__data__source.cc) = c144d0711c7b8adf31c1db48aa31b744af84521b
SHA1 (patch-third__party_blink_renderer_platform_media_multi__buffer__data__source.h) = ac657bbbd38d467372fb688946394600280fd895
SHA1 (patch-third__party_blink_renderer_platform_peerconnection_rtc__video__encoder__factory.cc) = dc62dc423f6bd3fe852e4026dce8f1e91fb77df3
@@ -1524,7 +1543,7 @@ SHA1 (patch-third__party_brotli_common_platform.h) = e598ddc41b9a037f651df2c530c
SHA1 (patch-third__party_cpuinfo_cpuinfo.gni) = 9b9239ac0910b7489446c2b5273183747410807f
SHA1 (patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni) = d56599c034256dcfbe5f70332686948221a1bab5
SHA1 (patch-third__party_crashpad_crashpad_client_BUILD.gn) = 653baf600611d34172b1f42256c3c887bc47e654
-SHA1 (patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc) = 8e95facb610ff0e265b9193548a17ebd3ccdfde2
+SHA1 (patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc) = 5f42758318c3987a8f73281257dc7954a2ba3ea3
SHA1 (patch-third__party_crashpad_crashpad_minidump_minidump__misc__info__writer.cc) = 15d7b241e24cef7577209816aa68cc683109bf12
SHA1 (patch-third__party_crashpad_crashpad_util_misc_address__types.h) = 757fd14a200b7203a16b2c3502e7d3247bf8dff7
SHA1 (patch-third__party_crashpad_crashpad_util_misc_capture__context.h) = fb1a7488af5a8b7e4af47679bc037f0e32db39e1
@@ -1541,19 +1560,46 @@ SHA1 (patch-third__party_dawn_src_dawn_common_Platform.h) = 94dc112146274eda0708
SHA1 (patch-third__party_dawn_src_dawn_native_vulkan_BackendVk.cpp) = dd9d4cb154c78948d1dbc7aea87f3aca2d47481e
SHA1 (patch-third__party_dawn_src_tint_lang_core_ir_transform_robustness.cc) = f658c0fe13a0a7912224adc0dc56ee69bb36a8a7
SHA1 (patch-third__party_dawn_src_tint_lang_core_ir_transform_robustness__test.cc) = aaa2a1dd49a78009986aa8233f78089fc119243f
+SHA1 (patch-third__party_dawn_src_tint_lang_msl_writer_ast__printer_ast__printer__test.cc) = 6e18854f9e140a91213c119ad4d0a03ad32d977d
+SHA1 (patch-third__party_dawn_src_tint_lang_msl_writer_ast__raise_packed__vec3.cc) = 9a6055dda0ad96b86c708b3ffd343d63912cdfcd
+SHA1 (patch-third__party_dawn_src_tint_lang_msl_writer_ast__raise_packed__vec3__test.cc) = 09bc39a07612b43aece744b53a68ac493d94b0da
SHA1 (patch-third__party_dawn_src_tint_lang_spirv_writer_texture__builtin__test.cc) = ade9b018b939dc278e01a1d511f80784033c4dd9
-SHA1 (patch-third__party_dawn_src_tint_lang_wgsl_resolver_address__space__layout__validation__test.cc) = 2177fa9b0483ce05e8d8a0a9a558079e24bd3d89
-SHA1 (patch-third__party_dawn_src_tint_lang_wgsl_resolver_validator.cc) = 65f540819d0cf329d59fd62427a73c0ace01f168
-SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl) = cf23d77e599afc2c32b75e03af3035e92ffda83a
-SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.dxc.hlsl) = fbe649f686be101ae9e3eb3e89560183f4398c55
-SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.fxc.hlsl) = 11de5ebfcab59a2f5cb5ab200554d8b3a12b1e0e
-SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.glsl) = 3f05cc2a09106140fd4fbe511536ae7f66033bca
-SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.dxc.hlsl) = 1378d0e085e78567e8d173cfdd3c20b0e2f70347
-SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.fxc.hlsl) = 848118ade646e0df78c966b37593fead93a29f7f
-SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.msl) = 2fa113e08edf4c75588b448e7ea100664f14fbbe
-SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.msl) = 62cd856eb1a59636e660b78906eec6454c5f3a57
-SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.spvasm) = 4b530b6427f85353d4ab1267a0638540620e2d53
-SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.wgsl) = 6d0903f0a52a3da6339abcd0b5b58c4c46a9b4c1
+SHA1 (patch-third__party_dawn_src_tint_lang_wgsl_resolver_address__space__layout__validation__test.cc) = e372695430a836d101a43ca17371a56cca5b470a
+SHA1 (patch-third__party_dawn_src_tint_lang_wgsl_resolver_validator.cc) = 4bc9448619db69abd343d2854b402359b7703377
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat2x3__f16_to__workgroup.wgsl.expected.msl) = 9f3a08ce46515e8eb874b58e655ff8fbd09a71be
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat2x3__f32_to__workgroup.wgsl.expected.msl) = ad33187144e5b0916c94737d7f2c04e57cec9a6f
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat3x3__f32_to__workgroup.wgsl.expected.msl) = cd8d6f73748e9b67ae83a0428f93d62b9c14c3f6
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat4x3__f16_to__workgroup.wgsl.expected.msl) = 01110ef952b00915cb0d035d1fd5c77fc08c6133
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat4x3__f32_to__workgroup.wgsl.expected.msl) = 598fd41751c926db653f68725f27611cad131cad
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat2x3__f16_to__workgroup.wgsl.expected.msl) = f80cf4904f6b3f8db256b55e8f1f5f30549dd322
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat2x3__f32_to__workgroup.wgsl.expected.msl) = f589f931a0d389316118d035186884b2238b8668
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat3x3__f16_to__workgroup.wgsl.expected.msl) = 9a9a19f3812a0c54a1c9157f7473b9b153d7f688
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat3x3__f32_to__workgroup.wgsl.expected.msl) = 900adbdf8332524b08a3e97f8d464eee4b39e08c
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat4x3__f16_to__workgroup.wgsl.expected.msl) = 652c0bb83cf73d8f1d532480e6b2f3941cb50443
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat4x3__f32_to__workgroup.wgsl.expected.msl) = f39c3cf44c1ffe8051c807f230015d02afa7310e
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat2x3__f16_to__workgroup.wgsl.expected.msl) = 85f1cc1ccd661e2142b9a4367fb084eb124b2cfc
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat2x3__f32_to__workgroup.wgsl.expected.msl) = 399609a1995ab5681787f7a4d9221fb0c2ae9fe2
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat3x3__f16_to__workgroup.wgsl.expected.msl) = a6ad5a2e06b03e39f8ccd850e7307372f07711e5
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat3x3__f32_to__workgroup.wgsl.expected.msl) = 3f4bc5ffdfe64468cf8d028e6ecc9a385c9b4758
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat4x3__f16_to__workgroup.wgsl.expected.msl) = 7887998822e5e5a9f7286d18c7ae74961a843ecb
+SHA1 (patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat4x3__f32_to__workgroup.wgsl.expected.msl) = 4c2b093d657648d1dc1e8f8214c284905d01e6cb
+SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl) = 1b1af2eebd510dc78456500765a45a64a2eb5318
+SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.dxc.hlsl) = feaee634c79dc171c9ea6a427d7d27c6e61462e8
+SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.fxc.hlsl) = 36826c29f30ac2a5aa066988c2ac2623eb4d4d78
+SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.glsl) = b841bbfb3a0474d435bb7d8783a6f1cf94754b9d
+SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.dxc.hlsl) = 1423e898655329437a09f108905578acffc0d856
+SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.fxc.hlsl) = a93f150905998f9c1b8b3c1f5e5e8d83f276f68f
+SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.msl) = 4221819e2599ebccc90a01e9d61419baafe6b70d
+SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.msl) = 57f3c39f7b75f05a065f66d350d86116f99498de
+SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.spvasm) = 7544c237e14b2db336535b58d37aef22561687ce
+SHA1 (patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.wgsl) = ad5af842753c436191300280fdb3c122df281760
+SHA1 (patch-third__party_dawn_test_tint_bug_tint_366037039.wgsl.expected.msl) = ccb157c625e53273a1b50b5245ccb915c94852eb
+SHA1 (patch-third__party_dawn_test_tint_bug_tint_366314931.wgsl.expected.msl) = cbf63d3db009a94e586d07b228c6fa03541f42a7
+SHA1 (patch-third__party_dawn_test_tint_bug_tint_942.wgsl.expected.msl) = 5834e6e1883e9102772acfebf0e8a12e48b893cb
+SHA1 (patch-third__party_dawn_test_tint_builtins_workgroupUniformLoad_matrix.wgsl.expected.msl) = 42c8cc4a14cba2a845ccba4525686333b65876fa
+SHA1 (patch-third__party_dawn_test_tint_builtins_workgroupUniformLoad_structures.wgsl.expected.msl) = ba4b88ff861866c7fb88d0402c65182139d27566
+SHA1 (patch-third__party_dawn_test_tint_var_initialization_workgroup_matrix.wgsl.expected.msl) = 7ffcfc9128a05d08607c92f56357a9c48cd15d6f
+SHA1 (patch-third__party_dawn_test_tint_var_initialization_workgroup_vector.wgsl.expected.msl) = 55be5fac46db59a28a894ac63d870916c5242a2a
SHA1 (patch-third__party_dawn_webgpu-cts_compat-expectations.txt) = 80a20bc6f8b3c54c145cb6fa58160267da6bbd78
SHA1 (patch-third__party_dawn_webgpu-cts_expectations.txt) = 912bcd679c7837f4d6e017cf16fddef274535fc1
SHA1 (patch-third__party_devtools-frontend_src_front__end_entrypoints_main_MainImpl.ts) = b1ef2668fb578770b926333f01bca31f94bc6440
@@ -1789,12 +1835,13 @@ SHA1 (patch-third__party_perfetto_src_tracing_ipc_memfd.cc) = 6d34618a285e47b176
SHA1 (patch-third__party_perfetto_src_tracing_track.cc) = 6650b7ef23e263b3b60089040ec3d137a8b3b84f
SHA1 (patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h) = 2bf1f054a551b5a8993d143dac9cd7b23111873a
SHA1 (patch-third__party_skia_src_gpu_ganesh_GrAutoLocaleSetter.h) = 182bb2595e662b485897a9bebb4e638b2b92f85d
+SHA1 (patch-third__party_skia_src_gpu_ganesh_ops_AAHairLinePathRenderer.cpp) = 7822f76c0301918f3623cc1d425b66ece5f0c4cc
SHA1 (patch-third__party_skia_src_ports_SkMemory__malloc.cpp) = e910086c0f5183e7f0b744e55160929aa4d541a7
SHA1 (patch-third__party_skia_src_ports_SkOSFile__posix.cpp) = 63b0a29686e72779f3e29261126839a15ad7dc7c
SHA1 (patch-third__party_skia_src_sksl_codegen_SkSLRasterPipelineBuilder.cpp) = 050757efeaaceda81015b56ccd61f90acabf3f4e
SHA1 (patch-third__party_skia_src_sksl_codegen_SkSLRasterPipelineBuilder.h) = 5f1faf7e8d84a0f1991161ffc11c035629183df4
SHA1 (patch-third__party_skia_tests_RasterPipelineCodeGeneratorTest.cpp) = f4ec1389ae307f98bb32ca74c55ae5c67d4210f5
-SHA1 (patch-third__party_speech-dispatcher_libspeechd__version.h) = 9ee90337d2c6b23e779975882665feef4af58b09
+SHA1 (patch-third__party_speech-dispatcher_libspeechd__version.h) = be762c5a8e66f421e60fd67bafa8a903937b4896
SHA1 (patch-third__party_speech-dispatcher_speechd__types.h) = 8dcb09bff2fd495c522c475346b99bcc6e73442a
SHA1 (patch-third__party_sqlite_BUILD.gn) = 113ae241a3db0642212390c074a138b2051e627b
SHA1 (patch-third__party_sqlite_src_amalgamation__dev_sqlite3.c) = 264fe0c876fdb387a2416ec24c6b42843fe0417d
@@ -2071,8 +2118,8 @@ SHA1 (patch-ui_shell__dialogs_select__file__dialog.h) = e93aa0883d696b005928ff8f
SHA1 (patch-ui_shell__dialogs_select__file__dialog__linux.cc) = 6453ec94e1902c587257211fe83724720ce53d87
SHA1 (patch-ui_shell__dialogs_select__file__dialog__linux.h) = ceed5d2451b0602a8f27aea15f63a9808a84ab0d
SHA1 (patch-ui_shell__dialogs_select__file__dialog__linux__kde.cc) = d21b6ed1cf7d23810a79c626ae9bdbd305423017
-SHA1 (patch-ui_shell__dialogs_select__file__dialog__linux__portal.cc) = 6c7c05f8e234527d2112027916e59fc7831d77d9
-SHA1 (patch-ui_shell__dialogs_select__file__dialog__linux__portal.h) = cd97209f41656e94e8532344f291a9be929fbef7
+SHA1 (patch-ui_shell__dialogs_select__file__dialog__linux__portal.cc) = 84c90933cf7c441e217a16a9284f846894dfc251
+SHA1 (patch-ui_shell__dialogs_select__file__dialog__linux__portal.h) = d1df4d3464e6a044226d5c96068bfaf986b15fea
SHA1 (patch-ui_strings_translations_app__locale__settings__bn.xtb) = 2ad59e40710695addb5fb73d2cc2469b0f35b4a2
SHA1 (patch-ui_strings_translations_app__locale__settings__ja.xtb) = e62d0723eab456aef241bc7cd3d5e1b0c8916134
SHA1 (patch-ui_strings_translations_app__locale__settings__ko.xtb) = 9d56bb46ead5ae3a810ba8c1bd7617c3cb4a6526
@@ -2144,16 +2191,21 @@ SHA1 (patch-v8_src_base_small-vector.h) = 096169fa21aa8db7a4a5f22a80e3c8cdd191ea
SHA1 (patch-v8_src_base_strings.h) = a56c73a4ec7d26ae28a2d375306f97af0f00ae3b
SHA1 (patch-v8_src_base_sys-info.cc) = 73fc7e787533b5ff79737c1aa5e6a4ab5442b284
SHA1 (patch-v8_src_base_utils_random-number-generator.cc) = 1acb5c582e7780aa99a86dbdac793de9a3028b23
+SHA1 (patch-v8_src_builtins_builtins-object-gen.cc) = b0d35faa0829a7d18c7cae5cb2abac3e28d4f9bd
SHA1 (patch-v8_src_compiler_access-info.cc) = 80e64eccb799575d88c9f9ccf18bb83443012803
SHA1 (patch-v8_src_compiler_heap-refs.cc) = 802694c5d1bdfdd59b176989b3eb3c23f9c8d0cb
SHA1 (patch-v8_src_compiler_js-call-reducer.cc) = ac121a30d33e323d18a3570e7e31c8c1635d5f97
SHA1 (patch-v8_src_compiler_js-native-context-specialization.cc) = 8a39c0043e77a369a7fbd7f33222525f80be3e09
+SHA1 (patch-v8_src_compiler_turboshaft_wasm-gc-typed-optimization-reducer.cc) = 2148d923b333de3d6dc21ee10dd7c36e9ffd031d
+SHA1 (patch-v8_src_compiler_turboshaft_wasm-gc-typed-optimization-reducer.h) = d0b981b38426472f75fdb1909a0f765331a49afb
SHA1 (patch-v8_src_diagnostics_perf-jit.cc) = b0c397aa1b9394117f6f712ce8d5f765779a01f9
SHA1 (patch-v8_src_diagnostics_perf-jit.h) = ac0140a909dbaec64a6fd850e3ffdca3a054047b
SHA1 (patch-v8_src_execution_isolate.cc) = 556a85ddf10d7668c1a56cb4139c62bcedb5bb20
SHA1 (patch-v8_src_execution_microtask-queue.h) = 57da8cbbd7db8b469ad07d863a01db3e8d401f34
SHA1 (patch-v8_src_flags_flags.cc) = e7020fc69dfd25a9868841a550955b9e5dd59e0c
+SHA1 (patch-v8_src_interpreter_bytecode-generator.cc) = 270504da0c5b303e677b1f7da89453bac23fb4cd
SHA1 (patch-v8_src_maglev_maglev-graph-builder.cc) = 80b92e04b590702a67b32a3492b8ba0b660231f1
+SHA1 (patch-v8_src_maglev_maglev-phi-representation-selector.cc) = 95f9d5cdc03a38f0e9994186b702bf30e167f913
SHA1 (patch-v8_src_runtime_runtime-wasm.cc) = 1051bd4741006ed340209a2d6cf66ae5b6de65f0
SHA1 (patch-v8_src_sandbox_sandbox.cc) = 42c46e1fcbb712f8a628bb3c345295d4e928afd4
SHA1 (patch-v8_src_snapshot_embedded_platform-embedded-file-writer-base.cc) = 7574451c194f2d512b2e2e2ee14b407cd16f1661
@@ -2162,9 +2214,14 @@ SHA1 (patch-v8_src_snapshot_embedded_platform-embedded-file-writer-generic.cc) =
SHA1 (patch-v8_src_trap-handler_handler-inside-posix.cc) = cae956ce9c30b987d424ced366f65dd3d3b1bab8
SHA1 (patch-v8_src_trap-handler_handler-inside-posix.h) = c92e27c6f3e9d02e56c6a780daaee1d6c654bcee
SHA1 (patch-v8_src_trap-handler_trap-handler.h) = 4ac80edc8276f5f43023b2799eacfa1759d2b9f4
+SHA1 (patch-v8_src_wasm_baseline_arm_liftoff-assembler-arm-inl.h) = acea9b59261de4d7ccf900ba3431e9c1534d2c9a
SHA1 (patch-v8_src_wasm_baseline_ia32_liftoff-assembler-ia32-inl.h) = a1efc0606166e60f30ce32a791c74cb0f544e35a
+SHA1 (patch-v8_src_wasm_baseline_x64_liftoff-assembler-x64-inl.h) = 4d3652b517037b3c550f6bf748f467b7817bab80
SHA1 (patch-v8_src_wasm_wasm-js.cc) = d790e09fb671896e7b1f599b1e6e208e391dbbc6
-SHA1 (patch-v8_test_mjsunit_regress_wasm_regress-366635354.js) = b0c9f33383a645d649ce63febaa1cf912ade02b2
-SHA1 (patch-v8_test_mjsunit_wasm_regress-367818758.js) = b40dd1c21a4fcea2de358685ec206026690c4ebd
-SHA1 (patch-v8_tools_run-paxctl.py) = cf115b755b7e0aac8df28ae8ada41699fa0a3e4a
+SHA1 (patch-v8_test_mjsunit_maglev_regress-382190919.js) = 2f13434aac069f8b0176c3dd49c668d317a28b53
+SHA1 (patch-v8_test_mjsunit_regress_regress-374627491.js) = d8be83904025e5f73b88249f768f99d2edde7366
+SHA1 (patch-v8_test_mjsunit_regress_wasm_regress-366635354.js) = 90dcdf97caef8562cda7d25d914d2c2f4708a5e2
+SHA1 (patch-v8_test_mjsunit_regress_wasm_regress-378779897.js) = 91bba35eedb1382e82c66dbf4be13fb56bfece72
+SHA1 (patch-v8_test_mjsunit_wasm_regress-367818758.js) = ec293f1a1889ddb882bd6e23e8b2da122355e45d
+SHA1 (patch-v8_tools_run-paxctl.py) = bcddfdc781862fc14d81009c10eee42798d89acb
SHA1 (patch-v8_tools_run.py) = 166f784b2f27ad66a3b4e951b13cb3f9dee6da85
diff --git a/electron32/options.mk b/electron32/options.mk
index 1b3345d3a9..9375a18f7a 100644
--- a/electron32/options.mk
+++ b/electron32/options.mk
@@ -2,13 +2,11 @@
PKG_OPTIONS_VAR= PKG_OPTIONS.electron
PKG_OPTIONS_REQUIRED_GROUPS= audio
-PKG_OPTIONS_GROUP.audio= alsa pulseaudio sndio sunaudio
+PKG_OPTIONS_GROUP.audio= alsa pulseaudio sunaudio
PKG_SUPPORTED_OPTIONS+= debug
.if ${OPSYS} == "NetBSD"
PKG_SUGGESTED_OPTIONS+= sunaudio
-.elif ${OPSYS} == "OpenBSD"
-PKG_SUGGESTED_OPTIONS+= sndio
.else
PKG_SUGGESTED_OPTIONS+= pulseaudio
.endif
@@ -37,12 +35,6 @@ GN_ARGS+= use_pulseaudio=true
GN_ARGS+= use_pulseaudio=false
.endif
-.if !empty(PKG_OPTIONS:Msndio)
-GN_ARGS+= use_sndio=true
-.else
-GN_ARGS+= use_sndio=false
-.endif
-
.if !empty(PKG_OPTIONS:Mdebug)
BUILDTYPE= Debug
GN_FILE= testing.gn
diff --git a/electron32/patches/patch-.gn b/electron32/patches/patch-.gn
index 74a8bedced..c73f28018f 100644
--- a/electron32/patches/patch-.gn
+++ b/electron32/patches/patch-.gn
@@ -6,11 +6,13 @@ $NetBSD$
--- .gn.orig 2024-10-18 12:33:59.054677000 +0000
+++ .gn
-@@ -172,4 +172,8 @@ exec_script_whitelist =
+@@ -172,4 +172,10 @@ exec_script_whitelist =
"//tools/grit/grit_rule.gni",
"//tools/gritsettings/BUILD.gn",
+
++ "//third_party/icu/BUILD.gn",
++
+ "//electron/BUILD.gn",
+ "//third_party/electron_node/deps/base64/BUILD.gn",
+ "//third_party/electron_node/deps/base64/unofficial.gni",
diff --git a/electron32/patches/patch-base_files_file__path__watcher__bsd.cc b/electron32/patches/patch-base_files_file__path__watcher__bsd.cc
index cd695ea67d..5ce3195f64 100644
--- a/electron32/patches/patch-base_files_file__path__watcher__bsd.cc
+++ b/electron32/patches/patch-base_files_file__path__watcher__bsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- base/files/file_path_watcher_bsd.cc.orig 2025-01-19 14:12:03.856169259 +0000
+--- base/files/file_path_watcher_bsd.cc.orig 2025-02-15 09:43:46.215519587 +0000
+++ base/files/file_path_watcher_bsd.cc
@@ -0,0 +1,54 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-base_metrics_field__trial.cc b/electron32/patches/patch-base_metrics_field__trial.cc
new file mode 100644
index 0000000000..13c8f12cfd
--- /dev/null
+++ b/electron32/patches/patch-base_metrics_field__trial.cc
@@ -0,0 +1,78 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- base/metrics/field_trial.cc.orig 2024-10-18 12:33:59.782265400 +0000
++++ base/metrics/field_trial.cc
+@@ -124,7 +124,7 @@ void PickleFieldTrial(const FieldTrial::
+ }
+
+ // Returns the boundary value for comparing against the FieldTrial's added
+-// groups for a given |divisor| (total probability) and |entropy_value|.
++// groups for a given `divisor` (total probability) and `entropy_value`.
+ FieldTrial::Probability GetGroupBoundaryValue(
+ FieldTrial::Probability divisor,
+ double entropy_value) {
+@@ -138,7 +138,7 @@ FieldTrial::Probability GetGroupBoundary
+ const double kEpsilon = 1e-8;
+ const FieldTrial::Probability result =
+ static_cast<FieldTrial::Probability>(divisor * entropy_value + kEpsilon);
+- // Ensure that adding the epsilon still results in a value < |divisor|.
++ // Ensure that adding the epsilon still results in a value < `divisor`.
+ return std::min(result, divisor - 1);
+ }
+
+@@ -259,7 +259,7 @@ void FieldTrial::AppendGroup(const std::
+ if (forced_) {
+ DCHECK(!group_name_.empty());
+ if (name == group_name_) {
+- // Note that while |group_| may be equal to |kDefaultGroupNumber| on the
++ // Note that while `group_` may be equal to `kDefaultGroupNumber` on the
+ // forced trial, it will not have the same value as the default group
+ // number returned from the non-forced |FactoryGetFieldTrial()| call,
+ // which takes care to ensure that this does not happen.
+@@ -326,7 +326,7 @@ bool FieldTrial::IsOverridden() const {
+ void FieldTrial::EnableBenchmarking() {
+ // We don't need to see field trials created via CreateFieldTrial() for
+ // benchmarking, because such field trials have only a single group and are
+- // not affected by randomization that |enable_benchmarking_| would disable.
++ // not affected by randomization that `enable_benchmarking_` would disable.
+ DCHECK_EQ(0u, FieldTrialList::GetRandomizedFieldTrialCount());
+ enable_benchmarking_ = true;
+ }
+@@ -453,7 +453,7 @@ void FieldTrial::FinalizeGroupChoice() {
+ if (group_ != kNotFinalized)
+ return;
+ accumulated_group_probability_ = divisor_;
+- // Here it's OK to use |kDefaultGroupNumber| since we can't be forced and not
++ // Here it's OK to use `kDefaultGroupNumber` since we can't be forced and not
+ // finalized.
+ DCHECK(!forced_);
+ SetGroupChoice(default_group_name_, kDefaultGroupNumber);
+@@ -807,7 +807,7 @@ FieldTrial* FieldTrialList::CreateFieldT
+ field_trial = new FieldTrial(name, kTotalProbability, group_name, 0,
+ is_low_anonymity, is_overridden);
+ // The group choice will be finalized in this method. So
+- // |is_randomized_trial| should be false.
++ // `is_randomized_trial` should be false.
+ FieldTrialList::Register(field_trial, /*is_randomized_trial=*/false);
+ // Force the trial, which will also finalize the group choice.
+ field_trial->SetForced();
+@@ -910,12 +910,12 @@ bool FieldTrialList::GetParamsFromShared
+ if (!field_trial->ref_)
+ return false;
+
++ size_t allocated_size = 0;
+ const FieldTrial::FieldTrialEntry* entry =
+ global_->field_trial_allocator_->GetAsObject<FieldTrial::FieldTrialEntry>(
+- field_trial->ref_);
++ field_trial->ref_, &allocated_size);
++ CHECK(entry);
+
+- size_t allocated_size =
+- global_->field_trial_allocator_->GetAllocSize(field_trial->ref_);
+ uint64_t actual_size =
+ sizeof(FieldTrial::FieldTrialEntry) + entry->pickle_size;
+ if (allocated_size < actual_size)
diff --git a/electron32/patches/patch-base_metrics_persistent__histogram__allocator.cc b/electron32/patches/patch-base_metrics_persistent__histogram__allocator.cc
new file mode 100644
index 0000000000..8fd69349db
--- /dev/null
+++ b/electron32/patches/patch-base_metrics_persistent__histogram__allocator.cc
@@ -0,0 +1,169 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- base/metrics/persistent_histogram_allocator.cc.orig 2024-10-18 12:33:59.786263200 +0000
++++ base/metrics/persistent_histogram_allocator.cc
+@@ -89,13 +89,13 @@ std::unique_ptr<BucketRanges> CreateRang
+ }
+
+ // Calculate the number of bytes required to store all of a histogram's
+-// "counts". This will return zero (0) if |bucket_count| is not valid.
++// "counts". This will return zero (0) if `bucket_count` is not valid.
+ size_t CalculateRequiredCountsBytes(size_t bucket_count) {
+ // 2 because each "sample count" also requires a backup "logged count"
+ // used for calculating the delta during snapshot operations.
+ const size_t kBytesPerBucket = 2 * sizeof(HistogramBase::AtomicCount);
+
+- // If the |bucket_count| is such that it would overflow the return type,
++ // If the `bucket_count` is such that it would overflow the return type,
+ // perhaps as the result of a malicious actor, then return zero to
+ // indicate the problem to the caller.
+ if (bucket_count > std::numeric_limits<size_t>::max() / kBytesPerBucket)
+@@ -190,7 +190,7 @@ std::vector<PersistentMemoryAllocator::R
+ PersistentSparseHistogramDataManager::LoadRecords(
+ PersistentSampleMapRecords* sample_map_records,
+ std::optional<HistogramBase::Sample> until_value) {
+- // DataManager must be locked in order to access the |sample_records_|
++ // DataManager must be locked in order to access the `sample_records_`
+ // vectors.
+ base::AutoLock auto_lock(lock_);
+
+@@ -236,7 +236,7 @@ PersistentSparseHistogramDataManager::Lo
+ }
+
+ // Return all references found that have not yet been seen by
+- // |sample_map_records|, up until |until_value| (if applicable).
++ // `sample_map_records`, up until `until_value` (if applicable).
+ std::vector<PersistentMemoryAllocator::Reference> new_references;
+ CHECK_GE(found_records.size(), sample_map_records->seen_);
+ auto new_found_records = base::make_span(found_records)
+@@ -244,9 +244,9 @@ PersistentSparseHistogramDataManager::Lo
+ new_references.reserve(new_found_records.size());
+ for (const auto& new_record : new_found_records) {
+ new_references.push_back(new_record.reference);
+- // Maybe references after |until_value| were found. Stop here immediately in
++ // Maybe references after `until_value` were found. Stop here immediately in
+ // such a case, since the caller will not expect any more samples after
+- // |until_value|.
++ // `until_value`.
+ if (until_value.has_value() && new_record.value == until_value.value()) {
+ break;
+ }
+@@ -335,9 +335,9 @@ std::unique_ptr<HistogramBase> Persisten
+ // count data (while these must reference the persistent counts) and always
+ // add it to the local list of known histograms (while these may be simple
+ // references to histograms in other processes).
++ size_t length = 0;
+ PersistentHistogramData* data =
+- memory_allocator_->GetAsObject<PersistentHistogramData>(ref);
+- const size_t length = memory_allocator_->GetAllocSize(ref);
++ memory_allocator_->GetAsObject<PersistentHistogramData>(ref, &length);
+
+ // Check that metadata is reasonable: name is null-terminated and non-empty,
+ // ID fields have been loaded with a hash of the name (0 is considered
+@@ -345,7 +345,7 @@ std::unique_ptr<HistogramBase> Persisten
+ if (!data || data->name[0] == '\0' ||
+ reinterpret_cast<char*>(data)[length - 1] != '\0' ||
+ data->samples_metadata.id == 0 || data->logged_metadata.id == 0 ||
+- // Note: Sparse histograms use |id + 1| in |logged_metadata|.
++ // Note: Sparse histograms use `id + 1` in `logged_metadata`.
+ (data->logged_metadata.id != data->samples_metadata.id &&
+ data->logged_metadata.id != data->samples_metadata.id + 1) ||
+ // Most non-matching values happen due to truncated names. Ideally, we
+@@ -388,7 +388,7 @@ std::unique_ptr<HistogramBase> Persisten
+ histogram_data->histogram_type = histogram_type;
+ histogram_data->flags = flags | HistogramBase::kIsPersistent;
+
+- // |counts_ref| relies on being zero'd out initially. Even though this
++ // `counts_ref` relies on being zero'd out initially. Even though this
+ // should always be the case, manually zero it out again here in case there
+ // was memory corruption (e.g. if the memory was mapped from a corrupted
+ // spare file).
+@@ -402,7 +402,7 @@ std::unique_ptr<HistogramBase> Persisten
+ size_t bucket_count = bucket_ranges->bucket_count();
+ size_t counts_bytes = CalculateRequiredCountsBytes(bucket_count);
+ if (counts_bytes == 0) {
+- // |bucket_count| was out-of-range.
++ // `bucket_count` was out-of-range.
+ return nullptr;
+ }
+
+@@ -410,8 +410,8 @@ std::unique_ptr<HistogramBase> Persisten
+ // objects for re-use, it would be dangerous for one to hold a reference
+ // from a persistent allocator that is not the global one (which is
+ // permanent once set). If this stops being the case, this check can
+- // become an "if" condition beside "!ranges_ref" below and before
+- // set_persistent_reference() farther down.
++ // become an `if` condition beside `!ranges_ref` below and before
++ // `set_persistent_reference()` farther down.
+ DCHECK_EQ(this, GlobalHistogramAllocator::Get());
+
+ // Re-use an existing BucketRanges persistent allocation if one is known;
+@@ -448,7 +448,7 @@ std::unique_ptr<HistogramBase> Persisten
+ if (ranges_ref && histogram_data) {
+ histogram_data->minimum = minimum;
+ histogram_data->maximum = maximum;
+- // |bucket_count| must fit within 32-bits or the allocation of the counts
++ // `bucket_count` must fit within 32-bits or the allocation of the counts
+ // array would have failed for being too large; the allocator supports
+ // less than 4GB total size.
+ histogram_data->bucket_count = static_cast<uint32_t>(bucket_count);
+@@ -461,7 +461,7 @@ std::unique_ptr<HistogramBase> Persisten
+
+ if (histogram_data) {
+ // Create the histogram using resources in persistent memory. This ends up
+- // resolving the "ref" values stored in histogram_data instad of just
++ // resolving the `ref` values stored in histogram_data instead of just
+ // using what is already known above but avoids duplicating the switch
+ // statement here and serves as a double-check that everything is
+ // correct before commiting the new histogram to persistent space.
+@@ -600,17 +600,16 @@ std::unique_ptr<HistogramBase> Persisten
+ uint32_t histogram_ranges_ref = histogram_data_ptr->ranges_ref;
+ uint32_t histogram_ranges_checksum = histogram_data_ptr->ranges_checksum;
+
++ size_t allocated_bytes = 0;
+ HistogramBase::Sample* ranges_data =
+ memory_allocator_->GetAsArray<HistogramBase::Sample>(
+ histogram_ranges_ref, kTypeIdRangesArray,
+- PersistentMemoryAllocator::kSizeAny);
++ PersistentMemoryAllocator::kSizeAny, &allocated_bytes);
+
+ const uint32_t max_buckets =
+ std::numeric_limits<uint32_t>::max() / sizeof(HistogramBase::Sample);
+ size_t required_bytes =
+ (histogram_bucket_count + 1) * sizeof(HistogramBase::Sample);
+- size_t allocated_bytes =
+- memory_allocator_->GetAllocSize(histogram_ranges_ref);
+ if (!ranges_data || histogram_bucket_count < 2 ||
+ histogram_bucket_count >= max_buckets ||
+ allocated_bytes < required_bytes) {
+@@ -638,11 +637,14 @@ std::unique_ptr<HistogramBase> Persisten
+ }
+
+ size_t counts_bytes = CalculateRequiredCountsBytes(histogram_bucket_count);
++ if (counts_bytes == 0) {
++ return nullptr;
++ }
++
+ PersistentMemoryAllocator::Reference counts_ref =
+ histogram_data_ptr->counts_ref.load(std::memory_order_acquire);
+- if (counts_bytes == 0 ||
+- (counts_ref != 0 &&
+- memory_allocator_->GetAllocSize(counts_ref) < counts_bytes)) {
++ if (counts_ref != 0 && !memory_allocator_->GetAsArray<uint8_t>(
++ counts_ref, kTypeIdCountsArray, counts_bytes)) {
+ return nullptr;
+ }
+
+@@ -970,7 +972,7 @@ void GlobalHistogramAllocator::Set(Globa
+ // histogram allocator was initialized.
+ //
+ // TODO(crbug.com/40945497): CHECK(histogram_count == 0) and remove emit of
+- // early histogram count once |histogram_count| is reliably zero (0) for all
++ // early histogram count once `histogram_count` is reliably zero (0) for all
+ // process types.
+ size_t histogram_count = StatisticsRecorder::GetHistogramCount();
+ if (histogram_count != 0) {
diff --git a/electron32/patches/patch-base_metrics_persistent__histogram__allocator.h b/electron32/patches/patch-base_metrics_persistent__histogram__allocator.h
new file mode 100644
index 0000000000..5c0e1f91f1
--- /dev/null
+++ b/electron32/patches/patch-base_metrics_persistent__histogram__allocator.h
@@ -0,0 +1,253 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- base/metrics/persistent_histogram_allocator.h.orig 2024-10-18 12:33:59.786263200 +0000
++++ base/metrics/persistent_histogram_allocator.h
+@@ -47,8 +47,8 @@ class BASE_EXPORT PersistentSparseHistog
+ ~PersistentSparseHistogramDataManager();
+
+ // Returns an object that manages persistent-sample-map records for a given
+- // |id|. The returned object queries |this| for records. Hence, the returned
+- // object must not outlive |this|.
++ // `id`. The returned object queries `this` for records. Hence, the returned
++ // object must not outlive `this`.
+ std::unique_ptr<PersistentSampleMapRecords> CreateSampleMapRecords(
+ uint64_t id);
+
+@@ -71,19 +71,19 @@ class BASE_EXPORT PersistentSparseHistog
+ std::vector<ReferenceAndSample>* GetSampleMapRecordsWhileLocked(uint64_t id)
+ EXCLUSIVE_LOCKS_REQUIRED(lock_);
+
+- // Returns sample-map records belonging to the specified |sample_map_records|.
+- // Only records found that were not yet seen by |sample_map_records| will be
+- // returned, determined by its |seen_| field. Records found for other
++ // Returns sample-map records belonging to the specified `sample_map_records`.
++ // Only records found that were not yet seen by `sample_map_records` will be
++ // returned, determined by its `seen_` field. Records found for other
+ // sample-maps are held for later use without having to iterate again. This
+ // should be called only from a PersistentSampleMapRecords object because
+ // those objects have a contract that there are no other threads accessing the
+- // internal records_ field of the object that is passed in. If |until_value|
++ // internal records_ field of the object that is passed in. If `until_value`
+ // is set and a sample is found with said value, the search will stop early
+ // and the last entry in the returned vector will be that sample.
+ // Note: The returned vector is not guaranteed to contain all unseen records
+- // for |sample_map_records|. If this is needed, then repeatedly call this
++ // for `sample_map_records`. If this is needed, then repeatedly call this
+ // until an empty vector is returned, which definitely means that
+- // |sample_map_records| has seen all its records.
++ // `sample_map_records` has seen all its records.
+ std::vector<PersistentMemoryAllocator::Reference> LoadRecords(
+ PersistentSampleMapRecords* sample_map_records,
+ std::optional<HistogramBase::Sample> until_value);
+@@ -112,7 +112,7 @@ class BASE_EXPORT PersistentSampleMapRec
+ // Constructs an instance of this class. The manager object must live longer
+ // than all instances of this class that reference it, which is not usually
+ // a problem since these objects are generally managed from within that
+- // manager instance. The same caveats apply for for the |records| vector.
++ // manager instance. The same caveats apply for for the `records` vector.
+ PersistentSampleMapRecords(
+ PersistentSparseHistogramDataManager* data_manager,
+ uint64_t sample_map_id,
+@@ -125,18 +125,18 @@ class BASE_EXPORT PersistentSampleMapRec
+
+ ~PersistentSampleMapRecords();
+
+- // Gets next references to persistent sample-map records. If |until_value| is
++ // Gets next references to persistent sample-map records. If `until_value` is
+ // passed, and said value is found, then it will be the last element in the
+ // returned vector. The type and layout of the data being referenced is
+ // defined entirely within the PersistentSampleMap class.
+ // Note: The returned vector is not guaranteed to contain all unseen records
+- // for |this|. If this is needed, then repeatedly call this until an empty
+- // vector is returned, which definitely means that |this| has seen all its
++ // for `this`. If this is needed, then repeatedly call this until an empty
++ // vector is returned, which definitely means that `this` has seen all its
+ // records.
+ std::vector<PersistentMemoryAllocator::Reference> GetNextRecords(
+ std::optional<HistogramBase::Sample> until_value);
+
+- // Creates a new persistent sample-map record for sample |value| and returns
++ // Creates a new persistent sample-map record for sample `value` and returns
+ // a reference to it.
+ PersistentMemoryAllocator::Reference CreateNew(HistogramBase::Sample value);
+
+@@ -160,7 +160,7 @@ class BASE_EXPORT PersistentSampleMapRec
+ // ID of PersistentSampleMap to which these records apply.
+ const uint64_t sample_map_id_;
+
+- // This is the count of how many "records" have already been read by |this|.
++ // This is the count of how many "records" have already been read by `this`.
+ size_t seen_ = 0;
+
+ // This is the set of records found during iteration through memory, owned by
+@@ -185,7 +185,7 @@ class BASE_EXPORT PersistentHistogramAll
+ // See PersistentMemoryAllocator::Iterator for more information.
+ class BASE_EXPORT Iterator {
+ public:
+- // Constructs an iterator on a given |allocator|, starting at the beginning.
++ // Constructs an iterator on a given `allocator`, starting at the beginning.
+ // The allocator must live beyond the lifetime of the iterator.
+ explicit Iterator(PersistentHistogramAllocator* allocator);
+
+@@ -198,7 +198,7 @@ class BASE_EXPORT PersistentHistogramAll
+ std::unique_ptr<HistogramBase> GetNext() { return GetNextWithIgnore(0); }
+
+ // Gets the next histogram from persistent memory, ignoring one particular
+- // reference in the process. Pass |ignore| of zero (0) to ignore nothing.
++ // reference in the process. Pass `ignore` of zero (0) to ignore nothing.
+ std::unique_ptr<HistogramBase> GetNextWithIgnore(Reference ignore);
+
+ private:
+@@ -239,7 +239,7 @@ class BASE_EXPORT PersistentHistogramAll
+
+ // Recreate a Histogram from data held in persistent memory. Though this
+ // object will be local to the current process, the sample data will be
+- // shared with all other threads referencing it. This method takes a |ref|
++ // shared with all other threads referencing it. This method takes a `ref`
+ // to where the top-level histogram data may be found in this allocator.
+ // This method will return null if any problem is detected with the data.
+ std::unique_ptr<HistogramBase> GetHistogram(Reference ref);
+@@ -256,7 +256,7 @@ class BASE_EXPORT PersistentHistogramAll
+ Reference* ref_ptr);
+
+ // Finalize the creation of the histogram, making it available to other
+- // processes if |registered| (as in: added to the StatisticsRecorder) is
++ // processes if `registered` (as in: added to the StatisticsRecorder) is
+ // True, forgetting it otherwise.
+ void FinalizeHistogram(Reference ref, bool registered);
+
+@@ -274,36 +274,36 @@ class BASE_EXPORT PersistentHistogramAll
+ const HistogramBase* histogram);
+
+ // Returns an object that manages persistent-sample-map records for a given
+- // |id|. The returned object queries |sparse_histogram_data_manager_| for
++ // `id`. The returned object queries `sparse_histogram_data_manager_` for
+ // records. Hence, the returned object must not outlive
+- // |sparse_histogram_data_manager_| (and hence |this|).
++ // `sparse_histogram_data_manager_` (and hence `this`).
+ std::unique_ptr<PersistentSampleMapRecords> CreateSampleMapRecords(
+ uint64_t id);
+
+ // Creates internal histograms for tracking memory use and allocation sizes
+- // for allocator of |name| (which can simply be the result of Name()). This
+- // is done seperately from construction for situations such as when the
++ // for allocator of `name` (which can simply be the result of Name()). This
++ // is done separately from construction for situations such as when the
+ // histograms will be backed by memory provided by this very allocator.
+ //
+ // IMPORTANT: tools/metrics/histograms/metadata/uma/histograms.xml must
+- // be updated with the following histograms for each |name| param:
++ // be updated with the following histograms for each `name` param:
+ // UMA.PersistentAllocator.name.Errors
+ // UMA.PersistentAllocator.name.UsedPct
+ void CreateTrackingHistograms(std::string_view name);
+ void UpdateTrackingHistograms();
+
+- // Sets the internal |ranges_manager_|, which will be used by the allocator to
+- // register BucketRanges. Takes ownership of the passed |ranges_manager|.
++ // Sets the internal `ranges_manager_`, which will be used by the allocator to
++ // register BucketRanges. Takes ownership of the passed `ranges_manager`.
+ //
+- // WARNING: Since histograms may be created from |this| from multiple threads,
++ // WARNING: Since histograms may be created from `this` from multiple threads,
+ // for example through a direct call to CreateHistogram(), or while iterating
+- // through |this|, then the passed manager may also be accessed concurrently.
++ // through `this`, then the passed manager may also be accessed concurrently.
+ // Hence, care must be taken to ensure that either:
+ // 1) The passed manager is threadsafe (see ThreadSafeRangesManager), or
+- // 2) |this| is not used concurrently.
++ // 2) `this` is not used concurrently.
+ void SetRangesManager(RangesManager* ranges_manager);
+
+- // Clears the internal |last_created_| reference so testing can validate
++ // Clears the internal `last_created_` reference so testing can validate
+ // operation without that optimization.
+ void ClearLastCreatedReferenceForTesting();
+
+@@ -329,7 +329,7 @@ class BASE_EXPORT PersistentHistogramAll
+ PersistentHistogramData* histogram_data_ptr);
+
+ // Gets or creates an object in the global StatisticsRecorder matching
+- // the |histogram| passed. Null is returned if one was not found and
++ // the `histogram` passed. Null is returned if one was not found and
+ // one could not be created.
+ HistogramBase* GetOrCreateStatisticsRecorderHistogram(
+ const HistogramBase* histogram);
+@@ -365,7 +365,7 @@ class BASE_EXPORT GlobalHistogramAllocat
+
+ ~GlobalHistogramAllocator() override;
+
+- // Create a global allocator using the passed-in memory |base|, |size|, and
++ // Create a global allocator using the passed-in memory `base`, `size`, and
+ // other parameters. Ownership of the memory segment remains with the caller.
+ static void CreateWithPersistentMemory(void* base,
+ size_t size,
+@@ -374,17 +374,17 @@ class BASE_EXPORT GlobalHistogramAllocat
+ std::string_view name);
+
+ // Create a global allocator using an internal block of memory of the
+- // specified |size| taken from the heap.
++ // specified `size` taken from the heap.
+ static void CreateWithLocalMemory(size_t size,
+ uint64_t id,
+ std::string_view name);
+
+ #if !BUILDFLAG(IS_NACL)
+- // Create a global allocator by memory-mapping a |file|. If the file does
+- // not exist, it will be created with the specified |size|. If the file does
++ // Create a global allocator by memory-mapping a `file`. If the file does
++ // not exist, it will be created with the specified `size`. If the file does
+ // exist, the allocator will use and add to its contents, ignoring the passed
+ // size in favor of the existing size. Returns whether the global allocator
+- // was set. If |exclusive_write| is true, the file will be opened in a mode
++ // was set. If `exclusive_write` is true, the file will be opened in a mode
+ // that disallows multiple concurrent writers (no effect on non-Windows).
+ static bool CreateWithFile(const FilePath& file_path,
+ size_t size,
+@@ -392,9 +392,9 @@ class BASE_EXPORT GlobalHistogramAllocat
+ std::string_view name,
+ bool exclusive_write = false);
+
+- // Creates a new file at |active_path|. If it already exists, it will first be
+- // moved to |base_path|. In all cases, any old file at |base_path| will be
+- // removed. If |spare_path| is non-empty and exists, that will be renamed and
++ // Creates a new file at `active_path`. If it already exists, it will first be
++ // moved to `base_path`. In all cases, any old file at `base_path` will be
++ // removed. If `spare_path` is non-empty and exists, that will be renamed and
+ // used as the active file. Otherwise, the file will be created using the
+ // given size, id, and name. Returns whether the global allocator was set.
+ static bool CreateWithActiveFile(const FilePath& base_path,
+@@ -405,9 +405,9 @@ class BASE_EXPORT GlobalHistogramAllocat
+ std::string_view name);
+
+ // Uses ConstructBaseActivePairFilePaths() to build a pair of file names which
+- // are then used for CreateWithActiveFile(). |name| is used for both the
++ // are then used for CreateWithActiveFile(). `name` is used for both the
+ // internal name for the allocator and also for the name of the file inside
+- // |dir|.
++ // `dir`.
+ static bool CreateWithActiveFileInDir(const FilePath& dir,
+ size_t size,
+ uint64_t id,
+@@ -442,7 +442,7 @@ class BASE_EXPORT GlobalHistogramAllocat
+ #endif
+
+ // Create a global allocator using a block of shared memory accessed
+- // through the given |region|. The allocator maps the shared memory into
++ // through the given `region`. The allocator maps the shared memory into
+ // current process's virtual address space and frees it upon destruction.
+ // The memory will continue to live if other processes have access to it.
+ static void CreateWithSharedMemoryRegion(
+@@ -481,7 +481,7 @@ class BASE_EXPORT GlobalHistogramAllocat
+ bool HasPersistentLocation() const;
+
+ // Moves the file being used to persist this allocator's data to the directory
+- // specified by |dir|. Returns whether the operation was successful.
++ // specified by `dir`. Returns whether the operation was successful.
+ bool MovePersistentFile(const FilePath& dir);
+
+ // Writes the internal data to a previously set location. This is generally
diff --git a/electron32/patches/patch-base_metrics_persistent__memory__allocator.cc b/electron32/patches/patch-base_metrics_persistent__memory__allocator.cc
new file mode 100644
index 0000000000..8bae568cc8
--- /dev/null
+++ b/electron32/patches/patch-base_metrics_persistent__memory__allocator.cc
@@ -0,0 +1,320 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- base/metrics/persistent_memory_allocator.cc.orig 2024-10-18 12:33:59.786263200 +0000
++++ base/metrics/persistent_memory_allocator.cc
+@@ -59,7 +59,7 @@ constexpr uint32_t kGlobalCookie = 0x408
+ // the metadata, the version number can be queried to operate in a backward-
+ // compatible manner until the memory segment is completely re-initalized.
+ // Note: If you update the metadata in a non-backwards compatible way, reset
+-// |kCompatibleVersions|. Otherwise, add the previous version.
++// `kCompatibleVersions`. Otherwise, add the previous version.
+ constexpr uint32_t kGlobalVersion = 3;
+ static constexpr uint32_t kOldCompatibleVersions[] = {2};
+
+@@ -146,12 +146,12 @@ struct PersistentMemoryAllocator::Shared
+
+ // The "iterable" queue is an M&S Queue as described here, append-only:
+ // https://www.research.ibm.com/people/m/michael/podc-1996.pdf
+- // |queue| needs to be 64-bit aligned and is itself a multiple of 64 bits.
++ // `queue` needs to be 64-bit aligned and is itself a multiple of 64 bits.
+ volatile std::atomic<uint32_t> tailptr; // Last block of iteration queue.
+ volatile BlockHeader queue; // Empty block for linked-list head/tail.
+ };
+
+-// The "queue" block header is used to detect "last node" so that zero/null
++// The `queue` block header is used to detect the "last node" so that zero/null
+ // can be used to indicate that it hasn't been added at all. It is part of
+ // the SharedMetadata structure which itself is always located at offset zero.
+ const PersistentMemoryAllocator::Reference
+@@ -208,7 +208,8 @@ PersistentMemoryAllocator::Iterator::Get
+ }
+
+ PersistentMemoryAllocator::Reference
+-PersistentMemoryAllocator::Iterator::GetNext(uint32_t* type_return) {
++PersistentMemoryAllocator::Iterator::GetNext(uint32_t* type_return,
++ size_t* alloc_size) {
+ // Make a copy of the existing count of found-records, acquiring all changes
+ // made to the allocator, notably "freeptr" (see comment in loop for why
+ // the load of that value cannot be moved above here) that occurred during
+@@ -219,12 +220,13 @@ PersistentMemoryAllocator::Iterator::Get
+ // "count" was fetched _after_ "freeptr" then it would be possible for
+ // this thread to be interrupted between them and other threads perform
+ // multiple allocations, make-iterables, and iterations (with the included
+- // increment of |record_count_|) culminating in the check at the bottom
++ // increment of `record_count_`) culminating in the check at the bottom
+ // mistakenly determining that a loop exists. Isn't this stuff fun?
+ uint32_t count = record_count_.load(std::memory_order_acquire);
+
+ Reference last = last_record_.load(std::memory_order_acquire);
+- Reference next;
++ Reference next = 0;
++ size_t next_size = 0;
+ while (true) {
+ const volatile BlockHeader* block =
+ allocator_->GetBlock(last, 0, 0, true, false);
+@@ -245,7 +247,7 @@ PersistentMemoryAllocator::Iterator::Get
+ next = block->next.load(std::memory_order_acquire);
+ if (next == kReferenceQueue) // No next allocation in queue.
+ return kReferenceNull;
+- block = allocator_->GetBlock(next, 0, 0, false, false);
++ block = allocator_->GetBlock(next, 0, 0, false, false, &next_size);
+ if (!block) { // Memory is corrupt.
+ allocator_->SetCorrupt();
+ return kReferenceNull;
+@@ -286,21 +288,29 @@ PersistentMemoryAllocator::Iterator::Get
+ // It does not matter if it falls behind temporarily so long as it never
+ // gets ahead.
+ record_count_.fetch_add(1, std::memory_order_release);
++ if (alloc_size) {
++ *alloc_size = next_size;
++ }
+ return next;
+ }
+
+ PersistentMemoryAllocator::Reference
+-PersistentMemoryAllocator::Iterator::GetNextOfType(uint32_t type_match) {
++PersistentMemoryAllocator::Iterator::GetNextOfType(uint32_t type_match,
++ size_t* alloc_size) {
+ Reference ref;
++ size_t size;
+ uint32_t type_found;
+- while ((ref = GetNext(&type_found)) != 0) {
+- if (type_found == type_match)
++ while ((ref = GetNext(&type_found, &size)) != 0) {
++ if (type_found == type_match) {
++ if (alloc_size) {
++ *alloc_size = size;
++ }
+ return ref;
++ }
+ }
+ return kReferenceNull;
+ }
+
+-
+ // static
+ bool PersistentMemoryAllocator::IsMemoryAcceptable(const void* base,
+ size_t size,
+@@ -475,12 +485,12 @@ uint64_t PersistentMemoryAllocator::Id()
+
+ const char* PersistentMemoryAllocator::Name() const {
+ Reference name_ref = shared_meta()->name;
+- const char* name_cstr =
+- GetAsArray<char>(name_ref, 0, PersistentMemoryAllocator::kSizeAny);
++ size_t name_length = 0;
++ const char* name_cstr = GetAsArray<char>(
++ name_ref, 0, PersistentMemoryAllocator::kSizeAny, &name_length);
+ if (!name_cstr)
+ return "";
+
+- size_t name_length = GetAllocSize(name_ref);
+ if (name_cstr[name_length - 1] != '\0') {
+ NOTREACHED_IN_MIGRATION();
+ SetCorrupt();
+@@ -555,23 +565,6 @@ PersistentMemoryAllocator::Reference Per
+ return ref;
+ }
+
+-size_t PersistentMemoryAllocator::GetAllocSize(Reference ref) const {
+- const volatile BlockHeader* const block = GetBlock(ref, 0, 0, false, false);
+- if (!block)
+- return 0;
+- uint32_t size = block->size;
+- // Header was verified by GetBlock() but a malicious actor could change
+- // the value between there and here. Check it again.
+- uint32_t total_size;
+- if (size <= sizeof(BlockHeader) ||
+- !base::CheckAdd(ref, size).AssignIfValid(&total_size) ||
+- total_size > mem_size_) {
+- SetCorrupt();
+- return 0;
+- }
+- return size - sizeof(BlockHeader);
+-}
+-
+ uint32_t PersistentMemoryAllocator::GetType(Reference ref) const {
+ const volatile BlockHeader* const block = GetBlock(ref, 0, 0, false, false);
+ if (!block)
+@@ -641,8 +634,9 @@ bool PersistentMemoryAllocator::ChangeTy
+
+ PersistentMemoryAllocator::Reference PersistentMemoryAllocator::Allocate(
+ size_t req_size,
+- uint32_t type_id) {
+- Reference ref = AllocateImpl(req_size, type_id);
++ uint32_t type_id,
++ size_t* alloc_size) {
++ Reference ref = AllocateImpl(req_size, type_id, alloc_size);
+ if (ref) {
+ // Success: Record this allocation in usage stats (if active).
+ if (allocs_histogram_)
+@@ -657,7 +651,8 @@ PersistentMemoryAllocator::Reference Per
+
+ PersistentMemoryAllocator::Reference PersistentMemoryAllocator::AllocateImpl(
+ size_t req_size,
+- uint32_t type_id) {
++ uint32_t type_id,
++ size_t* alloc_size) {
+ DCHECK_NE(access_mode_, kReadOnly);
+
+ // Validate req_size to ensure it won't overflow when used as 32-bit value.
+@@ -820,6 +815,11 @@ PersistentMemoryAllocator::Reference Per
+ block->size = static_cast<uint32_t>(size);
+ block->cookie = kBlockCookieAllocated;
+ block->type_id.store(type_id, std::memory_order_relaxed);
++
++ // Return the allocation size if requested.
++ if (alloc_size) {
++ *alloc_size = size - sizeof(BlockHeader);
++ }
+ return freeptr;
+ }
+ }
+@@ -932,17 +932,16 @@ bool PersistentMemoryAllocator::IsFull()
+ return CheckFlag(&shared_meta()->flags, kFlagFull);
+ }
+
+-// Dereference a block |ref| and ensure that it's valid for the desired
+-// |type_id| and |size|. |special| indicates that we may try to access block
+-// headers not available to callers but still accessed by this module. By
+-// having internal dereferences go through this same function, the allocator
+-// is hardened against corruption.
+ const volatile PersistentMemoryAllocator::BlockHeader*
+ PersistentMemoryAllocator::GetBlock(Reference ref,
+ uint32_t type_id,
+ size_t size,
+ bool queue_ok,
+- bool free_ok) const {
++ bool free_ok,
++ size_t* alloc_size) const {
++ // The caller cannot request `alloc_size` if `queue_ok` or `free_ok`.
++ CHECK(!(alloc_size && (queue_ok || free_ok)));
++
+ // Handle special cases.
+ if (ref == kReferenceQueue && queue_ok)
+ return reinterpret_cast<const volatile BlockHeader*>(mem_base_ + ref);
+@@ -961,29 +960,39 @@ PersistentMemoryAllocator::GetBlock(Refe
+ return nullptr;
+ }
+
++ const volatile BlockHeader* const block =
++ reinterpret_cast<volatile BlockHeader*>(mem_base_ + ref);
++
+ // Validation of referenced block-header.
+ if (!free_ok) {
+- const volatile BlockHeader* const block =
+- reinterpret_cast<volatile BlockHeader*>(mem_base_ + ref);
+ if (block->cookie != kBlockCookieAllocated)
+ return nullptr;
+- if (block->size < size)
++ const uint32_t block_size = block->size;
++ if (block_size < size) {
+ return nullptr;
+- uint32_t block_size;
+- if (!base::CheckAdd(ref, block->size).AssignIfValid(&block_size)) {
++ }
++ // Find a validate the end of the block.
++ uint32_t block_end_ref;
++ if (!base::CheckAdd(ref, block_size).AssignIfValid(&block_end_ref)) {
+ return nullptr;
+ }
+- if (block_size > mem_size_) {
++ if (block_end_ref > mem_size_) {
++ // The end of the alloc extends beyond the allocator's bounds.
++ SetCorrupt();
+ return nullptr;
+ }
+ if (type_id != 0 &&
+ block->type_id.load(std::memory_order_relaxed) != type_id) {
+ return nullptr;
+ }
++ // Return `alloc_size` if requested by the caller.
++ if (alloc_size) {
++ *alloc_size = block_size - sizeof(BlockHeader);
++ }
+ }
+
+ // Return pointer to block data.
+- return reinterpret_cast<const volatile BlockHeader*>(mem_base_ + ref);
++ return block;
+ }
+
+ void PersistentMemoryAllocator::FlushPartial(size_t length, bool sync) {
+@@ -1009,10 +1018,11 @@ uint32_t PersistentMemoryAllocator::vers
+ const volatile void* PersistentMemoryAllocator::GetBlockData(
+ Reference ref,
+ uint32_t type_id,
+- size_t size) const {
++ size_t size,
++ size_t* alloc_size) const {
+ DCHECK(size > 0);
+ const volatile BlockHeader* block =
+- GetBlock(ref, type_id, size, false, false);
++ GetBlock(ref, type_id, size, false, false, alloc_size);
+ if (!block)
+ return nullptr;
+ return reinterpret_cast<const volatile char*>(block) + sizeof(BlockHeader);
+@@ -1191,14 +1201,14 @@ void FilePersistentMemoryAllocator::Cach
+ base::BlockingType::MAY_BLOCK);
+
+ // Calculate begin/end addresses so that the first byte of every page
+- // in that range can be read. Keep within the used space. The |volatile|
++ // in that range can be read. Keep within the used space. The `volatile`
+ // keyword makes it so the compiler can't make assumptions about what is
+ // in a given memory location and thus possibly avoid the read.
+ const volatile char* mem_end = mem_base_ + used();
+ const volatile char* mem_begin = mem_base_;
+
+ // Iterate over the memory a page at a time, reading the first byte of
+- // every page. The values are added to a |total| so that the compiler
++ // every page. The values are added to a `total` so that the compiler
+ // can't omit the read.
+ int total = 0;
+ for (const volatile char* memory = mem_begin; memory < mem_end;
+@@ -1206,7 +1216,7 @@ void FilePersistentMemoryAllocator::Cach
+ total += *memory;
+ }
+
+- // Tell the compiler that |total| is used so that it can't optimize away
++ // Tell the compiler that `total` is used so that it can't optimize away
+ // the memory accesses above.
+ debug::Alias(&total);
+ }
+@@ -1276,7 +1286,8 @@ span<uint8_t> DelayedPersistentAllocatio
+ #endif // !BUILDFLAG(IS_NACL)
+
+ if (!ref) {
+- ref = allocator_->Allocate(size_, type_);
++ [[maybe_unused]] size_t alloc_size = 0;
++ ref = allocator_->Allocate(size_, type_, &alloc_size);
+ if (!ref) {
+ return span<uint8_t>();
+ }
+@@ -1292,7 +1303,7 @@ span<uint8_t> DelayedPersistentAllocatio
+ // allocation, and stored its reference. Purge the allocation that was
+ // just done and use the other one instead.
+ DCHECK_EQ(type_, allocator_->GetType(existing));
+- DCHECK_LE(size_, allocator_->GetAllocSize(existing));
++ DCHECK_LE(size_, alloc_size);
+ allocator_->ChangeType(ref, 0, type_, /*clear=*/false);
+ ref = existing;
+ #if !BUILDFLAG(IS_NACL)
+@@ -1328,13 +1339,13 @@ span<uint8_t> DelayedPersistentAllocatio
+ SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "size_", size_);
+ if (ref == 0xC8799269) {
+ // There are many crash reports containing the corrupted "0xC8799269"
+- // value in |ref|. This value is actually a "magic" number to indicate
++ // value in `ref`. This value is actually a "magic" number to indicate
+ // that a certain block in persistent memory was successfully allocated,
+ // so it should not appear there. Include some extra crash keys to see if
+ // the surrounding values were also corrupted. If so, the value before
+ // would be the size of the allocated object, and the value after would be
+ // the type id of the allocated object. If they are not corrupted, these
+- // would contain |ranges_checksum| and the start of |samples_metadata|
++ // would contain `ranges_checksum` and the start of `samples_metadata`
+ // respectively (see PersistentHistogramData struct). We do some pointer
+ // arithmetic here -- it should theoretically be safe, unless something
+ // went terribly wrong...
diff --git a/electron32/patches/patch-base_metrics_persistent__memory__allocator.h b/electron32/patches/patch-base_metrics_persistent__memory__allocator.h
new file mode 100644
index 0000000000..f9ea3f6855
--- /dev/null
+++ b/electron32/patches/patch-base_metrics_persistent__memory__allocator.h
@@ -0,0 +1,406 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- base/metrics/persistent_memory_allocator.h.orig 2024-10-18 12:33:59.786263200 +0000
++++ base/metrics/persistent_memory_allocator.h
+@@ -171,13 +171,13 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // eventually quit.
+ class BASE_EXPORT Iterator {
+ public:
+- // Constructs an iterator on a given |allocator|, starting at the beginning.
++ // Constructs an iterator on a given `allocator`, starting at the beginning.
+ // The allocator must live beyond the lifetime of the iterator. This class
+ // has read-only access to the allocator (hence "const") but the returned
+ // references can be used on a read/write version, too.
+ explicit Iterator(const PersistentMemoryAllocator* allocator);
+
+- // As above but resuming from the |starting_after| reference. The first call
++ // As above but resuming from the `starting_after` reference. The first call
+ // to GetNext() will return the next object found after that reference. The
+ // reference must be to an "iterable" object; references to non-iterable
+ // objects (those that never had MakeIterable() called for them) will cause
+@@ -193,7 +193,7 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // Resets the iterator back to the beginning.
+ void Reset();
+
+- // Resets the iterator, resuming from the |starting_after| reference.
++ // Resets the iterator, resuming from the `starting_after` reference.
+ void Reset(Reference starting_after);
+
+ // Returns the previously retrieved reference, or kReferenceNull if none.
+@@ -201,17 +201,17 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // that value.
+ Reference GetLast();
+
+- // Gets the next iterable, storing that type in |type_return|. The actual
++ // Gets the next iterable, storing that type in `type_return`. The actual
+ // return value is a reference to the allocation inside the allocator or
+ // zero if there are no more. GetNext() may still be called again at a
+ // later time to retrieve any new allocations that have been added.
+- Reference GetNext(uint32_t* type_return);
++ Reference GetNext(uint32_t* type_return, size_t* alloc_size = nullptr);
+
+- // Similar to above but gets the next iterable of a specific |type_match|.
++ // Similar to above but gets the next iterable of a specific `type_match`.
+ // This should not be mixed with calls to GetNext() because any allocations
+ // skipped here due to a type mis-match will never be returned by later
+ // calls to GetNext() meaning it's possible to completely miss entries.
+- Reference GetNextOfType(uint32_t type_match);
++ Reference GetNextOfType(uint32_t type_match, size_t* alloc_size = nullptr);
+
+ // As above but works using object type.
+ template <typename T>
+@@ -244,8 +244,8 @@ class BASE_EXPORT PersistentMemoryAlloca
+ }
+
+ // Convert a generic pointer back into a reference. A null reference will
+- // be returned if |memory| is not inside the persistent segment or does not
+- // point to an object of the specified |type_id|.
++ // be returned if `memory` is not inside the persistent segment or does not
++ // point to an object of the specified `type_id`.
+ Reference GetAsReference(const void* memory, uint32_t type_id) const {
+ return allocator_->GetAsReference(memory, type_id);
+ }
+@@ -308,12 +308,12 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // The allocator operates on any arbitrary block of memory. Creation and
+ // persisting or sharing of that block with another process is the
+ // responsibility of the caller. The allocator needs to know only the
+- // block's |base| address, the total |size| of the block, and any internal
+- // |page| size (zero if not paged) across which allocations should not span.
+- // The |id| is an arbitrary value the caller can use to identify a
++ // block's `base` address, the total `size` of the block, and any internal
++ // `page` size (zero if not paged) across which allocations should not span.
++ // The `id` is an arbitrary value the caller can use to identify a
+ // particular memory segment. It will only be loaded during the initial
+ // creation of the segment and can be checked by the caller for consistency.
+- // The |name|, if provided, is used to distinguish histograms for this
++ // The `name`, if provided, is used to distinguish histograms for this
+ // allocator. Only the primary owner of the segment should define this value;
+ // other processes can learn it from the shared state. If the access mode
+ // is kReadOnly then no changes will be made to it. The resulting object
+@@ -367,12 +367,12 @@ class BASE_EXPORT PersistentMemoryAlloca
+ uint8_t GetMemoryState() const;
+
+ // Create internal histograms for tracking memory use and allocation sizes
+- // for allocator of |name| (which can simply be the result of Name()). This
+- // is done seperately from construction for situations such as when the
++ // for allocator of `name` (which can simply be the result of Name()). This
++ // is done separately from construction for situations such as when the
+ // histograms will be backed by memory provided by this very allocator.
+ //
+ // IMPORTANT: tools/metrics/histograms/metadata/uma/histograms.xml must
+- // be updated with the following histograms for each |name| param:
++ // be updated with the following histograms for each `name` param:
+ // UMA.PersistentAllocator.name.Errors
+ // UMA.PersistentAllocator.name.UsedPct
+ void CreateTrackingHistograms(std::string_view name);
+@@ -382,13 +382,13 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // OS that all the data should be sent to the disk immediately. This is
+ // useful in the rare case where something has just been stored that needs
+ // to survive a hard shutdown of the machine like from a power failure.
+- // The |sync| parameter indicates if this call should block until the flush
++ // The `sync` parameter indicates if this call should block until the flush
+ // is complete but is only advisory and may or may not have an effect
+ // depending on the capabilities of the OS. Synchronous flushes are allowed
+- // only from threads that are allowed to do I/O but since |sync| is only
++ // only from threads that are allowed to do I/O but since `sync` is only
+ // advisory, all flushes should be done on IO-capable threads.
+- // TODO: Since |sync| is ignored on Windows, consider making it re-post on a
+- // background thread with |sync| set to true so that |sync| is not just
++ // TODO: Since `sync` is ignored on Windows, consider making it re-post on a
++ // background thread with `sync` set to true so that `sync` is not just
+ // advisory.
+ void Flush(bool sync);
+
+@@ -400,9 +400,9 @@ class BASE_EXPORT PersistentMemoryAlloca
+ size_t size() const { return mem_size_; }
+ size_t used() const;
+
+- // Get an object referenced by a |ref|. For safety reasons, the |type_id|
+- // code and size-of(|T|) are compared to ensure the reference is valid
+- // and cannot return an object outside of the memory segment. A |type_id| of
++ // Get an object referenced by a `ref`. For safety reasons, the `type_id`
++ // code and size-of(`T`) are compared to ensure the reference is valid
++ // and cannot return an object outside of the memory segment. A `type_id` of
+ // kTypeIdAny (zero) will match any though the size is still checked. NULL is
+ // returned if any problem is detected, such as corrupted storage or incorrect
+ // parameters. Callers MUST check that the returned value is not-null EVERY
+@@ -422,7 +422,7 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // largest architecture, including at the end.
+ //
+ // To protected against mistakes, all objects must have the attribute
+- // |kExpectedInstanceSize| (static constexpr size_t) that is a hard-coded
++ // `kExpectedInstanceSize` (static constexpr size_t) that is a hard-coded
+ // numerical value -- NNN, not sizeof(T) -- that can be tested. If the
+ // instance size is not fixed, at least one build will fail.
+ //
+@@ -442,27 +442,28 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // nature of that keyword to the caller. It can add it back, if necessary,
+ // based on knowledge of how the allocator is being used.
+ template <typename T>
+- T* GetAsObject(Reference ref) {
++ T* GetAsObject(Reference ref, size_t* alloc_size = nullptr) {
+ static_assert(std::is_standard_layout_v<T>, "only standard objects");
+ static_assert(!std::is_array_v<T>, "use GetAsArray<>()");
+ static_assert(T::kExpectedInstanceSize == sizeof(T), "inconsistent size");
+ return const_cast<T*>(reinterpret_cast<volatile T*>(
+- GetBlockData(ref, T::kPersistentTypeId, sizeof(T))));
++ GetBlockData(ref, T::kPersistentTypeId, sizeof(T), alloc_size)));
+ }
+ template <typename T>
+- const T* GetAsObject(Reference ref) const {
++ const T* GetAsObject(Reference ref, size_t* alloc_size = nullptr) const {
+ static_assert(std::is_standard_layout_v<T>, "only standard objects");
+ static_assert(!std::is_array_v<T>, "use GetAsArray<>()");
+ static_assert(T::kExpectedInstanceSize == sizeof(T), "inconsistent size");
+ return const_cast<const T*>(reinterpret_cast<const volatile T*>(
+- GetBlockData(ref, T::kPersistentTypeId, sizeof(T))));
++ GetBlockData(ref, T::kPersistentTypeId, sizeof(T), alloc_size)));
+ }
+
+- // Like GetAsObject but get an array of simple, fixed-size types.
++ // Like GetAsObject() but get an array of simple, fixed-size types.
+ //
+- // Use a |count| of the required number of array elements, or kSizeAny.
+- // GetAllocSize() can be used to calculate the upper bound but isn't reliable
+- // because padding can make space for extra elements that were not written.
++ // Use a `count` of the required number of array elements, or kSizeAny.
++ // The, optionally returned, `alloc_size` can be used to calculate the upper
++ // bound but isn't reliable because padding can make space for extra elements
++ // that were not written.
+ //
+ // Remember that an array of char is a string but may not be NUL terminated.
+ //
+@@ -470,29 +471,29 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // compatibilty when using these accessors. Only use fixed-size types such
+ // as char, float, double, or (u)intXX_t.
+ template <typename T>
+- T* GetAsArray(Reference ref, uint32_t type_id, size_t count) {
++ T* GetAsArray(Reference ref,
++ uint32_t type_id,
++ size_t count,
++ size_t* alloc_size = nullptr) {
+ static_assert(std::is_fundamental_v<T>, "use GetAsObject<>()");
+ return const_cast<T*>(reinterpret_cast<volatile T*>(
+- GetBlockData(ref, type_id, count * sizeof(T))));
++ GetBlockData(ref, type_id, count * sizeof(T), alloc_size)));
+ }
+ template <typename T>
+- const T* GetAsArray(Reference ref, uint32_t type_id, size_t count) const {
++ const T* GetAsArray(Reference ref,
++ uint32_t type_id,
++ size_t count,
++ size_t* alloc_size = nullptr) const {
+ static_assert(std::is_fundamental_v<T>, "use GetAsObject<>()");
+ return const_cast<const char*>(reinterpret_cast<const volatile T*>(
+- GetBlockData(ref, type_id, count * sizeof(T))));
++ GetBlockData(ref, type_id, count * sizeof(T), alloc_size)));
+ }
+
+ // Get the corresponding reference for an object held in persistent memory.
+- // If the |memory| is not valid or the type does not match, a kReferenceNull
++ // If the `memory` is not valid or the type does not match, a kReferenceNull
+ // result will be returned.
+ Reference GetAsReference(const void* memory, uint32_t type_id) const;
+
+- // Get the number of bytes allocated to a block. This is useful when storing
+- // arrays in order to validate the ending boundary. The returned value will
+- // include any padding added to achieve the required alignment and so could
+- // be larger than given in the original Allocate() request.
+- size_t GetAllocSize(Reference ref) const;
+-
+ // Access the internal "type" of an object. This generally isn't necessary
+ // but can be used to "clear" the type and so effectively mark it as deleted
+ // even though the memory stays valid and allocated. Changing the type is
+@@ -500,8 +501,8 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // It will return false if the existing type is not what is expected.
+ //
+ // Changing the type doesn't mean the data is compatible with the new type.
+- // Passing true for |clear| will zero the memory after the type has been
+- // changed away from |from_type_id| but before it becomes |to_type_id| meaning
++ // Passing true for `clear` will zero the memory after the type has been
++ // changed away from `from_type_id` but before it becomes `to_type_id` meaning
+ // that it is done in a manner that is thread-safe. Memory is guaranteed to
+ // be zeroed atomically by machine-word in a monotonically increasing order.
+ //
+@@ -553,13 +554,15 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // While the above works much like malloc & free, these next methods provide
+ // an "object" interface similar to new and delete.
+
+- // Reserve space in the memory segment of the desired |size| and |type_id|.
++ // Reserve space in the memory segment of the desired `size` and `type_id`.
+ //
+ // A return value of zero indicates the allocation failed, otherwise the
+ // returned reference can be used by any process to get a real pointer via
+- // the GetAsObject() or GetAsArray calls. The actual allocated size may be
++ // the GetAsObject() or GetAsArray() calls. The actual allocated size may be
+ // larger and will always be a multiple of 8 bytes (64 bits).
+- Reference Allocate(size_t size, uint32_t type_id);
++ Reference Allocate(size_t size,
++ uint32_t type_id,
++ size_t* alloc_size = nullptr);
+
+ // Allocate and construct an object in persistent memory. The type must have
+ // both (size_t) kExpectedInstanceSize and (uint32_t) kPersistentTypeId
+@@ -586,7 +589,7 @@ class BASE_EXPORT PersistentMemoryAlloca
+ }
+
+ // Similar to New, above, but construct the object out of an existing memory
+- // block and of an expected type. If |clear| is true, memory will be zeroed
++ // block and of an expected type. If `clear` is true, memory will be zeroed
+ // before construction. Though this is not standard object behavior, it
+ // is present to match with new allocations that always come from zeroed
+ // memory. Anything previously present simply ceases to exist; no destructor
+@@ -596,13 +599,16 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // results. USE WITH CARE!
+ template <typename T>
+ T* New(Reference ref, uint32_t from_type_id, bool clear) {
+- DCHECK_LE(sizeof(T), GetAllocSize(ref)) << "alloc not big enough for obj";
+ // Make sure the memory is appropriate. This won't be used until after
+ // the type is changed but checking first avoids the possibility of having
+ // to change the type back.
+- void* mem = const_cast<void*>(GetBlockData(ref, 0, sizeof(T)));
++ size_t alloc_size = 0;
++ void* mem = const_cast<void*>(GetBlockData(ref, 0, sizeof(T), &alloc_size));
+ if (!mem)
+ return nullptr;
++
++ DCHECK_LE(sizeof(T), alloc_size) << "alloc not big enough for obj";
++
+ // Ensure the allocator's internal alignment is sufficient for this object.
+ // This protects against coding errors in the allocator.
+ DCHECK_EQ(0U, reinterpret_cast<uintptr_t>(mem) & (alignof(T) - 1));
+@@ -633,7 +639,7 @@ class BASE_EXPORT PersistentMemoryAlloca
+ // First change the type to "transitioning" so there is no race condition
+ // where another thread could find the object through iteration while it
+ // is been destructed. This will "acquire" the memory so no changes get
+- // reordered before it. It will fail if |ref| is invalid.
++ // reordered before it. It will fail if `ref` is invalid.
+ if (!ChangeType(ref, kTypeIdTransitioning, T::kPersistentTypeId, false))
+ return;
+ // Destruct the object.
+@@ -677,7 +683,7 @@ class BASE_EXPORT PersistentMemoryAlloca
+ };
+
+ // Constructs the allocator. Everything is the same as the public allocator
+- // except |memory| which is a structure with additional information besides
++ // except `memory` which is a structure with additional information besides
+ // the base address.
+ PersistentMemoryAllocator(Memory memory,
+ size_t size,
+@@ -715,32 +721,52 @@ class BASE_EXPORT PersistentMemoryAlloca
+ }
+
+ // Actual method for doing the allocation.
+- Reference AllocateImpl(size_t size, uint32_t type_id);
++ Reference AllocateImpl(size_t size, uint32_t type_id, size_t* alloc_size);
+
+- // Gets the block header associated with a specific reference.
++ // Dereferences a block `ref` to retrieve a pointer to the block header for
++ // the reference. This method ensures that the referenced block is valid for
++ // the desired `type_id` and `size`. Optionally, if `alloc_sizes` is not
++ // nullptr, the validated size of the underlying allocation is returned.
++ //
++ // Special cases for internal use only:
++ //
++ // * If `queue_ok` is true and `ref` is kReferenceQueueindicates then the
++ // block header for the allocation queue is returned.
++ //
++ // * if `free_ok` then the block header is allowed to point to a block that
++ // may not be in the `allocated` state. This bypasses block validation.
++ //
++ // Because they bypass block valoidation, it is not premitted to request the
++ // `alloc_size` when either of `queue_ok` or `free_ok` are true.
+ const volatile BlockHeader* GetBlock(Reference ref,
+ uint32_t type_id,
+ size_t size,
+ bool queue_ok,
+- bool free_ok) const;
++ bool free_ok,
++ size_t* alloc_size = nullptr) const;
+ volatile BlockHeader* GetBlock(Reference ref,
+ uint32_t type_id,
+ size_t size,
+ bool queue_ok,
+- bool free_ok) {
++ bool free_ok,
++ size_t* alloc_size = nullptr) {
+ return const_cast<volatile BlockHeader*>(
+ const_cast<const PersistentMemoryAllocator*>(this)->GetBlock(
+- ref, type_id, size, queue_ok, free_ok));
++ ref, type_id, size, queue_ok, free_ok, alloc_size));
+ }
+
+ // Gets the actual data within a block associated with a specific reference.
+ const volatile void* GetBlockData(Reference ref,
+ uint32_t type_id,
+- size_t size) const;
+- volatile void* GetBlockData(Reference ref, uint32_t type_id, size_t size) {
++ size_t size,
++ size_t* alloc_size = nullptr) const;
++ volatile void* GetBlockData(Reference ref,
++ uint32_t type_id,
++ size_t size,
++ size_t* alloc_size = nullptr) {
+ return const_cast<volatile void*>(
+ const_cast<const PersistentMemoryAllocator*>(this)->GetBlockData(
+- ref, type_id, size));
++ ref, type_id, size, alloc_size));
+ }
+
+ // Records an error in the internal histogram.
+@@ -792,12 +818,12 @@ class BASE_EXPORT LocalPersistentMemoryA
+ ~LocalPersistentMemoryAllocator() override;
+
+ private:
+- // Allocates a block of local memory of the specified |size|, ensuring that
++ // Allocates a block of local memory of the specified `size`, ensuring that
+ // the memory will not be physically allocated until accessed and will read
+ // as zero when that happens.
+ static Memory AllocateLocalMemory(size_t size, std::string_view name);
+
+- // Deallocates a block of local |memory| of the specified |size|.
++ // Deallocates a block of local `memory` of the specified `size`.
+ static void DeallocateLocalMemory(void* memory, size_t size, MemoryType type);
+ };
+
+@@ -865,8 +891,8 @@ class BASE_EXPORT ReadOnlySharedPersiste
+ class BASE_EXPORT FilePersistentMemoryAllocator
+ : public PersistentMemoryAllocator {
+ public:
+- // A |max_size| of zero will use the length of the file as the maximum
+- // size. The |file| object must have been already created with sufficient
++ // A `max_size` of zero will use the length of the file as the maximum
++ // size. The `file` object must have been already created with sufficient
+ // permissions (read, read/write, or read/write/extend).
+ FilePersistentMemoryAllocator(std::unique_ptr<MemoryMappedFile> file,
+ size_t max_size,
+@@ -916,18 +942,18 @@ class BASE_EXPORT DelayedPersistentAlloc
+ public:
+ using Reference = PersistentMemoryAllocator::Reference;
+
+- // Creates a delayed allocation using the specified |allocator|. When
+- // needed, the memory will be allocated using the specified |type| and
+- // |size|. If |offset| is given, the returned pointer will be at that
++ // Creates a delayed allocation using the specified `allocator`. When
++ // needed, the memory will be allocated using the specified `type` and
++ // `size`. If `offset` is given, the returned pointer will be at that
+ // offset into the segment; this allows combining allocations into a
+ // single persistent segment to reduce overhead and means an "all or
+- // nothing" request. Note that |size| is always the total memory size
+- // and |offset| is just indicating the start of a block within it.
++ // nothing" request. Note that `size` is always the total memory size
++ // and `offset` is just indicating the start of a block within it.
+ //
+- // Once allocated, a reference to the segment will be stored at |ref|.
++ // Once allocated, a reference to the segment will be stored at `ref`.
+ // This shared location must be initialized to zero (0); it is checked
+ // with every Get() request to see if the allocation has already been
+- // done. If reading |ref| outside of this object, be sure to do an
++ // done. If reading `ref` outside of this object, be sure to do an
+ // "acquire" load. Don't write to it -- leave that to this object.
+ DelayedPersistentAllocation(PersistentMemoryAllocator* allocator,
+ std::atomic<Reference>* ref,
diff --git a/electron32/patches/patch-base_metrics_persistent__memory__allocator__unittest.cc b/electron32/patches/patch-base_metrics_persistent__memory__allocator__unittest.cc
new file mode 100644
index 0000000000..ba11e8b541
--- /dev/null
+++ b/electron32/patches/patch-base_metrics_persistent__memory__allocator__unittest.cc
@@ -0,0 +1,55 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- base/metrics/persistent_memory_allocator_unittest.cc.orig 2024-10-18 12:33:59.786263200 +0000
++++ base/metrics/persistent_memory_allocator_unittest.cc
+@@ -140,11 +140,12 @@ TEST_F(PersistentMemoryAllocatorTest, Al
+ ASSERT_TRUE(obj1);
+ Reference block1 = allocator_->GetAsReference(obj1);
+ ASSERT_NE(0U, block1);
+- EXPECT_NE(nullptr, allocator_->GetAsObject<TestObject1>(block1));
+ EXPECT_EQ(nullptr, allocator_->GetAsObject<TestObject2>(block1));
+- EXPECT_LE(sizeof(TestObject1), allocator_->GetAllocSize(block1));
+- EXPECT_GT(sizeof(TestObject1) + kAllocAlignment,
+- allocator_->GetAllocSize(block1));
++ size_t alloc_size_1 = 0;
++ EXPECT_NE(nullptr,
++ allocator_->GetAsObject<TestObject1>(block1, &alloc_size_1));
++ EXPECT_LE(sizeof(TestObject1), alloc_size_1);
++ EXPECT_GT(sizeof(TestObject1) + kAllocAlignment, alloc_size_1);
+ PersistentMemoryAllocator::MemoryInfo meminfo1;
+ allocator_->GetMemoryInfo(&meminfo1);
+ EXPECT_EQ(meminfo0.total, meminfo1.total);
+@@ -180,11 +181,12 @@ TEST_F(PersistentMemoryAllocatorTest, Al
+ ASSERT_TRUE(obj2);
+ Reference block2 = allocator_->GetAsReference(obj2);
+ ASSERT_NE(0U, block2);
+- EXPECT_NE(nullptr, allocator_->GetAsObject<TestObject2>(block2));
+ EXPECT_EQ(nullptr, allocator_->GetAsObject<TestObject1>(block2));
+- EXPECT_LE(sizeof(TestObject2), allocator_->GetAllocSize(block2));
+- EXPECT_GT(sizeof(TestObject2) + kAllocAlignment,
+- allocator_->GetAllocSize(block2));
++ size_t alloc_size_2 = 0;
++ EXPECT_NE(nullptr,
++ allocator_->GetAsObject<TestObject2>(block2, &alloc_size_2));
++ EXPECT_LE(sizeof(TestObject2), alloc_size_2);
++ EXPECT_GT(sizeof(TestObject2) + kAllocAlignment, alloc_size_2);
+ PersistentMemoryAllocator::MemoryInfo meminfo2;
+ allocator_->GetMemoryInfo(&meminfo2);
+ EXPECT_EQ(meminfo1.total, meminfo2.total);
+@@ -965,10 +967,10 @@ TEST(FilePersistentMemoryAllocatorTest,
+ uint32_t type_id;
+ Reference ref;
+ while ((ref = iter.GetNext(&type_id)) != 0) {
++ size_t size = 0;
+ const char* data = allocator.GetAsArray<char>(
+- ref, 0, PersistentMemoryAllocator::kSizeAny);
++ ref, 0, PersistentMemoryAllocator::kSizeAny, &size);
+ uint32_t type = allocator.GetType(ref);
+- size_t size = allocator.GetAllocSize(ref);
+ // Ensure compiler can't optimize-out above variables.
+ (void)data;
+ (void)type;
diff --git a/electron32/patches/patch-base_process_process__handle__netbsd.cc b/electron32/patches/patch-base_process_process__handle__netbsd.cc
index 6a73a2db04..6a25ad7012 100644
--- a/electron32/patches/patch-base_process_process__handle__netbsd.cc
+++ b/electron32/patches/patch-base_process_process__handle__netbsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- base/process/process_handle_netbsd.cc.orig 2025-01-19 14:12:03.860984806 +0000
+--- base/process/process_handle_netbsd.cc.orig 2025-02-15 09:43:46.221797547 +0000
+++ base/process/process_handle_netbsd.cc
@@ -0,0 +1,55 @@
+// Copyright 2011 The Chromium Authors
diff --git a/electron32/patches/patch-base_process_process__iterator__netbsd.cc b/electron32/patches/patch-base_process_process__iterator__netbsd.cc
index 4b5a056fae..38b926a1ce 100644
--- a/electron32/patches/patch-base_process_process__iterator__netbsd.cc
+++ b/electron32/patches/patch-base_process_process__iterator__netbsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- base/process/process_iterator_netbsd.cc.orig 2025-01-19 14:12:03.861465218 +0000
+--- base/process/process_iterator_netbsd.cc.orig 2025-02-15 09:43:46.222409533 +0000
+++ base/process/process_iterator_netbsd.cc
@@ -0,0 +1,132 @@
+// Copyright 2013 The Chromium Authors
diff --git a/electron32/patches/patch-base_process_process__metrics__netbsd.cc b/electron32/patches/patch-base_process_process__metrics__netbsd.cc
index 0ea875e043..e76839d5eb 100644
--- a/electron32/patches/patch-base_process_process__metrics__netbsd.cc
+++ b/electron32/patches/patch-base_process_process__metrics__netbsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- base/process/process_metrics_netbsd.cc.orig 2025-01-19 14:12:03.862032599 +0000
+--- base/process/process_metrics_netbsd.cc.orig 2025-02-15 09:43:46.223087337 +0000
+++ base/process/process_metrics_netbsd.cc
@@ -0,0 +1,175 @@
+// Copyright 2013 The Chromium Authors
diff --git a/electron32/patches/patch-base_system_sys__info__netbsd.cc b/electron32/patches/patch-base_system_sys__info__netbsd.cc
index 07c664900f..864e072dfc 100644
--- a/electron32/patches/patch-base_system_sys__info__netbsd.cc
+++ b/electron32/patches/patch-base_system_sys__info__netbsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- base/system/sys_info_netbsd.cc.orig 2025-01-19 14:12:03.871109707 +0000
+--- base/system/sys_info_netbsd.cc.orig 2025-02-15 09:43:46.226031203 +0000
+++ base/system/sys_info_netbsd.cc
@@ -0,0 +1,91 @@
+// Copyright 2011 The Chromium Authors
diff --git a/electron32/patches/patch-base_threading_platform__thread__bsd.cc b/electron32/patches/patch-base_threading_platform__thread__bsd.cc
index d35bbffb0b..6cfb3c33a5 100644
--- a/electron32/patches/patch-base_threading_platform__thread__bsd.cc
+++ b/electron32/patches/patch-base_threading_platform__thread__bsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- base/threading/platform_thread_bsd.cc.orig 2025-01-19 14:12:03.877262910 +0000
+--- base/threading/platform_thread_bsd.cc.orig 2025-02-15 09:43:46.227530359 +0000
+++ base/threading/platform_thread_bsd.cc
@@ -0,0 +1,31 @@
+// Copyright 2023 The Chromium Authors
diff --git a/electron32/patches/patch-build_linux_unbundle_icu.gn b/electron32/patches/patch-build_linux_unbundle_icu.gn
index 6e4ad7f9db..7a6ffa115e 100644
--- a/electron32/patches/patch-build_linux_unbundle_icu.gn
+++ b/electron32/patches/patch-build_linux_unbundle_icu.gn
@@ -22,3 +22,22 @@ $NetBSD$
# U_EXPORT (defined in unicode/platform.h) is used to set public visibility
# on classes through the U_COMMON_API and U_I18N_API macros (among others).
# When linking against the system ICU library, we want its symbols to have
+@@ -35,6 +44,18 @@ config("icu_config") {
+ # please see: https://crbug.com/822820
+ "U_IMPORT=U_EXPORT",
+ ]
++
++ _icu_version = exec_script(pkg_config_script,
++ common_pkg_config_args + pkg_config_args + [
++ "icu-i18n",
++ "--version-as-components",
++ ],
++ "value")
++
++ # Unbreak with icu 76 where private symbols are picked up
++ if (_icu_version[0] >= 76) {
++ defines += [ "U_HIDE_DRAFT_API" ]
++ }
+ }
+
+ pkg_config("system_icui18n") {
diff --git a/electron32/patches/patch-build_toolchain_freebsd_BUILD.gn b/electron32/patches/patch-build_toolchain_freebsd_BUILD.gn
index 8b72d969ad..de6c1e7629 100644
--- a/electron32/patches/patch-build_toolchain_freebsd_BUILD.gn
+++ b/electron32/patches/patch-build_toolchain_freebsd_BUILD.gn
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- build/toolchain/freebsd/BUILD.gn.orig 2025-01-19 14:12:03.886423960 +0000
+--- build/toolchain/freebsd/BUILD.gn.orig 2025-02-15 09:43:46.232003921 +0000
+++ build/toolchain/freebsd/BUILD.gn
@@ -0,0 +1,66 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-build_toolchain_netbsd_BUILD.gn b/electron32/patches/patch-build_toolchain_netbsd_BUILD.gn
index 82bc44124e..e6d230c2bf 100644
--- a/electron32/patches/patch-build_toolchain_netbsd_BUILD.gn
+++ b/electron32/patches/patch-build_toolchain_netbsd_BUILD.gn
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- build/toolchain/netbsd/BUILD.gn.orig 2025-01-19 14:12:03.888945404 +0000
+--- build/toolchain/netbsd/BUILD.gn.orig 2025-02-15 09:43:46.232474102 +0000
+++ build/toolchain/netbsd/BUILD.gn
@@ -0,0 +1,66 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-build_toolchain_openbsd_BUILD.gn b/electron32/patches/patch-build_toolchain_openbsd_BUILD.gn
index 7b96e44977..65678595f5 100644
--- a/electron32/patches/patch-build_toolchain_openbsd_BUILD.gn
+++ b/electron32/patches/patch-build_toolchain_openbsd_BUILD.gn
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- build/toolchain/openbsd/BUILD.gn.orig 2025-01-19 14:12:03.892714639 +0000
+--- build/toolchain/openbsd/BUILD.gn.orig 2025-02-15 09:43:46.232646717 +0000
+++ build/toolchain/openbsd/BUILD.gn
@@ -0,0 +1,66 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-cc_tiles_gpu__image__decode__cache.cc b/electron32/patches/patch-cc_tiles_gpu__image__decode__cache.cc
new file mode 100644
index 0000000000..29410a7b6e
--- /dev/null
+++ b/electron32/patches/patch-cc_tiles_gpu__image__decode__cache.cc
@@ -0,0 +1,38 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- cc/tiles/gpu_image_decode_cache.cc.orig 2024-10-18 12:33:59.978154700 +0000
++++ cc/tiles/gpu_image_decode_cache.cc
+@@ -2398,6 +2398,9 @@ void GpuImageDecodeCache::DecodeImageIfN
+
+ image_data->decode.ResetData();
+
++ // Prevent image_data from being deleted while lock is not held.
++ scoped_refptr<ImageData> image_data_holder(image_data);
++
+ // Decode the image into `aux_image_data` while the lock is not held.
+ DecodedAuxImageData aux_image_data[kAuxImageCount];
+ {
+@@ -2725,6 +2728,9 @@ void GpuImageDecodeCache::UploadImageIfN
+ sk_sp<SkImage> uploaded_v_image =
+ image_data->decode.image(2, AuxImage::kDefault);
+
++ // Prevent image_data from being deleted while lock is not held.
++ scoped_refptr<ImageData> image_data_holder(image_data);
++
+ // For kGpu, we upload and color convert (if necessary).
+ if (image_data->mode == DecodedDataMode::kGpu) {
+ DCHECK(!use_transfer_cache_);
+@@ -2812,6 +2818,9 @@ void GpuImageDecodeCache::UploadImageIfN
+ DCHECK(!use_transfer_cache_);
+ DCHECK(!image_data->info.yuva.has_value());
+
++ // Prevent image_data from being deleted while lock is not held.
++ scoped_refptr<ImageData> image_data_holder(image_data);
++
+ // RGBX decoding is below.
+ // For kGpu, we upload and color convert (if necessary).
+ if (image_data->mode == DecodedDataMode::kGpu) {
diff --git a/electron32/patches/patch-components_metrics_persistent__system__profile.cc b/electron32/patches/patch-components_metrics_persistent__system__profile.cc
new file mode 100644
index 0000000000..9c98e903f6
--- /dev/null
+++ b/electron32/patches/patch-components_metrics_persistent__system__profile.cc
@@ -0,0 +1,54 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- components/metrics/persistent_system_profile.cc.orig 2024-10-18 12:34:06.882349300 +0000
++++ components/metrics/persistent_system_profile.cc
+@@ -104,7 +104,7 @@ bool PersistentSystemProfile::RecordAllo
+ if (!AddSegment(remaining_size))
+ return false;
+ }
+- // Write out as much of the data as possible. |data| and |remaining_size|
++ // Write out as much of the data as possible. `data` and `remaining_size`
+ // are updated in place.
+ if (!WriteData(type, &data, &remaining_size))
+ return false;
+@@ -147,8 +147,7 @@ bool PersistentSystemProfile::RecordAllo
+
+ bool PersistentSystemProfile::RecordAllocator::NextSegment() const {
+ base::PersistentMemoryAllocator::Iterator iter(allocator_, alloc_reference_);
+- alloc_reference_ = iter.GetNextOfType(kTypeIdSystemProfile);
+- alloc_size_ = allocator_->GetAllocSize(alloc_reference_);
++ alloc_reference_ = iter.GetNextOfType(kTypeIdSystemProfile, &alloc_size_);
+ end_offset_ = 0;
+ return alloc_reference_ != 0;
+ }
+@@ -169,13 +168,15 @@ bool PersistentSystemProfile::RecordAllo
+ size_t size =
+ std::max(CalculateRecordSize(min_size), kSystemProfileAllocSize);
+
+- uint32_t ref = allocator_->Allocate(size, kTypeIdSystemProfile);
++ size_t new_alloc_size = 0;
++ uint32_t ref =
++ allocator_->Allocate(size, kTypeIdSystemProfile, &new_alloc_size);
+ if (!ref)
+ return false; // Allocator must be full.
+ allocator_->MakeIterable(ref);
+
+ alloc_reference_ = ref;
+- alloc_size_ = allocator_->GetAllocSize(ref);
++ alloc_size_ = new_alloc_size;
+ return true;
+ }
+
+@@ -284,7 +285,7 @@ void PersistentSystemProfile::RegisterPe
+ base::PersistentMemoryAllocator* memory_allocator) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+- // Create and store the allocator. A |min_size| of "1" ensures that a memory
++ // Create and store the allocator. A `min_size` of "1" ensures that a memory
+ // block is reserved now.
+ RecordAllocator allocator(memory_allocator, 1);
+ allocators_.push_back(std::move(allocator));
diff --git a/electron32/patches/patch-components_viz_service_display__embedder_software__output__device__proxy.cc b/electron32/patches/patch-components_viz_service_display__embedder_software__output__device__proxy.cc
index bcb3e31de7..b23ea582b4 100644
--- a/electron32/patches/patch-components_viz_service_display__embedder_software__output__device__proxy.cc
+++ b/electron32/patches/patch-components_viz_service_display__embedder_software__output__device__proxy.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- components/viz/service/display_embedder/software_output_device_proxy.cc.orig 2025-01-19 14:12:03.984384930 +0000
+--- components/viz/service/display_embedder/software_output_device_proxy.cc.orig 2025-02-15 09:43:46.319610669 +0000
+++ components/viz/service/display_embedder/software_output_device_proxy.cc
@@ -0,0 +1,161 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-components_viz_service_display__embedder_software__output__device__proxy.h b/electron32/patches/patch-components_viz_service_display__embedder_software__output__device__proxy.h
index 531a803937..96ca513dae 100644
--- a/electron32/patches/patch-components_viz_service_display__embedder_software__output__device__proxy.h
+++ b/electron32/patches/patch-components_viz_service_display__embedder_software__output__device__proxy.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- components/viz/service/display_embedder/software_output_device_proxy.h.orig 2025-01-19 14:12:03.984505815 +0000
+--- components/viz/service/display_embedder/software_output_device_proxy.h.orig 2025-02-15 09:43:46.319755490 +0000
+++ components/viz/service/display_embedder/software_output_device_proxy.h
@@ -0,0 +1,98 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-content_browser_file__system__access_file__path__watcher_file__path__watcher__bsd.cc b/electron32/patches/patch-content_browser_file__system__access_file__path__watcher_file__path__watcher__bsd.cc
index 70b44cf52f..9744135eeb 100644
--- a/electron32/patches/patch-content_browser_file__system__access_file__path__watcher_file__path__watcher__bsd.cc
+++ b/electron32/patches/patch-content_browser_file__system__access_file__path__watcher_file__path__watcher__bsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- content/browser/file_system_access/file_path_watcher/file_path_watcher_bsd.cc.orig 2025-01-19 14:12:03.990208453 +0000
+--- content/browser/file_system_access/file_path_watcher/file_path_watcher_bsd.cc.orig 2025-02-15 09:43:46.325632232 +0000
+++ content/browser/file_system_access/file_path_watcher/file_path_watcher_bsd.cc
@@ -0,0 +1,55 @@
+// Copyright 2024 The Chromium Authors
diff --git a/electron32/patches/patch-content_browser_renderer__host_media_video__capture__manager.cc b/electron32/patches/patch-content_browser_renderer__host_media_video__capture__manager.cc
new file mode 100644
index 0000000000..7320c437f8
--- /dev/null
+++ b/electron32/patches/patch-content_browser_renderer__host_media_video__capture__manager.cc
@@ -0,0 +1,140 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- content/browser/renderer_host/media/video_capture_manager.cc.orig 2024-10-18 12:34:13.310953400 +0000
++++ content/browser/renderer_host/media/video_capture_manager.cc
+@@ -15,6 +15,7 @@
+ #include "base/location.h"
+ #include "base/logging.h"
+ #include "base/memory/raw_ptr.h"
++#include "base/memory/scoped_refptr.h"
+ #include "base/metrics/histogram_functions.h"
+ #include "base/observer_list.h"
+ #include "base/ranges/algorithm.h"
+@@ -61,12 +62,14 @@ namespace content {
+ class VideoCaptureManager::CaptureDeviceStartRequest {
+ public:
+ CaptureDeviceStartRequest(
+- VideoCaptureController* controller,
++ scoped_refptr<VideoCaptureController> controller,
+ const media::VideoCaptureSessionId& session_id,
+ const media::VideoCaptureParams& params,
+ mojo::PendingRemote<video_effects::mojom::VideoEffectsProcessor>
+ video_effects_processor);
+- VideoCaptureController* controller() const { return controller_; }
++ scoped_refptr<VideoCaptureController> controller() const {
++ return controller_;
++ }
+ const base::UnguessableToken& session_id() const { return session_id_; }
+ media::VideoCaptureParams params() const { return params_; }
+
+@@ -76,7 +79,7 @@ class VideoCaptureManager::CaptureDevice
+ }
+
+ private:
+- const raw_ptr<VideoCaptureController> controller_;
++ const scoped_refptr<VideoCaptureController> controller_;
+ const base::UnguessableToken session_id_;
+ const media::VideoCaptureParams params_;
+ mojo::PendingRemote<video_effects::mojom::VideoEffectsProcessor>
+@@ -84,12 +87,12 @@ class VideoCaptureManager::CaptureDevice
+ };
+
+ VideoCaptureManager::CaptureDeviceStartRequest::CaptureDeviceStartRequest(
+- VideoCaptureController* controller,
++ scoped_refptr<VideoCaptureController> controller,
+ const media::VideoCaptureSessionId& session_id,
+ const media::VideoCaptureParams& params,
+ mojo::PendingRemote<video_effects::mojom::VideoEffectsProcessor>
+ video_effects_processor)
+- : controller_(controller),
++ : controller_(std::move(controller)),
+ session_id_(session_id),
+ params_(params),
+ video_effects_processor_(std::move(video_effects_processor)) {}
+@@ -258,14 +261,15 @@ void VideoCaptureManager::ApplySubCaptur
+
+ void VideoCaptureManager::QueueStartDevice(
+ const media::VideoCaptureSessionId& session_id,
+- VideoCaptureController* controller,
++ scoped_refptr<VideoCaptureController> controller,
+ const media::VideoCaptureParams& params,
+ mojo::PendingRemote<video_effects::mojom::VideoEffectsProcessor>
+ video_effects_processor) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(lock_time_.is_null());
+- device_start_request_queue_.push_back(CaptureDeviceStartRequest(
+- controller, session_id, params, std::move(video_effects_processor)));
++ device_start_request_queue_.push_back(
++ CaptureDeviceStartRequest(std::move(controller), session_id, params,
++ std::move(video_effects_processor)));
+ if (device_start_request_queue_.size() == 1)
+ ProcessDeviceStartRequestQueue();
+ }
+@@ -311,7 +315,8 @@ void VideoCaptureManager::ProcessDeviceS
+ if (request == device_start_request_queue_.end())
+ return;
+
+- VideoCaptureController* const controller = request->controller();
++ scoped_refptr<VideoCaptureController> const controller =
++ request->controller();
+
+ EmitLogMessage("VideoCaptureManager::ProcessDeviceStartRequestQueue", 3);
+ // The unit test VideoCaptureManagerTest.OpenNotExisting requires us to fail
+@@ -329,7 +334,7 @@ void VideoCaptureManager::ProcessDeviceS
+ GetDeviceInfoById(controller->device_id());
+ if (!device_info) {
+ OnDeviceLaunchFailed(
+- controller,
++ controller.get(),
+ media::VideoCaptureError::
+ kVideoCaptureManagerProcessDeviceStartQueueDeviceInfoNotFound);
+ return;
+@@ -350,7 +355,7 @@ void VideoCaptureManager::ProcessDeviceS
+ base::BindOnce([](scoped_refptr<VideoCaptureManager>,
+ scoped_refptr<VideoCaptureController>) {},
+ scoped_refptr<VideoCaptureManager>(this),
+- GetControllerSharedRef(controller)),
++ std::move(controller)),
+ request->TakeVideoEffectsProcessor());
+ }
+
+@@ -434,7 +439,7 @@ void VideoCaptureManager::ConnectClient(
+ EmitLogMessage(string_stream.str(), 1);
+ }
+
+- VideoCaptureController* controller =
++ scoped_refptr<VideoCaptureController> controller =
+ GetOrCreateController(session_id, params);
+ if (!controller) {
+ std::move(done_cb).Run(nullptr);
+@@ -908,7 +913,8 @@ media::VideoCaptureDeviceInfo* VideoCapt
+ return nullptr;
+ }
+
+-VideoCaptureController* VideoCaptureManager::GetOrCreateController(
++scoped_refptr<VideoCaptureController>
++VideoCaptureManager::GetOrCreateController(
+ const media::VideoCaptureSessionId& capture_session_id,
+ const media::VideoCaptureParams& params) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+@@ -930,10 +936,12 @@ VideoCaptureController* VideoCaptureMana
+ return existing_device;
+ }
+
+- VideoCaptureController* new_controller = new VideoCaptureController(
+- device_info.id, device_info.type, params,
+- video_capture_provider_->CreateDeviceLauncher(), emit_log_message_cb_);
+- controllers_.emplace_back(new_controller);
++ scoped_refptr<VideoCaptureController> new_controller =
++ base::MakeRefCounted<VideoCaptureController>(
++ device_info.id, device_info.type, params,
++ video_capture_provider_->CreateDeviceLauncher(),
++ emit_log_message_cb_);
++ controllers_.push_back(new_controller);
+ return new_controller;
+ }
+
diff --git a/electron32/patches/patch-content_browser_renderer__host_media_video__capture__manager.h b/electron32/patches/patch-content_browser_renderer__host_media_video__capture__manager.h
new file mode 100644
index 0000000000..b013aa5bd2
--- /dev/null
+++ b/electron32/patches/patch-content_browser_renderer__host_media_video__capture__manager.h
@@ -0,0 +1,26 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- content/browser/renderer_host/media/video_capture_manager.h.orig 2024-10-18 12:34:13.310953400 +0000
++++ content/browser/renderer_host/media/video_capture_manager.h
+@@ -297,7 +297,7 @@ class CONTENT_EXPORT VideoCaptureManager
+ // Finds a VideoCaptureController for the indicated |capture_session_id|,
+ // creating a fresh one if necessary. Returns nullptr if said
+ // |capture_session_id| is invalid.
+- VideoCaptureController* GetOrCreateController(
++ scoped_refptr<VideoCaptureController> GetOrCreateController(
+ const media::VideoCaptureSessionId& capture_session_id,
+ const media::VideoCaptureParams& params);
+
+@@ -309,7 +309,7 @@ class CONTENT_EXPORT VideoCaptureManager
+ // another request pending start.
+ void QueueStartDevice(
+ const media::VideoCaptureSessionId& session_id,
+- VideoCaptureController* controller,
++ scoped_refptr<VideoCaptureController> controller,
+ const media::VideoCaptureParams& params,
+ mojo::PendingRemote<video_effects::mojom::VideoEffectsProcessor>
+ video_effects_processor);
diff --git a/electron32/patches/patch-content_common_gpu__pre__sandbox__hook__bsd.cc b/electron32/patches/patch-content_common_gpu__pre__sandbox__hook__bsd.cc
index 47814a2089..6f6cf4a1ad 100644
--- a/electron32/patches/patch-content_common_gpu__pre__sandbox__hook__bsd.cc
+++ b/electron32/patches/patch-content_common_gpu__pre__sandbox__hook__bsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- content/common/gpu_pre_sandbox_hook_bsd.cc.orig 2025-01-19 14:12:04.011298787 +0000
+--- content/common/gpu_pre_sandbox_hook_bsd.cc.orig 2025-02-15 09:43:46.346242934 +0000
+++ content/common/gpu_pre_sandbox_hook_bsd.cc
@@ -0,0 +1,68 @@
+// Copyright 2023 The Chromium Authors
diff --git a/electron32/patches/patch-content_common_gpu__pre__sandbox__hook__bsd.h b/electron32/patches/patch-content_common_gpu__pre__sandbox__hook__bsd.h
index 7b5dd40caf..aff057bf79 100644
--- a/electron32/patches/patch-content_common_gpu__pre__sandbox__hook__bsd.h
+++ b/electron32/patches/patch-content_common_gpu__pre__sandbox__hook__bsd.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- content/common/gpu_pre_sandbox_hook_bsd.h.orig 2025-01-19 14:12:04.011405383 +0000
+--- content/common/gpu_pre_sandbox_hook_bsd.h.orig 2025-02-15 09:43:46.346375751 +0000
+++ content/common/gpu_pre_sandbox_hook_bsd.h
@@ -0,0 +1,20 @@
+// Copyright 2017 The Chromium Authors
diff --git a/electron32/patches/patch-electron_BUILD.gn b/electron32/patches/patch-electron_BUILD.gn
index 43fd22df39..87f4da5aed 100644
--- a/electron32/patches/patch-electron_BUILD.gn
+++ b/electron32/patches/patch-electron_BUILD.gn
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/BUILD.gn.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/BUILD.gn.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/BUILD.gn
@@ -524,7 +524,7 @@ source_set("electron_lib") {
defines += [ "GDK_DISABLE_DEPRECATION_WARNINGS" ]
diff --git a/electron32/patches/patch-electron_build_args_all.gn b/electron32/patches/patch-electron_build_args_all.gn
index 89b5e20030..9be1dc1379 100644
--- a/electron32/patches/patch-electron_build_args_all.gn
+++ b/electron32/patches/patch-electron_build_args_all.gn
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/build/args/all.gn.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/build/args/all.gn.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/build/args/all.gn
@@ -14,8 +14,8 @@ v8_enable_snapshot_native_code_counters
v8_enable_javascript_promise_hooks = true
diff --git a/electron32/patches/patch-electron_build_args_release.gn b/electron32/patches/patch-electron_build_args_release.gn
index dd21c72e51..b44e817da4 100644
--- a/electron32/patches/patch-electron_build_args_release.gn
+++ b/electron32/patches/patch-electron_build_args_release.gn
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/build/args/release.gn.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/build/args/release.gn.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/build/args/release.gn
@@ -7,7 +7,7 @@ is_official_build = true
# explicitly override here to build OpenH264 encoder/FFmpeg decoder.
diff --git a/electron32/patches/patch-electron_default__app_default__app.ts b/electron32/patches/patch-electron_default__app_default__app.ts
index fca65dbfaf..1036a72f19 100644
--- a/electron32/patches/patch-electron_default__app_default__app.ts
+++ b/electron32/patches/patch-electron_default__app_default__app.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/default_app/default_app.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/default_app/default_app.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/default_app/default_app.ts
@@ -61,7 +61,8 @@ async function createWindow (backgroundC
show: false
diff --git a/electron32/patches/patch-electron_filenames.gni b/electron32/patches/patch-electron_filenames.gni
index f34f56acb9..2e90dea5a9 100644
--- a/electron32/patches/patch-electron_filenames.gni
+++ b/electron32/patches/patch-electron_filenames.gni
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/filenames.gni.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/filenames.gni.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/filenames.gni
@@ -243,8 +243,8 @@ filenames = {
"shell/app/command_line_args.h",
diff --git a/electron32/patches/patch-electron_lib_browser_api_app.ts b/electron32/patches/patch-electron_lib_browser_api_app.ts
index 113a860a3a..529cb54c43 100644
--- a/electron32/patches/patch-electron_lib_browser_api_app.ts
+++ b/electron32/patches/patch-electron_lib_browser_api_app.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/lib/browser/api/app.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/lib/browser/api/app.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/lib/browser/api/app.ts
@@ -67,7 +67,8 @@ if (process.platform === 'darwin') {
app.dock!.getMenu = () => dockMenu;
diff --git a/electron32/patches/patch-electron_lib_browser_api_dialog.ts b/electron32/patches/patch-electron_lib_browser_api_dialog.ts
index 1f1844335b..3c23ac5142 100644
--- a/electron32/patches/patch-electron_lib_browser_api_dialog.ts
+++ b/electron32/patches/patch-electron_lib_browser_api_dialog.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/lib/browser/api/dialog.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/lib/browser/api/dialog.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/lib/browser/api/dialog.ts
@@ -41,7 +41,8 @@ const normalizeAccessKey = (text: string
// existing single underscores with a second underscore, replace double
diff --git a/electron32/patches/patch-electron_lib_browser_api_menu-item-roles.ts b/electron32/patches/patch-electron_lib_browser_api_menu-item-roles.ts
index 0a0d72226d..21f2e21ae7 100644
--- a/electron32/patches/patch-electron_lib_browser_api_menu-item-roles.ts
+++ b/electron32/patches/patch-electron_lib_browser_api_menu-item-roles.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/lib/browser/api/menu-item-roles.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/lib/browser/api/menu-item-roles.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/lib/browser/api/menu-item-roles.ts
@@ -2,7 +2,8 @@ import { app, BaseWindow, BrowserWindow,
diff --git a/electron32/patches/patch-electron_lib_browser_api_power-monitor.ts b/electron32/patches/patch-electron_lib_browser_api_power-monitor.ts
index 500365a52e..dd8566fb35 100644
--- a/electron32/patches/patch-electron_lib_browser_api_power-monitor.ts
+++ b/electron32/patches/patch-electron_lib_browser_api_power-monitor.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/lib/browser/api/power-monitor.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/lib/browser/api/power-monitor.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/lib/browser/api/power-monitor.ts
@@ -17,7 +17,8 @@ class PowerMonitor extends EventEmitter
const pm = createPowerMonitor();
diff --git a/electron32/patches/patch-electron_lib_browser_init.ts b/electron32/patches/patch-electron_lib_browser_init.ts
index eb688d2c1d..e803d8ccd6 100644
--- a/electron32/patches/patch-electron_lib_browser_init.ts
+++ b/electron32/patches/patch-electron_lib_browser_init.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/lib/browser/init.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/lib/browser/init.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/lib/browser/init.ts
@@ -162,7 +162,8 @@ const mainStartupScript = packageJson.ma
const KNOWN_XDG_DESKTOP_VALUES = new Set(['Pantheon', 'Unity:Unity7', 'pop:GNOME']);
diff --git a/electron32/patches/patch-electron_lib_browser_rpc-server.ts b/electron32/patches/patch-electron_lib_browser_rpc-server.ts
index 941195df66..7734b48335 100644
--- a/electron32/patches/patch-electron_lib_browser_rpc-server.ts
+++ b/electron32/patches/patch-electron_lib_browser_rpc-server.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/lib/browser/rpc-server.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/lib/browser/rpc-server.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/lib/browser/rpc-server.ts
@@ -28,7 +28,7 @@ const allowedClipboardMethods = (() => {
switch (process.platform) {
diff --git a/electron32/patches/patch-electron_lib_renderer_api_clipboard.ts b/electron32/patches/patch-electron_lib_renderer_api_clipboard.ts
index 8ec0c841f7..5c48e523c7 100644
--- a/electron32/patches/patch-electron_lib_renderer_api_clipboard.ts
+++ b/electron32/patches/patch-electron_lib_renderer_api_clipboard.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/lib/renderer/api/clipboard.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/lib/renderer/api/clipboard.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/lib/renderer/api/clipboard.ts
@@ -7,7 +7,8 @@ const makeRemoteMethod = function (metho
return (...args: any[]) => ipcRendererUtils.invokeSync(IPC_MESSAGES.BROWSER_CLIPBOARD_SYNC, method, ...args);
diff --git a/electron32/patches/patch-electron_script_lib_config.py b/electron32/patches/patch-electron_script_lib_config.py
index 7288d94a20..b894a924ba 100644
--- a/electron32/patches/patch-electron_script_lib_config.py
+++ b/electron32/patches/patch-electron_script_lib_config.py
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/script/lib/config.py.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/script/lib/config.py.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/script/lib/config.py
@@ -7,6 +7,11 @@ PLATFORM = {
'cygwin': 'win32',
diff --git a/electron32/patches/patch-electron_script_lib_utils.js b/electron32/patches/patch-electron_script_lib_utils.js
index cb088cfd69..9f36106a20 100644
--- a/electron32/patches/patch-electron_script_lib_utils.js
+++ b/electron32/patches/patch-electron_script_lib_utils.js
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/script/lib/utils.js.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/script/lib/utils.js.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/script/lib/utils.js
@@ -19,7 +19,7 @@ function getElectronExec () {
return `out/${OUT_DIR}/Electron.app/Contents/MacOS/Electron`;
diff --git a/electron32/patches/patch-electron_script_spec-runner.js b/electron32/patches/patch-electron_script_spec-runner.js
index 4e0de81066..7dcee4e1ec 100644
--- a/electron32/patches/patch-electron_script_spec-runner.js
+++ b/electron32/patches/patch-electron_script_spec-runner.js
@@ -4,9 +4,9 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/script/spec-runner.js.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/script/spec-runner.js.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/script/spec-runner.js
-@@ -165,7 +165,8 @@ async function runTestUsingElectron (spe
+@@ -197,7 +197,8 @@ async function runTestUsingElectron (spe
exe = path.resolve(BASE, utils.getElectronExec());
}
const runnerArgs = [`electron/${specDir}`, ...unknownArgs.slice(2)];
diff --git a/electron32/patches/patch-electron_shell_app_electron__crash__reporter__client.cc b/electron32/patches/patch-electron_shell_app_electron__crash__reporter__client.cc
index d9e1fbbe1a..cbb45c1366 100644
--- a/electron32/patches/patch-electron_shell_app_electron__crash__reporter__client.cc
+++ b/electron32/patches/patch-electron_shell_app_electron__crash__reporter__client.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/app/electron_crash_reporter_client.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/app/electron_crash_reporter_client.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/app/electron_crash_reporter_client.cc
@@ -95,7 +95,7 @@ ElectronCrashReporterClient::ElectronCra
diff --git a/electron32/patches/patch-electron_shell_app_electron__crash__reporter__client.h b/electron32/patches/patch-electron_shell_app_electron__crash__reporter__client.h
index fe3afa240e..80a5f63e9a 100644
--- a/electron32/patches/patch-electron_shell_app_electron__crash__reporter__client.h
+++ b/electron32/patches/patch-electron_shell_app_electron__crash__reporter__client.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/app/electron_crash_reporter_client.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/app/electron_crash_reporter_client.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/app/electron_crash_reporter_client.h
@@ -31,7 +31,7 @@ class ElectronCrashReporterClient : publ
const std::map<std::string, std::string>& annotations);
diff --git a/electron32/patches/patch-electron_shell_app_electron__main__delegate.cc b/electron32/patches/patch-electron_shell_app_electron__main__delegate.cc
index c020c17472..4b9aa0a437 100644
--- a/electron32/patches/patch-electron_shell_app_electron__main__delegate.cc
+++ b/electron32/patches/patch-electron_shell_app_electron__main__delegate.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/app/electron_main_delegate.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/app/electron_main_delegate.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/app/electron_main_delegate.cc
@@ -59,13 +59,13 @@
#include "chrome/child/v8_crashpad_support_win.h"
diff --git a/electron32/patches/patch-electron_shell_app_node__main.cc b/electron32/patches/patch-electron_shell_app_node__main.cc
index a7c7cf6314..89891bea13 100644
--- a/electron32/patches/patch-electron_shell_app_node__main.cc
+++ b/electron32/patches/patch-electron_shell_app_node__main.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/app/node_main.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/app/node_main.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/app/node_main.cc
@@ -48,7 +48,7 @@
#include "shell/common/mac/codesign_util.h"
diff --git a/electron32/patches/patch-electron_shell_browser_api_electron__api__app.cc b/electron32/patches/patch-electron_shell_browser_api_electron__api__app.cc
index d3c75f7e32..0c6817b496 100644
--- a/electron32/patches/patch-electron_shell_browser_api_electron__api__app.cc
+++ b/electron32/patches/patch-electron_shell_browser_api_electron__api__app.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/electron_api_app.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/electron_api_app.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/electron_api_app.cc
@@ -92,7 +92,7 @@
#include "shell/browser/ui/cocoa/electron_bundle_mover.h"
diff --git a/electron32/patches/patch-electron_shell_browser_api_electron__api__base__window.cc b/electron32/patches/patch-electron_shell_browser_api_electron__api__base__window.cc
index f8f79d7c00..1132f00640 100644
--- a/electron32/patches/patch-electron_shell_browser_api_electron__api__base__window.cc
+++ b/electron32/patches/patch-electron_shell_browser_api_electron__api__base__window.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/electron_api_base_window.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/electron_api_base_window.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/electron_api_base_window.cc
@@ -40,7 +40,7 @@
#include "shell/browser/ui/views/win_frame_view.h"
diff --git a/electron32/patches/patch-electron_shell_browser_api_electron__api__base__window.h b/electron32/patches/patch-electron_shell_browser_api_electron__api__base__window.h
index c60c890114..dc7f751d87 100644
--- a/electron32/patches/patch-electron_shell_browser_api_electron__api__base__window.h
+++ b/electron32/patches/patch-electron_shell_browser_api_electron__api__base__window.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/electron_api_base_window.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/electron_api_base_window.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/electron_api_base_window.h
@@ -241,7 +241,7 @@ class BaseWindow : public gin_helper::Tr
void SetAppDetails(const gin_helper::Dictionary& options);
diff --git a/electron32/patches/patch-electron_shell_browser_api_electron__api__crash__reporter.cc b/electron32/patches/patch-electron_shell_browser_api_electron__api__crash__reporter.cc
index 2b5cf450af..90df2c6c1d 100644
--- a/electron32/patches/patch-electron_shell_browser_api_electron__api__crash__reporter.cc
+++ b/electron32/patches/patch-electron_shell_browser_api_electron__api__crash__reporter.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/electron_api_crash_reporter.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/electron_api_crash_reporter.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/electron_api_crash_reporter.cc
@@ -30,7 +30,7 @@
#include "shell/common/process_util.h"
diff --git a/electron32/patches/patch-electron_shell_browser_api_electron__api__desktop__capturer.cc b/electron32/patches/patch-electron_shell_browser_api_electron__api__desktop__capturer.cc
index 3c1743bfc9..63eb24383a 100644
--- a/electron32/patches/patch-electron_shell_browser_api_electron__api__desktop__capturer.cc
+++ b/electron32/patches/patch-electron_shell_browser_api_electron__api__desktop__capturer.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/electron_api_desktop_capturer.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/electron_api_desktop_capturer.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/electron_api_desktop_capturer.cc
@@ -46,7 +46,7 @@
#endif
diff --git a/electron32/patches/patch-electron_shell_browser_api_electron__api__power__monitor.cc b/electron32/patches/patch-electron_shell_browser_api_electron__api__power__monitor.cc
index 601f75d01c..a8c5d1594f 100644
--- a/electron32/patches/patch-electron_shell_browser_api_electron__api__power__monitor.cc
+++ b/electron32/patches/patch-electron_shell_browser_api_electron__api__power__monitor.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/electron_api_power_monitor.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/electron_api_power_monitor.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/electron_api_power_monitor.cc
@@ -118,6 +118,11 @@ void PowerMonitor::OnSpeedLimitChange(in
gin::DataObjectBuilder(isolate).Set("limit", speed_limit).Build());
diff --git a/electron32/patches/patch-electron_shell_browser_api_electron__api__power__monitor.h b/electron32/patches/patch-electron_shell_browser_api_electron__api__power__monitor.h
index 47b9e92c20..2ef3e79080 100644
--- a/electron32/patches/patch-electron_shell_browser_api_electron__api__power__monitor.h
+++ b/electron32/patches/patch-electron_shell_browser_api_electron__api__power__monitor.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/electron_api_power_monitor.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/electron_api_power_monitor.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/electron_api_power_monitor.h
@@ -40,7 +40,7 @@ class PowerMonitor final : public gin::W
explicit PowerMonitor(v8::Isolate* isolate);
diff --git a/electron32/patches/patch-electron_shell_browser_api_electron__api__safe__storage.cc b/electron32/patches/patch-electron_shell_browser_api_electron__api__safe__storage.cc
index d48f0d5a2b..256d9f56ce 100644
--- a/electron32/patches/patch-electron_shell_browser_api_electron__api__safe__storage.cc
+++ b/electron32/patches/patch-electron_shell_browser_api_electron__api__safe__storage.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/electron_api_safe_storage.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/electron_api_safe_storage.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/electron_api_safe_storage.cc
@@ -20,7 +20,7 @@ const char* kEncryptionVersionPrefixV11
bool use_password_v10 = false;
diff --git a/electron32/patches/patch-electron_shell_browser_api_electron__api__web__contents.cc b/electron32/patches/patch-electron_shell_browser_api_electron__api__web__contents.cc
index e0ec3659a1..c2b5469b7c 100644
--- a/electron32/patches/patch-electron_shell_browser_api_electron__api__web__contents.cc
+++ b/electron32/patches/patch-electron_shell_browser_api_electron__api__web__contents.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/electron_api_web_contents.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/electron_api_web_contents.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/electron_api_web_contents.cc
@@ -153,11 +153,11 @@
#include "ui/base/cocoa/defaults_utils.h"
diff --git a/electron32/patches/patch-electron_shell_browser_api_electron__api__web__contents.h b/electron32/patches/patch-electron_shell_browser_api_electron__api__web__contents.h
index faf303b9e7..16b9bac99d 100644
--- a/electron32/patches/patch-electron_shell_browser_api_electron__api__web__contents.h
+++ b/electron32/patches/patch-electron_shell_browser_api_electron__api__web__contents.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/electron_api_web_contents.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/electron_api_web_contents.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/electron_api_web_contents.h
@@ -762,7 +762,7 @@ class WebContents final : public Exclusi
#if defined(TOOLKIT_VIEWS) && !BUILDFLAG(IS_MAC)
diff --git a/electron32/patches/patch-electron_shell_browser_api_process__metric.h b/electron32/patches/patch-electron_shell_browser_api_process__metric.h
index 82f0b829fd..58d9111510 100644
--- a/electron32/patches/patch-electron_shell_browser_api_process__metric.h
+++ b/electron32/patches/patch-electron_shell_browser_api_process__metric.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/api/process_metric.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/api/process_metric.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/api/process_metric.h
@@ -14,7 +14,7 @@
diff --git a/electron32/patches/patch-electron_shell_browser_browser.cc b/electron32/patches/patch-electron_shell_browser_browser.cc
index 4d7183c80c..81d2083149 100644
--- a/electron32/patches/patch-electron_shell_browser_browser.cc
+++ b/electron32/patches/patch-electron_shell_browser_browser.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/browser.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/browser.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/browser.cc
@@ -66,7 +66,7 @@ Browser* Browser::Get() {
return ElectronBrowserMainParts::Get()->browser();
diff --git a/electron32/patches/patch-electron_shell_browser_browser.h b/electron32/patches/patch-electron_shell_browser_browser.h
index 35ccf1a0aa..192a0aca6b 100644
--- a/electron32/patches/patch-electron_shell_browser_browser.h
+++ b/electron32/patches/patch-electron_shell_browser_browser.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/browser.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/browser.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/browser.h
@@ -145,7 +145,7 @@ class Browser : private WindowListObserv
diff --git a/electron32/patches/patch-electron_shell_browser_browser__linux.cc b/electron32/patches/patch-electron_shell_browser_browser__linux.cc
index e223b85a58..8d7a98bf65 100644
--- a/electron32/patches/patch-electron_shell_browser_browser__linux.cc
+++ b/electron32/patches/patch-electron_shell_browser_browser__linux.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/browser_linux.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/browser_linux.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/browser_linux.cc
@@ -19,7 +19,7 @@
#include "shell/common/gin_converters/login_item_settings_converter.h"
diff --git a/electron32/patches/patch-electron_shell_browser_browser__process__impl.cc b/electron32/patches/patch-electron_shell_browser_browser__process__impl.cc
index f03857e89d..22a81353c8 100644
--- a/electron32/patches/patch-electron_shell_browser_browser__process__impl.cc
+++ b/electron32/patches/patch-electron_shell_browser_browser__process__impl.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/browser_process_impl.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/browser_process_impl.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/browser_process_impl.cc
@@ -339,7 +339,7 @@ electron::ResolveProxyHelper* BrowserPro
return resolve_proxy_helper_.get();
diff --git a/electron32/patches/patch-electron_shell_browser_browser__process__impl.h b/electron32/patches/patch-electron_shell_browser_browser__process__impl.h
index bfe2267710..f81a01dc24 100644
--- a/electron32/patches/patch-electron_shell_browser_browser__process__impl.h
+++ b/electron32/patches/patch-electron_shell_browser_browser__process__impl.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/browser_process_impl.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/browser_process_impl.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/browser_process_impl.h
@@ -23,7 +23,7 @@
#include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts.cc b/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts.cc
index cb07e594c4..a7ecbb97ce 100644
--- a/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts.cc
+++ b/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/electron_browser_main_parts.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/electron_browser_main_parts.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/electron_browser_main_parts.cc
@@ -78,7 +78,7 @@
#include "ui/wm/core/wm_state.h"
diff --git a/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts.h b/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts.h
index f5533f401f..45471461fa 100644
--- a/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts.h
+++ b/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/electron_browser_main_parts.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/electron_browser_main_parts.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/electron_browser_main_parts.h
@@ -119,7 +119,7 @@ class ElectronBrowserMainParts : public
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
diff --git a/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts__posix.cc b/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts__posix.cc
index 362517fcdc..4e3ea9ecdb 100644
--- a/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts__posix.cc
+++ b/electron32/patches/patch-electron_shell_browser_electron__browser__main__parts__posix.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/electron_browser_main_parts_posix.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/electron_browser_main_parts_posix.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/electron_browser_main_parts_posix.cc
@@ -210,6 +210,9 @@ void ElectronBrowserMainParts::InstallSh
g_pipe_pid = getpid();
diff --git a/electron32/patches/patch-electron_shell_browser_extensions_api_runtime_electron__runtime__api__delegate.cc b/electron32/patches/patch-electron_shell_browser_extensions_api_runtime_electron__runtime__api__delegate.cc
index de31b86b6e..b7bccebbd4 100644
--- a/electron32/patches/patch-electron_shell_browser_extensions_api_runtime_electron__runtime__api__delegate.cc
+++ b/electron32/patches/patch-electron_shell_browser_extensions_api_runtime_electron__runtime__api__delegate.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/extensions/api/runtime/electron_runtime_api_delegate.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/extensions/api/runtime/electron_runtime_api_delegate.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/extensions/api/runtime/electron_runtime_api_delegate.cc
@@ -55,6 +55,10 @@ bool ElectronRuntimeAPIDelegate::GetPlat
info->os = extensions::api::runtime::PlatformOs::kLinux;
diff --git a/electron32/patches/patch-electron_shell_browser_native__window.cc b/electron32/patches/patch-electron_shell_browser_native__window.cc
index c5bfb145ec..bc06e35a29 100644
--- a/electron32/patches/patch-electron_shell_browser_native__window.cc
+++ b/electron32/patches/patch-electron_shell_browser_native__window.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/native_window.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/native_window.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/native_window.cc
@@ -203,7 +203,7 @@ void NativeWindow::InitFromOptions(const
} else {
diff --git a/electron32/patches/patch-electron_shell_browser_native__window__views.cc b/electron32/patches/patch-electron_shell_browser_native__window__views.cc
index d92db11acb..e49f9d98bf 100644
--- a/electron32/patches/patch-electron_shell_browser_native__window__views.cc
+++ b/electron32/patches/patch-electron_shell_browser_native__window__views.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/native_window_views.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/native_window_views.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/native_window_views.cc
@@ -53,7 +53,7 @@
#include "ui/wm/core/shadow_types.h"
diff --git a/electron32/patches/patch-electron_shell_browser_native__window__views.h b/electron32/patches/patch-electron_shell_browser_native__window__views.h
index dbb12cead0..6ae49896e0 100644
--- a/electron32/patches/patch-electron_shell_browser_native__window__views.h
+++ b/electron32/patches/patch-electron_shell_browser_native__window__views.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/native_window_views.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/native_window_views.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/native_window_views.h
@@ -25,7 +25,7 @@
diff --git a/electron32/patches/patch-electron_shell_browser_net_system__network__context__manager.cc b/electron32/patches/patch-electron_shell_browser_net_system__network__context__manager.cc
index 1502445869..d9beea0f7d 100644
--- a/electron32/patches/patch-electron_shell_browser_net_system__network__context__manager.cc
+++ b/electron32/patches/patch-electron_shell_browser_net_system__network__context__manager.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/net/system_network_context_manager.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/net/system_network_context_manager.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/net/system_network_context_manager.cc
@@ -42,7 +42,7 @@
#include "shell/common/options_switches.h"
diff --git a/electron32/patches/patch-electron_shell_browser_osr_osr__host__display__client.cc b/electron32/patches/patch-electron_shell_browser_osr_osr__host__display__client.cc
index 37ce691580..c0a602785f 100644
--- a/electron32/patches/patch-electron_shell_browser_osr_osr__host__display__client.cc
+++ b/electron32/patches/patch-electron_shell_browser_osr_osr__host__display__client.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/osr/osr_host_display_client.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/osr/osr_host_display_client.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/osr/osr_host_display_client.cc
@@ -96,7 +96,7 @@ void OffScreenHostDisplayClient::CreateL
layered_window_updater_->SetActive(active_);
diff --git a/electron32/patches/patch-electron_shell_browser_osr_osr__host__display__client.h b/electron32/patches/patch-electron_shell_browser_osr_osr__host__display__client.h
index 033ec36d6b..8b78014781 100644
--- a/electron32/patches/patch-electron_shell_browser_osr_osr__host__display__client.h
+++ b/electron32/patches/patch-electron_shell_browser_osr_osr__host__display__client.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/osr/osr_host_display_client.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/osr/osr_host_display_client.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/osr/osr_host_display_client.h
@@ -72,7 +72,7 @@ class OffScreenHostDisplayClient : publi
mojo::PendingReceiver<viz::mojom::LayeredWindowUpdater> receiver)
diff --git a/electron32/patches/patch-electron_shell_browser_printing_printing__utils.cc b/electron32/patches/patch-electron_shell_browser_printing_printing__utils.cc
index 93c9a436f2..24df7f3486 100644
--- a/electron32/patches/patch-electron_shell_browser_printing_printing__utils.cc
+++ b/electron32/patches/patch-electron_shell_browser_printing_printing__utils.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/printing/printing_utils.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/printing/printing_utils.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/printing/printing_utils.cc
@@ -28,7 +28,7 @@
#include <ApplicationServices/ApplicationServices.h>
diff --git a/electron32/patches/patch-electron_shell_browser_relauncher__linux.cc b/electron32/patches/patch-electron_shell_browser_relauncher__linux.cc
index fb84c1247d..28cd32c744 100644
--- a/electron32/patches/patch-electron_shell_browser_relauncher__linux.cc
+++ b/electron32/patches/patch-electron_shell_browser_relauncher__linux.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/relauncher_linux.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/relauncher_linux.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/relauncher_linux.cc
@@ -6,8 +6,10 @@
diff --git a/electron32/patches/patch-electron_shell_browser_ui_inspectable__web__contents.cc b/electron32/patches/patch-electron_shell_browser_ui_inspectable__web__contents.cc
index 5b51c6f573..70ffca1650 100644
--- a/electron32/patches/patch-electron_shell_browser_ui_inspectable__web__contents.cc
+++ b/electron32/patches/patch-electron_shell_browser_ui_inspectable__web__contents.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/ui/inspectable_web_contents.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/ui/inspectable_web_contents.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/ui/inspectable_web_contents.cc
@@ -557,7 +557,7 @@ void InspectableWebContents::LoadComplet
prefs.FindString("currentDockState");
diff --git a/electron32/patches/patch-electron_shell_browser_ui_inspectable__web__contents__view__delegate.h b/electron32/patches/patch-electron_shell_browser_ui_inspectable__web__contents__view__delegate.h
index 4fcfa0d5b4..247daeea1d 100644
--- a/electron32/patches/patch-electron_shell_browser_ui_inspectable__web__contents__view__delegate.h
+++ b/electron32/patches/patch-electron_shell_browser_ui_inspectable__web__contents__view__delegate.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/ui/inspectable_web_contents_view_delegate.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/ui/inspectable_web_contents_view_delegate.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/ui/inspectable_web_contents_view_delegate.h
@@ -24,7 +24,7 @@ class InspectableWebContentsViewDelegate
// Returns the icon of devtools window.
diff --git a/electron32/patches/patch-electron_shell_browser_ui_views_electron__views__delegate.cc b/electron32/patches/patch-electron_shell_browser_ui_views_electron__views__delegate.cc
index 4926468fc9..026bb6a461 100644
--- a/electron32/patches/patch-electron_shell_browser_ui_views_electron__views__delegate.cc
+++ b/electron32/patches/patch-electron_shell_browser_ui_views_electron__views__delegate.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/ui/views/electron_views_delegate.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/ui/views/electron_views_delegate.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/ui/views/electron_views_delegate.cc
@@ -9,7 +9,7 @@
#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
diff --git a/electron32/patches/patch-electron_shell_browser_ui_views_electron__views__delegate.h b/electron32/patches/patch-electron_shell_browser_ui_views_electron__views__delegate.h
index be1843ed54..c89c45ebd5 100644
--- a/electron32/patches/patch-electron_shell_browser_ui_views_electron__views__delegate.h
+++ b/electron32/patches/patch-electron_shell_browser_ui_views_electron__views__delegate.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/ui/views/electron_views_delegate.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/ui/views/electron_views_delegate.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/ui/views/electron_views_delegate.h
@@ -44,7 +44,7 @@ class ViewsDelegate : public views::View
HICON GetSmallWindowIcon() const override;
diff --git a/electron32/patches/patch-electron_shell_browser_ui_views_inspectable__web__contents__view__views.cc b/electron32/patches/patch-electron_shell_browser_ui_views_inspectable__web__contents__view__views.cc
index 6769ea6c2a..d231dccdd5 100644
--- a/electron32/patches/patch-electron_shell_browser_ui_views_inspectable__web__contents__view__views.cc
+++ b/electron32/patches/patch-electron_shell_browser_ui_views_inspectable__web__contents__view__views.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/ui/views/inspectable_web_contents_view_views.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/ui/views/inspectable_web_contents_view_views.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/ui/views/inspectable_web_contents_view_views.cc
@@ -184,7 +184,7 @@ void InspectableWebContentsViewViews::Se
params.delegate = devtools_window_delegate_;
diff --git a/electron32/patches/patch-electron_shell_browser_ui_views_menu__bar.cc b/electron32/patches/patch-electron_shell_browser_ui_views_menu__bar.cc
index caa43e2106..4651ed09d4 100644
--- a/electron32/patches/patch-electron_shell_browser_ui_views_menu__bar.cc
+++ b/electron32/patches/patch-electron_shell_browser_ui_views_menu__bar.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/ui/views/menu_bar.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/ui/views/menu_bar.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/ui/views/menu_bar.cc
@@ -13,7 +13,7 @@
#include "ui/views/background.h"
diff --git a/electron32/patches/patch-electron_shell_browser_ui_views_menu__bar.h b/electron32/patches/patch-electron_shell_browser_ui_views_menu__bar.h
index bbeed7b1b0..27ed8fb964 100644
--- a/electron32/patches/patch-electron_shell_browser_ui_views_menu__bar.h
+++ b/electron32/patches/patch-electron_shell_browser_ui_views_menu__bar.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/ui/views/menu_bar.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/ui/views/menu_bar.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/ui/views/menu_bar.h
@@ -84,7 +84,7 @@ class MenuBar : public views::Accessible
View* FindAccelChild(char16_t key);
diff --git a/electron32/patches/patch-electron_shell_browser_ui_views_submenu__button.cc b/electron32/patches/patch-electron_shell_browser_ui_views_submenu__button.cc
index 7b91026377..c4c9ebfe2f 100644
--- a/electron32/patches/patch-electron_shell_browser_ui_views_submenu__button.cc
+++ b/electron32/patches/patch-electron_shell_browser_ui_views_submenu__button.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/browser/ui/views/submenu_button.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/browser/ui/views/submenu_button.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/browser/ui/views/submenu_button.cc
@@ -22,7 +22,7 @@ SubmenuButton::SubmenuButton(PressedCall
const SkColor& background_color)
diff --git a/electron32/patches/patch-electron_shell_common_api_electron__api__clipboard.cc b/electron32/patches/patch-electron_shell_common_api_electron__api__clipboard.cc
index 812350d867..e8729dacc6 100644
--- a/electron32/patches/patch-electron_shell_common_api_electron__api__clipboard.cc
+++ b/electron32/patches/patch-electron_shell_common_api_electron__api__clipboard.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/api/electron_api_clipboard.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/api/electron_api_clipboard.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/api/electron_api_clipboard.cc
@@ -59,7 +59,7 @@ std::string Clipboard::Read(const std::s
ui::ClipboardFormatType::CustomPlatformType(format_string));
diff --git a/electron32/patches/patch-electron_shell_common_api_electron__api__native__image.cc b/electron32/patches/patch-electron_shell_common_api_electron__api__native__image.cc
index f91ae586f4..4f7e6279ef 100644
--- a/electron32/patches/patch-electron_shell_common_api_electron__api__native__image.cc
+++ b/electron32/patches/patch-electron_shell_common_api_electron__api__native__image.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/api/electron_api_native_image.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/api/electron_api_native_image.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/api/electron_api_native_image.cc
@@ -640,7 +640,7 @@ void Initialize(v8::Local<v8::Object> ex
native_image.SetMethod("createFromDataURL", &NativeImage::CreateFromDataURL);
diff --git a/electron32/patches/patch-electron_shell_common_api_electron__api__native__image.h b/electron32/patches/patch-electron_shell_common_api_electron__api__native__image.h
index 0980cceb25..2fd7d58264 100644
--- a/electron32/patches/patch-electron_shell_common_api_electron__api__native__image.h
+++ b/electron32/patches/patch-electron_shell_common_api_electron__api__native__image.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/api/electron_api_native_image.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/api/electron_api_native_image.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/api/electron_api_native_image.h
@@ -78,7 +78,7 @@ class NativeImage final : public gin::Wr
const GURL& url);
diff --git a/electron32/patches/patch-electron_shell_common_api_electron__bindings.cc b/electron32/patches/patch-electron_shell_common_api_electron__bindings.cc
index 5be8c5d2b3..f3de3dd6a8 100644
--- a/electron32/patches/patch-electron_shell_common_api_electron__bindings.cc
+++ b/electron32/patches/patch-electron_shell_common_api_electron__bindings.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/api/electron_bindings.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/api/electron_bindings.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/api/electron_bindings.cc
@@ -253,7 +253,7 @@ void ElectronBindings::DidReceiveMemoryD
if (target_pid == dump.pid()) {
diff --git a/electron32/patches/patch-electron_shell_common_electron__command__line.cc b/electron32/patches/patch-electron_shell_common_electron__command__line.cc
index 535f5dbfc3..f8350620e7 100644
--- a/electron32/patches/patch-electron_shell_common_electron__command__line.cc
+++ b/electron32/patches/patch-electron_shell_common_electron__command__line.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/electron_command_line.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/electron_command_line.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/electron_command_line.cc
@@ -26,7 +26,7 @@ void ElectronCommandLine::Init(int argc,
argv_.assign(argv, argv + argc);
diff --git a/electron32/patches/patch-electron_shell_common_electron__command__line.h b/electron32/patches/patch-electron_shell_common_electron__command__line.h
index e42f3d99a0..d0fe560604 100644
--- a/electron32/patches/patch-electron_shell_common_electron__command__line.h
+++ b/electron32/patches/patch-electron_shell_common_electron__command__line.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/electron_command_line.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/electron_command_line.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/electron_command_line.h
@@ -22,7 +22,7 @@ class ElectronCommandLine {
diff --git a/electron32/patches/patch-electron_shell_common_electron__paths.h b/electron32/patches/patch-electron_shell_common_electron__paths.h
index 271d2c6517..69f793a0bf 100644
--- a/electron32/patches/patch-electron_shell_common_electron__paths.h
+++ b/electron32/patches/patch-electron_shell_common_electron__paths.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/electron_paths.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/electron_paths.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/electron_paths.h
@@ -30,7 +30,7 @@ enum {
DIR_RECENT, // Directory where recent files live
diff --git a/electron32/patches/patch-electron_shell_common_gin__converters_std__converter.h b/electron32/patches/patch-electron_shell_common_gin__converters_std__converter.h
index 13032488b4..7515346612 100644
--- a/electron32/patches/patch-electron_shell_common_gin__converters_std__converter.h
+++ b/electron32/patches/patch-electron_shell_common_gin__converters_std__converter.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/gin_converters/std_converter.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/gin_converters/std_converter.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/gin_converters/std_converter.h
@@ -28,7 +28,7 @@ v8::Local<v8::Value> ConvertToV8(v8::Iso
isolate, std::forward<T>(input));
diff --git a/electron32/patches/patch-electron_shell_common_node__bindings.cc b/electron32/patches/patch-electron_shell_common_node__bindings.cc
index 02e278f8ed..96f01a7aa1 100644
--- a/electron32/patches/patch-electron_shell_common_node__bindings.cc
+++ b/electron32/patches/patch-electron_shell_common_node__bindings.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/node_bindings.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/node_bindings.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/node_bindings.cc
@@ -43,7 +43,7 @@
#include "third_party/electron_node/src/debug_utils.h"
diff --git a/electron32/patches/patch-electron_shell_common_node__bindings__linux.cc b/electron32/patches/patch-electron_shell_common_node__bindings__linux.cc
index 4926c11c96..1c8ae14c89 100644
--- a/electron32/patches/patch-electron_shell_common_node__bindings__linux.cc
+++ b/electron32/patches/patch-electron_shell_common_node__bindings__linux.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/node_bindings_linux.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/node_bindings_linux.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/node_bindings_linux.cc
@@ -4,12 +4,25 @@
diff --git a/electron32/patches/patch-electron_shell_common_platform__util.h b/electron32/patches/patch-electron_shell_common_platform__util.h
index ffa7463aa8..0d0bd830ae 100644
--- a/electron32/patches/patch-electron_shell_common_platform__util.h
+++ b/electron32/patches/patch-electron_shell_common_platform__util.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/common/platform_util.h.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/common/platform_util.h.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/common/platform_util.h
@@ -56,7 +56,7 @@ bool SetLoginItemEnabled(const std::stri
bool enabled);
diff --git a/electron32/patches/patch-electron_shell_renderer_api_electron__api__crash__reporter__renderer.cc b/electron32/patches/patch-electron_shell_renderer_api_electron__api__crash__reporter__renderer.cc
index 0f380dae0a..5f4a99503b 100644
--- a/electron32/patches/patch-electron_shell_renderer_api_electron__api__crash__reporter__renderer.cc
+++ b/electron32/patches/patch-electron_shell_renderer_api_electron__api__crash__reporter__renderer.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/shell/renderer/api/electron_api_crash_reporter_renderer.cc.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/shell/renderer/api/electron_api_crash_reporter_renderer.cc.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/shell/renderer/api/electron_api_crash_reporter_renderer.cc
@@ -6,7 +6,7 @@
#include "shell/common/gin_helper/dictionary.h"
diff --git a/electron32/patches/patch-electron_spec_api-app-spec.ts b/electron32/patches/patch-electron_spec_api-app-spec.ts
index 9aade65198..548d986fa0 100644
--- a/electron32/patches/patch-electron_spec_api-app-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-app-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-app-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-app-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-app-spec.ts
@@ -126,11 +126,13 @@ describe('app module', () => {
});
diff --git a/electron32/patches/patch-electron_spec_api-browser-window-spec.ts b/electron32/patches/patch-electron_spec_api-browser-window-spec.ts
index 795646927f..e7f272b681 100644
--- a/electron32/patches/patch-electron_spec_api-browser-window-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-browser-window-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-browser-window-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-browser-window-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-browser-window-spec.ts
@@ -67,7 +67,8 @@ describe('BrowserWindow module', () => {
}).not.to.throw();
@@ -16,7 +16,7 @@ $NetBSD$
const appPath = path.join(fixtures, 'apps', 'xwindow-icon');
const appProcess = childProcess.spawn(process.execPath, [appPath]);
await once(appProcess, 'exit');
-@@ -1123,7 +1124,8 @@ describe('BrowserWindow module', () => {
+@@ -1126,7 +1127,8 @@ describe('BrowserWindow module', () => {
describe('BrowserWindow.minimize()', () => {
// TODO(codebytere): Enable for Linux once maximize/minimize events work in CI.
@@ -26,7 +26,7 @@ $NetBSD$
const minimize = once(w, 'minimize');
w.minimize();
await minimize;
-@@ -1140,7 +1142,8 @@ describe('BrowserWindow module', () => {
+@@ -1143,7 +1145,8 @@ describe('BrowserWindow module', () => {
});
// TODO(dsanders11): Enable for Linux once CI plays nice with these kinds of tests
@@ -36,7 +36,7 @@ $NetBSD$
const maximize = once(w, 'maximize');
const shown = once(w, 'show');
w.maximize();
-@@ -1205,7 +1208,8 @@ describe('BrowserWindow module', () => {
+@@ -1208,7 +1211,8 @@ describe('BrowserWindow module', () => {
expect(w.isFocused()).to.equal(true);
});
@@ -46,7 +46,7 @@ $NetBSD$
const w1 = new BrowserWindow({ show: false });
const w2 = new BrowserWindow({ show: false });
const w3 = new BrowserWindow({ show: false });
-@@ -1306,7 +1310,8 @@ describe('BrowserWindow module', () => {
+@@ -1309,7 +1313,8 @@ describe('BrowserWindow module', () => {
expect(w.isFocused()).to.equal(false);
});
@@ -56,7 +56,7 @@ $NetBSD$
const w1 = new BrowserWindow({ show: false });
const w2 = new BrowserWindow({ show: false });
const w3 = new BrowserWindow({ show: false });
-@@ -1765,7 +1770,8 @@ describe('BrowserWindow module', () => {
+@@ -1768,7 +1773,8 @@ describe('BrowserWindow module', () => {
});
});
@@ -66,7 +66,7 @@ $NetBSD$
it('checks normal bounds when maximized', async () => {
const bounds = w.getBounds();
const maximize = once(w, 'maximize');
-@@ -1975,7 +1981,8 @@ describe('BrowserWindow module', () => {
+@@ -1978,7 +1984,8 @@ describe('BrowserWindow module', () => {
});
});
@@ -76,7 +76,7 @@ $NetBSD$
it('checks normal bounds when minimized', async () => {
const bounds = w.getBounds();
const minimize = once(w, 'minimize');
-@@ -2938,7 +2945,8 @@ describe('BrowserWindow module', () => {
+@@ -2941,7 +2948,8 @@ describe('BrowserWindow module', () => {
describe('BrowserWindow.setOpacity(opacity)', () => {
afterEach(closeAllWindows);
@@ -86,7 +86,7 @@ $NetBSD$
it('make window with initial opacity', () => {
const w = new BrowserWindow({ show: false, opacity: 0.5 });
expect(w.getOpacity()).to.equal(0.5);
-@@ -2964,7 +2972,8 @@ describe('BrowserWindow module', () => {
+@@ -2967,7 +2975,8 @@ describe('BrowserWindow module', () => {
});
});
@@ -96,7 +96,7 @@ $NetBSD$
it('sets 1 regardless of parameter', () => {
const w = new BrowserWindow({ show: false });
w.setOpacity(0);
-@@ -3175,7 +3184,8 @@ describe('BrowserWindow module', () => {
+@@ -3178,7 +3187,8 @@ describe('BrowserWindow module', () => {
expect(overlayRectPreMax.height).to.equal(size);
// 'maximize' event is not emitted on Linux in CI.
@@ -106,7 +106,7 @@ $NetBSD$
const maximize = once(w, 'maximize');
w.show();
w.maximize();
-@@ -3241,7 +3251,8 @@ describe('BrowserWindow module', () => {
+@@ -3244,7 +3254,8 @@ describe('BrowserWindow module', () => {
expect(preMaxHeight).to.equal(size);
// 'maximize' event is not emitted on Linux in CI.
@@ -116,7 +116,7 @@ $NetBSD$
const maximize = once(w, 'maximize');
w.show();
w.maximize();
-@@ -3906,7 +3917,8 @@ describe('BrowserWindow module', () => {
+@@ -3909,7 +3920,8 @@ describe('BrowserWindow module', () => {
expect(test.nodeTimers).to.equal(true);
expect(test.nodeUrl).to.equal(true);
@@ -126,7 +126,7 @@ $NetBSD$
expect(test.creationTime).to.be.null('creation time');
expect(test.systemMemoryInfo).to.be.null('system memory info');
} else {
-@@ -4411,7 +4423,8 @@ describe('BrowserWindow module', () => {
+@@ -4414,7 +4426,8 @@ describe('BrowserWindow module', () => {
});
});
@@ -136,7 +136,7 @@ $NetBSD$
afterEach(closeAllWindows);
it('emits an event when window is maximized', async () => {
const w = new BrowserWindow({ show: false });
-@@ -4682,7 +4695,8 @@ describe('BrowserWindow module', () => {
+@@ -4685,7 +4698,8 @@ describe('BrowserWindow module', () => {
// TODO(zcbenz):
// This test does not run on Linux CI. See:
// https://github.com/electron/electron/issues/28699
@@ -146,7 +146,7 @@ $NetBSD$
const w = new BrowserWindow({});
const maximize = once(w, 'maximize');
w.maximize();
-@@ -4699,7 +4713,8 @@ describe('BrowserWindow module', () => {
+@@ -4702,7 +4716,8 @@ describe('BrowserWindow module', () => {
});
// TODO(dsanders11): Enable once maximize event works on Linux again on CI
@@ -156,7 +156,7 @@ $NetBSD$
afterEach(closeAllWindows);
it('should show the window if it is not currently shown', async () => {
const w = new BrowserWindow({ show: false });
-@@ -4736,7 +4751,8 @@ describe('BrowserWindow module', () => {
+@@ -4739,7 +4754,8 @@ describe('BrowserWindow module', () => {
// TODO(dsanders11): Enable once minimize event works on Linux again.
// See https://github.com/electron/electron/issues/28699
@@ -166,7 +166,7 @@ $NetBSD$
const w = new BrowserWindow();
const minimize = once(w, 'minimize');
w.minimize();
-@@ -5210,7 +5226,8 @@ describe('BrowserWindow module', () => {
+@@ -5213,7 +5229,8 @@ describe('BrowserWindow module', () => {
});
// On Linux there is no "resizable" property of a window.
@@ -176,7 +176,7 @@ $NetBSD$
const w = new BrowserWindow({ show: false });
expect(w.resizable).to.be.true('resizable');
-@@ -5349,7 +5366,8 @@ describe('BrowserWindow module', () => {
+@@ -5352,7 +5369,8 @@ describe('BrowserWindow module', () => {
});
});
@@ -186,7 +186,7 @@ $NetBSD$
// Not implemented on Linux.
afterEach(closeAllWindows);
-@@ -6516,7 +6534,8 @@ describe('BrowserWindow module', () => {
+@@ -6519,7 +6537,8 @@ describe('BrowserWindow module', () => {
describe('"transparent" option', () => {
afterEach(closeAllWindows);
diff --git a/electron32/patches/patch-electron_spec_api-clipboard-spec.ts b/electron32/patches/patch-electron_spec_api-clipboard-spec.ts
index 86e45f6fcd..f56ee3c474 100644
--- a/electron32/patches/patch-electron_spec_api-clipboard-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-clipboard-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-clipboard-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-clipboard-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-clipboard-spec.ts
@@ -54,7 +54,8 @@ ifdescribe(process.platform !== 'win32'
});
diff --git a/electron32/patches/patch-electron_spec_api-content-tracing-spec.ts b/electron32/patches/patch-electron_spec_api-content-tracing-spec.ts
index 7d07292e9c..57e5e3e1b6 100644
--- a/electron32/patches/patch-electron_spec_api-content-tracing-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-content-tracing-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-content-tracing-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-content-tracing-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-content-tracing-spec.ts
@@ -9,7 +9,8 @@ import { setTimeout } from 'node:timers/
import { ifdescribe } from './lib/spec-helpers';
diff --git a/electron32/patches/patch-electron_spec_api-crash-reporter-spec.ts b/electron32/patches/patch-electron_spec_api-crash-reporter-spec.ts
index 6b199250d6..f36de54cab 100644
--- a/electron32/patches/patch-electron_spec_api-crash-reporter-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-crash-reporter-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-crash-reporter-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-crash-reporter-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-crash-reporter-spec.ts
@@ -14,7 +14,8 @@ import { setTimeout } from 'node:timers/
import { ifdescribe, ifit, defer, startRemoteControlApp, repeatedly, listen } from './lib/spec-helpers';
diff --git a/electron32/patches/patch-electron_spec_api-desktop-capturer-spec.ts b/electron32/patches/patch-electron_spec_api-desktop-capturer-spec.ts
index 651c26a580..7bec94637a 100644
--- a/electron32/patches/patch-electron_spec_api-desktop-capturer-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-desktop-capturer-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-desktop-capturer-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-desktop-capturer-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-desktop-capturer-spec.ts
@@ -45,7 +45,8 @@ ifdescribe(!process.arch.includes('arm')
});
diff --git a/electron32/patches/patch-electron_spec_api-menu-spec.ts b/electron32/patches/patch-electron_spec_api-menu-spec.ts
index a5d4079308..6af6a17b77 100644
--- a/electron32/patches/patch-electron_spec_api-menu-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-menu-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-menu-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-menu-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-menu-spec.ts
@@ -890,7 +890,8 @@ describe('Menu module', function () {
// https://github.com/electron/electron/issues/35724
diff --git a/electron32/patches/patch-electron_spec_api-native-image-spec.ts b/electron32/patches/patch-electron_spec_api-native-image-spec.ts
index 7dc1a700f6..4b965d343d 100644
--- a/electron32/patches/patch-electron_spec_api-native-image-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-native-image-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-native-image-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-native-image-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-native-image-spec.ts
@@ -428,7 +428,8 @@ describe('nativeImage module', () => {
});
diff --git a/electron32/patches/patch-electron_spec_api-net-log-spec.ts b/electron32/patches/patch-electron_spec_api-net-log-spec.ts
index d888acfac9..b60a348449 100644
--- a/electron32/patches/patch-electron_spec_api-net-log-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-net-log-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-net-log-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-net-log-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-net-log-spec.ts
@@ -121,7 +121,8 @@ describe('netLog module', () => {
expect(JSON.parse(dump).events.some((x: any) => x.params && x.params.bytes && Buffer.from(x.params.bytes, 'base64').includes(unique))).to.be.true('uuid present in dump');
diff --git a/electron32/patches/patch-electron_spec_api-notification-dbus-spec.ts b/electron32/patches/patch-electron_spec_api-notification-dbus-spec.ts
index 90886250f8..7db01e784f 100644
--- a/electron32/patches/patch-electron_spec_api-notification-dbus-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-notification-dbus-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-notification-dbus-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-notification-dbus-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-notification-dbus-spec.ts
@@ -19,7 +19,8 @@ import { ifdescribe } from './lib/spec-h
diff --git a/electron32/patches/patch-electron_spec_api-power-monitor-spec.ts b/electron32/patches/patch-electron_spec_api-power-monitor-spec.ts
index 872e6e4d63..b4c8cab13b 100644
--- a/electron32/patches/patch-electron_spec_api-power-monitor-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-power-monitor-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-power-monitor-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-power-monitor-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-power-monitor-spec.ts
@@ -18,7 +18,8 @@ import { ifdescribe, startRemoteControlA
describe('powerMonitor', () => {
diff --git a/electron32/patches/patch-electron_spec_api-process-spec.ts b/electron32/patches/patch-electron_spec_api-process-spec.ts
index 6d309e88c5..dd5043c5de 100644
--- a/electron32/patches/patch-electron_spec_api-process-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-process-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-process-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-process-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-process-spec.ts
@@ -46,7 +46,8 @@ describe('process module', () => {
it('resolves promise successfully with valid data', async () => {
diff --git a/electron32/patches/patch-electron_spec_api-protocol-spec.ts b/electron32/patches/patch-electron_spec_api-protocol-spec.ts
index d8328b063a..e084428506 100644
--- a/electron32/patches/patch-electron_spec_api-protocol-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-protocol-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-protocol-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-protocol-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-protocol-spec.ts
@@ -1738,7 +1738,8 @@ describe('protocol module', () => {
diff --git a/electron32/patches/patch-electron_spec_api-safe-storage-spec.ts b/electron32/patches/patch-electron_spec_api-safe-storage-spec.ts
index 582de98d22..959017b593 100644
--- a/electron32/patches/patch-electron_spec_api-safe-storage-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-safe-storage-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-safe-storage-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-safe-storage-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-safe-storage-spec.ts
@@ -29,7 +29,8 @@ describe('safeStorage module', () => {
diff --git a/electron32/patches/patch-electron_spec_api-screen-spec.ts b/electron32/patches/patch-electron_spec_api-screen-spec.ts
index e148d35be7..b3572a2c44 100644
--- a/electron32/patches/patch-electron_spec_api-screen-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-screen-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-screen-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-screen-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-screen-spec.ts
@@ -95,7 +95,8 @@ describe('screen module', () => {
diff --git a/electron32/patches/patch-electron_spec_api-shell-spec.ts b/electron32/patches/patch-electron_spec_api-shell-spec.ts
index e1877f429b..9ab07b62f1 100644
--- a/electron32/patches/patch-electron_spec_api-shell-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-shell-spec.ts
@@ -4,9 +4,9 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-shell-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-shell-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-shell-spec.ts
-@@ -26,7 +26,8 @@ describe('shell module', () => {
+@@ -37,7 +37,8 @@ describe('shell module', () => {
afterEach(async () => {
// reset env vars to prevent side effects
@@ -16,7 +16,7 @@ $NetBSD$
process.env.DE = envVars.de;
process.env.BROWSER = envVars.browser;
process.env.DISPLAY = envVars.display;
-@@ -42,6 +43,11 @@ describe('shell module', () => {
+@@ -57,6 +58,11 @@ describe('shell module', () => {
process.env.DE = 'generic';
process.env.DISPLAY = '';
requestReceived = Promise.resolve();
diff --git a/electron32/patches/patch-electron_spec_api-subframe-spec.ts b/electron32/patches/patch-electron_spec_api-subframe-spec.ts
index 8df5b9c369..b4e95c6269 100644
--- a/electron32/patches/patch-electron_spec_api-subframe-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-subframe-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-subframe-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-subframe-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-subframe-spec.ts
@@ -218,7 +218,8 @@ describe('renderer nodeIntegrationInSubF
});
diff --git a/electron32/patches/patch-electron_spec_api-tray-spec.ts b/electron32/patches/patch-electron_spec_api-tray-spec.ts
index 5f2b280d82..f59a918dde 100644
--- a/electron32/patches/patch-electron_spec_api-tray-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-tray-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-tray-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-tray-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-tray-spec.ts
@@ -131,7 +131,8 @@ describe('tray module', () => {
describe('tray.getBounds()', () => {
diff --git a/electron32/patches/patch-electron_spec_api-utility-process-spec.ts b/electron32/patches/patch-electron_spec_api-utility-process-spec.ts
index 7babc62620..5e8b3571e9 100644
--- a/electron32/patches/patch-electron_spec_api-utility-process-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-utility-process-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-utility-process-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-utility-process-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-utility-process-spec.ts
@@ -438,7 +438,8 @@ describe('utilityProcess module', () =>
expect(output).to.include(result);
diff --git a/electron32/patches/patch-electron_spec_api-web-frame-main-spec.ts b/electron32/patches/patch-electron_spec_api-web-frame-main-spec.ts
index 7b2631df40..74b773799e 100644
--- a/electron32/patches/patch-electron_spec_api-web-frame-main-spec.ts
+++ b/electron32/patches/patch-electron_spec_api-web-frame-main-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/api-web-frame-main-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/api-web-frame-main-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/api-web-frame-main-spec.ts
@@ -292,7 +292,8 @@ describe('webFrameMain module', () => {
});
diff --git a/electron32/patches/patch-electron_spec_chromium-spec.ts b/electron32/patches/patch-electron_spec_chromium-spec.ts
index b41213da8a..049dfa8fc1 100644
--- a/electron32/patches/patch-electron_spec_chromium-spec.ts
+++ b/electron32/patches/patch-electron_spec_chromium-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/chromium-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/chromium-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/chromium-spec.ts
@@ -474,13 +474,17 @@ describe('command line switches', () =>
it('should not set an invalid locale', async () => testLocale('asdfkl', `${currentLocale}|${currentSystemLocale}|${currentPreferredLanguages}`));
@@ -38,7 +38,7 @@ $NetBSD$
const rc = await startRemoteControlApp(['--trace-startup=*', `--trace-startup-file=${outputFilePath}`, '--trace-startup-duration=1', '--enable-logging']);
const stderrComplete = new Promise<string>(resolve => {
let stderr = '';
-@@ -2917,12 +2922,13 @@ describe('font fallback', () => {
+@@ -2924,12 +2929,13 @@ describe('font fallback', () => {
expect(fonts[0].familyName).to.equal('Arial');
} else if (process.platform === 'darwin') {
expect(fonts[0].familyName).to.equal('Helvetica');
@@ -54,7 +54,7 @@ $NetBSD$
const html = `
<html lang="ja-JP">
<head>
-@@ -3318,7 +3324,8 @@ describe('navigator.clipboard.write', ()
+@@ -3326,7 +3332,8 @@ describe('navigator.clipboard.write', ()
});
});
diff --git a/electron32/patches/patch-electron_spec_crash-spec.ts b/electron32/patches/patch-electron_spec_crash-spec.ts
index 2ba38ef7ec..c94e2b2d7b 100644
--- a/electron32/patches/patch-electron_spec_crash-spec.ts
+++ b/electron32/patches/patch-electron_spec_crash-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/crash-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/crash-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/crash-spec.ts
@@ -47,7 +47,8 @@ const shouldRunCase = (crashCase: string
if (process.platform === 'win32') {
diff --git a/electron32/patches/patch-electron_spec_fixtures_api_safe-storage_decrypt-app_main.js b/electron32/patches/patch-electron_spec_fixtures_api_safe-storage_decrypt-app_main.js
index eef16edb84..84b3175bb7 100644
--- a/electron32/patches/patch-electron_spec_fixtures_api_safe-storage_decrypt-app_main.js
+++ b/electron32/patches/patch-electron_spec_fixtures_api_safe-storage_decrypt-app_main.js
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/fixtures/api/safe-storage/decrypt-app/main.js.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/fixtures/api/safe-storage/decrypt-app/main.js.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/fixtures/api/safe-storage/decrypt-app/main.js
@@ -7,7 +7,8 @@ const pathToEncryptedString = path.resol
const readFile = fs.readFile;
diff --git a/electron32/patches/patch-electron_spec_fixtures_api_safe-storage_encrypt-app_main.js b/electron32/patches/patch-electron_spec_fixtures_api_safe-storage_encrypt-app_main.js
index ac36a50620..155be6d8b6 100644
--- a/electron32/patches/patch-electron_spec_fixtures_api_safe-storage_encrypt-app_main.js
+++ b/electron32/patches/patch-electron_spec_fixtures_api_safe-storage_encrypt-app_main.js
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/fixtures/api/safe-storage/encrypt-app/main.js.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/fixtures/api/safe-storage/encrypt-app/main.js.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/fixtures/api/safe-storage/encrypt-app/main.js
@@ -7,7 +7,8 @@ const pathToEncryptedString = path.resol
const writeFile = fs.writeFile;
diff --git a/electron32/patches/patch-electron_spec_fixtures_crash-cases_safe-storage_index.js b/electron32/patches/patch-electron_spec_fixtures_crash-cases_safe-storage_index.js
index 29ec26ec15..39c6a8db02 100644
--- a/electron32/patches/patch-electron_spec_fixtures_crash-cases_safe-storage_index.js
+++ b/electron32/patches/patch-electron_spec_fixtures_crash-cases_safe-storage_index.js
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/fixtures/crash-cases/safe-storage/index.js.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/fixtures/crash-cases/safe-storage/index.js.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/fixtures/crash-cases/safe-storage/index.js
@@ -22,7 +22,8 @@ const { expect } = require('chai');
await app.whenReady();
diff --git a/electron32/patches/patch-electron_spec_fixtures_native-addon_uv-dlopen_index.js b/electron32/patches/patch-electron_spec_fixtures_native-addon_uv-dlopen_index.js
index 301844f518..c781895543 100644
--- a/electron32/patches/patch-electron_spec_fixtures_native-addon_uv-dlopen_index.js
+++ b/electron32/patches/patch-electron_spec_fixtures_native-addon_uv-dlopen_index.js
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/fixtures/native-addon/uv-dlopen/index.js.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/fixtures/native-addon/uv-dlopen/index.js.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/fixtures/native-addon/uv-dlopen/index.js
@@ -4,7 +4,7 @@ const testLoadLibrary = require('./build
diff --git a/electron32/patches/patch-electron_spec_node-spec.ts b/electron32/patches/patch-electron_spec_node-spec.ts
index e52eb9a724..c2ab1130ba 100644
--- a/electron32/patches/patch-electron_spec_node-spec.ts
+++ b/electron32/patches/patch-electron_spec_node-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/node-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/node-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/node-spec.ts
@@ -148,7 +148,8 @@ describe('node feature', () => {
});
diff --git a/electron32/patches/patch-electron_spec_version-bump-spec.ts b/electron32/patches/patch-electron_spec_version-bump-spec.ts
index ff0b3888c6..fd4f981c95 100644
--- a/electron32/patches/patch-electron_spec_version-bump-spec.ts
+++ b/electron32/patches/patch-electron_spec_version-bump-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/version-bump-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/version-bump-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/version-bump-spec.ts
@@ -53,7 +53,8 @@ class GitFake {
}
diff --git a/electron32/patches/patch-electron_spec_visibility-state-spec.ts b/electron32/patches/patch-electron_spec_visibility-state-spec.ts
index e3c2ee77ef..0444dd44b6 100644
--- a/electron32/patches/patch-electron_spec_visibility-state-spec.ts
+++ b/electron32/patches/patch-electron_spec_visibility-state-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/visibility-state-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/visibility-state-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/visibility-state-spec.ts
@@ -12,7 +12,8 @@ import { closeWindow } from './lib/windo
diff --git a/electron32/patches/patch-electron_spec_webview-spec.ts b/electron32/patches/patch-electron_spec_webview-spec.ts
index 03b8fca047..c7e65348fb 100644
--- a/electron32/patches/patch-electron_spec_webview-spec.ts
+++ b/electron32/patches/patch-electron_spec_webview-spec.ts
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- electron/spec/webview-spec.ts.orig 2024-12-05 00:03:24.000000000 +0000
+--- electron/spec/webview-spec.ts.orig 2025-01-21 17:36:55.000000000 +0000
+++ electron/spec/webview-spec.ts
@@ -559,7 +559,8 @@ describe('<webview> tag', function () {
});
diff --git a/electron32/patches/patch-media_audio_sndio_audio__manager__sndio.cc b/electron32/patches/patch-media_audio_sndio_audio__manager__sndio.cc
index ca354b2d15..012e7fe96f 100644
--- a/electron32/patches/patch-media_audio_sndio_audio__manager__sndio.cc
+++ b/electron32/patches/patch-media_audio_sndio_audio__manager__sndio.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- media/audio/sndio/audio_manager_sndio.cc.orig 2025-01-19 14:12:04.049477446 +0000
+--- media/audio/sndio/audio_manager_sndio.cc.orig 2025-02-15 09:43:46.387325509 +0000
+++ media/audio/sndio/audio_manager_sndio.cc
@@ -0,0 +1,213 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-media_audio_sndio_audio__manager__sndio.h b/electron32/patches/patch-media_audio_sndio_audio__manager__sndio.h
index c3a16eb2d0..9a9d60e64d 100644
--- a/electron32/patches/patch-media_audio_sndio_audio__manager__sndio.h
+++ b/electron32/patches/patch-media_audio_sndio_audio__manager__sndio.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- media/audio/sndio/audio_manager_sndio.h.orig 2025-01-19 14:12:04.049601607 +0000
+--- media/audio/sndio/audio_manager_sndio.h.orig 2025-02-15 09:43:46.387473736 +0000
+++ media/audio/sndio/audio_manager_sndio.h
@@ -0,0 +1,66 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-media_audio_sndio_sndio__input.cc b/electron32/patches/patch-media_audio_sndio_sndio__input.cc
index 0e6170601b..e2e3f2ce0f 100644
--- a/electron32/patches/patch-media_audio_sndio_sndio__input.cc
+++ b/electron32/patches/patch-media_audio_sndio_sndio__input.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- media/audio/sndio/sndio_input.cc.orig 2025-01-19 14:12:04.049702553 +0000
+--- media/audio/sndio/sndio_input.cc.orig 2025-02-15 09:43:46.387604660 +0000
+++ media/audio/sndio/sndio_input.cc
@@ -0,0 +1,200 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-media_audio_sndio_sndio__input.h b/electron32/patches/patch-media_audio_sndio_sndio__input.h
index d23704755f..33644f8abb 100644
--- a/electron32/patches/patch-media_audio_sndio_sndio__input.h
+++ b/electron32/patches/patch-media_audio_sndio_sndio__input.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- media/audio/sndio/sndio_input.h.orig 2025-01-19 14:12:04.049821344 +0000
+--- media/audio/sndio/sndio_input.h.orig 2025-02-15 09:43:46.387744251 +0000
+++ media/audio/sndio/sndio_input.h
@@ -0,0 +1,91 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-media_audio_sndio_sndio__output.cc b/electron32/patches/patch-media_audio_sndio_sndio__output.cc
index 98836007af..d5a96a23c2 100644
--- a/electron32/patches/patch-media_audio_sndio_sndio__output.cc
+++ b/electron32/patches/patch-media_audio_sndio_sndio__output.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- media/audio/sndio/sndio_output.cc.orig 2025-01-19 14:12:04.049926297 +0000
+--- media/audio/sndio/sndio_output.cc.orig 2025-02-15 09:43:46.387875525 +0000
+++ media/audio/sndio/sndio_output.cc
@@ -0,0 +1,187 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-media_audio_sndio_sndio__output.h b/electron32/patches/patch-media_audio_sndio_sndio__output.h
index d7b1836b49..b9784242de 100644
--- a/electron32/patches/patch-media_audio_sndio_sndio__output.h
+++ b/electron32/patches/patch-media_audio_sndio_sndio__output.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- media/audio/sndio/sndio_output.h.orig 2025-01-19 14:12:04.050054426 +0000
+--- media/audio/sndio/sndio_output.h.orig 2025-02-15 09:43:46.388022781 +0000
+++ media/audio/sndio/sndio_output.h
@@ -0,0 +1,88 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-sandbox_policy_freebsd_sandbox__freebsd.cc b/electron32/patches/patch-sandbox_policy_freebsd_sandbox__freebsd.cc
index 9f3d6a97ea..5272e49741 100644
--- a/electron32/patches/patch-sandbox_policy_freebsd_sandbox__freebsd.cc
+++ b/electron32/patches/patch-sandbox_policy_freebsd_sandbox__freebsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- sandbox/policy/freebsd/sandbox_freebsd.cc.orig 2025-01-19 14:12:04.073711762 +0000
+--- sandbox/policy/freebsd/sandbox_freebsd.cc.orig 2025-02-15 09:43:46.413407978 +0000
+++ sandbox/policy/freebsd/sandbox_freebsd.cc
@@ -0,0 +1,245 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-sandbox_policy_freebsd_sandbox__freebsd.h b/electron32/patches/patch-sandbox_policy_freebsd_sandbox__freebsd.h
index a3ebf4c5b6..1c00cd860c 100644
--- a/electron32/patches/patch-sandbox_policy_freebsd_sandbox__freebsd.h
+++ b/electron32/patches/patch-sandbox_policy_freebsd_sandbox__freebsd.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- sandbox/policy/freebsd/sandbox_freebsd.h.orig 2025-01-19 14:12:04.073840852 +0000
+--- sandbox/policy/freebsd/sandbox_freebsd.h.orig 2025-02-15 09:43:46.413556325 +0000
+++ sandbox/policy/freebsd/sandbox_freebsd.h
@@ -0,0 +1,278 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-sandbox_policy_netbsd_sandbox__netbsd.cc b/electron32/patches/patch-sandbox_policy_netbsd_sandbox__netbsd.cc
index bf7be7a9bd..23bede0760 100644
--- a/electron32/patches/patch-sandbox_policy_netbsd_sandbox__netbsd.cc
+++ b/electron32/patches/patch-sandbox_policy_netbsd_sandbox__netbsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- sandbox/policy/netbsd/sandbox_netbsd.cc.orig 2025-01-19 14:12:04.074204418 +0000
+--- sandbox/policy/netbsd/sandbox_netbsd.cc.orig 2025-02-15 09:43:46.413996188 +0000
+++ sandbox/policy/netbsd/sandbox_netbsd.cc
@@ -0,0 +1,245 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-sandbox_policy_netbsd_sandbox__netbsd.h b/electron32/patches/patch-sandbox_policy_netbsd_sandbox__netbsd.h
index 396025777c..25d99e8aba 100644
--- a/electron32/patches/patch-sandbox_policy_netbsd_sandbox__netbsd.h
+++ b/electron32/patches/patch-sandbox_policy_netbsd_sandbox__netbsd.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- sandbox/policy/netbsd/sandbox_netbsd.h.orig 2025-01-19 14:12:04.074323539 +0000
+--- sandbox/policy/netbsd/sandbox_netbsd.h.orig 2025-02-15 09:43:46.414143864 +0000
+++ sandbox/policy/netbsd/sandbox_netbsd.h
@@ -0,0 +1,278 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-sandbox_policy_openbsd_sandbox__openbsd.cc b/electron32/patches/patch-sandbox_policy_openbsd_sandbox__openbsd.cc
index d0e9b85a6c..812e1b01e1 100644
--- a/electron32/patches/patch-sandbox_policy_openbsd_sandbox__openbsd.cc
+++ b/electron32/patches/patch-sandbox_policy_openbsd_sandbox__openbsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- sandbox/policy/openbsd/sandbox_openbsd.cc.orig 2025-01-19 14:12:04.074488900 +0000
+--- sandbox/policy/openbsd/sandbox_openbsd.cc.orig 2025-02-15 09:43:46.414336938 +0000
+++ sandbox/policy/openbsd/sandbox_openbsd.cc
@@ -0,0 +1,424 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-sandbox_policy_openbsd_sandbox__openbsd.h b/electron32/patches/patch-sandbox_policy_openbsd_sandbox__openbsd.h
index dfce0083b9..4128f0d301 100644
--- a/electron32/patches/patch-sandbox_policy_openbsd_sandbox__openbsd.h
+++ b/electron32/patches/patch-sandbox_policy_openbsd_sandbox__openbsd.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- sandbox/policy/openbsd/sandbox_openbsd.h.orig 2025-01-19 14:12:04.074632900 +0000
+--- sandbox/policy/openbsd/sandbox_openbsd.h.orig 2025-02-15 09:43:46.414500445 +0000
+++ sandbox/policy/openbsd/sandbox_openbsd.h
@@ -0,0 +1,282 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-services_device_hid_hid__connection__fido.cc b/electron32/patches/patch-services_device_hid_hid__connection__fido.cc
index 142274e83a..5cb81002a8 100644
--- a/electron32/patches/patch-services_device_hid_hid__connection__fido.cc
+++ b/electron32/patches/patch-services_device_hid_hid__connection__fido.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/device/hid/hid_connection_fido.cc.orig 2025-01-19 14:12:04.076021495 +0000
+--- services/device/hid/hid_connection_fido.cc.orig 2025-02-15 09:43:46.416177837 +0000
+++ services/device/hid/hid_connection_fido.cc
@@ -0,0 +1,216 @@
+// Copyright 2014 The Chromium Authors
diff --git a/electron32/patches/patch-services_device_hid_hid__connection__fido.h b/electron32/patches/patch-services_device_hid_hid__connection__fido.h
index 5a8b0f08db..1368e9795f 100644
--- a/electron32/patches/patch-services_device_hid_hid__connection__fido.h
+++ b/electron32/patches/patch-services_device_hid_hid__connection__fido.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/device/hid/hid_connection_fido.h.orig 2025-01-19 14:12:04.076145355 +0000
+--- services/device/hid/hid_connection_fido.h.orig 2025-02-15 09:43:46.416326074 +0000
+++ services/device/hid/hid_connection_fido.h
@@ -0,0 +1,60 @@
+// Copyright 2014 The Chromium Authors
diff --git a/electron32/patches/patch-services_device_hid_hid__connection__freebsd.cc b/electron32/patches/patch-services_device_hid_hid__connection__freebsd.cc
index 68682b96cb..aa32ca71d5 100644
--- a/electron32/patches/patch-services_device_hid_hid__connection__freebsd.cc
+++ b/electron32/patches/patch-services_device_hid_hid__connection__freebsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/device/hid/hid_connection_freebsd.cc.orig 2025-01-19 14:12:04.076252443 +0000
+--- services/device/hid/hid_connection_freebsd.cc.orig 2025-02-15 09:43:46.416457208 +0000
+++ services/device/hid/hid_connection_freebsd.cc
@@ -0,0 +1,240 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-services_device_hid_hid__connection__freebsd.h b/electron32/patches/patch-services_device_hid_hid__connection__freebsd.h
index 5eefa81ce4..7478aa9339 100644
--- a/electron32/patches/patch-services_device_hid_hid__connection__freebsd.h
+++ b/electron32/patches/patch-services_device_hid_hid__connection__freebsd.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/device/hid/hid_connection_freebsd.h.orig 2025-01-19 14:12:04.076379780 +0000
+--- services/device/hid/hid_connection_freebsd.h.orig 2025-02-15 09:43:46.416604414 +0000
+++ services/device/hid/hid_connection_freebsd.h
@@ -0,0 +1,67 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-services_device_hid_hid__service__fido.cc b/electron32/patches/patch-services_device_hid_hid__service__fido.cc
index f08d434b46..41d93795e9 100644
--- a/electron32/patches/patch-services_device_hid_hid__service__fido.cc
+++ b/electron32/patches/patch-services_device_hid_hid__service__fido.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/device/hid/hid_service_fido.cc.orig 2025-01-19 14:12:04.076585580 +0000
+--- services/device/hid/hid_service_fido.cc.orig 2025-02-15 09:43:46.416868997 +0000
+++ services/device/hid/hid_service_fido.cc
@@ -0,0 +1,396 @@
+// Copyright 2014 The Chromium Authors
diff --git a/electron32/patches/patch-services_device_hid_hid__service__fido.h b/electron32/patches/patch-services_device_hid_hid__service__fido.h
index 5073c78827..e316807026 100644
--- a/electron32/patches/patch-services_device_hid_hid__service__fido.h
+++ b/electron32/patches/patch-services_device_hid_hid__service__fido.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/device/hid/hid_service_fido.h.orig 2025-01-19 14:12:04.076725561 +0000
+--- services/device/hid/hid_service_fido.h.orig 2025-02-15 09:43:46.417038625 +0000
+++ services/device/hid/hid_service_fido.h
@@ -0,0 +1,65 @@
+// Copyright 2014 The Chromium Authors
diff --git a/electron32/patches/patch-services_device_hid_hid__service__freebsd.cc b/electron32/patches/patch-services_device_hid_hid__service__freebsd.cc
index 91b3ca1cd3..ea5343689c 100644
--- a/electron32/patches/patch-services_device_hid_hid__service__freebsd.cc
+++ b/electron32/patches/patch-services_device_hid_hid__service__freebsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/device/hid/hid_service_freebsd.cc.orig 2025-01-19 14:12:04.076830515 +0000
+--- services/device/hid/hid_service_freebsd.cc.orig 2025-02-15 09:43:46.417171463 +0000
+++ services/device/hid/hid_service_freebsd.cc
@@ -0,0 +1,395 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-services_device_hid_hid__service__freebsd.h b/electron32/patches/patch-services_device_hid_hid__service__freebsd.h
index 841e6f12a9..60049462eb 100644
--- a/electron32/patches/patch-services_device_hid_hid__service__freebsd.h
+++ b/electron32/patches/patch-services_device_hid_hid__service__freebsd.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/device/hid/hid_service_freebsd.h.orig 2025-01-19 14:12:04.076978432 +0000
+--- services/device/hid/hid_service_freebsd.h.orig 2025-02-15 09:43:46.417330581 +0000
+++ services/device/hid/hid_service_freebsd.h
@@ -0,0 +1,49 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-services_device_usb_usb__service__fake.cc b/electron32/patches/patch-services_device_usb_usb__service__fake.cc
index db5abbf387..eb2499b5a9 100644
--- a/electron32/patches/patch-services_device_usb_usb__service__fake.cc
+++ b/electron32/patches/patch-services_device_usb_usb__service__fake.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/device/usb/usb_service_fake.cc.orig 2025-01-19 14:12:04.077871034 +0000
+--- services/device/usb/usb_service_fake.cc.orig 2025-02-15 09:43:46.418442026 +0000
+++ services/device/usb/usb_service_fake.cc
@@ -0,0 +1,49 @@
+// Copyright 2014 The Chromium Authors
diff --git a/electron32/patches/patch-services_device_usb_usb__service__fake.h b/electron32/patches/patch-services_device_usb_usb__service__fake.h
index 58362efd4d..8bd29dc141 100644
--- a/electron32/patches/patch-services_device_usb_usb__service__fake.h
+++ b/electron32/patches/patch-services_device_usb_usb__service__fake.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/device/usb/usb_service_fake.h.orig 2025-01-19 14:12:04.077967552 +0000
+--- services/device/usb/usb_service_fake.h.orig 2025-02-15 09:43:46.418573090 +0000
+++ services/device/usb/usb_service_fake.h
@@ -0,0 +1,48 @@
+// Copyright 2015 The Chromium Authors
diff --git a/electron32/patches/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__bsd.cc b/electron32/patches/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__bsd.cc
index 70effe257a..12b1b6173e 100644
--- a/electron32/patches/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__bsd.cc
+++ b/electron32/patches/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__bsd.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_bsd.cc.orig 2025-01-19 14:12:04.082629179 +0000
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_bsd.cc.orig 2025-02-15 09:43:46.423238583 +0000
+++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_bsd.cc
@@ -0,0 +1,66 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
diff --git a/electron32/patches/patch-third__party_blink_public_platform_web__worker__fetch__context.h b/electron32/patches/patch-third__party_blink_public_platform_web__worker__fetch__context.h
new file mode 100644
index 0000000000..370dcaa2e4
--- /dev/null
+++ b/electron32/patches/patch-third__party_blink_public_platform_web__worker__fetch__context.h
@@ -0,0 +1,29 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/blink/public/platform/web_worker_fetch_context.h.orig 2024-10-18 12:34:34.672521400 +0000
++++ third_party/blink/public/platform/web_worker_fetch_context.h
+@@ -33,19 +33,12 @@ class SiteForCookies;
+
+ namespace blink {
+
++class AcceptLanguagesWatcher;
+ class WebDocumentSubresourceFilter;
+ class URLLoaderFactory;
+ class WebURLRequest;
+ class URLLoaderThrottle;
+
+-// Helper class allowing DedicatedOrSharedWorkerFetchContextImpl to notify blink
+-// upon an accept languages update. This class will be extended by
+-// WorkerNavigator.
+-class AcceptLanguagesWatcher {
+- public:
+- virtual void NotifyUpdate() = 0;
+-};
+-
+ // WebWorkerFetchContext is a per-worker object created on the main thread,
+ // passed to a worker (dedicated, shared and service worker) and initialized on
+ // the worker thread by InitializeOnWorkerThread(). It contains information
diff --git a/electron32/patches/patch-third__party_blink_renderer_core_workers_worker__navigator.cc b/electron32/patches/patch-third__party_blink_renderer_core_workers_worker__navigator.cc
new file mode 100644
index 0000000000..7d65f135cc
--- /dev/null
+++ b/electron32/patches/patch-third__party_blink_renderer_core_workers_worker__navigator.cc
@@ -0,0 +1,18 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/blink/renderer/core/workers/worker_navigator.cc.orig 2024-10-18 12:34:35.760020500 +0000
++++ third_party/blink/renderer/core/workers/worker_navigator.cc
+@@ -61,4 +61,9 @@ void WorkerNavigator::NotifyUpdate() {
+ *Event::Create(event_type_names::kLanguagechange));
+ }
+
++void WorkerNavigator::Trace(Visitor* visitor) const {
++ NavigatorBase::Trace(visitor);
++ AcceptLanguagesWatcher::Trace(visitor);
++}
++
+ } // namespace blink
diff --git a/electron32/patches/patch-third__party_blink_renderer_core_workers_worker__navigator.h b/electron32/patches/patch-third__party_blink_renderer_core_workers_worker__navigator.h
new file mode 100644
index 0000000000..191cb87074
--- /dev/null
+++ b/electron32/patches/patch-third__party_blink_renderer_core_workers_worker__navigator.h
@@ -0,0 +1,26 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/blink/renderer/core/workers/worker_navigator.h.orig 2024-10-18 12:34:35.760020500 +0000
++++ third_party/blink/renderer/core/workers/worker_navigator.h
+@@ -29,6 +29,7 @@
+ #include "third_party/blink/public/platform/web_worker_fetch_context.h"
+ #include "third_party/blink/renderer/core/core_export.h"
+ #include "third_party/blink/renderer/core/execution_context/navigator_base.h"
++#include "third_party/blink/renderer/platform/accept_languages_watcher.h"
+ #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+
+ namespace blink {
+@@ -46,6 +47,9 @@ class CORE_EXPORT WorkerNavigator final
+
+ // AcceptLanguagesWatcher override
+ void NotifyUpdate() override;
++
++ // Both NavigatorLanguage and AcceptLanguagesWatcher override
++ void Trace(Visitor* visitor) const override;
+ };
+
+ } // namespace blink
diff --git a/electron32/patches/patch-third__party_blink_renderer_modules_service__worker_web__service__worker__fetch__context__impl.cc b/electron32/patches/patch-third__party_blink_renderer_modules_service__worker_web__service__worker__fetch__context__impl.cc
new file mode 100644
index 0000000000..8ca4552920
--- /dev/null
+++ b/electron32/patches/patch-third__party_blink_renderer_modules_service__worker_web__service__worker__fetch__context__impl.cc
@@ -0,0 +1,32 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.cc.orig 2024-10-18 12:34:36.155838700 +0000
++++ third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.cc
+@@ -18,6 +18,7 @@
+ #include "third_party/blink/public/platform/url_loader_throttle_provider.h"
+ #include "third_party/blink/public/platform/web_url_request_extra_data.h"
+ #include "third_party/blink/public/platform/websocket_handshake_throttle_provider.h"
++#include "third_party/blink/renderer/platform/accept_languages_watcher.h"
+ #include "third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader_factory.h"
+ #include "third_party/blink/renderer/platform/loader/internet_disconnected_url_loader.h"
+
+@@ -226,9 +227,12 @@ void WebServiceWorkerFetchContextImpl::U
+
+ void WebServiceWorkerFetchContextImpl::NotifyUpdate(
+ const RendererPreferences& new_prefs) {
+- DCHECK(accept_languages_watcher_);
+- if (renderer_preferences_.accept_languages != new_prefs.accept_languages)
+- accept_languages_watcher_->NotifyUpdate();
++ // Reserving `watcher` on the stack ensures it is not GC'd within this scope.
++ auto* watcher = accept_languages_watcher_.Get();
++ if (watcher &&
++ renderer_preferences_.accept_languages != new_prefs.accept_languages) {
++ watcher->NotifyUpdate();
++ }
+ renderer_preferences_ = new_prefs;
+ }
+
diff --git a/electron32/patches/patch-third__party_blink_renderer_modules_service__worker_web__service__worker__fetch__context__impl.h b/electron32/patches/patch-third__party_blink_renderer_modules_service__worker_web__service__worker__fetch__context__impl.h
new file mode 100644
index 0000000000..f797cb6d5d
--- /dev/null
+++ b/electron32/patches/patch-third__party_blink_renderer_modules_service__worker_web__service__worker__fetch__context__impl.h
@@ -0,0 +1,36 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h.orig 2024-10-18 12:34:36.155838700 +0000
++++ third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h
+@@ -6,16 +6,16 @@
+ #define THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_WEB_SERVICE_WORKER_FETCH_CONTEXT_IMPL_H_
+
+ #include "base/memory/raw_ptr.h"
++#include "base/task/single_thread_task_runner.h"
+ #include "mojo/public/cpp/bindings/pending_receiver.h"
+ #include "mojo/public/cpp/bindings/receiver.h"
+ #include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h"
+ #include "third_party/blink/public/mojom/renderer_preference_watcher.mojom-blink.h"
+ #include "third_party/blink/public/mojom/service_worker/service_worker.mojom-forward.h"
+ #include "third_party/blink/public/mojom/worker/subresource_loader_updater.mojom-blink.h"
+-
+-#include "base/task/single_thread_task_runner.h"
+ #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_fetch_context.h"
+ #include "third_party/blink/public/platform/web_common.h"
++#include "third_party/blink/renderer/platform/heap/persistent.h"
+ #include "third_party/blink/renderer/platform/weborigin/kurl.h"
+ #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+ #include "third_party/blink/renderer/platform/wtf/vector.h"
+@@ -135,7 +135,7 @@ class BLINK_EXPORT WebServiceWorkerFetch
+ // This is owned by ThreadedMessagingProxyBase on the main thread.
+ raw_ptr<base::WaitableEvent> terminate_sync_load_event_ = nullptr;
+
+- raw_ptr<AcceptLanguagesWatcher> accept_languages_watcher_ = nullptr;
++ WeakPersistent<AcceptLanguagesWatcher> accept_languages_watcher_;
+
+ Vector<String> cors_exempt_header_list_;
+ bool is_offline_mode_ = false;
diff --git a/electron32/patches/patch-third__party_blink_renderer_platform_BUILD.gn b/electron32/patches/patch-third__party_blink_renderer_platform_BUILD.gn
index 80aa3fc010..8900a07aad 100644
--- a/electron32/patches/patch-third__party_blink_renderer_platform_BUILD.gn
+++ b/electron32/patches/patch-third__party_blink_renderer_platform_BUILD.gn
@@ -6,7 +6,15 @@ $NetBSD$
--- third_party/blink/renderer/platform/BUILD.gn.orig 2024-10-18 12:34:36.419717800 +0000
+++ third_party/blink/renderer/platform/BUILD.gn
-@@ -2003,7 +2003,7 @@ static_library("test_support") {
+@@ -335,6 +335,7 @@ component("platform") {
+ output_name = "blink_platform"
+
+ sources = [
++ "accept_languages_watcher.h",
+ "animation/animation_translation_util.cc",
+ "animation/animation_translation_util.h",
+ "animation/compositor_animation.cc",
+@@ -2003,7 +2004,7 @@ static_library("test_support") {
]
# fuzzed_data_provider may not work with a custom toolchain.
diff --git a/electron32/patches/patch-third__party_blink_renderer_platform_accept__languages__watcher.h b/electron32/patches/patch-third__party_blink_renderer_platform_accept__languages__watcher.h
new file mode 100644
index 0000000000..462c6ca340
--- /dev/null
+++ b/electron32/patches/patch-third__party_blink_renderer_platform_accept__languages__watcher.h
@@ -0,0 +1,31 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/blink/renderer/platform/accept_languages_watcher.h.orig 2025-02-15 09:43:46.445747966 +0000
++++ third_party/blink/renderer/platform/accept_languages_watcher.h
+@@ -0,0 +1,22 @@
++// Copyright 2024 The Chromium Authors
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_ACCEPT_LANGUAGES_WATCHER_H_
++#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_ACCEPT_LANGUAGES_WATCHER_H_
++
++#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
++
++namespace blink {
++
++// Helper class allowing DedicatedOrSharedWorkerFetchContextImpl to notify blink
++// upon an accept languages update. This class will be extended by
++// WorkerNavigator.
++class AcceptLanguagesWatcher : public GarbageCollectedMixin {
++ public:
++ virtual void NotifyUpdate() = 0;
++};
++
++} // namespace blink
++
++#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_ACCEPT_LANGUAGES_WATCHER_H_
diff --git a/electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_DEPS b/electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_DEPS
new file mode 100644
index 0000000000..29b45320ec
--- /dev/null
+++ b/electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_DEPS
@@ -0,0 +1,16 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/blink/renderer/platform/loader/fetch/url_loader/DEPS.orig 2024-10-18 12:34:36.919489100 +0000
++++ third_party/blink/renderer/platform/loader/fetch/url_loader/DEPS
+@@ -28,4 +28,7 @@ specific_include_rules = {
+ "web_url_loader_unittest.cc": [
+ "+net/test/cert_test_util.h"
+ ],
++ "dedicated_or_shared_worker_fetch_context_impl.cc": [
++ "+third_party/blink/renderer/platform/accept_languages_watcher.h",
++ ],
+ }
diff --git a/electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_dedicated__or__shared__worker__fetch__context__impl.cc b/electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_dedicated__or__shared__worker__fetch__context__impl.cc
new file mode 100644
index 0000000000..1d5c0506d3
--- /dev/null
+++ b/electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_dedicated__or__shared__worker__fetch__context__impl.cc
@@ -0,0 +1,33 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.cc.orig 2024-10-18 12:34:36.923487200 +0000
++++ third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.cc
+@@ -28,6 +28,7 @@
+ #include "third_party/blink/public/platform/web_security_origin.h"
+ #include "third_party/blink/public/platform/web_url_request_extra_data.h"
+ #include "third_party/blink/public/platform/websocket_handshake_throttle_provider.h"
++#include "third_party/blink/renderer/platform/accept_languages_watcher.h"
+ #include "third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader.h"
+ #include "third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader_factory.h"
+ #include "url/url_constants.h"
+@@ -600,9 +601,13 @@ void DedicatedOrSharedWorkerFetchContext
+
+ void DedicatedOrSharedWorkerFetchContextImpl::NotifyUpdate(
+ const RendererPreferences& new_prefs) {
+- if (accept_languages_watcher_ &&
+- renderer_preferences_.accept_languages != new_prefs.accept_languages)
+- accept_languages_watcher_->NotifyUpdate();
++ // Reserving `accept_languages_watcher` on the stack ensures it is not GC'd
++ // within this scope.
++ auto* accept_languages_watcher = accept_languages_watcher_.Get();
++ if (accept_languages_watcher &&
++ renderer_preferences_.accept_languages != new_prefs.accept_languages) {
++ accept_languages_watcher->NotifyUpdate();
++ }
+ renderer_preferences_ = new_prefs;
+ for (auto& watcher : child_preference_watchers_)
+ watcher->NotifyUpdate(new_prefs);
diff --git a/electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_dedicated__or__shared__worker__fetch__context__impl.h b/electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_dedicated__or__shared__worker__fetch__context__impl.h
new file mode 100644
index 0000000000..7018406726
--- /dev/null
+++ b/electron32/patches/patch-third__party_blink_renderer_platform_loader_fetch_url__loader_dedicated__or__shared__worker__fetch__context__impl.h
@@ -0,0 +1,25 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.h.orig 2024-10-18 12:34:36.923487200 +0000
++++ third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.h
+@@ -23,6 +23,7 @@
+ #include "third_party/blink/public/platform/web_common.h"
+ #include "third_party/blink/public/platform/web_dedicated_or_shared_worker_fetch_context.h"
+ #include "third_party/blink/public/platform/web_string.h"
++#include "third_party/blink/renderer/platform/heap/persistent.h"
+ #include "third_party/blink/renderer/platform/wtf/casting.h"
+ #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+ #include "third_party/blink/renderer/platform/wtf/vector.h"
+@@ -300,7 +301,7 @@ class BLINK_PLATFORM_EXPORT DedicatedOrS
+ std::unique_ptr<WeakWrapperResourceLoadInfoNotifier>
+ weak_wrapper_resource_load_info_notifier_;
+
+- raw_ptr<AcceptLanguagesWatcher> accept_languages_watcher_ = nullptr;
++ WeakPersistent<AcceptLanguagesWatcher> accept_languages_watcher_;
+ };
+
+ template <>
diff --git a/electron32/patches/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc b/electron32/patches/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
index 1fa6ea436d..3d55f97319 100644
--- a/electron32/patches/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
+++ b/electron32/patches/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/crashpad/crashpad/client/crashpad_client_posix.cc.orig 2025-01-19 14:12:04.112051133 +0000
+--- third_party/crashpad/crashpad/client/crashpad_client_posix.cc.orig 2025-02-15 09:43:46.452142121 +0000
+++ third_party/crashpad/crashpad/client/crashpad_client_posix.cc
@@ -0,0 +1,40 @@
+// Copyright 2017 The Crashpad Authors. All rights reserved.
diff --git a/electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__printer_ast__printer__test.cc b/electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__printer_ast__printer__test.cc
new file mode 100644
index 0000000000..36c471c828
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__printer_ast__printer__test.cc
@@ -0,0 +1,182 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/src/tint/lang/msl/writer/ast_printer/ast_printer_test.cc.orig 2024-10-18 12:38:01.405487300 +0000
++++ third_party/dawn/src/tint/lang/msl/writer/ast_printer/ast_printer_test.cc
+@@ -378,93 +378,137 @@ TEST_F(MslASTPrinterTest, WorkgroupMatri
+ EXPECT_EQ(gen.Result(), R"(#include <metal_stdlib>
+
+ using namespace metal;
++
++template<typename T, size_t N>
++struct tint_array {
++ const constant T& operator[](size_t i) const constant { return elements[i]; }
++ device T& operator[](size_t i) device { return elements[i]; }
++ const device T& operator[](size_t i) const device { return elements[i]; }
++ thread T& operator[](size_t i) thread { return elements[i]; }
++ const thread T& operator[](size_t i) const thread { return elements[i]; }
++ threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
++ const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
++ T elements[N];
++};
++
+ struct tint_symbol_16 {
+ float2x2 m1;
+- float2x3 m2;
+ float2x4 m3;
+ };
+
+ struct tint_symbol_24 {
+ float3x2 m4;
+- float3x3 m5;
+ float3x4 m6;
+ };
+
+ struct tint_symbol_32 {
+ float4x2 m7;
+- float4x3 m8;
+ float4x4 m9;
+ };
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup float2x2* const tint_symbol, threadgroup float2x3* const tint_symbol_1, threadgroup float2x4* const tint_symbol_2) {
++struct tint_packed_vec3_f32_array_element {
++ packed_float3 elements;
++};
++
++float2x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 2> in) {
++ float2x3 result = float2x3(float3(in[0].elements), float3(in[1].elements));
++ return result;
++}
++
++float3x3 tint_unpack_vec3_in_composite_1(tint_array<tint_packed_vec3_f32_array_element, 3> in) {
++ float3x3 result = float3x3(float3(in[0].elements), float3(in[1].elements), float3(in[2].elements));
++ return result;
++}
++
++float4x3 tint_unpack_vec3_in_composite_2(tint_array<tint_packed_vec3_f32_array_element, 4> in) {
++ float4x3 result = float4x3(float3(in[0].elements), float3(in[1].elements), float3(in[2].elements), float3(in[3].elements));
++ return result;
++}
++
++tint_array<tint_packed_vec3_f32_array_element, 2> tint_pack_vec3_in_composite(float2x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 2> result = tint_array<tint_packed_vec3_f32_array_element, 2>{{.elements=packed_float3(in[0])}, {.elements=packed_float3(in[1])}};
++ return result;
++}
++
++tint_array<tint_packed_vec3_f32_array_element, 3> tint_pack_vec3_in_composite_1(float3x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 3> result = tint_array<tint_packed_vec3_f32_array_element, 3>{{.elements=packed_float3(in[0])}, {.elements=packed_float3(in[1])}, {.elements=packed_float3(in[2])}};
++ return result;
++}
++
++tint_array<tint_packed_vec3_f32_array_element, 4> tint_pack_vec3_in_composite_2(float4x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 4> result = tint_array<tint_packed_vec3_f32_array_element, 4>{{.elements=packed_float3(in[0])}, {.elements=packed_float3(in[1])}, {.elements=packed_float3(in[2])}, {.elements=packed_float3(in[3])}};
++ return result;
++}
++
++void tint_zero_workgroup_memory(uint local_idx, threadgroup float2x2* const tint_symbol, threadgroup tint_array<tint_packed_vec3_f32_array_element, 2>* const tint_symbol_1, threadgroup float2x4* const tint_symbol_2) {
+ if ((local_idx < 1u)) {
+ *(tint_symbol) = float2x2(float2(0.0f), float2(0.0f));
+- *(tint_symbol_1) = float2x3(float3(0.0f), float3(0.0f));
++ *(tint_symbol_1) = tint_pack_vec3_in_composite(float2x3(float3(0.0f), float3(0.0f)));
+ *(tint_symbol_2) = float2x4(float4(0.0f), float4(0.0f));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void tint_zero_workgroup_memory_1(uint local_idx_1, threadgroup float3x2* const tint_symbol_3, threadgroup float3x3* const tint_symbol_4, threadgroup float3x4* const tint_symbol_5) {
++void tint_zero_workgroup_memory_1(uint local_idx_1, threadgroup float3x2* const tint_symbol_3, threadgroup tint_array<tint_packed_vec3_f32_array_element, 3>* const tint_symbol_4, threadgroup float3x4* const tint_symbol_5) {
+ if ((local_idx_1 < 1u)) {
+ *(tint_symbol_3) = float3x2(float2(0.0f), float2(0.0f), float2(0.0f));
+- *(tint_symbol_4) = float3x3(float3(0.0f), float3(0.0f), float3(0.0f));
++ *(tint_symbol_4) = tint_pack_vec3_in_composite_1(float3x3(float3(0.0f), float3(0.0f), float3(0.0f)));
+ *(tint_symbol_5) = float3x4(float4(0.0f), float4(0.0f), float4(0.0f));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void tint_zero_workgroup_memory_2(uint local_idx_2, threadgroup float4x2* const tint_symbol_6, threadgroup float4x3* const tint_symbol_7, threadgroup float4x4* const tint_symbol_8) {
++void tint_zero_workgroup_memory_2(uint local_idx_2, threadgroup float4x2* const tint_symbol_6, threadgroup tint_array<tint_packed_vec3_f32_array_element, 4>* const tint_symbol_7, threadgroup float4x4* const tint_symbol_8) {
+ if ((local_idx_2 < 1u)) {
+ *(tint_symbol_6) = float4x2(float2(0.0f), float2(0.0f), float2(0.0f), float2(0.0f));
+- *(tint_symbol_7) = float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f));
++ *(tint_symbol_7) = tint_pack_vec3_in_composite_2(float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f)));
+ *(tint_symbol_8) = float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void main1_inner(uint local_invocation_index, threadgroup float2x2* const tint_symbol_9, threadgroup float2x3* const tint_symbol_10, threadgroup float2x4* const tint_symbol_11) {
++void main1_inner(uint local_invocation_index, threadgroup float2x2* const tint_symbol_9, threadgroup tint_array<tint_packed_vec3_f32_array_element, 2>* const tint_symbol_10, threadgroup float2x4* const tint_symbol_11) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_9, tint_symbol_10, tint_symbol_11);
+ float2x2 const a1 = *(tint_symbol_9);
+- float2x3 const a2 = *(tint_symbol_10);
++ float2x3 const a2 = tint_unpack_vec3_in_composite(*(tint_symbol_10));
+ float2x4 const a3 = *(tint_symbol_11);
+ }
+
+ kernel void main1(threadgroup tint_symbol_16* tint_symbol_13 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+ threadgroup float2x2* const tint_symbol_12 = &((*(tint_symbol_13)).m1);
+- threadgroup float2x3* const tint_symbol_14 = &((*(tint_symbol_13)).m2);
++ threadgroup tint_array<tint_packed_vec3_f32_array_element, 2> tint_symbol_14;
+ threadgroup float2x4* const tint_symbol_15 = &((*(tint_symbol_13)).m3);
+- main1_inner(local_invocation_index, tint_symbol_12, tint_symbol_14, tint_symbol_15);
++ main1_inner(local_invocation_index, tint_symbol_12, &(tint_symbol_14), tint_symbol_15);
+ return;
+ }
+
+-void main2_inner(uint local_invocation_index_1, threadgroup float3x2* const tint_symbol_17, threadgroup float3x3* const tint_symbol_18, threadgroup float3x4* const tint_symbol_19) {
++void main2_inner(uint local_invocation_index_1, threadgroup float3x2* const tint_symbol_17, threadgroup tint_array<tint_packed_vec3_f32_array_element, 3>* const tint_symbol_18, threadgroup float3x4* const tint_symbol_19) {
+ tint_zero_workgroup_memory_1(local_invocation_index_1, tint_symbol_17, tint_symbol_18, tint_symbol_19);
+ float3x2 const a1 = *(tint_symbol_17);
+- float3x3 const a2 = *(tint_symbol_18);
++ float3x3 const a2 = tint_unpack_vec3_in_composite_1(*(tint_symbol_18));
+ float3x4 const a3 = *(tint_symbol_19);
+ }
+
+ kernel void main2(threadgroup tint_symbol_24* tint_symbol_21 [[threadgroup(0)]], uint local_invocation_index_1 [[thread_index_in_threadgroup]]) {
+ threadgroup float3x2* const tint_symbol_20 = &((*(tint_symbol_21)).m4);
+- threadgroup float3x3* const tint_symbol_22 = &((*(tint_symbol_21)).m5);
++ threadgroup tint_array<tint_packed_vec3_f32_array_element, 3> tint_symbol_22;
+ threadgroup float3x4* const tint_symbol_23 = &((*(tint_symbol_21)).m6);
+- main2_inner(local_invocation_index_1, tint_symbol_20, tint_symbol_22, tint_symbol_23);
++ main2_inner(local_invocation_index_1, tint_symbol_20, &(tint_symbol_22), tint_symbol_23);
+ return;
+ }
+
+-void main3_inner(uint local_invocation_index_2, threadgroup float4x2* const tint_symbol_25, threadgroup float4x3* const tint_symbol_26, threadgroup float4x4* const tint_symbol_27) {
++void main3_inner(uint local_invocation_index_2, threadgroup float4x2* const tint_symbol_25, threadgroup tint_array<tint_packed_vec3_f32_array_element, 4>* const tint_symbol_26, threadgroup float4x4* const tint_symbol_27) {
+ tint_zero_workgroup_memory_2(local_invocation_index_2, tint_symbol_25, tint_symbol_26, tint_symbol_27);
+ float4x2 const a1 = *(tint_symbol_25);
+- float4x3 const a2 = *(tint_symbol_26);
++ float4x3 const a2 = tint_unpack_vec3_in_composite_2(*(tint_symbol_26));
+ float4x4 const a3 = *(tint_symbol_27);
+ }
+
+ kernel void main3(threadgroup tint_symbol_32* tint_symbol_29 [[threadgroup(0)]], uint local_invocation_index_2 [[thread_index_in_threadgroup]]) {
+ threadgroup float4x2* const tint_symbol_28 = &((*(tint_symbol_29)).m7);
+- threadgroup float4x3* const tint_symbol_30 = &((*(tint_symbol_29)).m8);
++ threadgroup tint_array<tint_packed_vec3_f32_array_element, 4> tint_symbol_30;
+ threadgroup float4x4* const tint_symbol_31 = &((*(tint_symbol_29)).m9);
+- main3_inner(local_invocation_index_2, tint_symbol_28, tint_symbol_30, tint_symbol_31);
++ main3_inner(local_invocation_index_2, tint_symbol_28, &(tint_symbol_30), tint_symbol_31);
+ return;
+ }
+
+@@ -479,11 +523,11 @@ kernel void main4_no_usages() {
+ ASSERT_TRUE(allocations.count("main2"));
+ ASSERT_TRUE(allocations.count("main3"));
+ ASSERT_EQ(allocations.at("main1").size(), 1u);
+- EXPECT_EQ(allocations.at("main1")[0], 20u * sizeof(float));
++ EXPECT_EQ(allocations.at("main1")[0], 12u * sizeof(float));
+ ASSERT_EQ(allocations.at("main2").size(), 1u);
+- EXPECT_EQ(allocations.at("main2")[0], 32u * sizeof(float));
++ EXPECT_EQ(allocations.at("main2")[0], 20u * sizeof(float));
+ ASSERT_EQ(allocations.at("main3").size(), 1u);
+- EXPECT_EQ(allocations.at("main3")[0], 40u * sizeof(float));
++ EXPECT_EQ(allocations.at("main3")[0], 24u * sizeof(float));
+ EXPECT_EQ(allocations.at("main4_no_usages").size(), 0u);
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__raise_packed__vec3.cc b/electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__raise_packed__vec3.cc
new file mode 100644
index 0000000000..449f54ea6e
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__raise_packed__vec3.cc
@@ -0,0 +1,77 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/src/tint/lang/msl/writer/ast_raise/packed_vec3.cc.orig 2024-10-18 12:38:01.405487300 +0000
++++ third_party/dawn/src/tint/lang/msl/writer/ast_raise/packed_vec3.cc
+@@ -83,6 +83,14 @@ struct PackedVec3::State {
+ /// A map from type to the name of a helper function used to unpack that type.
+ Hashmap<const core::type::Type*, Symbol, 4> unpack_helpers;
+
++ /// @returns true if @p addrspace requires vec3 types to be packed
++ bool AddressSpaceNeedsPacking(core::AddressSpace addrspace) {
++ // Host-shareable address spaces need to be packed to match the memory layout on the host.
++ // The workgroup address space needs to be packed so that the size of generated threadgroup
++ // variables matches the size of the original WGSL declarations.
++ return core::IsHostShareable(addrspace) || addrspace == core::AddressSpace::kWorkgroup;
++ }
++
+ /// @param ty the type to test
+ /// @returns true if `ty` is a vec3, false otherwise
+ bool IsVec3(const core::type::Type* ty) {
+@@ -373,7 +381,7 @@ struct PackedVec3::State {
+ // if the transform is necessary.
+ for (auto* decl : src.AST().GlobalVariables()) {
+ auto* var = sem.Get<sem::GlobalVariable>(decl);
+- if (var && core::IsHostShareable(var->AddressSpace()) &&
++ if (var && AddressSpaceNeedsPacking(var->AddressSpace()) &&
+ ContainsVec3(var->Type()->UnwrapRef())) {
+ return true;
+ }
+@@ -410,7 +418,7 @@ struct PackedVec3::State {
+ [&](const sem::TypeExpression* type) {
+ // Rewrite pointers to types that contain vec3s.
+ auto* ptr = type->Type()->As<core::type::Pointer>();
+- if (ptr && core::IsHostShareable(ptr->AddressSpace())) {
++ if (ptr && AddressSpaceNeedsPacking(ptr->AddressSpace())) {
+ auto new_store_type = RewriteType(ptr->StoreType());
+ if (new_store_type) {
+ auto access = ptr->AddressSpace() == core::AddressSpace::kStorage
+@@ -423,7 +431,7 @@ struct PackedVec3::State {
+ }
+ },
+ [&](const sem::Variable* var) {
+- if (!core::IsHostShareable(var->AddressSpace())) {
++ if (!AddressSpaceNeedsPacking(var->AddressSpace())) {
+ return;
+ }
+
+@@ -439,7 +447,7 @@ struct PackedVec3::State {
+ auto* lhs = sem.GetVal(assign->lhs);
+ auto* rhs = sem.GetVal(assign->rhs);
+ if (!ContainsVec3(rhs->Type()) ||
+- !core::IsHostShareable(
++ !AddressSpaceNeedsPacking(
+ lhs->Type()->As<core::type::Reference>()->AddressSpace())) {
+ // Skip assignments to address spaces that are not host-shareable, or
+ // that do not contain vec3 types.
+@@ -467,7 +475,7 @@ struct PackedVec3::State {
+ [&](const sem::Load* load) {
+ // Unpack loads of types that contain vec3s in host-shareable address spaces.
+ if (ContainsVec3(load->Type()) &&
+- core::IsHostShareable(load->ReferenceType()->AddressSpace())) {
++ AddressSpaceNeedsPacking(load->ReferenceType()->AddressSpace())) {
+ to_unpack.Add(load);
+ }
+ },
+@@ -477,7 +485,7 @@ struct PackedVec3::State {
+ // struct.
+ if (auto* ref = accessor->Type()->As<core::type::Reference>()) {
+ if (IsVec3(ref->StoreType()) &&
+- core::IsHostShareable(ref->AddressSpace())) {
++ AddressSpaceNeedsPacking(ref->AddressSpace())) {
+ ctx.Replace(node, b.MemberAccessor(ctx.Clone(accessor->Declaration()),
+ kStructMemberName));
+ }
diff --git a/electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__raise_packed__vec3__test.cc b/electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__raise_packed__vec3__test.cc
new file mode 100644
index 0000000000..cce5c86f8c
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_src_tint_lang_msl_writer_ast__raise_packed__vec3__test.cc
@@ -0,0 +1,50 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/src/tint/lang/msl/writer/ast_raise/packed_vec3_test.cc.orig 2024-10-18 12:38:01.405487300 +0000
++++ third_party/dawn/src/tint/lang/msl/writer/ast_raise/packed_vec3_test.cc
+@@ -67,11 +67,6 @@ var<private> p_v : vec3<f32>;
+ var<private> p_m : mat3x3<f32>;
+ var<private> p_a : array<vec3<f32>, 4>;
+
+-var<workgroup> w_s : S;
+-var<workgroup> w_v : vec3<f32>;
+-var<workgroup> w_m : mat3x3<f32>;
+-var<workgroup> w_a : array<vec3<f32>, 4>;
+-
+ fn f() {
+ var f_s : S;
+ var f_v : vec3<f32>;
+@@ -6944,20 +6939,20 @@ struct S {
+
+ @group(0) @binding(0) var<storage> P : S_tint_packed_vec3;
+
+-var<workgroup> w1 : S;
++var<workgroup> w1 : S_tint_packed_vec3;
+
+-var<workgroup> w2 : vec3<f32>;
++var<workgroup> w2 : __packed_vec3<f32>;
+
+-var<workgroup> w3 : array<vec3<f32>, 4>;
++var<workgroup> w3 : array<tint_packed_vec3_f32_array_element, 4u>;
+
+-var<workgroup> w4 : mat3x3<f32>;
++var<workgroup> w4 : array<tint_packed_vec3_f32_array_element, 3u>;
+
+ fn f() {
+- let pv_1 : ptr<workgroup, vec3<f32>> = &(w1.v);
+- let pv_2 : ptr<workgroup, vec3<f32>> = &(w2);
+- let pv_3 : ptr<workgroup, vec3<f32>> = &(w3[0]);
+- let pv_4 : ptr<workgroup, mat3x3<f32>> = &(w1.m);
+- let pv_5 : ptr<workgroup, mat3x3<f32>> = &(w4);
++ let pv_1 : ptr<workgroup, __packed_vec3<f32>> = &(w1.v);
++ let pv_2 : ptr<workgroup, __packed_vec3<f32>> = &(w2);
++ let pv_3 : ptr<workgroup, __packed_vec3<f32>> = &(w3[0].elements);
++ let pv_4 : ptr<workgroup, array<tint_packed_vec3_f32_array_element, 3u>> = &(w1.m);
++ let pv_5 : ptr<workgroup, array<tint_packed_vec3_f32_array_element, 3u>> = &(w4);
+ }
+ )";
+
diff --git a/electron32/patches/patch-third__party_dawn_src_tint_lang_wgsl_resolver_address__space__layout__validation__test.cc b/electron32/patches/patch-third__party_dawn_src_tint_lang_wgsl_resolver_address__space__layout__validation__test.cc
index de3ccd2e18..ac6e1f8be7 100644
--- a/electron32/patches/patch-third__party_dawn_src_tint_lang_wgsl_resolver_address__space__layout__validation__test.cc
+++ b/electron32/patches/patch-third__party_dawn_src_tint_lang_wgsl_resolver_address__space__layout__validation__test.cc
@@ -105,11 +105,12 @@ $NetBSD$
});
Structure("Outer", Vector{
-@@ -730,5 +730,29 @@ TEST_F(ResolverAddressSpaceLayoutValidat
+@@ -730,5 +730,97 @@ TEST_F(ResolverAddressSpaceLayoutValidat
EXPECT_TRUE(r()->Resolve()) << r()->error();
}
-+TEST_F(ResolverAddressSpaceLayoutValidationTest, AlignAttributeTooSmall) {
+-} // namespace
++TEST_F(ResolverAddressSpaceLayoutValidationTest, AlignAttributeTooSmall_Storage) {
+ // struct S {
+ // @align(4) vector : vec4u;
+ // scalar : u32;
@@ -133,5 +134,73 @@ $NetBSD$
+56:78 note: 'S' used in address space 'storage' here)");
+}
+
- } // namespace
++TEST_F(ResolverAddressSpaceLayoutValidationTest, AlignAttributeTooSmall_Workgroup) {
++ // struct S {
++ // @align(4) vector : vec4u;
++ // scalar : u32;
++ // };
++ //
++ // var<workgroup> a : array<S, 4>;
++ Structure(
++ "S", Vector{
++ Member("vector", ty.vec4<u32>(), Vector{MemberAlign(Expr(Source{{12, 34}}, 4_a))}),
++ Member("scalar", ty.u32()),
++ });
++
++ GlobalVar(Source{{56, 78}}, "a", ty("S"), core::AddressSpace::kWorkgroup, Group(0_a));
++
++ ASSERT_FALSE(r()->Resolve());
++ EXPECT_EQ(
++ r()->error(),
++ R"(12:34 error: alignment must be a multiple of '16' bytes for the 'workgroup' address space
++56:78 note: 'S' used in address space 'workgroup' here)");
++}
++
++TEST_F(ResolverAddressSpaceLayoutValidationTest, AlignAttributeTooSmall_Private) {
++ // struct S {
++ // @align(4) vector : vec4u;
++ // scalar : u32;
++ // };
++ //
++ // var<private> a : array<S, 4>;
++ Structure(
++ "S", Vector{
++ Member("vector", ty.vec4<u32>(), Vector{MemberAlign(Expr(Source{{12, 34}}, 4_a))}),
++ Member("scalar", ty.u32()),
++ });
++
++ GlobalVar(Source{{56, 78}}, "a", ty("S"), core::AddressSpace::kPrivate, Group(0_a));
++
++ ASSERT_FALSE(r()->Resolve());
++ EXPECT_EQ(
++ r()->error(),
++ R"(12:34 error: alignment must be a multiple of '16' bytes for the 'private' address space
++56:78 note: 'S' used in address space 'private' here)");
++}
++
++TEST_F(ResolverAddressSpaceLayoutValidationTest, AlignAttributeTooSmall_Function) {
++ // struct S {
++ // @align(4) vector : vec4u;
++ // scalar : u32;
++ // };
++ //
++ // fn foo() {
++ // var a : array<S, 4>;
++ // }
++ Structure(
++ "S", Vector{
++ Member("vector", ty.vec4<u32>(), Vector{MemberAlign(Expr(Source{{12, 34}}, 4_a))}),
++ Member("scalar", ty.u32()),
++ });
++
++ GlobalVar(Source{{56, 78}}, "a", ty("S"), core::AddressSpace::kFunction, Group(0_a));
++
++ ASSERT_FALSE(r()->Resolve());
++ EXPECT_EQ(
++ r()->error(),
++ R"(12:34 error: alignment must be a multiple of '16' bytes for the 'function' address space
++56:78 note: 'S' used in address space 'function' here)");
++}
++
++ } // namespace
} // namespace tint::resolver
diff --git a/electron32/patches/patch-third__party_dawn_src_tint_lang_wgsl_resolver_validator.cc b/electron32/patches/patch-third__party_dawn_src_tint_lang_wgsl_resolver_validator.cc
index 61475d05dd..43968a5645 100644
--- a/electron32/patches/patch-third__party_dawn_src_tint_lang_wgsl_resolver_validator.cc
+++ b/electron32/patches/patch-third__party_dawn_src_tint_lang_wgsl_resolver_validator.cc
@@ -6,7 +6,18 @@ $NetBSD$
--- third_party/dawn/src/tint/lang/wgsl/resolver/validator.cc.orig 2024-10-18 12:38:01.525448000 +0000
+++ third_party/dawn/src/tint/lang/wgsl/resolver/validator.cc
-@@ -661,6 +661,22 @@ bool Validator::AddressSpaceLayout(const
+@@ -577,10 +577,6 @@ bool Validator::AddressSpaceLayout(const
+ return true;
+ }
+
+- if (!core::IsHostShareable(address_space)) {
+- return true;
+- }
+-
+ auto note_usage = [&] {
+ AddNote(source) << style::Type(store_ty->FriendlyName()) << " used in address space "
+ << style::Enum(address_space) << " here";
+@@ -661,6 +657,22 @@ bool Validator::AddressSpaceLayout(const
return false;
}
}
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat2x3__f16_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat2x3__f16_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..a159627048
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat2x3__f16_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,67 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.601423300 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_workgroup.wgsl.expected.msl
+@@ -18,45 +18,36 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-struct tint_symbol_8 {
+- tint_array<half2x3, 4> w;
+-};
+-
+ struct tint_packed_vec3_f16_array_element {
+ /* 0x0000 */ packed_half3 elements;
+ /* 0x0006 */ tint_array<int8_t, 2> tint_pad;
+ };
+
+-half2x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f16_array_element, 2> in) {
+- half2x3 result = half2x3(half3(in[0].elements), half3(in[1].elements));
+- return result;
+-}
+-
+-tint_array<half2x3, 4> tint_unpack_vec3_in_composite_1(tint_array<tint_array<tint_packed_vec3_f16_array_element, 2>, 4> in) {
+- tint_array<half2x3, 4> result = tint_array<half2x3, 4>{tint_unpack_vec3_in_composite(in[0]), tint_unpack_vec3_in_composite(in[1]), tint_unpack_vec3_in_composite(in[2]), tint_unpack_vec3_in_composite(in[3])};
++tint_array<tint_packed_vec3_f16_array_element, 2> tint_pack_vec3_in_composite(half2x3 in) {
++ tint_array<tint_packed_vec3_f16_array_element, 2> result = tint_array<tint_packed_vec3_f16_array_element, 2>{tint_packed_vec3_f16_array_element{.elements=packed_half3(in[0])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[1])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<half2x3, 4>* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_array<tint_packed_vec3_f16_array_element, 2>, 4>* const tint_symbol) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+- (*(tint_symbol))[i] = half2x3(half3(0.0h), half3(0.0h));
++ (*(tint_symbol))[i] = tint_pack_vec3_in_composite(half2x3(half3(0.0h), half3(0.0h)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<half2x3, 4>* const tint_symbol_1, const constant tint_array<tint_array<tint_packed_vec3_f16_array_element, 2>, 4>* const tint_symbol_2, device half* const tint_symbol_3) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_array<tint_packed_vec3_f16_array_element, 2>, 4>* const tint_symbol_1, const constant tint_array<tint_array<tint_packed_vec3_f16_array_element, 2>, 4>* const tint_symbol_2, device half* const tint_symbol_3) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite_1(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = tint_unpack_vec3_in_composite((*(tint_symbol_2))[2]);
+- (*(tint_symbol_1))[1][0] = half3((*(tint_symbol_2))[0][1].elements).zxy;
+- (*(tint_symbol_1))[1][0][0] = (*(tint_symbol_2))[0][1].elements[0];
+- *(tint_symbol_3) = (*(tint_symbol_1))[1][0][0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1] = (*(tint_symbol_2))[2];
++ (*(tint_symbol_1))[1][0].elements = packed_half3(half3((*(tint_symbol_2))[0][1].elements).zxy);
++ (*(tint_symbol_1))[1][0].elements[0] = (*(tint_symbol_2))[0][1].elements[0];
++ *(tint_symbol_3) = (*(tint_symbol_1))[1][0].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_array<tint_packed_vec3_f16_array_element, 2>, 4>* tint_symbol_6 [[buffer(0)]], device half* tint_symbol_7 [[buffer(1)]], threadgroup tint_symbol_8* tint_symbol_5 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<half2x3, 4>* const tint_symbol_4 = &((*(tint_symbol_5)).w);
+- f_inner(local_invocation_index, tint_symbol_4, tint_symbol_6, tint_symbol_7);
++kernel void f(const constant tint_array<tint_array<tint_packed_vec3_f16_array_element, 2>, 4>* tint_symbol_5 [[buffer(0)]], device half* tint_symbol_6 [[buffer(1)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_array<tint_packed_vec3_f16_array_element, 2>, 4> tint_symbol_4;
++ f_inner(local_invocation_index, &(tint_symbol_4), tint_symbol_5, tint_symbol_6);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat2x3__f32_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat2x3__f32_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..6a85c2c315
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat2x3__f32_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,65 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.605422000 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_workgroup.wgsl.expected.msl
+@@ -18,44 +18,35 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-struct tint_symbol_6 {
+- tint_array<float2x3, 4> w;
+-};
+-
+ struct tint_packed_vec3_f32_array_element {
+ /* 0x0000 */ packed_float3 elements;
+ /* 0x000c */ tint_array<int8_t, 4> tint_pad;
+ };
+
+-float2x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 2> in) {
+- float2x3 result = float2x3(float3(in[0].elements), float3(in[1].elements));
+- return result;
+-}
+-
+-tint_array<float2x3, 4> tint_unpack_vec3_in_composite_1(tint_array<tint_array<tint_packed_vec3_f32_array_element, 2>, 4> in) {
+- tint_array<float2x3, 4> result = tint_array<float2x3, 4>{tint_unpack_vec3_in_composite(in[0]), tint_unpack_vec3_in_composite(in[1]), tint_unpack_vec3_in_composite(in[2]), tint_unpack_vec3_in_composite(in[3])};
++tint_array<tint_packed_vec3_f32_array_element, 2> tint_pack_vec3_in_composite(float2x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 2> result = tint_array<tint_packed_vec3_f32_array_element, 2>{tint_packed_vec3_f32_array_element{.elements=packed_float3(in[0])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[1])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<float2x3, 4>* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 2>, 4>* const tint_symbol) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+- (*(tint_symbol))[i] = float2x3(float3(0.0f), float3(0.0f));
++ (*(tint_symbol))[i] = tint_pack_vec3_in_composite(float2x3(float3(0.0f), float3(0.0f)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<float2x3, 4>* const tint_symbol_1, const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 2>, 4>* const tint_symbol_2) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 2>, 4>* const tint_symbol_1, const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 2>, 4>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite_1(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = tint_unpack_vec3_in_composite((*(tint_symbol_2))[2]);
+- (*(tint_symbol_1))[1][0] = float3((*(tint_symbol_2))[0][1].elements).zxy;
+- (*(tint_symbol_1))[1][0][0] = (*(tint_symbol_2))[0][1].elements[0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1] = (*(tint_symbol_2))[2];
++ (*(tint_symbol_1))[1][0].elements = packed_float3(float3((*(tint_symbol_2))[0][1].elements).zxy);
++ (*(tint_symbol_1))[1][0].elements[0] = (*(tint_symbol_2))[0][1].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 2>, 4>* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<float2x3, 4>* const tint_symbol_3 = &((*(tint_symbol_4)).w);
+- f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
++kernel void f(const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 2>, 4>* tint_symbol_4 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 2>, 4> tint_symbol_3;
++ f_inner(local_invocation_index, &(tint_symbol_3), tint_symbol_4);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat3x3__f32_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat3x3__f32_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..ac11143912
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat3x3__f32_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,65 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.613419300 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_workgroup.wgsl.expected.msl
+@@ -18,44 +18,35 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-struct tint_symbol_6 {
+- tint_array<float3x3, 4> w;
+-};
+-
+ struct tint_packed_vec3_f32_array_element {
+ /* 0x0000 */ packed_float3 elements;
+ /* 0x000c */ tint_array<int8_t, 4> tint_pad;
+ };
+
+-float3x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 3> in) {
+- float3x3 result = float3x3(float3(in[0].elements), float3(in[1].elements), float3(in[2].elements));
+- return result;
+-}
+-
+-tint_array<float3x3, 4> tint_unpack_vec3_in_composite_1(tint_array<tint_array<tint_packed_vec3_f32_array_element, 3>, 4> in) {
+- tint_array<float3x3, 4> result = tint_array<float3x3, 4>{tint_unpack_vec3_in_composite(in[0]), tint_unpack_vec3_in_composite(in[1]), tint_unpack_vec3_in_composite(in[2]), tint_unpack_vec3_in_composite(in[3])};
++tint_array<tint_packed_vec3_f32_array_element, 3> tint_pack_vec3_in_composite(float3x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 3> result = tint_array<tint_packed_vec3_f32_array_element, 3>{tint_packed_vec3_f32_array_element{.elements=packed_float3(in[0])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[1])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[2])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<float3x3, 4>* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 3>, 4>* const tint_symbol) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+- (*(tint_symbol))[i] = float3x3(float3(0.0f), float3(0.0f), float3(0.0f));
++ (*(tint_symbol))[i] = tint_pack_vec3_in_composite(float3x3(float3(0.0f), float3(0.0f), float3(0.0f)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<float3x3, 4>* const tint_symbol_1, const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 3>, 4>* const tint_symbol_2) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 3>, 4>* const tint_symbol_1, const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 3>, 4>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite_1(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = tint_unpack_vec3_in_composite((*(tint_symbol_2))[2]);
+- (*(tint_symbol_1))[1][0] = float3((*(tint_symbol_2))[0][1].elements).zxy;
+- (*(tint_symbol_1))[1][0][0] = (*(tint_symbol_2))[0][1].elements[0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1] = (*(tint_symbol_2))[2];
++ (*(tint_symbol_1))[1][0].elements = packed_float3(float3((*(tint_symbol_2))[0][1].elements).zxy);
++ (*(tint_symbol_1))[1][0].elements[0] = (*(tint_symbol_2))[0][1].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 3>, 4>* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<float3x3, 4>* const tint_symbol_3 = &((*(tint_symbol_4)).w);
+- f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
++kernel void f(const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 3>, 4>* tint_symbol_4 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 3>, 4> tint_symbol_3;
++ f_inner(local_invocation_index, &(tint_symbol_3), tint_symbol_4);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat4x3__f16_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat4x3__f16_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..f29e9e5445
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat4x3__f16_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,65 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.625415300 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_workgroup.wgsl.expected.msl
+@@ -18,44 +18,35 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-struct tint_symbol_6 {
+- tint_array<half4x3, 4> w;
+-};
+-
+ struct tint_packed_vec3_f16_array_element {
+ /* 0x0000 */ packed_half3 elements;
+ /* 0x0006 */ tint_array<int8_t, 2> tint_pad;
+ };
+
+-half4x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f16_array_element, 4> in) {
+- half4x3 result = half4x3(half3(in[0].elements), half3(in[1].elements), half3(in[2].elements), half3(in[3].elements));
+- return result;
+-}
+-
+-tint_array<half4x3, 4> tint_unpack_vec3_in_composite_1(tint_array<tint_array<tint_packed_vec3_f16_array_element, 4>, 4> in) {
+- tint_array<half4x3, 4> result = tint_array<half4x3, 4>{tint_unpack_vec3_in_composite(in[0]), tint_unpack_vec3_in_composite(in[1]), tint_unpack_vec3_in_composite(in[2]), tint_unpack_vec3_in_composite(in[3])};
++tint_array<tint_packed_vec3_f16_array_element, 4> tint_pack_vec3_in_composite(half4x3 in) {
++ tint_array<tint_packed_vec3_f16_array_element, 4> result = tint_array<tint_packed_vec3_f16_array_element, 4>{tint_packed_vec3_f16_array_element{.elements=packed_half3(in[0])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[1])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[2])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[3])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<half4x3, 4>* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_array<tint_packed_vec3_f16_array_element, 4>, 4>* const tint_symbol) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+- (*(tint_symbol))[i] = half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h));
++ (*(tint_symbol))[i] = tint_pack_vec3_in_composite(half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<half4x3, 4>* const tint_symbol_1, const constant tint_array<tint_array<tint_packed_vec3_f16_array_element, 4>, 4>* const tint_symbol_2) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_array<tint_packed_vec3_f16_array_element, 4>, 4>* const tint_symbol_1, const constant tint_array<tint_array<tint_packed_vec3_f16_array_element, 4>, 4>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite_1(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = tint_unpack_vec3_in_composite((*(tint_symbol_2))[2]);
+- (*(tint_symbol_1))[1][0] = half3((*(tint_symbol_2))[0][1].elements).zxy;
+- (*(tint_symbol_1))[1][0][0] = (*(tint_symbol_2))[0][1].elements[0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1] = (*(tint_symbol_2))[2];
++ (*(tint_symbol_1))[1][0].elements = packed_half3(half3((*(tint_symbol_2))[0][1].elements).zxy);
++ (*(tint_symbol_1))[1][0].elements[0] = (*(tint_symbol_2))[0][1].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_array<tint_packed_vec3_f16_array_element, 4>, 4>* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<half4x3, 4>* const tint_symbol_3 = &((*(tint_symbol_4)).w);
+- f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
++kernel void f(const constant tint_array<tint_array<tint_packed_vec3_f16_array_element, 4>, 4>* tint_symbol_4 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_array<tint_packed_vec3_f16_array_element, 4>, 4> tint_symbol_3;
++ f_inner(local_invocation_index, &(tint_symbol_3), tint_symbol_4);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat4x3__f32_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat4x3__f32_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..8f479c1de8
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_array_mat4x3__f32_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,65 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.629414000 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_workgroup.wgsl.expected.msl
+@@ -18,44 +18,35 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-struct tint_symbol_6 {
+- tint_array<float4x3, 4> w;
+-};
+-
+ struct tint_packed_vec3_f32_array_element {
+ /* 0x0000 */ packed_float3 elements;
+ /* 0x000c */ tint_array<int8_t, 4> tint_pad;
+ };
+
+-float4x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 4> in) {
+- float4x3 result = float4x3(float3(in[0].elements), float3(in[1].elements), float3(in[2].elements), float3(in[3].elements));
+- return result;
+-}
+-
+-tint_array<float4x3, 4> tint_unpack_vec3_in_composite_1(tint_array<tint_array<tint_packed_vec3_f32_array_element, 4>, 4> in) {
+- tint_array<float4x3, 4> result = tint_array<float4x3, 4>{tint_unpack_vec3_in_composite(in[0]), tint_unpack_vec3_in_composite(in[1]), tint_unpack_vec3_in_composite(in[2]), tint_unpack_vec3_in_composite(in[3])};
++tint_array<tint_packed_vec3_f32_array_element, 4> tint_pack_vec3_in_composite(float4x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 4> result = tint_array<tint_packed_vec3_f32_array_element, 4>{tint_packed_vec3_f32_array_element{.elements=packed_float3(in[0])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[1])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[2])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[3])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<float4x3, 4>* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 4>, 4>* const tint_symbol) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+- (*(tint_symbol))[i] = float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f));
++ (*(tint_symbol))[i] = tint_pack_vec3_in_composite(float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<float4x3, 4>* const tint_symbol_1, const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 4>, 4>* const tint_symbol_2) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 4>, 4>* const tint_symbol_1, const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 4>, 4>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite_1(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = tint_unpack_vec3_in_composite((*(tint_symbol_2))[2]);
+- (*(tint_symbol_1))[1][0] = float3((*(tint_symbol_2))[0][1].elements).zxy;
+- (*(tint_symbol_1))[1][0][0] = (*(tint_symbol_2))[0][1].elements[0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1] = (*(tint_symbol_2))[2];
++ (*(tint_symbol_1))[1][0].elements = packed_float3(float3((*(tint_symbol_2))[0][1].elements).zxy);
++ (*(tint_symbol_1))[1][0].elements[0] = (*(tint_symbol_2))[0][1].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 4>, 4>* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<float4x3, 4>* const tint_symbol_3 = &((*(tint_symbol_4)).w);
+- f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
++kernel void f(const constant tint_array<tint_array<tint_packed_vec3_f32_array_element, 4>, 4>* tint_symbol_4 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 4>, 4> tint_symbol_3;
++ f_inner(local_invocation_index, &(tint_symbol_3), tint_symbol_4);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat2x3__f16_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat2x3__f16_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..300913bdeb
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat2x3__f16_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,85 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.645408900 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_workgroup.wgsl.expected.msl
+@@ -24,10 +24,6 @@ struct S {
+ int after;
+ };
+
+-struct tint_symbol_7 {
+- tint_array<S, 4> w;
+-};
+-
+ struct tint_packed_vec3_f16_array_element {
+ /* 0x0000 */ packed_half3 elements;
+ /* 0x0006 */ tint_array<int8_t, 2> tint_pad;
+@@ -42,44 +38,45 @@ struct S_tint_packed_vec3 {
+ /* 0x0044 */ tint_array<int8_t, 60> tint_pad_3;
+ };
+
+-half2x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f16_array_element, 2> in) {
+- half2x3 result = half2x3(half3(in[0].elements), half3(in[1].elements));
++tint_array<tint_packed_vec3_f16_array_element, 2> tint_pack_vec3_in_composite(half2x3 in) {
++ tint_array<tint_packed_vec3_f16_array_element, 2> result = tint_array<tint_packed_vec3_f16_array_element, 2>{tint_packed_vec3_f16_array_element{.elements=packed_half3(in[0])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[1])}};
+ return result;
+ }
+
+-S tint_unpack_vec3_in_composite_1(S_tint_packed_vec3 in) {
+- S result = {};
++struct S {
++ int before;
++ half2x3 m;
++ int after;
++};
++
++S_tint_packed_vec3 tint_pack_vec3_in_composite_1(S in) {
++ S_tint_packed_vec3 result = {};
+ result.before = in.before;
+- result.m = tint_unpack_vec3_in_composite(in.m);
++ result.m = tint_pack_vec3_in_composite(in.m);
+ result.after = in.after;
+ return result;
+ }
+
+-tint_array<S, 4> tint_unpack_vec3_in_composite_2(tint_array<S_tint_packed_vec3, 4> in) {
+- tint_array<S, 4> result = tint_array<S, 4>{tint_unpack_vec3_in_composite_1(in[0]), tint_unpack_vec3_in_composite_1(in[1]), tint_unpack_vec3_in_composite_1(in[2]), tint_unpack_vec3_in_composite_1(in[3])};
+- return result;
+-}
+-
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S, 4>* const tint_symbol_1) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_1) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+ S const tint_symbol = S{};
+- (*(tint_symbol_1))[i] = tint_symbol;
++ (*(tint_symbol_1))[i] = tint_pack_vec3_in_composite_1(tint_symbol);
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<S, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+- *(tint_symbol_2) = tint_unpack_vec3_in_composite_2(*(tint_symbol_3));
+- (*(tint_symbol_2))[1] = tint_unpack_vec3_in_composite_1((*(tint_symbol_3))[2]);
+- (*(tint_symbol_2))[3].m = tint_unpack_vec3_in_composite((*(tint_symbol_3))[2].m);
+- (*(tint_symbol_2))[1].m[0] = half3((*(tint_symbol_3))[0].m[1].elements).zxy;
++ *(tint_symbol_2) = *(tint_symbol_3);
++ (*(tint_symbol_2))[1] = (*(tint_symbol_3))[2];
++ (*(tint_symbol_2))[3].m = (*(tint_symbol_3))[2].m;
++ (*(tint_symbol_2))[1].m[0].elements = packed_half3(half3((*(tint_symbol_3))[0].m[1].elements).zxy);
+ }
+
+-kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_6 [[buffer(0)]], threadgroup tint_symbol_7* tint_symbol_5 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<S, 4>* const tint_symbol_4 = &((*(tint_symbol_5)).w);
+- f_inner(local_invocation_index, tint_symbol_4, tint_symbol_6);
++kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_5 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<S_tint_packed_vec3, 4> tint_symbol_4;
++ f_inner(local_invocation_index, &(tint_symbol_4), tint_symbol_5);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat2x3__f32_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat2x3__f32_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..5e6d6238c8
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat2x3__f32_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,91 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.649407600 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_workgroup.wgsl.expected.msl
+@@ -18,16 +18,6 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-struct S {
+- int before;
+- float2x3 m;
+- int after;
+-};
+-
+-struct tint_symbol_7 {
+- tint_array<S, 4> w;
+-};
+-
+ struct tint_packed_vec3_f32_array_element {
+ /* 0x0000 */ packed_float3 elements;
+ /* 0x000c */ tint_array<int8_t, 4> tint_pad;
+@@ -42,44 +32,45 @@ struct S_tint_packed_vec3 {
+ /* 0x0044 */ tint_array<int8_t, 60> tint_pad_3;
+ };
+
+-float2x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 2> in) {
+- float2x3 result = float2x3(float3(in[0].elements), float3(in[1].elements));
++tint_array<tint_packed_vec3_f32_array_element, 2> tint_pack_vec3_in_composite(float2x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 2> result = tint_array<tint_packed_vec3_f32_array_element, 2>{tint_packed_vec3_f32_array_element{.elements=packed_float3(in[0])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[1])}};
+ return result;
+ }
+
+-S tint_unpack_vec3_in_composite_1(S_tint_packed_vec3 in) {
+- S result = {};
++struct S {
++ int before;
++ float2x3 m;
++ int after;
++};
++
++S_tint_packed_vec3 tint_pack_vec3_in_composite_1(S in) {
++ S_tint_packed_vec3 result = {};
+ result.before = in.before;
+- result.m = tint_unpack_vec3_in_composite(in.m);
++ result.m = tint_pack_vec3_in_composite(in.m);
+ result.after = in.after;
+ return result;
+ }
+
+-tint_array<S, 4> tint_unpack_vec3_in_composite_2(tint_array<S_tint_packed_vec3, 4> in) {
+- tint_array<S, 4> result = tint_array<S, 4>{tint_unpack_vec3_in_composite_1(in[0]), tint_unpack_vec3_in_composite_1(in[1]), tint_unpack_vec3_in_composite_1(in[2]), tint_unpack_vec3_in_composite_1(in[3])};
+- return result;
+-}
+-
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S, 4>* const tint_symbol_1) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_1) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+ S const tint_symbol = S{};
+- (*(tint_symbol_1))[i] = tint_symbol;
++ (*(tint_symbol_1))[i] = tint_pack_vec3_in_composite_1(tint_symbol);
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<S, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+- *(tint_symbol_2) = tint_unpack_vec3_in_composite_2(*(tint_symbol_3));
+- (*(tint_symbol_2))[1] = tint_unpack_vec3_in_composite_1((*(tint_symbol_3))[2]);
+- (*(tint_symbol_2))[3].m = tint_unpack_vec3_in_composite((*(tint_symbol_3))[2].m);
+- (*(tint_symbol_2))[1].m[0] = float3((*(tint_symbol_3))[0].m[1].elements).zxy;
++ *(tint_symbol_2) = *(tint_symbol_3);
++ (*(tint_symbol_2))[1] = (*(tint_symbol_3))[2];
++ (*(tint_symbol_2))[3].m = (*(tint_symbol_3))[2].m;
++ (*(tint_symbol_2))[1].m[0].elements = packed_float3(float3((*(tint_symbol_3))[0].m[1].elements).zxy);
+ }
+
+-kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_6 [[buffer(0)]], threadgroup tint_symbol_7* tint_symbol_5 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<S, 4>* const tint_symbol_4 = &((*(tint_symbol_5)).w);
+- f_inner(local_invocation_index, tint_symbol_4, tint_symbol_6);
++kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_5 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<S_tint_packed_vec3, 4> tint_symbol_4;
++ f_inner(local_invocation_index, &(tint_symbol_4), tint_symbol_5);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat3x3__f16_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat3x3__f16_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..07c73f653c
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat3x3__f16_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,91 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.673399700 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_workgroup.wgsl.expected.msl
+@@ -18,16 +18,6 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-struct S {
+- int before;
+- half3x3 m;
+- int after;
+-};
+-
+-struct tint_symbol_7 {
+- tint_array<S, 4> w;
+-};
+-
+ struct tint_packed_vec3_f16_array_element {
+ /* 0x0000 */ packed_half3 elements;
+ /* 0x0006 */ tint_array<int8_t, 2> tint_pad;
+@@ -42,44 +32,45 @@ struct S_tint_packed_vec3 {
+ /* 0x0044 */ tint_array<int8_t, 60> tint_pad_3;
+ };
+
+-half3x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f16_array_element, 3> in) {
+- half3x3 result = half3x3(half3(in[0].elements), half3(in[1].elements), half3(in[2].elements));
++tint_array<tint_packed_vec3_f16_array_element, 3> tint_pack_vec3_in_composite(half3x3 in) {
++ tint_array<tint_packed_vec3_f16_array_element, 3> result = tint_array<tint_packed_vec3_f16_array_element, 3>{tint_packed_vec3_f16_array_element{.elements=packed_half3(in[0])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[1])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[2])}};
+ return result;
+ }
+
+-S tint_unpack_vec3_in_composite_1(S_tint_packed_vec3 in) {
+- S result = {};
++struct S {
++ int before;
++ half3x3 m;
++ int after;
++};
++
++S_tint_packed_vec3 tint_pack_vec3_in_composite_1(S in) {
++ S_tint_packed_vec3 result = {};
+ result.before = in.before;
+- result.m = tint_unpack_vec3_in_composite(in.m);
++ result.m = tint_pack_vec3_in_composite(in.m);
+ result.after = in.after;
+ return result;
+ }
+
+-tint_array<S, 4> tint_unpack_vec3_in_composite_2(tint_array<S_tint_packed_vec3, 4> in) {
+- tint_array<S, 4> result = tint_array<S, 4>{tint_unpack_vec3_in_composite_1(in[0]), tint_unpack_vec3_in_composite_1(in[1]), tint_unpack_vec3_in_composite_1(in[2]), tint_unpack_vec3_in_composite_1(in[3])};
+- return result;
+-}
+-
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S, 4>* const tint_symbol_1) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_1) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+ S const tint_symbol = S{};
+- (*(tint_symbol_1))[i] = tint_symbol;
++ (*(tint_symbol_1))[i] = tint_pack_vec3_in_composite_1(tint_symbol);
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<S, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+- *(tint_symbol_2) = tint_unpack_vec3_in_composite_2(*(tint_symbol_3));
+- (*(tint_symbol_2))[1] = tint_unpack_vec3_in_composite_1((*(tint_symbol_3))[2]);
+- (*(tint_symbol_2))[3].m = tint_unpack_vec3_in_composite((*(tint_symbol_3))[2].m);
+- (*(tint_symbol_2))[1].m[0] = half3((*(tint_symbol_3))[0].m[1].elements).zxy;
++ *(tint_symbol_2) = *(tint_symbol_3);
++ (*(tint_symbol_2))[1] = (*(tint_symbol_3))[2];
++ (*(tint_symbol_2))[3].m = (*(tint_symbol_3))[2].m;
++ (*(tint_symbol_2))[1].m[0].elements = packed_half3(half3((*(tint_symbol_3))[0].m[1].elements).zxy);
+ }
+
+-kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_6 [[buffer(0)]], threadgroup tint_symbol_7* tint_symbol_5 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<S, 4>* const tint_symbol_4 = &((*(tint_symbol_5)).w);
+- f_inner(local_invocation_index, tint_symbol_4, tint_symbol_6);
++kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_5 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<S_tint_packed_vec3, 4> tint_symbol_4;
++ f_inner(local_invocation_index, &(tint_symbol_4), tint_symbol_5);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat3x3__f32_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat3x3__f32_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..82e06ec19c
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat3x3__f32_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,91 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.673399700 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_workgroup.wgsl.expected.msl
+@@ -18,16 +18,6 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-struct S {
+- int before;
+- float3x3 m;
+- int after;
+-};
+-
+-struct tint_symbol_7 {
+- tint_array<S, 4> w;
+-};
+-
+ struct tint_packed_vec3_f32_array_element {
+ /* 0x0000 */ packed_float3 elements;
+ /* 0x000c */ tint_array<int8_t, 4> tint_pad;
+@@ -41,44 +31,45 @@ struct S_tint_packed_vec3 {
+ /* 0x0044 */ tint_array<int8_t, 60> tint_pad_2;
+ };
+
+-float3x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 3> in) {
+- float3x3 result = float3x3(float3(in[0].elements), float3(in[1].elements), float3(in[2].elements));
++tint_array<tint_packed_vec3_f32_array_element, 3> tint_pack_vec3_in_composite(float3x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 3> result = tint_array<tint_packed_vec3_f32_array_element, 3>{tint_packed_vec3_f32_array_element{.elements=packed_float3(in[0])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[1])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[2])}};
+ return result;
+ }
+
+-S tint_unpack_vec3_in_composite_1(S_tint_packed_vec3 in) {
+- S result = {};
++struct S {
++ int before;
++ float3x3 m;
++ int after;
++};
++
++S_tint_packed_vec3 tint_pack_vec3_in_composite_1(S in) {
++ S_tint_packed_vec3 result = {};
+ result.before = in.before;
+- result.m = tint_unpack_vec3_in_composite(in.m);
++ result.m = tint_pack_vec3_in_composite(in.m);
+ result.after = in.after;
+ return result;
+ }
+
+-tint_array<S, 4> tint_unpack_vec3_in_composite_2(tint_array<S_tint_packed_vec3, 4> in) {
+- tint_array<S, 4> result = tint_array<S, 4>{tint_unpack_vec3_in_composite_1(in[0]), tint_unpack_vec3_in_composite_1(in[1]), tint_unpack_vec3_in_composite_1(in[2]), tint_unpack_vec3_in_composite_1(in[3])};
+- return result;
+-}
+-
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S, 4>* const tint_symbol_1) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_1) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+ S const tint_symbol = S{};
+- (*(tint_symbol_1))[i] = tint_symbol;
++ (*(tint_symbol_1))[i] = tint_pack_vec3_in_composite_1(tint_symbol);
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<S, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+- *(tint_symbol_2) = tint_unpack_vec3_in_composite_2(*(tint_symbol_3));
+- (*(tint_symbol_2))[1] = tint_unpack_vec3_in_composite_1((*(tint_symbol_3))[2]);
+- (*(tint_symbol_2))[3].m = tint_unpack_vec3_in_composite((*(tint_symbol_3))[2].m);
+- (*(tint_symbol_2))[1].m[0] = float3((*(tint_symbol_3))[0].m[1].elements).zxy;
++ *(tint_symbol_2) = *(tint_symbol_3);
++ (*(tint_symbol_2))[1] = (*(tint_symbol_3))[2];
++ (*(tint_symbol_2))[3].m = (*(tint_symbol_3))[2].m;
++ (*(tint_symbol_2))[1].m[0].elements = packed_float3(float3((*(tint_symbol_3))[0].m[1].elements).zxy);
+ }
+
+-kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_6 [[buffer(0)]], threadgroup tint_symbol_7* tint_symbol_5 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<S, 4>* const tint_symbol_4 = &((*(tint_symbol_5)).w);
+- f_inner(local_invocation_index, tint_symbol_4, tint_symbol_6);
++kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_5 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<S_tint_packed_vec3, 4> tint_symbol_4;
++ f_inner(local_invocation_index, &(tint_symbol_4), tint_symbol_5);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat4x3__f16_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat4x3__f16_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..ce2dc23f9b
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat4x3__f16_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,91 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.701390500 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_workgroup.wgsl.expected.msl
+@@ -18,16 +18,6 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-struct S {
+- int before;
+- half4x3 m;
+- int after;
+-};
+-
+-struct tint_symbol_7 {
+- tint_array<S, 4> w;
+-};
+-
+ struct tint_packed_vec3_f16_array_element {
+ /* 0x0000 */ packed_half3 elements;
+ /* 0x0006 */ tint_array<int8_t, 2> tint_pad;
+@@ -42,44 +32,45 @@ struct S_tint_packed_vec3 {
+ /* 0x0044 */ tint_array<int8_t, 60> tint_pad_3;
+ };
+
+-half4x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f16_array_element, 4> in) {
+- half4x3 result = half4x3(half3(in[0].elements), half3(in[1].elements), half3(in[2].elements), half3(in[3].elements));
++tint_array<tint_packed_vec3_f16_array_element, 4> tint_pack_vec3_in_composite(half4x3 in) {
++ tint_array<tint_packed_vec3_f16_array_element, 4> result = tint_array<tint_packed_vec3_f16_array_element, 4>{tint_packed_vec3_f16_array_element{.elements=packed_half3(in[0])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[1])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[2])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[3])}};
+ return result;
+ }
+
+-S tint_unpack_vec3_in_composite_1(S_tint_packed_vec3 in) {
+- S result = {};
++struct S {
++ int before;
++ half4x3 m;
++ int after;
++};
++
++S_tint_packed_vec3 tint_pack_vec3_in_composite_1(S in) {
++ S_tint_packed_vec3 result = {};
+ result.before = in.before;
+- result.m = tint_unpack_vec3_in_composite(in.m);
++ result.m = tint_pack_vec3_in_composite(in.m);
+ result.after = in.after;
+ return result;
+ }
+
+-tint_array<S, 4> tint_unpack_vec3_in_composite_2(tint_array<S_tint_packed_vec3, 4> in) {
+- tint_array<S, 4> result = tint_array<S, 4>{tint_unpack_vec3_in_composite_1(in[0]), tint_unpack_vec3_in_composite_1(in[1]), tint_unpack_vec3_in_composite_1(in[2]), tint_unpack_vec3_in_composite_1(in[3])};
+- return result;
+-}
+-
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S, 4>* const tint_symbol_1) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_1) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+ S const tint_symbol = S{};
+- (*(tint_symbol_1))[i] = tint_symbol;
++ (*(tint_symbol_1))[i] = tint_pack_vec3_in_composite_1(tint_symbol);
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<S, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+- *(tint_symbol_2) = tint_unpack_vec3_in_composite_2(*(tint_symbol_3));
+- (*(tint_symbol_2))[1] = tint_unpack_vec3_in_composite_1((*(tint_symbol_3))[2]);
+- (*(tint_symbol_2))[3].m = tint_unpack_vec3_in_composite((*(tint_symbol_3))[2].m);
+- (*(tint_symbol_2))[1].m[0] = half3((*(tint_symbol_3))[0].m[1].elements).zxy;
++ *(tint_symbol_2) = *(tint_symbol_3);
++ (*(tint_symbol_2))[1] = (*(tint_symbol_3))[2];
++ (*(tint_symbol_2))[3].m = (*(tint_symbol_3))[2].m;
++ (*(tint_symbol_2))[1].m[0].elements = packed_half3(half3((*(tint_symbol_3))[0].m[1].elements).zxy);
+ }
+
+-kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_6 [[buffer(0)]], threadgroup tint_symbol_7* tint_symbol_5 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<S, 4>* const tint_symbol_4 = &((*(tint_symbol_5)).w);
+- f_inner(local_invocation_index, tint_symbol_4, tint_symbol_6);
++kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_5 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<S_tint_packed_vec3, 4> tint_symbol_4;
++ f_inner(local_invocation_index, &(tint_symbol_4), tint_symbol_5);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat4x3__f32_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat4x3__f32_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..cedfdc7ee2
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_struct_mat4x3__f32_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,91 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.701390500 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_workgroup.wgsl.expected.msl
+@@ -18,16 +18,6 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-struct S {
+- int before;
+- float4x3 m;
+- int after;
+-};
+-
+-struct tint_symbol_7 {
+- tint_array<S, 4> w;
+-};
+-
+ struct tint_packed_vec3_f32_array_element {
+ /* 0x0000 */ packed_float3 elements;
+ /* 0x000c */ tint_array<int8_t, 4> tint_pad;
+@@ -42,44 +32,45 @@ struct S_tint_packed_vec3 {
+ /* 0x0084 */ tint_array<int8_t, 60> tint_pad_3;
+ };
+
+-float4x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 4> in) {
+- float4x3 result = float4x3(float3(in[0].elements), float3(in[1].elements), float3(in[2].elements), float3(in[3].elements));
++tint_array<tint_packed_vec3_f32_array_element, 4> tint_pack_vec3_in_composite(float4x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 4> result = tint_array<tint_packed_vec3_f32_array_element, 4>{tint_packed_vec3_f32_array_element{.elements=packed_float3(in[0])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[1])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[2])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[3])}};
+ return result;
+ }
+
+-S tint_unpack_vec3_in_composite_1(S_tint_packed_vec3 in) {
+- S result = {};
++struct S {
++ int before;
++ float4x3 m;
++ int after;
++};
++
++S_tint_packed_vec3 tint_pack_vec3_in_composite_1(S in) {
++ S_tint_packed_vec3 result = {};
+ result.before = in.before;
+- result.m = tint_unpack_vec3_in_composite(in.m);
++ result.m = tint_pack_vec3_in_composite(in.m);
+ result.after = in.after;
+ return result;
+ }
+
+-tint_array<S, 4> tint_unpack_vec3_in_composite_2(tint_array<S_tint_packed_vec3, 4> in) {
+- tint_array<S, 4> result = tint_array<S, 4>{tint_unpack_vec3_in_composite_1(in[0]), tint_unpack_vec3_in_composite_1(in[1]), tint_unpack_vec3_in_composite_1(in[2]), tint_unpack_vec3_in_composite_1(in[3])};
+- return result;
+-}
+-
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S, 4>* const tint_symbol_1) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_1) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 4u); idx = (idx + 1u)) {
+ uint const i = idx;
+ S const tint_symbol = S{};
+- (*(tint_symbol_1))[i] = tint_symbol;
++ (*(tint_symbol_1))[i] = tint_pack_vec3_in_composite_1(tint_symbol);
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup tint_array<S, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<S_tint_packed_vec3, 4>* const tint_symbol_2, const constant tint_array<S_tint_packed_vec3, 4>* const tint_symbol_3) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+- *(tint_symbol_2) = tint_unpack_vec3_in_composite_2(*(tint_symbol_3));
+- (*(tint_symbol_2))[1] = tint_unpack_vec3_in_composite_1((*(tint_symbol_3))[2]);
+- (*(tint_symbol_2))[3].m = tint_unpack_vec3_in_composite((*(tint_symbol_3))[2].m);
+- (*(tint_symbol_2))[1].m[0] = float3((*(tint_symbol_3))[0].m[1].elements).zxy;
++ *(tint_symbol_2) = *(tint_symbol_3);
++ (*(tint_symbol_2))[1] = (*(tint_symbol_3))[2];
++ (*(tint_symbol_2))[3].m = (*(tint_symbol_3))[2].m;
++ (*(tint_symbol_2))[1].m[0].elements = packed_float3(float3((*(tint_symbol_3))[0].m[1].elements).zxy);
+ }
+
+-kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_6 [[buffer(0)]], threadgroup tint_symbol_7* tint_symbol_5 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<S, 4>* const tint_symbol_4 = &((*(tint_symbol_5)).w);
+- f_inner(local_invocation_index, tint_symbol_4, tint_symbol_6);
++kernel void f(const constant tint_array<S_tint_packed_vec3, 4>* tint_symbol_5 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<S_tint_packed_vec3, 4> tint_symbol_4;
++ f_inner(local_invocation_index, &(tint_symbol_4), tint_symbol_5);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat2x3__f16_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat2x3__f16_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..5e32a34d33
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat2x3__f16_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,59 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.717385300 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.msl
+@@ -14,38 +14,34 @@ struct tint_array {
+ T elements[N];
+ };
+
+-struct tint_symbol_6 {
+- half2x3 w;
+-};
+-
+ struct tint_packed_vec3_f16_array_element {
+ /* 0x0000 */ packed_half3 elements;
+ /* 0x0006 */ tint_array<int8_t, 2> tint_pad;
+ };
+
+-half2x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f16_array_element, 2> in) {
+- half2x3 result = half2x3(half3(in[0].elements), half3(in[1].elements));
++tint_array<tint_packed_vec3_f16_array_element, 2> tint_pack_vec3_in_composite(half2x3 in) {
++ tint_array<tint_packed_vec3_f16_array_element, 2> result = tint_array<tint_packed_vec3_f16_array_element, 2>{tint_packed_vec3_f16_array_element{.elements=packed_half3(in[0])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[1])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup half2x3* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_packed_vec3_f16_array_element, 2>* const tint_symbol) {
+ if ((local_idx < 1u)) {
+- *(tint_symbol) = half2x3(half3(0.0h), half3(0.0h));
++ *(tint_symbol) = tint_pack_vec3_in_composite(half2x3(half3(0.0h), half3(0.0h)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup half2x3* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f16_array_element, 2>* const tint_symbol_2) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_packed_vec3_f16_array_element, 2>* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f16_array_element, 2>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = half3((*(tint_symbol_2))[0].elements);
+- (*(tint_symbol_1))[1] = half3((*(tint_symbol_2))[0].elements).zxy;
+- (*(tint_symbol_1))[0][1] = (*(tint_symbol_2))[1].elements[0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1].elements = (*(tint_symbol_2))[0].elements;
++ (*(tint_symbol_1))[1].elements = packed_half3(half3((*(tint_symbol_2))[0].elements).zxy);
++ (*(tint_symbol_1))[0].elements[1] = (*(tint_symbol_2))[1].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_packed_vec3_f16_array_element, 2>* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup half2x3* const tint_symbol_3 = &((*(tint_symbol_4)).w);
+- f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
++kernel void f(const constant tint_array<tint_packed_vec3_f16_array_element, 2>* tint_symbol_4 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_packed_vec3_f16_array_element, 2> tint_symbol_3;
++ f_inner(local_invocation_index, &(tint_symbol_3), tint_symbol_4);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat2x3__f32_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat2x3__f32_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..b5af3e477e
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat2x3__f32_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,59 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.725382800 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.msl
+@@ -14,38 +14,34 @@ struct tint_array {
+ T elements[N];
+ };
+
+-struct tint_symbol_6 {
+- float2x3 w;
+-};
+-
+ struct tint_packed_vec3_f32_array_element {
+ /* 0x0000 */ packed_float3 elements;
+ /* 0x000c */ tint_array<int8_t, 4> tint_pad;
+ };
+
+-float2x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 2> in) {
+- float2x3 result = float2x3(float3(in[0].elements), float3(in[1].elements));
++tint_array<tint_packed_vec3_f32_array_element, 2> tint_pack_vec3_in_composite(float2x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 2> result = tint_array<tint_packed_vec3_f32_array_element, 2>{tint_packed_vec3_f32_array_element{.elements=packed_float3(in[0])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[1])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup float2x3* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_packed_vec3_f32_array_element, 2>* const tint_symbol) {
+ if ((local_idx < 1u)) {
+- *(tint_symbol) = float2x3(float3(0.0f), float3(0.0f));
++ *(tint_symbol) = tint_pack_vec3_in_composite(float2x3(float3(0.0f), float3(0.0f)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup float2x3* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f32_array_element, 2>* const tint_symbol_2) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_packed_vec3_f32_array_element, 2>* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f32_array_element, 2>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = float3((*(tint_symbol_2))[0].elements);
+- (*(tint_symbol_1))[1] = float3((*(tint_symbol_2))[0].elements).zxy;
+- (*(tint_symbol_1))[0][1] = (*(tint_symbol_2))[1].elements[0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1].elements = (*(tint_symbol_2))[0].elements;
++ (*(tint_symbol_1))[1].elements = packed_float3(float3((*(tint_symbol_2))[0].elements).zxy);
++ (*(tint_symbol_1))[0].elements[1] = (*(tint_symbol_2))[1].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_packed_vec3_f32_array_element, 2>* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup float2x3* const tint_symbol_3 = &((*(tint_symbol_4)).w);
+- f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
++kernel void f(const constant tint_array<tint_packed_vec3_f32_array_element, 2>* tint_symbol_4 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_packed_vec3_f32_array_element, 2> tint_symbol_3;
++ f_inner(local_invocation_index, &(tint_symbol_3), tint_symbol_4);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat3x3__f16_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat3x3__f16_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..54f78e4657
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat3x3__f16_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,59 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.737378800 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.msl
+@@ -14,38 +14,34 @@ struct tint_array {
+ T elements[N];
+ };
+
+-struct tint_symbol_6 {
+- half3x3 w;
+-};
+-
+ struct tint_packed_vec3_f16_array_element {
+ /* 0x0000 */ packed_half3 elements;
+ /* 0x0006 */ tint_array<int8_t, 2> tint_pad;
+ };
+
+-half3x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f16_array_element, 3> in) {
+- half3x3 result = half3x3(half3(in[0].elements), half3(in[1].elements), half3(in[2].elements));
++tint_array<tint_packed_vec3_f16_array_element, 3> tint_pack_vec3_in_composite(half3x3 in) {
++ tint_array<tint_packed_vec3_f16_array_element, 3> result = tint_array<tint_packed_vec3_f16_array_element, 3>{tint_packed_vec3_f16_array_element{.elements=packed_half3(in[0])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[1])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[2])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup half3x3* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_packed_vec3_f16_array_element, 3>* const tint_symbol) {
+ if ((local_idx < 1u)) {
+- *(tint_symbol) = half3x3(half3(0.0h), half3(0.0h), half3(0.0h));
++ *(tint_symbol) = tint_pack_vec3_in_composite(half3x3(half3(0.0h), half3(0.0h), half3(0.0h)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup half3x3* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f16_array_element, 3>* const tint_symbol_2) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_packed_vec3_f16_array_element, 3>* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f16_array_element, 3>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = half3((*(tint_symbol_2))[0].elements);
+- (*(tint_symbol_1))[1] = half3((*(tint_symbol_2))[0].elements).zxy;
+- (*(tint_symbol_1))[0][1] = (*(tint_symbol_2))[1].elements[0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1].elements = (*(tint_symbol_2))[0].elements;
++ (*(tint_symbol_1))[1].elements = packed_half3(half3((*(tint_symbol_2))[0].elements).zxy);
++ (*(tint_symbol_1))[0].elements[1] = (*(tint_symbol_2))[1].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_packed_vec3_f16_array_element, 3>* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup half3x3* const tint_symbol_3 = &((*(tint_symbol_4)).w);
+- f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
++kernel void f(const constant tint_array<tint_packed_vec3_f16_array_element, 3>* tint_symbol_4 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_packed_vec3_f16_array_element, 3> tint_symbol_3;
++ f_inner(local_invocation_index, &(tint_symbol_3), tint_symbol_4);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat3x3__f32_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat3x3__f32_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..f4357ffbf5
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat3x3__f32_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,59 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.741377600 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.msl
+@@ -14,38 +14,34 @@ struct tint_array {
+ T elements[N];
+ };
+
+-struct tint_symbol_6 {
+- float3x3 w;
+-};
+-
+ struct tint_packed_vec3_f32_array_element {
+ /* 0x0000 */ packed_float3 elements;
+ /* 0x000c */ tint_array<int8_t, 4> tint_pad;
+ };
+
+-float3x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 3> in) {
+- float3x3 result = float3x3(float3(in[0].elements), float3(in[1].elements), float3(in[2].elements));
++tint_array<tint_packed_vec3_f32_array_element, 3> tint_pack_vec3_in_composite(float3x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 3> result = tint_array<tint_packed_vec3_f32_array_element, 3>{tint_packed_vec3_f32_array_element{.elements=packed_float3(in[0])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[1])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[2])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup float3x3* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_packed_vec3_f32_array_element, 3>* const tint_symbol) {
+ if ((local_idx < 1u)) {
+- *(tint_symbol) = float3x3(float3(0.0f), float3(0.0f), float3(0.0f));
++ *(tint_symbol) = tint_pack_vec3_in_composite(float3x3(float3(0.0f), float3(0.0f), float3(0.0f)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup float3x3* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f32_array_element, 3>* const tint_symbol_2) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_packed_vec3_f32_array_element, 3>* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f32_array_element, 3>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = float3((*(tint_symbol_2))[0].elements);
+- (*(tint_symbol_1))[1] = float3((*(tint_symbol_2))[0].elements).zxy;
+- (*(tint_symbol_1))[0][1] = (*(tint_symbol_2))[1].elements[0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1].elements = (*(tint_symbol_2))[0].elements;
++ (*(tint_symbol_1))[1].elements = packed_float3(float3((*(tint_symbol_2))[0].elements).zxy);
++ (*(tint_symbol_1))[0].elements[1] = (*(tint_symbol_2))[1].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_packed_vec3_f32_array_element, 3>* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup float3x3* const tint_symbol_3 = &((*(tint_symbol_4)).w);
+- f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
++kernel void f(const constant tint_array<tint_packed_vec3_f32_array_element, 3>* tint_symbol_4 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_packed_vec3_f32_array_element, 3> tint_symbol_3;
++ f_inner(local_invocation_index, &(tint_symbol_3), tint_symbol_4);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat4x3__f16_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat4x3__f16_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..704c50cc88
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat4x3__f16_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,59 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.753373600 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.msl
+@@ -14,38 +14,34 @@ struct tint_array {
+ T elements[N];
+ };
+
+-struct tint_symbol_6 {
+- half4x3 w;
+-};
+-
+ struct tint_packed_vec3_f16_array_element {
+ /* 0x0000 */ packed_half3 elements;
+ /* 0x0006 */ tint_array<int8_t, 2> tint_pad;
+ };
+
+-half4x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f16_array_element, 4> in) {
+- half4x3 result = half4x3(half3(in[0].elements), half3(in[1].elements), half3(in[2].elements), half3(in[3].elements));
++tint_array<tint_packed_vec3_f16_array_element, 4> tint_pack_vec3_in_composite(half4x3 in) {
++ tint_array<tint_packed_vec3_f16_array_element, 4> result = tint_array<tint_packed_vec3_f16_array_element, 4>{tint_packed_vec3_f16_array_element{.elements=packed_half3(in[0])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[1])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[2])}, tint_packed_vec3_f16_array_element{.elements=packed_half3(in[3])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup half4x3* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_packed_vec3_f16_array_element, 4>* const tint_symbol) {
+ if ((local_idx < 1u)) {
+- *(tint_symbol) = half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h));
++ *(tint_symbol) = tint_pack_vec3_in_composite(half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup half4x3* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f16_array_element, 4>* const tint_symbol_2) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_packed_vec3_f16_array_element, 4>* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f16_array_element, 4>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = half3((*(tint_symbol_2))[0].elements);
+- (*(tint_symbol_1))[1] = half3((*(tint_symbol_2))[0].elements).zxy;
+- (*(tint_symbol_1))[0][1] = (*(tint_symbol_2))[1].elements[0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1].elements = (*(tint_symbol_2))[0].elements;
++ (*(tint_symbol_1))[1].elements = packed_half3(half3((*(tint_symbol_2))[0].elements).zxy);
++ (*(tint_symbol_1))[0].elements[1] = (*(tint_symbol_2))[1].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_packed_vec3_f16_array_element, 4>* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup half4x3* const tint_symbol_3 = &((*(tint_symbol_4)).w);
+- f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
++kernel void f(const constant tint_array<tint_packed_vec3_f16_array_element, 4>* tint_symbol_4 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_packed_vec3_f16_array_element, 4> tint_symbol_3;
++ f_inner(local_invocation_index, &(tint_symbol_3), tint_symbol_4);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat4x3__f32_to__workgroup.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat4x3__f32_to__workgroup.wgsl.expected.msl
new file mode 100644
index 0000000000..c13f4ff367
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_buffer_uniform_std140_unnested_mat4x3__f32_to__workgroup.wgsl.expected.msl
@@ -0,0 +1,59 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.msl.orig 2024-10-18 12:38:01.757372400 +0000
++++ third_party/dawn/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.msl
+@@ -14,38 +14,34 @@ struct tint_array {
+ T elements[N];
+ };
+
+-struct tint_symbol_6 {
+- float4x3 w;
+-};
+-
+ struct tint_packed_vec3_f32_array_element {
+ /* 0x0000 */ packed_float3 elements;
+ /* 0x000c */ tint_array<int8_t, 4> tint_pad;
+ };
+
+-float4x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 4> in) {
+- float4x3 result = float4x3(float3(in[0].elements), float3(in[1].elements), float3(in[2].elements), float3(in[3].elements));
++tint_array<tint_packed_vec3_f32_array_element, 4> tint_pack_vec3_in_composite(float4x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 4> result = tint_array<tint_packed_vec3_f32_array_element, 4>{tint_packed_vec3_f32_array_element{.elements=packed_float3(in[0])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[1])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[2])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[3])}};
+ return result;
+ }
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup float4x3* const tint_symbol) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_packed_vec3_f32_array_element, 4>* const tint_symbol) {
+ if ((local_idx < 1u)) {
+- *(tint_symbol) = float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f));
++ *(tint_symbol) = tint_pack_vec3_in_composite(float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void f_inner(uint local_invocation_index, threadgroup float4x3* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f32_array_element, 4>* const tint_symbol_2) {
++void f_inner(uint local_invocation_index, threadgroup tint_array<tint_packed_vec3_f32_array_element, 4>* const tint_symbol_1, const constant tint_array<tint_packed_vec3_f32_array_element, 4>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
+- *(tint_symbol_1) = tint_unpack_vec3_in_composite(*(tint_symbol_2));
+- (*(tint_symbol_1))[1] = float3((*(tint_symbol_2))[0].elements);
+- (*(tint_symbol_1))[1] = float3((*(tint_symbol_2))[0].elements).zxy;
+- (*(tint_symbol_1))[0][1] = (*(tint_symbol_2))[1].elements[0];
++ *(tint_symbol_1) = *(tint_symbol_2);
++ (*(tint_symbol_1))[1].elements = (*(tint_symbol_2))[0].elements;
++ (*(tint_symbol_1))[1].elements = packed_float3(float3((*(tint_symbol_2))[0].elements).zxy);
++ (*(tint_symbol_1))[0].elements[1] = (*(tint_symbol_2))[1].elements[0];
+ }
+
+-kernel void f(const constant tint_array<tint_packed_vec3_f32_array_element, 4>* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup float4x3* const tint_symbol_3 = &((*(tint_symbol_4)).w);
+- f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
++kernel void f(const constant tint_array<tint_packed_vec3_f32_array_element, 4>* tint_symbol_4 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_packed_vec3_f32_array_element, 4> tint_symbol_3;
++ f_inner(local_invocation_index, &(tint_symbol_3), tint_symbol_4);
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl
index 173cc30c99..9b61660aed 100644
--- a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.orig 2025-01-19 14:12:04.115215816 +0000
+--- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.orig 2025-02-15 09:43:46.458294667 +0000
+++ third_party/dawn/test/tint/bug/chromium/378541479.wgsl
@@ -0,0 +1,10 @@
+// flags: --transform robustness
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.dxc.hlsl b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.dxc.hlsl
index c6aa11e802..9580231280 100644
--- a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.dxc.hlsl
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.dxc.hlsl.orig 2025-01-19 14:12:04.115348834 +0000
+--- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.dxc.hlsl.orig 2025-02-15 09:43:46.458449256 +0000
+++ third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.dxc.hlsl
@@ -0,0 +1,13 @@
+cbuffer cbuffer_level : register(b0) {
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.fxc.hlsl b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.fxc.hlsl
index d673382bc3..2c2025c573 100644
--- a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.fxc.hlsl
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.fxc.hlsl.orig 2025-01-19 14:12:04.115470871 +0000
+--- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.fxc.hlsl.orig 2025-02-15 09:43:46.458605840 +0000
+++ third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.fxc.hlsl
@@ -0,0 +1,13 @@
+cbuffer cbuffer_level : register(b0) {
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.glsl b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.glsl
index a60f8a0990..7c5f2f7fa8 100644
--- a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.glsl
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.glsl
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.glsl.orig 2025-01-19 14:12:04.115591956 +0000
+--- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.glsl.orig 2025-02-15 09:43:46.458756271 +0000
+++ third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.glsl
@@ -0,0 +1,27 @@
+#version 310 es
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.dxc.hlsl b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.dxc.hlsl
index c79fba67ac..f2ab072cb9 100644
--- a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.dxc.hlsl
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.dxc.hlsl
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.ir.dxc.hlsl.orig 2025-01-19 14:12:04.115728591 +0000
+--- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.ir.dxc.hlsl.orig 2025-02-15 09:43:46.458907925 +0000
+++ third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.ir.dxc.hlsl
@@ -0,0 +1,22 @@
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.fxc.hlsl b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.fxc.hlsl
index f7251f23a7..853a000aca 100644
--- a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.fxc.hlsl
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.fxc.hlsl
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.ir.fxc.hlsl.orig 2025-01-19 14:12:04.115847261 +0000
+--- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.ir.fxc.hlsl.orig 2025-02-15 09:43:46.459059780 +0000
+++ third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.ir.fxc.hlsl
@@ -0,0 +1,22 @@
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.msl b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.msl
index 16f7c5d764..0de4b43922 100644
--- a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.msl
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.ir.msl
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.ir.msl.orig 2025-01-19 14:12:04.115976703 +0000
+--- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.ir.msl.orig 2025-02-15 09:43:46.459222105 +0000
+++ third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.ir.msl
@@ -0,0 +1,17 @@
+#include <metal_stdlib>
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.msl
index 4bace5abe8..85fa52c27c 100644
--- a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.msl
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.msl
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.msl.orig 2025-01-19 14:12:04.116105242 +0000
+--- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.msl.orig 2025-02-15 09:43:46.459371935 +0000
+++ third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.spvasm b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.spvasm
index a9f2ba86bc..a2e0fa058e 100644
--- a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.spvasm
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.spvasm
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.spvasm.orig 2025-01-19 14:12:04.116224013 +0000
+--- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.spvasm.orig 2025-02-15 09:43:46.459522858 +0000
+++ third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.spvasm
@@ -0,0 +1,70 @@
+; SPIR-V
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.wgsl b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.wgsl
index a57f41bfdd..a412fb7596 100644
--- a/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.wgsl
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_chromium_378541479.wgsl.expected.wgsl
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.wgsl.orig 2025-01-19 14:12:04.116352803 +0000
+--- third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.wgsl.orig 2025-02-15 09:43:46.459678199 +0000
+++ third_party/dawn/test/tint/bug/chromium/378541479.wgsl.expected.wgsl
@@ -0,0 +1,10 @@
+@group(0) @binding(0) var<uniform> level : u32;
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_tint_366037039.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_bug_tint_366037039.wgsl.expected.msl
new file mode 100644
index 0000000000..a555885163
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_tint_366037039.wgsl.expected.msl
@@ -0,0 +1,94 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/bug/tint/366037039.wgsl.expected.msl.orig 2025-02-15 09:43:46.459840553 +0000
++++ third_party/dawn/test/tint/bug/tint/366037039.wgsl.expected.msl
+@@ -0,0 +1,85 @@
++#include <metal_stdlib>
++
++using namespace metal;
++
++template<typename T, size_t N>
++struct tint_array {
++ const constant T& operator[](size_t i) const constant { return elements[i]; }
++ device T& operator[](size_t i) device { return elements[i]; }
++ const device T& operator[](size_t i) const device { return elements[i]; }
++ thread T& operator[](size_t i) thread { return elements[i]; }
++ const thread T& operator[](size_t i) const thread { return elements[i]; }
++ threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
++ const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
++ T elements[N];
++};
++
++#define TINT_ISOLATE_UB(VOLATILE_NAME) \
++ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
++
++struct tint_packed_vec3_u32_array_element {
++ /* 0x0000 */ packed_uint3 elements;
++ /* 0x000c */ tint_array<int8_t, 4> tint_pad;
++};
++
++struct S_tint_packed_vec3 {
++ /* 0x0000 */ packed_uint3 a;
++ /* 0x000c */ uint b;
++ /* 0x0010 */ tint_array<tint_packed_vec3_u32_array_element, 4> c;
++};
++
++tint_array<uint3, 4> tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_u32_array_element, 4> in) {
++ tint_array<uint3, 4> result = tint_array<uint3, 4>{uint3(in[0].elements), uint3(in[1].elements), uint3(in[2].elements), uint3(in[3].elements)};
++ return result;
++}
++
++struct S {
++ uint3 a;
++ uint b;
++ tint_array<uint3, 4> c;
++};
++
++S tint_unpack_vec3_in_composite_1(S_tint_packed_vec3 in) {
++ S result = {};
++ result.a = uint3(in.a);
++ result.b = in.b;
++ result.c = tint_unpack_vec3_in_composite(in.c);
++ return result;
++}
++
++tint_array<tint_packed_vec3_u32_array_element, 4> tint_pack_vec3_in_composite(tint_array<uint3, 4> in) {
++ tint_array<tint_packed_vec3_u32_array_element, 4> result = tint_array<tint_packed_vec3_u32_array_element, 4>{tint_packed_vec3_u32_array_element{.elements=packed_uint3(in[0])}, tint_packed_vec3_u32_array_element{.elements=packed_uint3(in[1])}, tint_packed_vec3_u32_array_element{.elements=packed_uint3(in[2])}, tint_packed_vec3_u32_array_element{.elements=packed_uint3(in[3])}};
++ return result;
++}
++
++S_tint_packed_vec3 tint_pack_vec3_in_composite_1(S in) {
++ S_tint_packed_vec3 result = {};
++ result.a = packed_uint3(in.a);
++ result.b = in.b;
++ result.c = tint_pack_vec3_in_composite(in.c);
++ return result;
++}
++
++void assign_and_preserve_padding_1(device tint_array<tint_packed_vec3_u32_array_element, 4>* const dest, tint_array<uint3, 4> value) {
++ for(uint i = 0u; (i < 4u); i = (i + 1u)) {
++ TINT_ISOLATE_UB(tint_volatile_false);
++ (*(dest))[i].elements = packed_uint3(value[i]);
++ }
++}
++
++void assign_and_preserve_padding(device S_tint_packed_vec3* const dest, S value) {
++ (*(dest)).a = packed_uint3(value.a);
++ (*(dest)).b = value.b;
++ assign_and_preserve_padding_1(&((*(dest)).c), value.c);
++}
++
++void foo(const constant S_tint_packed_vec3* const tint_symbol_2, device S_tint_packed_vec3* const tint_symbol_3, threadgroup S_tint_packed_vec3* const tint_symbol_4) {
++ S const u = tint_unpack_vec3_in_composite_1(*(tint_symbol_2));
++ S const s = tint_unpack_vec3_in_composite_1(*(tint_symbol_3));
++ S const w = tint_unpack_vec3_in_composite_1(*(tint_symbol_3));
++ S const tint_symbol = S{};
++ assign_and_preserve_padding(tint_symbol_3, tint_symbol);
++ S const tint_symbol_1 = S{};
++ *(tint_symbol_4) = tint_pack_vec3_in_composite_1(tint_symbol_1);
++}
++
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_tint_366314931.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_bug_tint_366314931.wgsl.expected.msl
new file mode 100644
index 0000000000..689e7786da
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_tint_366314931.wgsl.expected.msl
@@ -0,0 +1,42 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/bug/tint/366314931.wgsl.expected.msl.orig 2025-02-15 09:43:46.460012907 +0000
++++ third_party/dawn/test/tint/bug/tint/366314931.wgsl.expected.msl
+@@ -0,0 +1,33 @@
++#include <metal_stdlib>
++
++using namespace metal;
++struct S_tint_packed_vec3 {
++ /* 0x0000 */ packed_uint3 v;
++ /* 0x000c */ atomic_uint u;
++};
++
++void tint_zero_workgroup_memory(uint local_idx, threadgroup S_tint_packed_vec3* const tint_symbol_1) {
++ if ((local_idx < 1u)) {
++ (*(tint_symbol_1)).v = packed_uint3(0u);
++ atomic_store_explicit(&((*(tint_symbol_1)).u), 0u, memory_order_relaxed);
++ }
++ threadgroup_barrier(mem_flags::mem_threadgroup);
++}
++
++struct S {
++ uint3 v;
++ atomic_uint u;
++};
++
++void tint_symbol_inner(uint local_invocation_index, threadgroup S_tint_packed_vec3* const tint_symbol_2, device S_tint_packed_vec3* const tint_symbol_3) {
++ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
++ uint const x = atomic_load_explicit(&((*(tint_symbol_2)).u), memory_order_relaxed);
++ atomic_store_explicit(&((*(tint_symbol_3)).u), x, memory_order_relaxed);
++}
++
++kernel void tint_symbol(device S_tint_packed_vec3* tint_symbol_5 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup S_tint_packed_vec3 tint_symbol_4;
++ tint_symbol_inner(local_invocation_index, &(tint_symbol_4), tint_symbol_5);
++ return;
++}
++
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_bug_tint_942.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_bug_tint_942.wgsl.expected.msl
new file mode 100644
index 0000000000..97a38529ad
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_bug_tint_942.wgsl.expected.msl
@@ -0,0 +1,62 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/bug/tint/942.wgsl.expected.msl.orig 2024-10-18 12:38:01.861338400 +0000
++++ third_party/dawn/test/tint/bug/tint/942.wgsl.expected.msl
+@@ -18,11 +18,15 @@ struct tint_array {
+ volatile bool VOLATILE_NAME = true; \
+ if (VOLATILE_NAME)
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_array<float3, 256>, 4>* const tint_symbol_1) {
++struct tint_packed_vec3_f32_array_element {
++ packed_float3 elements;
++};
++
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 256>, 4>* const tint_symbol_1) {
+ TINT_ISOLATE_UB(tint_volatile_true) for(uint idx = local_idx; (idx < 1024u); idx = (idx + 64u)) {
+ uint const i_1 = (idx / 256u);
+ uint const i_2 = (idx % 256u);
+- (*(tint_symbol_1))[i_1][i_2] = float3(0.0f);
++ (*(tint_symbol_1))[i_1][i_2].elements = packed_float3(0.0f);
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+@@ -40,7 +44,7 @@ uint tint_div(uint lhs, uint rhs) {
+ return (lhs / select(rhs, 1u, (rhs == 0u)));
+ }
+
+-void tint_symbol_inner(uint3 WorkGroupID, uint3 LocalInvocationID, uint local_invocation_index, threadgroup tint_array<tint_array<float3, 256>, 4>* const tint_symbol_2, const constant Params* const tint_symbol_3, texture2d<float, access::sample> tint_symbol_4, const constant Flip* const tint_symbol_5, sampler tint_symbol_6, texture2d<float, access::write> tint_symbol_7) {
++void tint_symbol_inner(uint3 WorkGroupID, uint3 LocalInvocationID, uint local_invocation_index, threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 256>, 4>* const tint_symbol_2, const constant Params* const tint_symbol_3, texture2d<float, access::sample> tint_symbol_4, const constant Flip* const tint_symbol_5, sampler tint_symbol_6, texture2d<float, access::write> tint_symbol_7) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+ uint const filterOffset = tint_div(((*(tint_symbol_3)).filterDim - 1u), 2u);
+ uint2 const dims = uint2(tint_symbol_4.get_width(0), tint_symbol_4.get_height(0));
+@@ -51,7 +55,7 @@ void tint_symbol_inner(uint3 WorkGroupID
+ if (((*(tint_symbol_5)).value != 0u)) {
+ loadIndex = loadIndex.yx;
+ }
+- (*(tint_symbol_2))[r][((4u * LocalInvocationID[0]) + c)] = tint_symbol_4.sample(tint_symbol_6, ((float2(loadIndex) + float2(0.25f)) / float2(dims)), level(0.0f)).rgb;
++ (*(tint_symbol_2))[r][((4u * LocalInvocationID[0]) + c)].elements = packed_float3(tint_symbol_4.sample(tint_symbol_6, ((float2(loadIndex) + float2(0.25f)) / float2(dims)), level(0.0f)).rgb);
+ }
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+@@ -66,7 +70,7 @@ void tint_symbol_inner(uint3 WorkGroupID
+ float3 acc = float3(0.0f);
+ TINT_ISOLATE_UB(tint_volatile_true_5) for(uint f = 0u; (f < (*(tint_symbol_3)).filterDim); f = (f + 1u)) {
+ uint i = ((center + f) - filterOffset);
+- acc = (acc + ((1.0f / float((*(tint_symbol_3)).filterDim)) * (*(tint_symbol_2))[r][i]));
++ acc = (acc + ((1.0f / float((*(tint_symbol_3)).filterDim)) * float3((*(tint_symbol_2))[r][i].elements)));
+ }
+ tint_symbol_7.write(float4(acc, 1.0f), uint2(writeIndex));
+ }
+@@ -75,7 +79,7 @@ void tint_symbol_inner(uint3 WorkGroupID
+ }
+
+ kernel void tint_symbol(const constant Params* tint_symbol_9 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_10 [[texture(0)]], const constant Flip* tint_symbol_11 [[buffer(1)]], sampler tint_symbol_12 [[sampler(0)]], texture2d<float, access::write> tint_symbol_13 [[texture(1)]], uint3 WorkGroupID [[threadgroup_position_in_grid]], uint3 LocalInvocationID [[thread_position_in_threadgroup]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup tint_array<tint_array<float3, 256>, 4> tint_symbol_8;
++ threadgroup tint_array<tint_array<tint_packed_vec3_f32_array_element, 256>, 4> tint_symbol_8;
+ tint_symbol_inner(WorkGroupID, LocalInvocationID, local_invocation_index, &(tint_symbol_8), tint_symbol_9, tint_symbol_10, tint_symbol_11, tint_symbol_12, tint_symbol_13);
+ return;
+ }
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_builtins_workgroupUniformLoad_matrix.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_builtins_workgroupUniformLoad_matrix.wgsl.expected.msl
new file mode 100644
index 0000000000..ae9e624915
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_builtins_workgroupUniformLoad_matrix.wgsl.expected.msl
@@ -0,0 +1,48 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/builtins/workgroupUniformLoad/matrix.wgsl.expected.msl.orig 2024-10-18 12:38:05.975993900 +0000
++++ third_party/dawn/test/tint/builtins/workgroupUniformLoad/matrix.wgsl.expected.msl
+@@ -1,14 +1,36 @@
+ #include <metal_stdlib>
+
+ using namespace metal;
+-float3x3 tint_workgroupUniformLoad(threadgroup float3x3* const p) {
++
++template<typename T, size_t N>
++struct tint_array {
++ const constant T& operator[](size_t i) const constant { return elements[i]; }
++ device T& operator[](size_t i) device { return elements[i]; }
++ const device T& operator[](size_t i) const device { return elements[i]; }
++ thread T& operator[](size_t i) thread { return elements[i]; }
++ const thread T& operator[](size_t i) const thread { return elements[i]; }
++ threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
++ const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
++ T elements[N];
++};
++
++struct tint_packed_vec3_f32_array_element {
++ packed_float3 elements;
++};
++
++float3x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 3> in) {
++ float3x3 result = float3x3(float3(in[0].elements), float3(in[1].elements), float3(in[2].elements));
++ return result;
++}
++
++float3x3 tint_workgroupUniformLoad(threadgroup tint_array<tint_packed_vec3_f32_array_element, 3>* const p) {
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+- float3x3 const result = *(p);
++ float3x3 const result = tint_unpack_vec3_in_composite(*(p));
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ return result;
+ }
+
+-float3x3 foo(threadgroup float3x3* const tint_symbol) {
++float3x3 foo(threadgroup tint_array<tint_packed_vec3_f32_array_element, 3>* const tint_symbol) {
+ return tint_workgroupUniformLoad(tint_symbol);
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_builtins_workgroupUniformLoad_structures.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_builtins_workgroupUniformLoad_structures.wgsl.expected.msl
new file mode 100644
index 0000000000..2b64cdf7c4
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_builtins_workgroupUniformLoad_structures.wgsl.expected.msl
@@ -0,0 +1,74 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/builtins/workgroupUniformLoad/structures.wgsl.expected.msl.orig 2024-10-18 12:38:05.975993900 +0000
++++ third_party/dawn/test/tint/builtins/workgroupUniformLoad/structures.wgsl.expected.msl
+@@ -14,24 +14,62 @@ struct tint_array {
+ T elements[N];
+ };
+
++struct tint_packed_vec3_f32_array_element {
++ packed_float3 elements;
++};
++
++struct Inner_tint_packed_vec3 {
++ bool b;
++ int4 v;
++ tint_array<tint_packed_vec3_f32_array_element, 3> m;
++};
++
++struct Outer_tint_packed_vec3 {
++ tint_array<Inner_tint_packed_vec3, 4> a;
++};
++
++float3x3 tint_unpack_vec3_in_composite(tint_array<tint_packed_vec3_f32_array_element, 3> in) {
++ float3x3 result = float3x3(float3(in[0].elements), float3(in[1].elements), float3(in[2].elements));
++ return result;
++}
++
+ struct Inner {
+ bool b;
+ int4 v;
+ float3x3 m;
+ };
+
++Inner tint_unpack_vec3_in_composite_1(Inner_tint_packed_vec3 in) {
++ Inner result = {};
++ result.b = in.b;
++ result.v = in.v;
++ result.m = tint_unpack_vec3_in_composite(in.m);
++ return result;
++}
++
++tint_array<Inner, 4> tint_unpack_vec3_in_composite_2(tint_array<Inner_tint_packed_vec3, 4> in) {
++ tint_array<Inner, 4> result = tint_array<Inner, 4>{tint_unpack_vec3_in_composite_1(in[0]), tint_unpack_vec3_in_composite_1(in[1]), tint_unpack_vec3_in_composite_1(in[2]), tint_unpack_vec3_in_composite_1(in[3])};
++ return result;
++}
++
+ struct Outer {
+ tint_array<Inner, 4> a;
+ };
+
+-Outer tint_workgroupUniformLoad(threadgroup Outer* const p) {
++Outer tint_unpack_vec3_in_composite_3(Outer_tint_packed_vec3 in) {
++ Outer result = {};
++ result.a = tint_unpack_vec3_in_composite_2(in.a);
++ return result;
++}
++
++Outer tint_workgroupUniformLoad(threadgroup Outer_tint_packed_vec3* const p) {
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+- Outer const result = *(p);
++ Outer const result = tint_unpack_vec3_in_composite_3(*(p));
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ return result;
+ }
+
+-Outer foo(threadgroup Outer* const tint_symbol) {
++Outer foo(threadgroup Outer_tint_packed_vec3* const tint_symbol) {
+ return tint_workgroupUniformLoad(tint_symbol);
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_var_initialization_workgroup_matrix.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_var_initialization_workgroup_matrix.wgsl.expected.msl
new file mode 100644
index 0000000000..8725d05b27
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_var_initialization_workgroup_matrix.wgsl.expected.msl
@@ -0,0 +1,59 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/var/initialization/workgroup/matrix.wgsl.expected.msl.orig 2024-10-18 12:38:07.343547600 +0000
++++ third_party/dawn/test/tint/var/initialization/workgroup/matrix.wgsl.expected.msl
+@@ -1,24 +1,42 @@
+ #include <metal_stdlib>
+
+ using namespace metal;
+-struct tint_symbol_5 {
+- float2x3 v;
++
++template<typename T, size_t N>
++struct tint_array {
++ const constant T& operator[](size_t i) const constant { return elements[i]; }
++ device T& operator[](size_t i) device { return elements[i]; }
++ const device T& operator[](size_t i) const device { return elements[i]; }
++ thread T& operator[](size_t i) thread { return elements[i]; }
++ const thread T& operator[](size_t i) const thread { return elements[i]; }
++ threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
++ const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
++ T elements[N];
++};
++
++struct tint_packed_vec3_f32_array_element {
++ packed_float3 elements;
+ };
+
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup float2x3* const tint_symbol_1) {
++tint_array<tint_packed_vec3_f32_array_element, 2> tint_pack_vec3_in_composite(float2x3 in) {
++ tint_array<tint_packed_vec3_f32_array_element, 2> result = tint_array<tint_packed_vec3_f32_array_element, 2>{tint_packed_vec3_f32_array_element{.elements=packed_float3(in[0])}, tint_packed_vec3_f32_array_element{.elements=packed_float3(in[1])}};
++ return result;
++}
++
++void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<tint_packed_vec3_f32_array_element, 2>* const tint_symbol_1) {
+ if ((local_idx < 1u)) {
+- *(tint_symbol_1) = float2x3(float3(0.0f), float3(0.0f));
++ *(tint_symbol_1) = tint_pack_vec3_in_composite(float2x3(float3(0.0f), float3(0.0f)));
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void tint_symbol_inner(uint local_invocation_index, threadgroup float2x3* const tint_symbol_2) {
++void tint_symbol_inner(uint local_invocation_index, threadgroup tint_array<tint_packed_vec3_f32_array_element, 2>* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+ }
+
+-kernel void tint_symbol(threadgroup tint_symbol_5* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup float2x3* const tint_symbol_3 = &((*(tint_symbol_4)).v);
+- tint_symbol_inner(local_invocation_index, tint_symbol_3);
++kernel void tint_symbol(uint local_invocation_index [[thread_index_in_threadgroup]]) {
++ threadgroup tint_array<tint_packed_vec3_f32_array_element, 2> tint_symbol_3;
++ tint_symbol_inner(local_invocation_index, &(tint_symbol_3));
+ return;
+ }
+
diff --git a/electron32/patches/patch-third__party_dawn_test_tint_var_initialization_workgroup_vector.wgsl.expected.msl b/electron32/patches/patch-third__party_dawn_test_tint_var_initialization_workgroup_vector.wgsl.expected.msl
new file mode 100644
index 0000000000..b44af909db
--- /dev/null
+++ b/electron32/patches/patch-third__party_dawn_test_tint_var_initialization_workgroup_vector.wgsl.expected.msl
@@ -0,0 +1,32 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/dawn/test/tint/var/initialization/workgroup/vector.wgsl.expected.msl.orig 2024-10-18 12:38:07.355543600 +0000
++++ third_party/dawn/test/tint/var/initialization/workgroup/vector.wgsl.expected.msl
+@@ -1,19 +1,19 @@
+ #include <metal_stdlib>
+
+ using namespace metal;
+-void tint_zero_workgroup_memory(uint local_idx, threadgroup int3* const tint_symbol_1) {
++void tint_zero_workgroup_memory(uint local_idx, threadgroup packed_int3* const tint_symbol_1) {
+ if ((local_idx < 1u)) {
+- *(tint_symbol_1) = int3(0);
++ *(tint_symbol_1) = packed_int3(0);
+ }
+ threadgroup_barrier(mem_flags::mem_threadgroup);
+ }
+
+-void tint_symbol_inner(uint local_invocation_index, threadgroup int3* const tint_symbol_2) {
++void tint_symbol_inner(uint local_invocation_index, threadgroup packed_int3* const tint_symbol_2) {
+ tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+ }
+
+ kernel void tint_symbol(uint local_invocation_index [[thread_index_in_threadgroup]]) {
+- threadgroup int3 tint_symbol_3;
++ threadgroup packed_int3 tint_symbol_3;
+ tint_symbol_inner(local_invocation_index, &(tint_symbol_3));
+ return;
+ }
diff --git a/electron32/patches/patch-third__party_skia_src_gpu_ganesh_ops_AAHairLinePathRenderer.cpp b/electron32/patches/patch-third__party_skia_src_gpu_ganesh_ops_AAHairLinePathRenderer.cpp
new file mode 100644
index 0000000000..f3b1d51c04
--- /dev/null
+++ b/electron32/patches/patch-third__party_skia_src_gpu_ganesh_ops_AAHairLinePathRenderer.cpp
@@ -0,0 +1,50 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- third_party/skia/src/gpu/ganesh/ops/AAHairLinePathRenderer.cpp.orig 2024-10-18 12:42:56.942844400 +0000
++++ third_party/skia/src/gpu/ganesh/ops/AAHairLinePathRenderer.cpp
+@@ -10,6 +10,7 @@
+ #include "include/core/SkPoint3.h"
+ #include "include/private/base/SkFloatingPoint.h"
+ #include "include/private/base/SkTemplates.h"
++#include "src/base/SkSafeMath.h"
+ #include "src/core/SkGeometry.h"
+ #include "src/core/SkMatrixPriv.h"
+ #include "src/core/SkPointPriv.h"
+@@ -1179,16 +1180,28 @@ void AAHairlineOp::onPrepareDraws(GrMesh
+
+ int instanceCount = fPaths.size();
+ bool convertConicsToQuads = !target->caps().shaderCaps()->fFloatIs32Bits;
+- for (int i = 0; i < instanceCount; i++) {
++ SkSafeMath safeMath;
++ for (int i = 0; i < instanceCount && safeMath.ok(); i++) {
+ const PathData& args = fPaths[i];
+- quadCount += gather_lines_and_quads(args.fPath, args.fViewMatrix, args.fDevClipBounds,
+- args.fCapLength, convertConicsToQuads, &lines, &quads,
+- &conics, &qSubdivs, &cWeights);
++ quadCount = safeMath.addInt(quadCount,
++ gather_lines_and_quads(args.fPath,
++ args.fViewMatrix,
++ args.fDevClipBounds,
++ args.fCapLength,
++ convertConicsToQuads,
++ &lines,
++ &quads,
++ &conics,
++ &qSubdivs,
++ &cWeights));
+ }
+
+ int lineCount = lines.size() / 2;
+ int conicCount = conics.size() / 3;
+- int quadAndConicCount = conicCount + quadCount;
++ int quadAndConicCount = safeMath.addInt(conicCount, quadCount);
++ if (!safeMath.ok()) {
++ return;
++ }
+
+ static constexpr int kMaxLines = SK_MaxS32 / kLineSegNumVertices;
+ static constexpr int kMaxQuadsAndConics = SK_MaxS32 / kQuadNumVertices;
diff --git a/electron32/patches/patch-third__party_speech-dispatcher_libspeechd__version.h b/electron32/patches/patch-third__party_speech-dispatcher_libspeechd__version.h
index f2a9f27811..442b95ae5e 100644
--- a/electron32/patches/patch-third__party_speech-dispatcher_libspeechd__version.h
+++ b/electron32/patches/patch-third__party_speech-dispatcher_libspeechd__version.h
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- third_party/speech-dispatcher/libspeechd_version.h.orig 2025-01-19 14:12:04.155208747 +0000
+--- third_party/speech-dispatcher/libspeechd_version.h.orig 2025-02-15 09:43:46.499540979 +0000
+++ third_party/speech-dispatcher/libspeechd_version.h
@@ -0,0 +1,29 @@
+/*
diff --git a/electron32/patches/patch-ui_shell__dialogs_select__file__dialog__linux__portal.cc b/electron32/patches/patch-ui_shell__dialogs_select__file__dialog__linux__portal.cc
index a68c13a027..70ce8bfd54 100644
--- a/electron32/patches/patch-ui_shell__dialogs_select__file__dialog__linux__portal.cc
+++ b/electron32/patches/patch-ui_shell__dialogs_select__file__dialog__linux__portal.cc
@@ -6,16 +6,64 @@ $NetBSD$
--- ui/shell_dialogs/select_file_dialog_linux_portal.cc.orig 2024-10-18 12:35:12.788244700 +0000
+++ ui/shell_dialogs/select_file_dialog_linux_portal.cc
-@@ -39,7 +39,7 @@ constexpr char kMethodStartServiceByName
+@@ -7,6 +7,7 @@
+ #include <string_view>
+
+ #include "base/containers/contains.h"
++#include "base/command_line.h"
+ #include "base/functional/bind.h"
+ #include "base/logging.h"
+ #include "base/no_destructor.h"
+@@ -39,6 +40,8 @@ constexpr char kMethodStartServiceByName
constexpr char kXdgPortalService[] = "org.freedesktop.portal.Desktop";
constexpr char kXdgPortalObject[] = "/org/freedesktop/portal/desktop";
--constexpr int kXdgPortalRequiredVersion = 3;
-+constexpr int kXdgPortalRequiredVersion = 4;
++// Version 4 includes support for current_folder option to the OpenFile method via
++// https://github.com/flatpak/xdg-desktop-portal/commit/71165a5.
+ constexpr int kXdgPortalRequiredVersion = 3;
constexpr char kXdgPortalRequestInterfaceName[] =
- "org.freedesktop.portal.Request";
-@@ -216,6 +216,8 @@ void SelectFileDialogLinuxPortal::Select
+@@ -67,6 +70,7 @@ constexpr char kFileUriPrefix[] = "file:
+
+ // Time to wait for the notification service to start, in milliseconds.
+ constexpr base::TimeDelta kStartServiceTimeout = base::Seconds(1);
++const char kXdgPortalRequiredVersionFlag[] = "xdg-portal-required-version";
+
+ struct FileChooserProperties : dbus::PropertySet {
+ dbus::Property<uint32_t> version;
+@@ -173,10 +177,18 @@ void SelectFileDialogLinuxPortal::StartA
+ if (GetAvailabilityTestCompletionFlag()->IsSet())
+ return;
+
++ auto* cmd = base::CommandLine::ForCurrentProcess();
++ unsigned int xdg_portal_required_version;
++ if (!base::StringToUint(cmd->GetSwitchValueASCII(kXdgPortalRequiredVersionFlag),
++ &xdg_portal_required_version)) {
++ xdg_portal_required_version = kXdgPortalRequiredVersion;
++ }
++
+ dbus_thread_linux::GetTaskRunner()->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+- &SelectFileDialogLinuxPortal::CheckPortalAvailabilityOnBusThread));
++ &SelectFileDialogLinuxPortal::CheckPortalAvailabilityOnBusThread,
++ xdg_portal_required_version));
+ }
+
+ // static
+@@ -188,6 +200,11 @@ bool SelectFileDialogLinuxPortal::IsPort
+ }
+
+ // static
++int SelectFileDialogLinuxPortal::GetPortalVersion() {
++ return available_portal_version_;
++}
++
++// static
+ void SelectFileDialogLinuxPortal::DestroyPortalConnection() {
+ dbus_thread_linux::GetTaskRunner()->PostTask(
+ FROM_HERE, base::BindOnce(&DestroyBusOnBusThread));
+@@ -216,6 +233,8 @@ void SelectFileDialogLinuxPortal::Select
weak_factory_.GetWeakPtr()));
info_->type = type;
info_->main_task_runner = base::SequencedTaskRunner::GetCurrentDefault();
@@ -24,7 +72,37 @@ $NetBSD$
if (owning_window) {
if (auto* root = owning_window->GetRootWindow()) {
-@@ -552,7 +554,9 @@ void SelectFileDialogLinuxPortal::Dialog
+@@ -262,7 +281,8 @@ bool SelectFileDialogLinuxPortal::HasMul
+ }
+
+ // static
+-void SelectFileDialogLinuxPortal::CheckPortalAvailabilityOnBusThread() {
++void SelectFileDialogLinuxPortal::CheckPortalAvailabilityOnBusThread(
++ unsigned int xdg_portal_required_version) {
+ DCHECK(dbus_thread_linux::GetTaskRunner()->RunsTasksInCurrentSequence());
+ base::AtomicFlag* availability_test_complete =
+ GetAvailabilityTestCompletionFlag();
+@@ -283,11 +303,18 @@ void SelectFileDialogLinuxPortal::CheckP
+ FileChooserProperties properties(portal);
+ if (!properties.GetAndBlock(&properties.version)) {
+ LOG(ERROR) << "Failed to read portal version property";
+- } else if (properties.version.value() >= kXdgPortalRequiredVersion) {
++ } else if (properties.version.value() >= xdg_portal_required_version) {
+ is_portal_available_ = true;
++ available_portal_version_ = properties.version.value();
++ } else {
++ VLOG(1) << "File chooser portal available version: "
++ << properties.version.value();
++ available_portal_version_ = properties.version.value();
+ }
+ }
+
++ VLOG(1) << "File chooser portal expected version: "
++ << xdg_portal_required_version;
+ VLOG(1) << "File chooser portal available: "
+ << (is_portal_available_ ? "yes" : "no");
+ availability_test_complete->Set();
+@@ -552,7 +579,9 @@ void SelectFileDialogLinuxPortal::Dialog
response_handle_token);
if (type == SelectFileDialog::Type::SELECT_UPLOAD_FOLDER) {
@@ -35,7 +113,7 @@ $NetBSD$
l10n_util::GetStringUTF8(
IDS_SELECT_UPLOAD_FOLDER_DIALOG_UPLOAD_BUTTON));
}
-@@ -561,12 +565,13 @@ void SelectFileDialogLinuxPortal::Dialog
+@@ -561,6 +590,8 @@ void SelectFileDialogLinuxPortal::Dialog
type == SelectFileDialog::Type::SELECT_UPLOAD_FOLDER ||
type == SelectFileDialog::Type::SELECT_EXISTING_FOLDER) {
AppendBoolOption(&options_writer, kFileChooserOptionDirectory, true);
@@ -44,10 +122,11 @@ $NetBSD$
} else if (type == SelectFileDialog::Type::SELECT_OPEN_MULTI_FILE) {
AppendBoolOption(&options_writer, kFileChooserOptionMultiple, true);
}
+@@ -874,6 +905,7 @@ SelectFileDialogLinuxPortal::DialogInfo:
+ }
+
+ bool SelectFileDialogLinuxPortal::is_portal_available_ = false;
++unsigned int SelectFileDialogLinuxPortal::available_portal_version_ = 0;
+ int SelectFileDialogLinuxPortal::handle_token_counter_ = 0;
-- if (type == SelectFileDialog::Type::SELECT_SAVEAS_FILE &&
-- !default_path.empty()) {
-+ if (!default_path.empty()) {
- if (default_path_exists) {
- // If this is an existing directory, navigate to that directory, with no
- // filename.
+ } // namespace ui
diff --git a/electron32/patches/patch-ui_shell__dialogs_select__file__dialog__linux__portal.h b/electron32/patches/patch-ui_shell__dialogs_select__file__dialog__linux__portal.h
index 24cfcac1a7..7869714fc7 100644
--- a/electron32/patches/patch-ui_shell__dialogs_select__file__dialog__linux__portal.h
+++ b/electron32/patches/patch-ui_shell__dialogs_select__file__dialog__linux__portal.h
@@ -6,7 +6,17 @@ $NetBSD$
--- ui/shell_dialogs/select_file_dialog_linux_portal.h.orig 2024-10-18 12:35:12.788244700 +0000
+++ ui/shell_dialogs/select_file_dialog_linux_portal.h
-@@ -117,6 +117,8 @@ class SelectFileDialogLinuxPortal : publ
+@@ -44,6 +44,9 @@ class SelectFileDialogLinuxPortal : publ
+ // test from above has not yet completed (which should generally not happen).
+ static bool IsPortalAvailable();
+
++ // Get version of portal if available.
++ static int GetPortalVersion();
++
+ // Destroys the connection to the bus.
+ static void DestroyPortalConnection();
+
+@@ -117,6 +120,8 @@ class SelectFileDialogLinuxPortal : publ
Type type;
// The task runner the SelectFileImpl method was called on.
scoped_refptr<base::SequencedTaskRunner> main_task_runner;
@@ -15,3 +25,23 @@ $NetBSD$
private:
friend class base::RefCountedThreadSafe<DialogInfo>;
+@@ -173,7 +178,8 @@ class SelectFileDialogLinuxPortal : publ
+ };
+
+ // D-Bus configuration and initialization.
+- static void CheckPortalAvailabilityOnBusThread();
++ static void CheckPortalAvailabilityOnBusThread(
++ unsigned int xdg_portal_required_version);
+ static bool IsPortalRunningOnBusThread(dbus::ObjectProxy* dbus_proxy);
+ static bool IsPortalActivatableOnBusThread(dbus::ObjectProxy* dbus_proxy);
+
+@@ -207,6 +213,9 @@ class SelectFileDialogLinuxPortal : publ
+ // Written by the D-Bus thread and read by the UI thread.
+ static bool is_portal_available_;
+
++ // Written by the D-Bus thread and read by the UI thread.
++ static unsigned int available_portal_version_;
++
+ // Used by the D-Bus thread to generate unique handle tokens.
+ static int handle_token_counter_;
+
diff --git a/electron32/patches/patch-v8_src_builtins_builtins-object-gen.cc b/electron32/patches/patch-v8_src_builtins_builtins-object-gen.cc
new file mode 100644
index 0000000000..5d522f33eb
--- /dev/null
+++ b/electron32/patches/patch-v8_src_builtins_builtins-object-gen.cc
@@ -0,0 +1,22 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- v8/src/builtins/builtins-object-gen.cc.orig 2024-10-18 12:48:35.148423200 +0000
++++ v8/src/builtins/builtins-object-gen.cc
+@@ -486,6 +486,13 @@ TF_BUILTIN(ObjectAssign, ObjectBuiltinsA
+ GotoIfNot(TaggedEqual(LoadElements(CAST(to)), EmptyFixedArrayConstant()),
+ &slow_path);
+
++ // Ensure the properties field is not used to store a hash.
++ TNode<Object> properties = LoadJSReceiverPropertiesOrHash(to);
++ GotoIf(TaggedIsSmi(properties), &slow_path);
++ CSA_DCHECK(this,
++ Word32Or(TaggedEqual(properties, EmptyFixedArrayConstant()),
++ IsPropertyArray(CAST(properties))));
++
+ // Check if our particular source->target combination is fast clonable.
+ // E.g., this ensures that we only have fast properties and in general that
+ // the binary layout is compatible for `FastCloneJSObject`.
diff --git a/electron32/patches/patch-v8_src_compiler_turboshaft_wasm-gc-typed-optimization-reducer.cc b/electron32/patches/patch-v8_src_compiler_turboshaft_wasm-gc-typed-optimization-reducer.cc
new file mode 100644
index 0000000000..46ab97ae32
--- /dev/null
+++ b/electron32/patches/patch-v8_src_compiler_turboshaft_wasm-gc-typed-optimization-reducer.cc
@@ -0,0 +1,76 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- v8/src/compiler/turboshaft/wasm-gc-typed-optimization-reducer.cc.orig 2024-10-18 12:48:35.276422500 +0000
++++ v8/src/compiler/turboshaft/wasm-gc-typed-optimization-reducer.cc
+@@ -45,9 +45,23 @@ void WasmGCTypeAnalyzer::Run() {
+ // defines more precise types than the previous iteration).
+ if (needs_revisit) {
+ block_to_snapshot_[loop_header.index()] = MaybeSnapshot(snapshot);
+- // This will push the successors of the loop header to the iterator
+- // stack, so the loop body will be visited in the next iteration.
+- iterator.MarkLoopForRevisitSkipHeader();
++ if (block.index() != loop_header.index()) {
++ // This will push the successors of the loop header to the iterator
++ // stack, so the loop body will be visited in the next iteration.
++ iterator.MarkLoopForRevisitSkipHeader();
++ } else {
++ // A single-block loop doesn't have any successors which would be
++ // re-evaluated and which might trigger another re-evaluation of the
++ // loop header.
++ // TODO(mliedtke): This is not a great design: We don't just
++ // schedule revisiting the loop header but afterwards we revisit it
++ // once again to evaluate whether we need to revisit it more times,
++ // so for single block loops the revisitation count will always be a
++ // multiple of 2. While this is inefficient, single-block loops are
++ // rare and are either endless loops or need to trigger an exception
++ // (e.g. a wasm trap) to terminate.
++ iterator.MarkLoopForRevisit();
++ }
+ }
+ }
+ }
+@@ -269,6 +283,25 @@ void WasmGCTypeAnalyzer::ProcessAllocate
+ wasm::ValueType::Ref(type_index));
+ }
+
++wasm::ValueType WasmGCTypeAnalyzer::GetTypeForPhiInput(const PhiOp& phi,
++ int input_index) {
++ OpIndex phi_id = graph_.Index(phi);
++ OpIndex input = ResolveAliases(phi.input(input_index));
++ // If the input of the phi is in the same block as the phi and appears
++ // before the phi, don't use the predecessor value.
++
++ if (current_block_->begin().id() <= input.id() && input.id() < phi_id.id()) {
++ // Phi instructions have to be at the beginning of the block, so this can
++ // only happen for inputs that are also phis. Furthermore, this is only
++ // possible in loop headers of loops and only for the backedge-input.
++ DCHECK(graph_.Get(input).Is<PhiOp>());
++ DCHECK(current_block_->IsLoop());
++ DCHECK_EQ(input_index, 1);
++ return types_table_.Get(input);
++ }
++ return types_table_.GetPredecessorValue(input, input_index);
++}
++
+ void WasmGCTypeAnalyzer::ProcessPhi(const PhiOp& phi) {
+ // The result type of a phi is the union of all its input types.
+ // If any of the inputs is the default value ValueType(), there isn't any type
+@@ -281,12 +314,10 @@ void WasmGCTypeAnalyzer::ProcessPhi(cons
+ RefineTypeKnowledge(graph_.Index(phi), GetResolvedType((phi.input(0))));
+ return;
+ }
+- wasm::ValueType union_type =
+- types_table_.GetPredecessorValue(ResolveAliases(phi.input(0)), 0);
++ wasm::ValueType union_type = GetTypeForPhiInput(phi, 0);
+ if (union_type == wasm::ValueType()) return;
+ for (int i = 1; i < phi.input_count; ++i) {
+- wasm::ValueType input_type =
+- types_table_.GetPredecessorValue(ResolveAliases(phi.input(i)), i);
++ wasm::ValueType input_type = GetTypeForPhiInput(phi, i);
+ if (input_type == wasm::ValueType()) return;
+ // <bottom> types have to be skipped as an unreachable predecessor doesn't
+ // change our type knowledge.
diff --git a/electron32/patches/patch-v8_src_compiler_turboshaft_wasm-gc-typed-optimization-reducer.h b/electron32/patches/patch-v8_src_compiler_turboshaft_wasm-gc-typed-optimization-reducer.h
new file mode 100644
index 0000000000..3da4bb3235
--- /dev/null
+++ b/electron32/patches/patch-v8_src_compiler_turboshaft_wasm-gc-typed-optimization-reducer.h
@@ -0,0 +1,17 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- v8/src/compiler/turboshaft/wasm-gc-typed-optimization-reducer.h.orig 2024-10-18 12:48:35.276422500 +0000
++++ v8/src/compiler/turboshaft/wasm-gc-typed-optimization-reducer.h
+@@ -80,6 +80,8 @@ class WasmGCTypeAnalyzer {
+ void ProcessPhi(const PhiOp& phi);
+ void ProcessTypeAnnotation(const WasmTypeAnnotationOp& type_annotation);
+
++ wasm::ValueType GetTypeForPhiInput(const PhiOp& phi, int input_index);
++
+ void CreateMergeSnapshot(const Block& block);
+ bool CreateMergeSnapshot(base::Vector<const Snapshot> predecessors,
+ base::Vector<const bool> reachable);
diff --git a/electron32/patches/patch-v8_src_interpreter_bytecode-generator.cc b/electron32/patches/patch-v8_src_interpreter_bytecode-generator.cc
new file mode 100644
index 0000000000..d9356f3848
--- /dev/null
+++ b/electron32/patches/patch-v8_src_interpreter_bytecode-generator.cc
@@ -0,0 +1,60 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- v8/src/interpreter/bytecode-generator.cc.orig 2024-10-18 12:48:35.364422000 +0000
++++ v8/src/interpreter/bytecode-generator.cc
+@@ -2353,6 +2353,9 @@ void BytecodeGenerator::VisitSwitchState
+ // Are we still using any if-else bytecodes to evaluate the switch?
+ bool use_jumps = n_comp_cases != 0;
+
++ // Does the comparison for non-jump table jumps need an elision scope?
++ bool jump_comparison_needs_hole_check_elision_scope = false;
++
+ SwitchBuilder switch_builder(builder(), block_coverage_builder_, stmt,
+ n_comp_cases, jump_table);
+ ControlScopeForBreakable scope(this, stmt, &switch_builder);
+@@ -2410,6 +2413,10 @@ void BytecodeGenerator::VisitSwitchState
+ info.covered_cases);
+
+ if (use_jumps) {
++ // When using a jump table, the first jump comparison is conditionally
++ // executed if the discriminant wasn't matched by anything in the jump
++ // table, and so needs its own elision scope.
++ jump_comparison_needs_hole_check_elision_scope = true;
+ builder()->LoadAccumulatorWithRegister(r1);
+ }
+ }
+@@ -2430,16 +2437,14 @@ void BytecodeGenerator::VisitSwitchState
+ // The comparisons linearly dominate, so no need to open a new elision
+ // scope for each one.
+ base::Optional<HoleCheckElisionScope> elider;
+- bool first_jump_emitted = false;
+ for (int i = 0; i < clauses->length(); ++i) {
+ CaseClause* clause = clauses->at(i);
+ if (clause->is_default()) {
+ info.default_case = i;
+ } else if (!info.CaseExists(clause->label())) {
+- // The first non-default label is
+- // unconditionally executed, so we only need to emplace it before
+- // visiting the second non-default label.
+- if (first_jump_emitted) elider.emplace(this);
++ if (jump_comparison_needs_hole_check_elision_scope && !elider) {
++ elider.emplace(this);
++ }
+
+ // Perform label comparison as if via '===' with tag.
+ VisitForAccumulatorValue(clause->label());
+@@ -2450,7 +2455,9 @@ void BytecodeGenerator::VisitSwitchState
+ #endif
+ switch_builder.JumpToCaseIfTrue(ToBooleanMode::kAlreadyBoolean,
+ case_compare_ctr++);
+- first_jump_emitted = true;
++ // The second and subsequent non-default comparisons are always
++ // conditionally executed, and need an elision scope.
++ jump_comparison_needs_hole_check_elision_scope = true;
+ }
+ }
+ }
diff --git a/electron32/patches/patch-v8_src_maglev_maglev-phi-representation-selector.cc b/electron32/patches/patch-v8_src_maglev_maglev-phi-representation-selector.cc
new file mode 100644
index 0000000000..6412db7e56
--- /dev/null
+++ b/electron32/patches/patch-v8_src_maglev_maglev-phi-representation-selector.cc
@@ -0,0 +1,18 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- v8/src/maglev/maglev-phi-representation-selector.cc.orig 2024-10-18 12:48:35.384421800 +0000
++++ v8/src/maglev/maglev-phi-representation-selector.cc
+@@ -329,7 +329,8 @@ void MaglevPhiRepresentationSelector::En
+ // should be tagged. We'll thus insert tagging operation on the untagged phi
+ // inputs of {phi}.
+
+- for (int i = 0; i < phi->input_count(); i++) {
++ const int skip_backedge = phi->is_loop_phi() ? 1 : 0;
++ for (int i = 0; i < phi->input_count() - skip_backedge; i++) {
+ ValueNode* input = phi->input(i).node();
+ if (Phi* phi_input = input->TryCast<Phi>()) {
+ phi->change_input(i, EnsurePhiTagged(phi_input, phi->predecessor_at(i),
diff --git a/electron32/patches/patch-v8_src_wasm_baseline_arm_liftoff-assembler-arm-inl.h b/electron32/patches/patch-v8_src_wasm_baseline_arm_liftoff-assembler-arm-inl.h
new file mode 100644
index 0000000000..6c4a75dde1
--- /dev/null
+++ b/electron32/patches/patch-v8_src_wasm_baseline_arm_liftoff-assembler-arm-inl.h
@@ -0,0 +1,46 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- v8/src/wasm/baseline/arm/liftoff-assembler-arm-inl.h.orig 2024-10-18 12:48:35.480421300 +0000
++++ v8/src/wasm/baseline/arm/liftoff-assembler-arm-inl.h
+@@ -496,21 +496,23 @@ void LiftoffAssembler::CallFrameSetupStu
+
+ void LiftoffAssembler::PrepareTailCall(int num_callee_stack_params,
+ int stack_param_delta) {
+- UseScratchRegisterScope temps(this);
+- Register scratch = temps.Acquire();
++ {
++ UseScratchRegisterScope temps(this);
++ Register scratch = temps.Acquire();
+
+- // Push the return address and frame pointer to complete the stack frame.
+- sub(sp, sp, Operand(8));
+- ldr(scratch, MemOperand(fp, 4));
+- str(scratch, MemOperand(sp, 4));
+- ldr(scratch, MemOperand(fp, 0));
+- str(scratch, MemOperand(sp, 0));
+-
+- // Shift the whole frame upwards.
+- int slot_count = num_callee_stack_params + 2;
+- for (int i = slot_count - 1; i >= 0; --i) {
+- ldr(scratch, MemOperand(sp, i * 4));
+- str(scratch, MemOperand(fp, (i - stack_param_delta) * 4));
++ // Push the return address and frame pointer to complete the stack frame.
++ sub(sp, sp, Operand(8));
++ ldr(scratch, MemOperand(fp, 4));
++ str(scratch, MemOperand(sp, 4));
++ ldr(scratch, MemOperand(fp, 0));
++ str(scratch, MemOperand(sp, 0));
++
++ // Shift the whole frame upwards.
++ int slot_count = num_callee_stack_params + 2;
++ for (int i = slot_count - 1; i >= 0; --i) {
++ ldr(scratch, MemOperand(sp, i * 4));
++ str(scratch, MemOperand(fp, (i - stack_param_delta) * 4));
++ }
+ }
+
+ // Set the new stack and frame pointer.
diff --git a/electron32/patches/patch-v8_src_wasm_baseline_x64_liftoff-assembler-x64-inl.h b/electron32/patches/patch-v8_src_wasm_baseline_x64_liftoff-assembler-x64-inl.h
new file mode 100644
index 0000000000..cc291bbcb3
--- /dev/null
+++ b/electron32/patches/patch-v8_src_wasm_baseline_x64_liftoff-assembler-x64-inl.h
@@ -0,0 +1,26 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- v8/src/wasm/baseline/x64/liftoff-assembler-x64-inl.h.orig 2024-10-18 12:48:35.488421200 +0000
++++ v8/src/wasm/baseline/x64/liftoff-assembler-x64-inl.h
+@@ -51,6 +51,8 @@ constexpr Operand kInstanceDataOperand =
+
+ constexpr Operand kOSRTargetSlot = GetStackSlot(kOSRTargetOffset);
+
++// Note: The returned Operand might contain {kScratchRegister2}; make sure not
++// to clobber that until after the last use of the Operand.
+ inline Operand GetMemOp(LiftoffAssembler* assm, Register addr,
+ Register offset_reg, uintptr_t offset_imm,
+ ScaleFactor scale_factor = times_1) {
+@@ -61,7 +63,7 @@ inline Operand GetMemOp(LiftoffAssembler
+ : Operand(addr, offset_reg, scale_factor, offset_imm32);
+ }
+ // Offset immediate does not fit in 31 bits.
+- Register scratch = kScratchRegister;
++ Register scratch = kScratchRegister2;
+ assm->MacroAssembler::Move(scratch, offset_imm);
+ if (offset_reg != no_reg) assm->addq(scratch, offset_reg);
+ return Operand(addr, scratch, scale_factor, 0);
diff --git a/electron32/patches/patch-v8_test_mjsunit_maglev_regress-382190919.js b/electron32/patches/patch-v8_test_mjsunit_maglev_regress-382190919.js
new file mode 100644
index 0000000000..5c4c44dc85
--- /dev/null
+++ b/electron32/patches/patch-v8_test_mjsunit_maglev_regress-382190919.js
@@ -0,0 +1,48 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- v8/test/mjsunit/maglev/regress-382190919.js.orig 2025-02-15 09:43:46.595426596 +0000
++++ v8/test/mjsunit/maglev/regress-382190919.js
+@@ -0,0 +1,39 @@
++// Copyright 2024 the V8 project authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// Flags: --allow-natives-syntax --no-maglev-loop-peeling
++
++function g() { }
++%NeverOptimizeFunction(g);
++
++function foo(b) {
++ let phi1 = 0;
++ for (let i = 0; i < 10; i++) {
++ phi1++; // Int32 use so that {phi1} gets untagged.
++ }
++
++ let phi2 = undefined; // Not untaggable.
++ let j = 0;
++
++ if (b) {
++ g(phi1); // Triggering retagging of {phi1}.
++ }
++
++ // Nothing between the `if` and the loop header, so that the loop header ends
++ // up having 2 incoming forward edges.
++
++ for (; j < 5; j++) {
++ phi2 = phi1; // New retagging of {phi1} since previous one is not available
++ // in all predecessors.
++ }
++
++ return phi2;
++}
++
++%PrepareFunctionForOptimization(foo);
++foo(true);
++foo(false);
++
++%OptimizeMaglevOnNextCall(foo);
++foo(true);
diff --git a/electron32/patches/patch-v8_test_mjsunit_regress_regress-374627491.js b/electron32/patches/patch-v8_test_mjsunit_regress_regress-374627491.js
new file mode 100644
index 0000000000..4749c62b57
--- /dev/null
+++ b/electron32/patches/patch-v8_test_mjsunit_regress_regress-374627491.js
@@ -0,0 +1,35 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- v8/test/mjsunit/regress/regress-374627491.js.orig 2025-02-15 09:43:46.595561627 +0000
++++ v8/test/mjsunit/regress/regress-374627491.js
+@@ -0,0 +1,26 @@
++// Copyright 2024 the V8 project authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++class B { }
++class C extends B {
++ constructor() {
++ let x = 0;
++ switch (0) {
++ case 0:
++ case 1:
++ case 2:
++ case 3:
++ case 4:
++ case 5:
++ case 6:
++ case 7:
++ case 8:
++ case 9:
++ x += this;
++ break;
++ case this:
++ }
++ }
++}
++assertThrows(() => { new C(); }, ReferenceError);
diff --git a/electron32/patches/patch-v8_test_mjsunit_regress_wasm_regress-366635354.js b/electron32/patches/patch-v8_test_mjsunit_regress_wasm_regress-366635354.js
index 36d35a44d7..98110351f1 100644
--- a/electron32/patches/patch-v8_test_mjsunit_regress_wasm_regress-366635354.js
+++ b/electron32/patches/patch-v8_test_mjsunit_regress_wasm_regress-366635354.js
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- v8/test/mjsunit/regress/wasm/regress-366635354.js.orig 2025-01-19 14:12:04.266732299 +0000
+--- v8/test/mjsunit/regress/wasm/regress-366635354.js.orig 2025-02-15 09:43:46.595694215 +0000
+++ v8/test/mjsunit/regress/wasm/regress-366635354.js
@@ -0,0 +1,32 @@
+// Copyright 2024 the V8 project authors. All rights reserved.
diff --git a/electron32/patches/patch-v8_test_mjsunit_regress_wasm_regress-378779897.js b/electron32/patches/patch-v8_test_mjsunit_regress_wasm_regress-378779897.js
new file mode 100644
index 0000000000..fd3f39eb13
--- /dev/null
+++ b/electron32/patches/patch-v8_test_mjsunit_regress_wasm_regress-378779897.js
@@ -0,0 +1,31 @@
+$NetBSD$
+
+* Part of patchset to build electron on NetBSD
+* Based on OpenBSD's chromium patches, and
+ FreeBSD's electron patches
+
+--- v8/test/mjsunit/regress/wasm/regress-378779897.js.orig 2025-02-15 09:43:46.595828896 +0000
++++ v8/test/mjsunit/regress/wasm/regress-378779897.js
+@@ -0,0 +1,22 @@
++// Copyright 2024 the V8 project authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
++
++const builder = new WasmModuleBuilder();
++builder.addMemory(49149);
++
++builder.addFunction('main', kSig_i_v).addBody([
++ ...wasmI32Const(-1118406780),
++ ...wasmI32Const(-1),
++ kAtomicPrefix, kExprI32AtomicOr8U, 0, 0
++]).exportFunc();
++
++let instance;
++try {
++ instance = builder.instantiate();
++} catch (e) {
++ assertException(e, RangeError, /Out of memory/);
++}
++if (instance) instance.exports.main();
diff --git a/electron32/patches/patch-v8_test_mjsunit_wasm_regress-367818758.js b/electron32/patches/patch-v8_test_mjsunit_wasm_regress-367818758.js
index 4fba4349ff..139d641656 100644
--- a/electron32/patches/patch-v8_test_mjsunit_wasm_regress-367818758.js
+++ b/electron32/patches/patch-v8_test_mjsunit_wasm_regress-367818758.js
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- v8/test/mjsunit/wasm/regress-367818758.js.orig 2025-01-19 14:12:04.266838696 +0000
+--- v8/test/mjsunit/wasm/regress-367818758.js.orig 2025-02-15 09:43:46.595960962 +0000
+++ v8/test/mjsunit/wasm/regress-367818758.js
@@ -0,0 +1,221 @@
+// Copyright 2024 the V8 project authors. All rights reserved.
diff --git a/electron32/patches/patch-v8_tools_run-paxctl.py b/electron32/patches/patch-v8_tools_run-paxctl.py
index 4711fabae4..02bf39a162 100644
--- a/electron32/patches/patch-v8_tools_run-paxctl.py
+++ b/electron32/patches/patch-v8_tools_run-paxctl.py
@@ -4,7 +4,7 @@ $NetBSD$
* Based on OpenBSD's chromium patches, and
FreeBSD's electron patches
---- v8/tools/run-paxctl.py.orig 2025-01-19 14:12:04.266972075 +0000
+--- v8/tools/run-paxctl.py.orig 2025-02-15 09:43:46.596110902 +0000
+++ v8/tools/run-paxctl.py
@@ -0,0 +1,16 @@
+#!@PYTHONBIN@
Home |
Main Index |
Thread Index |
Old Index