diff --git a/.github/workflows/pipeline-segment-electron-test.yml b/.github/workflows/pipeline-segment-electron-test.yml index 5338ad5c979b1..45626001035c2 100644 --- a/.github/workflows/pipeline-segment-electron-test.yml +++ b/.github/workflows/pipeline-segment-electron-test.yml @@ -243,9 +243,9 @@ jobs: runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn.js test --runners=main --trace-uncaught --enable-logging --files $tests_files | $ASAN_SYMBOLIZE else if [ "${{ inputs.target-arch }}" = "arm" ]; then - runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn.js test --skipYarnInstall --runners=main --trace-uncaught --enable-logging --files $tests_files + runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn.js test --skipYarnInstall --runners=main --enableRerun=3 --trace-uncaught --enable-logging --files $tests_files else - runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn.js test --runners=main --trace-uncaught --enable-logging --files $tests_files + runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn.js test --runners=main --enableRerun=3 --trace-uncaught --enable-logging --files $tests_files fi fi diff --git a/DEPS b/DEPS index 8fbca1d559c1d..6da43696682a7 100644 --- a/DEPS +++ b/DEPS @@ -2,7 +2,7 @@ gclient_gn_args_from = 'src' vars = { 'chromium_version': - '144.0.7526.0', + '144.0.7527.0', 'node_version': 'v24.11.1', 'nan_version': diff --git a/package.json b/package.json index d62d838bbea29..d531bd97a7ac6 100644 --- a/package.json +++ b/package.json @@ -135,12 +135,20 @@ "node script/gen-libc++-filenames.js" ] }, + "resolutions": { + "dbus-native/xml2js": "0.5.0", + "abstract-socket": "github:deepak1556/node-abstractsocket#928cc591decd12aff7dad96449da8afc29832c19", + "minimist@npm:~0.0.1": "0.2.4" + }, "packageManager": "yarn@4.11.0", "workspaces": [ "spec", "spec/fixtures/native-addon/*" ], "dependenciesMeta": { + "abstract-socket": { + "built": true + }, "dugite": { "built": true } diff --git a/patches/chromium/allow_disabling_blink_scheduler_throttling_per_renderview.patch b/patches/chromium/allow_disabling_blink_scheduler_throttling_per_renderview.patch index e64378b32e982..90688cedf2112 100644 --- a/patches/chromium/allow_disabling_blink_scheduler_throttling_per_renderview.patch +++ b/patches/chromium/allow_disabling_blink_scheduler_throttling_per_renderview.patch @@ -51,7 +51,7 @@ index 7944fe64e0da112fc670358b75506bb199bb5e4a..0e3c16c6af2a078943e9f39808134ab2 void SendRendererPreferencesToRenderer( const blink::RendererPreferences& preferences); diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc -index 84899b5208f036bd58ba51513820404b6c5a24b9..87fd5aa4fab7ddd0b444a3c8473ae35066c87054 100644 +index c6434aedc2529a05c74d8163f2184990cd7cb14c..f19ed1ca1b5f28fc0373106c961a91976df12061 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -632,8 +632,8 @@ void RenderWidgetHostViewAura::ShowImpl(PageVisibilityState page_visibility) { diff --git a/patches/chromium/build_do_not_depend_on_packed_resource_integrity.patch b/patches/chromium/build_do_not_depend_on_packed_resource_integrity.patch index 8352874a725ee..5edf49f3866b7 100644 --- a/patches/chromium/build_do_not_depend_on_packed_resource_integrity.patch +++ b/patches/chromium/build_do_not_depend_on_packed_resource_integrity.patch @@ -33,7 +33,7 @@ index 606b3bd43179a5b4179a6ec9f58e531d55c1acb5..4d503a53290b4deaea016bb6867f3c07 "//base", "//build:branding_buildflags", diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index c88784479b8d67d8a3f534b555bd6e74c46173fe..cfd9ed1e6a37b3f0034116323320958a1d962f43 100644 +index b5d32cb1857b2fa7bd5e599a9256ce4d512d7887..dead035b27372526a81aea766be78308c7f56620 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn @@ -4837,7 +4837,7 @@ static_library("browser") { @@ -46,10 +46,10 @@ index c88784479b8d67d8a3f534b555bd6e74c46173fe..cfd9ed1e6a37b3f0034116323320958a # than here in :chrome_dll. deps += [ "//chrome:packed_resources_integrity_header" ] diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn -index 23f175d87f95562875af1e7ddd51be4f719e82b8..7488e095e0d32753dff7f5f170a4187ee6b7711e 100644 +index 4882a382e133cefbc669035471c02d90e4592cf0..f24ba12f37e8c926259de9f1ae0b724acdab2afe 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn -@@ -7599,9 +7599,12 @@ test("unit_tests") { +@@ -7602,9 +7602,12 @@ test("unit_tests") { "//chrome/notification_helper", ] @@ -63,7 +63,7 @@ index 23f175d87f95562875af1e7ddd51be4f719e82b8..7488e095e0d32753dff7f5f170a4187e "//chrome//services/util_win:unit_tests", "//chrome/app:chrome_dll_resources", "//chrome/app:win_unit_tests", -@@ -8544,6 +8547,10 @@ test("unit_tests") { +@@ -8547,6 +8550,10 @@ test("unit_tests") { "../browser/performance_manager/policies/background_tab_loading_policy_unittest.cc", ] @@ -74,7 +74,7 @@ index 23f175d87f95562875af1e7ddd51be4f719e82b8..7488e095e0d32753dff7f5f170a4187e sources += [ # The importer code is not used on Android. "../common/importer/firefox_importer_utils_unittest.cc", -@@ -8600,7 +8607,6 @@ test("unit_tests") { +@@ -8603,7 +8610,6 @@ test("unit_tests") { # TODO(crbug.com/417513088): Maybe merge with the non-android `deps` declaration above? deps += [ "../browser/screen_ai:screen_ai_install_state", diff --git a/patches/chromium/chore_disable_protocol_handler_dcheck.patch b/patches/chromium/chore_disable_protocol_handler_dcheck.patch index 98a7fa4019475..de2f4c14b3d8a 100644 --- a/patches/chromium/chore_disable_protocol_handler_dcheck.patch +++ b/patches/chromium/chore_disable_protocol_handler_dcheck.patch @@ -10,20 +10,14 @@ handlers. A DCHECK causes Electron to crash until we provide our own registry. This patch disables the check until we support this. diff --git a/extensions/browser/api/protocol_handlers/protocol_handlers_manager.cc b/extensions/browser/api/protocol_handlers/protocol_handlers_manager.cc -index 902cf488c7d84923365c4197a70b06e61e3af038..dce80684853f89a68a2d21997102f48feb3df8f8 100644 +index 7f26a1c3a63c8717705cbf6fe09ca3812450e15d..81b038bc8a1e16d9d7c71b7d74451a2601a2e238 100644 --- a/extensions/browser/api/protocol_handlers/protocol_handlers_manager.cc +++ b/extensions/browser/api/protocol_handlers/protocol_handlers_manager.cc -@@ -129,7 +129,12 @@ void ProtocolHandlersManager::ProtocolHandlersSanityCheck() { - auto* ph_registry = - ExtensionsBrowserClient::Get()->GetProtocolHandlerRegistry( +@@ -140,7 +140,6 @@ void ProtocolHandlersManager::ProtocolHandlersSanityCheck() { browser_context_); -- DCHECK(ph_registry); -+ -+ // TODO(samuelmaddock): Add support for extensions protocol handler. For now, -+ // let's ignore this. -+ if (!ph_registry) -+ return; -+ + // Can be null for tests using dummy profiles. + if (!ph_registry) { +- CHECK_IS_TEST(); + return; + } for (const auto& handler : ph_registry->GetExtensionProtocolHandlers()) { - DCHECK(handler.extension_id()); - if (!enabled_ids.contains(*handler.extension_id())) { diff --git a/patches/chromium/disable_hidden.patch b/patches/chromium/disable_hidden.patch index 6572cc63d3e77..5545c42c1755f 100644 --- a/patches/chromium/disable_hidden.patch +++ b/patches/chromium/disable_hidden.patch @@ -34,7 +34,7 @@ index 2d32d91eb98fe749ae262ba06a1a399813aa7bab..8ebf542046ffba6823804b797e373c80 // |routing_id| must not be IPC::mojom::kRoutingIdNone. // If this object outlives |delegate|, DetachDelegate() must be called when diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc -index 9b1712382e208ef949616243d6ec1feab46f8fb3..84899b5208f036bd58ba51513820404b6c5a24b9 100644 +index a96a08f4deac9ce1fcfff32f36c46aada8acc0aa..c6434aedc2529a05c74d8163f2184990cd7cb14c 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -696,7 +696,7 @@ void RenderWidgetHostViewAura::HideImpl() { diff --git a/patches/chromium/expose_setuseragent_on_networkcontext.patch b/patches/chromium/expose_setuseragent_on_networkcontext.patch index b65432f6f15d6..a77f3ef13a849 100644 --- a/patches/chromium/expose_setuseragent_on_networkcontext.patch +++ b/patches/chromium/expose_setuseragent_on_networkcontext.patch @@ -33,7 +33,7 @@ index 0ab8187b0db8ae6db46d81738f653a2bc4c566f6..de3d55e85c22317f7f9375eb94d0d5d4 } // namespace net diff --git a/services/network/network_context.cc b/services/network/network_context.cc -index 61c7bd716e2ed78c8f71cba50d34e80d6effad4f..68ec7012adbdb1ac65fe784f4a928474a8894a70 100644 +index 30605be7f7f84eaac3408d728e66481b61d1ebbb..bb43bbc550de130e667aa997613057bbd4361d08 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc @@ -1911,6 +1911,13 @@ void NetworkContext::EnableDurableMessageCollector( @@ -51,10 +51,10 @@ index 61c7bd716e2ed78c8f71cba50d34e80d6effad4f..68ec7012adbdb1ac65fe784f4a928474 // This may only be called on NetworkContexts created with the constructor // that calls MakeURLRequestContext(). diff --git a/services/network/network_context.h b/services/network/network_context.h -index 90cf1a70c068771ac98b2d5a283cba5e54c05ff4..0dc8de8d4e37e48cb28d8112c0233ac80cfb9ba5 100644 +index a6e6605e1241931f2fda2df1054476255ee58cdc..faaa1b7035cea0efe8547fc3a0248c27c7efd934 100644 --- a/services/network/network_context.h +++ b/services/network/network_context.h -@@ -336,6 +336,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext +@@ -334,6 +334,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext const base::UnguessableToken& throttling_profile_id, mojo::PendingReceiver receiver) override; @@ -63,10 +63,10 @@ index 90cf1a70c068771ac98b2d5a283cba5e54c05ff4..0dc8de8d4e37e48cb28d8112c0233ac8 void SetEnableReferrers(bool enable_referrers) override; #if BUILDFLAG(IS_CT_SUPPORTED) diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom -index 269b95a51029b2a2e42d663988f2c1b8a74f91a8..b819cd38ab8921d494caff3d2ae0ab86c9860d9c 100644 +index 8d6f011b4ae0111e18c6388622450bc47fd52875..3e7a2e29c48ba0f3791eead380090f9fb66cc5fc 100644 --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom -@@ -1345,6 +1345,9 @@ interface NetworkContext { +@@ -1331,6 +1331,9 @@ interface NetworkContext { mojo_base.mojom.UnguessableToken throttling_profile_id, pending_receiver receiver); @@ -77,10 +77,10 @@ index 269b95a51029b2a2e42d663988f2c1b8a74f91a8..b819cd38ab8921d494caff3d2ae0ab86 SetAcceptLanguage(string new_accept_language); diff --git a/services/network/test/test_network_context.h b/services/network/test/test_network_context.h -index ebcacbcb16057912693a6674e6b9ef5eeb671f91..1f3f18979b76be720a7c202f2a45fcc593c8fc01 100644 +index 3a8b8e0b3eab3072e7af336e7885e8dd0829e6ad..80bcab8f9e78eddcc82550ef0062de5b5d424c30 100644 --- a/services/network/test/test_network_context.h +++ b/services/network/test/test_network_context.h -@@ -162,6 +162,7 @@ class TestNetworkContext : public mojom::NetworkContext { +@@ -160,6 +160,7 @@ class TestNetworkContext : public mojom::NetworkContext { void SetNetworkConditions( const base::UnguessableToken& throttling_profile_id, std::vector) override {} diff --git a/patches/chromium/feat_allow_code_cache_in_custom_schemes.patch b/patches/chromium/feat_allow_code_cache_in_custom_schemes.patch index 5b1e716e6d484..4da8f59d74010 100644 --- a/patches/chromium/feat_allow_code_cache_in_custom_schemes.patch +++ b/patches/chromium/feat_allow_code_cache_in_custom_schemes.patch @@ -405,10 +405,10 @@ index 33e2ff42e4d9da442d522b959a4a21c2f7032b6b..a0d81212327fc17e1f4704e78803c1d7 std::vector extension_schemes; // Registers a URL scheme with a predefined default custom handler. diff --git a/url/url_util.cc b/url/url_util.cc -index 94cbe0bb382b4b64db390dcd6d725e13f54b6666..5c3949c01f27cab5e4f8a56bbbf11c0f9718eed2 100644 +index f3908c04715ab399f61dd6bd781f5378f14584e2..c119360ff5dee3b51e6db65b9628aa7a27d0a213 100644 --- a/url/url_util.cc +++ b/url/url_util.cc -@@ -136,6 +136,9 @@ struct SchemeRegistry { +@@ -131,6 +131,9 @@ struct SchemeRegistry { kMaterializedViewScheme, }; @@ -418,7 +418,7 @@ index 94cbe0bb382b4b64db390dcd6d725e13f54b6666..5c3949c01f27cab5e4f8a56bbbf11c0f // Schemes with a predefined default custom handler. std::vector predefined_handler_schemes; -@@ -673,6 +676,15 @@ const std::vector& GetEmptyDocumentSchemes() { +@@ -668,6 +671,15 @@ const std::vector& GetEmptyDocumentSchemes() { return GetSchemeRegistry().empty_document_schemes; } diff --git a/patches/chromium/feat_corner_smoothing_css_rule_and_blink_painting.patch b/patches/chromium/feat_corner_smoothing_css_rule_and_blink_painting.patch index e3b3ff9446bd3..c060f87cb552a 100644 --- a/patches/chromium/feat_corner_smoothing_css_rule_and_blink_painting.patch +++ b/patches/chromium/feat_corner_smoothing_css_rule_and_blink_painting.patch @@ -312,7 +312,7 @@ index 1d6b8160e8db2a94ee61ed41ac9a74db5b1bfb17..373bcd30c6a4526262912021aaf2b560 auto DrawAsSinglePath = [&]() { diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -index a5dcd4c68acab6c6a294ababf5527496faec792e..463c97dbf245b1e57e2de5e5131044d89bbcdcd0 100644 +index 07ac334ffafbce03cbb97f698e347cd2093ef17f..13ae0dfcd3cb63fef13962b6f744195c178414a4 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 @@ -214,6 +214,10 @@ diff --git a/patches/chromium/fix_move_autopipsettingshelper_behind_branding_buildflag.patch b/patches/chromium/fix_move_autopipsettingshelper_behind_branding_buildflag.patch index 2123f36cd5102..8c9cc88b8a1ca 100644 --- a/patches/chromium/fix_move_autopipsettingshelper_behind_branding_buildflag.patch +++ b/patches/chromium/fix_move_autopipsettingshelper_behind_branding_buildflag.patch @@ -83,10 +83,10 @@ index a8a1ec300d9286f641f4676be54121eddc9c0ba1..b25a7fe369207f24b52cf1c98abe70f4 PictureInPictureOcclusionTracker* diff --git a/chrome/browser/ui/views/overlay/video_overlay_window_views.cc b/chrome/browser/ui/views/overlay/video_overlay_window_views.cc -index 601b178ef0e90753559083f506c9a62a7434c530..2a0f9f87d833504e34ad7d72c0cdd974c0318639 100644 +index c84f5af15c60ad386efa36d8e1b4112b1bf6a659..9f63a925d286628392ebe1acb1e38cf4343c202f 100644 --- a/chrome/browser/ui/views/overlay/video_overlay_window_views.cc +++ b/chrome/browser/ui/views/overlay/video_overlay_window_views.cc -@@ -451,11 +451,13 @@ std::unique_ptr VideoOverlayWindowViews::Create( +@@ -443,11 +443,13 @@ std::unique_ptr VideoOverlayWindowViews::Create( #endif // BUILDFLAG(IS_WIN) diff --git a/patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch b/patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch index 984cdb085b8e6..67019b67466c6 100644 --- a/patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch +++ b/patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch @@ -9,10 +9,10 @@ focus node change via TextInputManager. chromium-bug: https://crbug.com/1369605 diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc -index 87fd5aa4fab7ddd0b444a3c8473ae35066c87054..6edf04acfaea8029e7dd1a573942cdd0ecd610c3 100644 +index f19ed1ca1b5f28fc0373106c961a91976df12061..66068c19b5fbc26112c36e7ebd38c1a8b9cb5e52 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc -@@ -3345,6 +3345,12 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged( +@@ -3348,6 +3348,12 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged( } } diff --git a/patches/chromium/mas_avoid_private_macos_api_usage.patch.patch b/patches/chromium/mas_avoid_private_macos_api_usage.patch.patch index 9ec276281d437..86bcdbe88dda6 100644 --- a/patches/chromium/mas_avoid_private_macos_api_usage.patch.patch +++ b/patches/chromium/mas_avoid_private_macos_api_usage.patch.patch @@ -35,10 +35,10 @@ system font by checking if it's kCTFontPriorityAttribute is set to system priority. diff --git a/base/BUILD.gn b/base/BUILD.gn -index 73d636ded85feb3db6582d5eab8c713fb7304b31..9c2c027ec7c22578d10d089d624f3ec395d23f1c 100644 +index e1a46e92f8afcff9907fffec19acbf96b61241de..5f84d2c36be58346f924f9c1c7f6e9b7ef823a9f 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn -@@ -1069,6 +1069,7 @@ component("base") { +@@ -1071,6 +1071,7 @@ component("base") { "//build:ios_buildflags", "//build/config/compiler:compiler_buildflags", "//third_party/modp_b64", diff --git a/patches/chromium/network_service_allow_remote_certificate_verification_logic.patch b/patches/chromium/network_service_allow_remote_certificate_verification_logic.patch index 4a7165124f5cb..52b00bf77fbe9 100644 --- a/patches/chromium/network_service_allow_remote_certificate_verification_logic.patch +++ b/patches/chromium/network_service_allow_remote_certificate_verification_logic.patch @@ -7,7 +7,7 @@ This adds a callback from the network service that's used to implement session.setCertificateVerifyCallback. diff --git a/services/network/network_context.cc b/services/network/network_context.cc -index 3534a4b276fe96d56a9e7663b35b44aec44344c6..61c7bd716e2ed78c8f71cba50d34e80d6effad4f 100644 +index 8cdd3435b4759167b536e7ac71894af360e48e88..30605be7f7f84eaac3408d728e66481b61d1ebbb 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc @@ -166,6 +166,11 @@ @@ -160,7 +160,7 @@ index 3534a4b276fe96d56a9e7663b35b44aec44344c6..61c7bd716e2ed78c8f71cba50d34e80d builder.SetCertVerifier(IgnoreErrorsCertVerifier::MaybeWrapCertVerifier( diff --git a/services/network/network_context.h b/services/network/network_context.h -index 3795ce4def719c36e1dace911be53b0103aeafc5..90cf1a70c068771ac98b2d5a283cba5e54c05ff4 100644 +index 259ab42036ab9a77ea5e47ef75c9d70d0e71451c..a6e6605e1241931f2fda2df1054476255ee58cdc 100644 --- a/services/network/network_context.h +++ b/services/network/network_context.h @@ -117,6 +117,7 @@ class URLMatcher; @@ -180,7 +180,7 @@ index 3795ce4def719c36e1dace911be53b0103aeafc5..90cf1a70c068771ac98b2d5a283cba5e void ResetURLLoaderFactories() override; void GetViaObliviousHttp( mojom::ObliviousHttpRequestPtr request, -@@ -995,6 +998,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext +@@ -993,6 +996,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext std::vector dismount_closures_; #endif // BUILDFLAG(IS_DIRECTORY_TRANSFER_REQUIRED) @@ -190,7 +190,7 @@ index 3795ce4def719c36e1dace911be53b0103aeafc5..90cf1a70c068771ac98b2d5a283cba5e std::unique_ptr internal_host_resolver_; std::set, base::UniquePtrComparator> diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom -index f2de77f154f4290f4bbf60f6b5697fdc9383427a..269b95a51029b2a2e42d663988f2c1b8a74f91a8 100644 +index 91ba6405e1d1c9175240bc628d411c230b3be74f..8d6f011b4ae0111e18c6388622450bc47fd52875 100644 --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom @@ -311,6 +311,17 @@ struct SocketBrokerRemotes { @@ -222,7 +222,7 @@ index f2de77f154f4290f4bbf60f6b5697fdc9383427a..269b95a51029b2a2e42d663988f2c1b8 CreateURLLoaderFactory( pending_receiver url_loader_factory, diff --git a/services/network/test/test_network_context.h b/services/network/test/test_network_context.h -index 56971f00eea555b3e67e0c20d5e7a8572444690b..ebcacbcb16057912693a6674e6b9ef5eeb671f91 100644 +index bd1ebce1ab26362e11d44e11ead2bc7f1567aa02..3a8b8e0b3eab3072e7af336e7885e8dd0829e6ad 100644 --- a/services/network/test/test_network_context.h +++ b/services/network/test/test_network_context.h @@ -63,6 +63,8 @@ class TestNetworkContext : public mojom::NetworkContext { diff --git a/patches/chromium/picture-in-picture.patch b/patches/chromium/picture-in-picture.patch index 23eb19a4eef37..e1ebb4ca41114 100644 --- a/patches/chromium/picture-in-picture.patch +++ b/patches/chromium/picture-in-picture.patch @@ -38,7 +38,7 @@ index a7a637438116a1c7846194dea4412100a45c9331..bb3877d546bfea141d3d6ebb396b88fa ui::ImageModel::FromVectorIcon(*icon, kColorPipWindowForeground, kCloseButtonIconSize)); diff --git a/chrome/browser/ui/views/overlay/video_overlay_window_views.cc b/chrome/browser/ui/views/overlay/video_overlay_window_views.cc -index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a7434c530 100644 +index 1d7d033888bf8b9ff3ea1e938dc9d92fd09f2bfe..c84f5af15c60ad386efa36d8e1b4112b1bf6a659 100644 --- a/chrome/browser/ui/views/overlay/video_overlay_window_views.cc +++ b/chrome/browser/ui/views/overlay/video_overlay_window_views.cc @@ -18,12 +18,16 @@ @@ -78,7 +78,7 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a #include "chrome/browser/shell_integration_win.h" #include "content/public/browser/render_widget_host_view.h" #include "ui/aura/window.h" -@@ -409,7 +415,7 @@ std::unique_ptr VideoOverlayWindowViews::Create( +@@ -401,7 +407,7 @@ std::unique_ptr VideoOverlayWindowViews::Create( overlay_window->Init(std::move(params)); overlay_window->OnRootViewReady(); @@ -87,7 +87,7 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a std::wstring app_user_model_id; Browser* browser = chrome::FindBrowserWithTab(controller->GetWebContents()); if (browser) { -@@ -702,6 +708,7 @@ void VideoOverlayWindowViews::OnMouseEvent(ui::MouseEvent* event) { +@@ -694,6 +700,7 @@ void VideoOverlayWindowViews::OnMouseEvent(ui::MouseEvent* event) { } case ui::EventType::kMousePressed: @@ -95,7 +95,7 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a // Hide the live caption dialog if it's visible and the user clicks // outside of it. if (live_caption_dialog_ && live_caption_dialog_->GetVisible() && -@@ -710,6 +717,7 @@ void VideoOverlayWindowViews::OnMouseEvent(ui::MouseEvent* event) { +@@ -702,6 +709,7 @@ void VideoOverlayWindowViews::OnMouseEvent(ui::MouseEvent* event) { SetLiveCaptionDialogVisibility(false); return; } @@ -103,7 +103,21 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a break; default: -@@ -1213,6 +1221,7 @@ void VideoOverlayWindowViews::SetUpViews() { +@@ -737,11 +745,11 @@ bool VideoOverlayWindowViews::HideLiveCaptionDialogForGestureIfNecessary( + if (event->type() != ui::EventType::kGestureTap) { + return false; + } +- ++#if 0 + if (!live_caption_dialog_->GetVisible()) { + return false; + } +- ++#endif + if (!GetLiveCaptionDialogBounds().Contains(event->location())) { + SetLiveCaptionDialogVisibility(false); + event->SetHandled(); +@@ -1219,6 +1227,7 @@ void VideoOverlayWindowViews::SetUpViews() { timestamp->SetBackgroundColor(SK_ColorTRANSPARENT); timestamp->SetHorizontalAlignment(gfx::ALIGN_LEFT); @@ -111,7 +125,7 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a auto live_status = std::make_unique( l10n_util::GetStringUTF16(IDS_PICTURE_IN_PICTURE_LIVE_STATUS_TEXT), views::style::CONTEXT_LABEL, views::style::STYLE_CAPTION_BOLD); -@@ -1232,6 +1241,7 @@ void VideoOverlayWindowViews::SetUpViews() { +@@ -1238,6 +1247,7 @@ void VideoOverlayWindowViews::SetUpViews() { Profile::FromBrowserContext( controller_->GetWebContents()->GetBrowserContext())); live_caption_dialog->SetVisible(false); @@ -119,23 +133,7 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a auto toggle_microphone_button = std::make_unique(base::BindRepeating( -@@ -1367,6 +1377,7 @@ void VideoOverlayWindowViews::SetUpViews() { - timestamp->layer()->SetFillsBoundsOpaquely(false); - timestamp->layer()->SetName("Timestamp"); - -+#if 0 - live_status->SetPaintToLayer(ui::LAYER_TEXTURED); - live_status->layer()->SetFillsBoundsOpaquely(false); - live_status->layer()->SetName("LiveStatus"); -@@ -1378,6 +1389,7 @@ void VideoOverlayWindowViews::SetUpViews() { - live_caption_dialog->SetPaintToLayer(ui::LAYER_TEXTURED); - live_caption_dialog->layer()->SetFillsBoundsOpaquely(false); - live_caption_dialog->layer()->SetName("LiveCaptionDialog"); -+#endif - - toggle_microphone_button->SetPaintToLayer(ui::LAYER_TEXTURED); - toggle_microphone_button->layer()->SetFillsBoundsOpaquely(false); -@@ -1441,13 +1453,15 @@ void VideoOverlayWindowViews::SetUpViews() { +@@ -1360,13 +1370,15 @@ void VideoOverlayWindowViews::SetUpViews() { timestamp_ = playback_controls_container_view_->AddChildView(std::move(timestamp)); @@ -147,12 +145,12 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a live_caption_button_ = playback_controls_container_view_->AddChildView( std::move(live_caption_button)); live_caption_dialog_ = - controls_container_view->AddChildView(std::move(live_caption_dialog)); + controls_container_view_->AddChildView(std::move(live_caption_dialog)); +#endif toggle_camera_button_ = vc_controls_container_view_->AddChildView( std::move(toggle_camera_button)); -@@ -1709,6 +1723,7 @@ void VideoOverlayWindowViews::OnUpdateControlsBounds() { +@@ -1622,6 +1634,7 @@ void VideoOverlayWindowViews::OnUpdateControlsBounds() { timestamp_->SetSize({max_timestamp_width, kTimestampHeight}); timestamp_->SetVisible(!is_live_); @@ -160,7 +158,7 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a live_status_->SetPosition(timestamp_position); live_status_->SetMaximumWidthSingleLine(max_timestamp_width); live_status_->SetSize( -@@ -1716,7 +1731,6 @@ void VideoOverlayWindowViews::OnUpdateControlsBounds() { +@@ -1629,7 +1642,6 @@ void VideoOverlayWindowViews::OnUpdateControlsBounds() { .width(), kTimestampHeight}); live_status_->SetVisible(is_live_); @@ -168,7 +166,7 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a gfx::Rect live_caption_button_bounds( bottom_controls_bounds.right() - kBottomControlsHorizontalMargin - kActionButtonSize.width(), -@@ -1729,7 +1743,7 @@ void VideoOverlayWindowViews::OnUpdateControlsBounds() { +@@ -1642,7 +1654,7 @@ void VideoOverlayWindowViews::OnUpdateControlsBounds() { live_caption_dialog_->SetPosition( {live_caption_button_bounds.right() - live_caption_dialog_->width(), live_caption_button_bounds.y() - live_caption_dialog_->height()}); @@ -177,28 +175,7 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a // The play/pause button and replay/forward 10 seconds buttons should not be // visible while dragging the progress bar or for live media. const bool is_dragging_progress_bar = -@@ -2053,6 +2067,7 @@ void VideoOverlayWindowViews::OnGestureEvent(ui::GestureEvent* event) { - return; - } - -+#if 0 - if (live_caption_dialog_ && live_caption_dialog_->GetVisible()) { - if (!GetLiveCaptionDialogBounds().Contains(event->location())) { - // Hide the live caption dialog if it's visible and the user taps outside -@@ -2061,11 +2076,11 @@ void VideoOverlayWindowViews::OnGestureEvent(ui::GestureEvent* event) { - event->SetHandled(); - return; - } -- - // Otherwise, let the live caption dialog handle the gesture. - live_caption_dialog_->OnGestureTapEvent(event); - return; - } -+#endif - - if (GetBackToTabControlsBounds().Contains(event->location())) { - controller_->CloseAndFocusInitiator(); -@@ -2171,18 +2186,25 @@ gfx::Rect VideoOverlayWindowViews::GetProgressViewBounds() { +@@ -2041,18 +2053,25 @@ gfx::Rect VideoOverlayWindowViews::GetProgressViewBounds() { } gfx::Rect VideoOverlayWindowViews::GetLiveCaptionButtonBounds() { @@ -224,7 +201,7 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a MediaEngagementService* service = MediaEngagementService::Get(Profile::FromBrowserContext( GetController()->GetWebContents()->GetBrowserContext())); -@@ -2191,6 +2213,8 @@ bool VideoOverlayWindowViews::HasHighMediaEngagement( +@@ -2061,6 +2080,8 @@ bool VideoOverlayWindowViews::HasHighMediaEngagement( } return service->HasHighEngagement(origin); @@ -233,7 +210,7 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a } bool VideoOverlayWindowViews::IsTrustedForMediaPlayback() const { -@@ -2447,16 +2471,20 @@ void VideoOverlayWindowViews::UpdateTimestampLabel(base::TimeDelta current_time, +@@ -2317,11 +2338,14 @@ void VideoOverlayWindowViews::UpdateTimestampLabel(base::TimeDelta current_time, } void VideoOverlayWindowViews::OnLiveCaptionButtonPressed() { @@ -248,9 +225,11 @@ index 6cfeed24487c026d13034b5ea7a8fb275bff4006..601b178ef0e90753559083f506c9a62a if (wanted_visibility == live_caption_dialog_->GetVisible()) { return; } - live_caption_dialog_->SetVisible(wanted_visibility); - live_caption_button_->SetIsLiveCaptionDialogOpen(wanted_visibility); +@@ -2344,6 +2368,7 @@ void VideoOverlayWindowViews::SetLiveCaptionDialogVisibility( + for (auto* control : controls_to_be_disabled_when_live_caption_is_open) { + control->SetEnabled(!wanted_visibility); + } +#endif + } - views::View* controls_to_be_disabled_when_live_caption_is_open[] = { - minimize_button_.get(), + void VideoOverlayWindowViews::OnFaviconReceived(const SkBitmap& image) { diff --git a/patches/chromium/revert_code_health_clean_up_stale_macwebcontentsocclusion.patch b/patches/chromium/revert_code_health_clean_up_stale_macwebcontentsocclusion.patch index 00d6995ff2fce..a90ab64908e73 100644 --- a/patches/chromium/revert_code_health_clean_up_stale_macwebcontentsocclusion.patch +++ b/patches/chromium/revert_code_health_clean_up_stale_macwebcontentsocclusion.patch @@ -254,7 +254,7 @@ index 17d6d7d935f93afefa9123f56ef9c138c3070f93..8dfa7501a6a2998e107bf9b51f5e5c3d } diff --git a/content/common/features.cc b/content/common/features.cc -index d9fdcd11f23449e22e17df833140c1f80d503486..18d3c146ec38ada48dc1c32904fe170a0a53a6f2 100644 +index f6b38a04e64b02a3a4ea0c84155967c4602cbdc2..d8b9141ace8d008667b55e028e36bba438530627 100644 --- a/content/common/features.cc +++ b/content/common/features.cc @@ -312,6 +312,14 @@ BASE_FEATURE(kInterestGroupUpdateIfOlderThan, base::FEATURE_ENABLED_BY_DEFAULT); @@ -273,7 +273,7 @@ index d9fdcd11f23449e22e17df833140c1f80d503486..18d3c146ec38ada48dc1c32904fe170a BASE_FEATURE(kKeepChildProcessAfterIPCReset, base::FEATURE_DISABLED_BY_DEFAULT); diff --git a/content/common/features.h b/content/common/features.h -index 5b6d84c51b082bc80e9fd03b79a4ff4704b75eb7..b043a236891cdc83342820a38babf4cfd99b4d40 100644 +index 762c98a66c0565b6eb2f45de051206c5e3eaf44d..24a5302fc618c27adc7e0ddc0614faeb12f0ed52 100644 --- a/content/common/features.h +++ b/content/common/features.h @@ -112,6 +112,9 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kInterestGroupUpdateIfOlderThan); diff --git a/patches/chromium/revert_views_remove_desktopwindowtreehostwin_window_enlargement.patch b/patches/chromium/revert_views_remove_desktopwindowtreehostwin_window_enlargement.patch index b7a78ce782901..4dfcad7a9de4d 100644 --- a/patches/chromium/revert_views_remove_desktopwindowtreehostwin_window_enlargement.patch +++ b/patches/chromium/revert_views_remove_desktopwindowtreehostwin_window_enlargement.patch @@ -10,10 +10,10 @@ on Windows. We should refactor our code so that this patch isn't necessary. diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json -index 21026b6a40bbccf616b3a6390bb8359d23470380..c52e49e673616df91b115d39c5c78bcd1d7db7ff 100644 +index 4ee07060d639c57267f8131f205eae29f9b47175..0c5df2384fa736b50996dfa2da248b5cb1070bc3 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json -@@ -25731,6 +25731,21 @@ +@@ -25823,6 +25823,21 @@ ] } ], diff --git a/patches/chromium/scroll_bounce_flag.patch b/patches/chromium/scroll_bounce_flag.patch index 9c76c29f9ce59..ada963b13d666 100644 --- a/patches/chromium/scroll_bounce_flag.patch +++ b/patches/chromium/scroll_bounce_flag.patch @@ -6,7 +6,7 @@ Subject: scroll_bounce_flag.patch Patch to make scrollBounce option work. diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc -index 90ba3ac24eaeb4897f410b1a787852f003e56d88..b1294e12137254dea7618907aa03f9f7bedda13b 100644 +index fd361f24d95327617abfa558720c52c311467d45..1046189b3c10749a0b721c4b61dd07d8de751178 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc @@ -1212,7 +1212,7 @@ bool RenderThreadImpl::IsLcdTextEnabled() { diff --git a/patches/devtools_frontend/chore_expose_ui_to_allow_electron_to_set_dock_side.patch b/patches/devtools_frontend/chore_expose_ui_to_allow_electron_to_set_dock_side.patch index 0c44714b73294..4d20cc376042c 100644 --- a/patches/devtools_frontend/chore_expose_ui_to_allow_electron_to_set_dock_side.patch +++ b/patches/devtools_frontend/chore_expose_ui_to_allow_electron_to_set_dock_side.patch @@ -10,10 +10,10 @@ to handle this without patching, but this is fairly clean for now and no longer patching legacy devtools code. diff --git a/front_end/entrypoints/main/MainImpl.ts b/front_end/entrypoints/main/MainImpl.ts -index ad6c608d8a1caecbffba95bb911abe5639e13449..d9ef6e74d767b1712be1d4ca503c1d21973ba372 100644 +index 891b36f34e92deee921dfe871aae2580206626b6..9d78186e5884eae652f5db648ceff9cfa8778d96 100644 --- a/front_end/entrypoints/main/MainImpl.ts +++ b/front_end/entrypoints/main/MainImpl.ts -@@ -769,6 +769,8 @@ export class MainImpl { +@@ -753,6 +753,8 @@ export class MainImpl { globalThis.Main = globalThis.Main || {}; // @ts-expect-error Exported for Tests.js globalThis.Main.Main = MainImpl; diff --git a/patches/webrtc/fix_handle_pipewire_capturer_initialization_and_management.patch b/patches/webrtc/fix_handle_pipewire_capturer_initialization_and_management.patch index 4ea2687bb14a8..9b40bb5f9f3d5 100644 --- a/patches/webrtc/fix_handle_pipewire_capturer_initialization_and_management.patch +++ b/patches/webrtc/fix_handle_pipewire_capturer_initialization_and_management.patch @@ -36,7 +36,7 @@ for desktop capturer. This change re-enables that fallback, which was previously default behavior. diff --git a/modules/desktop_capture/desktop_capturer.cc b/modules/desktop_capture/desktop_capturer.cc -index bf63f73178688e49286bb6686d5a42ce040c663e..f5f62a2b7865d8415ec08242312df006bcb2edf5 100644 +index 243919ba101c637887b2a964e45be0096798873b..c1597ee84a3a84a1c5e556eb31c4d3e19a6e4c84 100644 --- a/modules/desktop_capture/desktop_capturer.cc +++ b/modules/desktop_capture/desktop_capturer.cc @@ -138,7 +138,7 @@ std::unique_ptr DesktopCapturer::CreateGenericCapturer( @@ -61,10 +61,10 @@ index 361b465dad2a53f4dac774fa2d6d6d9e3fc5fc31..ef05a35bc4f2c2352b12c0af0b09193b capturer_failed_ = true; } diff --git a/modules/desktop_capture/screen_capturer_linux.cc b/modules/desktop_capture/screen_capturer_linux.cc -index f25e08fb594c563b1f8ca0fd1c4383ed39df5149..8ce6a9d82d808c1618b857ac83af85ac38a43a2a 100644 +index aeab70c9f7f7511af04c4831b4d81c8a4e4261aa..ad9efad3af5b4ce21a0a2b21a783af0c4f468494 100644 --- a/modules/desktop_capture/screen_capturer_linux.cc +++ b/modules/desktop_capture/screen_capturer_linux.cc -@@ -39,11 +39,10 @@ std::unique_ptr DesktopCapturer::CreateRawScreenCapturer( +@@ -38,11 +38,10 @@ std::unique_ptr DesktopCapturer::CreateRawScreenCapturer( #endif // defined(WEBRTC_USE_PIPEWIRE) #if defined(WEBRTC_USE_X11) @@ -80,10 +80,10 @@ index f25e08fb594c563b1f8ca0fd1c4383ed39df5149..8ce6a9d82d808c1618b857ac83af85ac } // namespace webrtc diff --git a/modules/desktop_capture/window_capturer_linux.cc b/modules/desktop_capture/window_capturer_linux.cc -index 87ea3d57212c5f62194f206787756b7f3fb63e90..3f565ab13a033dc29d55f819da7de464b6e19885 100644 +index 6df928913f4ef73db3d6377682f4f40bcd58c4d9..befd9f7a6a00778ebe5b3fa9da25fcbcaf91ef79 100644 --- a/modules/desktop_capture/window_capturer_linux.cc +++ b/modules/desktop_capture/window_capturer_linux.cc -@@ -39,11 +39,10 @@ std::unique_ptr DesktopCapturer::CreateRawWindowCapturer( +@@ -38,11 +38,10 @@ std::unique_ptr DesktopCapturer::CreateRawWindowCapturer( #endif // defined(WEBRTC_USE_PIPEWIRE) #if defined(WEBRTC_USE_X11) diff --git a/script/spec-runner.js b/script/spec-runner.js index e816cfbe18281..e526c0d7085e2 100755 --- a/script/spec-runner.js +++ b/script/spec-runner.js @@ -375,7 +375,7 @@ async function runTestUsingElectron (specDir, testName, shouldRerun, additionalA if (shouldRerun) { await rerunFailedTests(specDir, testName); } else { - return false; + process.exit(1); } } console.log(`${pass} Electron ${testName} process tests passed.`); @@ -430,6 +430,19 @@ async function installSpecModules (dir) { console.log(`${fail} Failed to yarn install in '${dir}'`); process.exit(1); } + + if (process.platform === 'linux') { + const { status: rebuildStatus } = childProcess.spawnSync('npm', ['rebuild', 'abstract-socket'], { + env, + cwd: dir, + stdio: 'inherit', + shell: process.platform === 'win32' + }); + if (rebuildStatus !== 0) { + console.log(`${fail} Failed to rebuild abstract-socket native module`); + process.exit(1); + } + } } function getSpecHash () { diff --git a/shell/browser/electron_plugin_info_host_impl.cc b/shell/browser/electron_plugin_info_host_impl.cc index 8a09038a05a76..1c1e66beaf501 100644 --- a/shell/browser/electron_plugin_info_host_impl.cc +++ b/shell/browser/electron_plugin_info_host_impl.cc @@ -36,7 +36,7 @@ void ElectronPluginInfoHostImpl::GetPluginInfo(const GURL& url, GetPluginInfoCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); GetPluginInfo_Params params = {url, origin, mime_type}; - PluginService::GetInstance()->GetPlugins( + PluginService::GetInstance()->GetPluginsAsync( base::BindOnce(&ElectronPluginInfoHostImpl::PluginsLoaded, weak_factory_.GetWeakPtr(), params, std::move(callback))); } diff --git a/spec/ambient.d.ts b/spec/ambient.d.ts index c9fa27eb307f4..97fda55407db7 100644 --- a/spec/ambient.d.ts +++ b/spec/ambient.d.ts @@ -1,2 +1,4 @@ declare let standardScheme: string; declare let serviceWorkerScheme: string; + +declare module 'dbus-native'; diff --git a/spec/api-notification-dbus-spec.ts b/spec/api-notification-dbus-spec.ts index a66043e9e4cfa..a601296536e72 100644 --- a/spec/api-notification-dbus-spec.ts +++ b/spec/api-notification-dbus-spec.ts @@ -10,7 +10,7 @@ import { nativeImage } from 'electron/common'; import { app } from 'electron/main'; import { expect } from 'chai'; -import * as dbus from 'dbus-ts'; +import * as dbus from 'dbus-native'; import * as path from 'node:path'; import { promisify } from 'node:util'; @@ -40,9 +40,10 @@ ifdescribe(!skip)('Notification module (dbus)', () => { const path = '/org/freedesktop/Notifications'; const iface = 'org.freedesktop.DBus.Mock'; console.log(`session bus: ${process.env.DBUS_SESSION_BUS_ADDRESS}`); - const bus = await dbus.sessionBus(); + const bus = dbus.sessionBus(); const service = bus.getService(serviceName); - mock = await service.getInterface(path, iface); + const getInterface = promisify(service.getInterface.bind(service)); + mock = await getInterface(path, iface); getCalls = promisify(mock.GetCalls.bind(mock)); reset = promisify(mock.Reset.bind(mock)); }); diff --git a/spec/api-power-monitor-spec.ts b/spec/api-power-monitor-spec.ts index e3b5e9c73c04d..47a2e6cdab712 100644 --- a/spec/api-power-monitor-spec.ts +++ b/spec/api-power-monitor-spec.ts @@ -7,7 +7,7 @@ // See https://pypi.python.org/pypi/python-dbusmock for more information about // python-dbusmock. import { expect } from 'chai'; -import * as dbus from 'dbus-ts'; +import * as dbus from 'dbus-native'; import { once } from 'node:events'; import { setTimeout } from 'node:timers/promises'; @@ -20,9 +20,10 @@ describe('powerMonitor', () => { ifdescribe(process.platform === 'linux' && process.env.DBUS_SYSTEM_BUS_ADDRESS != null)('when powerMonitor module is loaded with dbus mock', () => { before(async () => { - const systemBus = await dbus.systemBus(); + const systemBus = dbus.systemBus(); const loginService = systemBus.getService('org.freedesktop.login1'); - logindMock = await loginService.getInterface('/org/freedesktop/login1', 'org.freedesktop.DBus.Mock'); + const getInterface = promisify(loginService.getInterface.bind(loginService)); + logindMock = await getInterface('/org/freedesktop/login1', 'org.freedesktop.DBus.Mock'); getCalls = promisify(logindMock.GetCalls.bind(logindMock)); emitSignal = promisify(logindMock.EmitSignal.bind(logindMock)); reset = promisify(logindMock.Reset.bind(logindMock)); diff --git a/spec/api-shared-texture-spec.ts b/spec/api-shared-texture-spec.ts index a89edb50b272f..6aef406f13a23 100644 --- a/spec/api-shared-texture-spec.ts +++ b/spec/api-shared-texture-spec.ts @@ -5,11 +5,14 @@ import { expect } from 'chai'; import { randomUUID } from 'node:crypto'; import * as path from 'node:path'; +import { ifdescribe } from './lib/spec-helpers'; import { closeWindow } from './lib/window-helpers'; const fixtures = path.resolve(__dirname, 'fixtures'); -describe('sharedTexture module', () => { +// Tests only run properly on macOS arm64 for now +const skip = process.platform !== 'darwin' || process.arch !== 'arm64'; +ifdescribe(!skip)('sharedTexture module', () => { const { nativeImage } = require('electron'); @@ -35,7 +38,8 @@ describe('sharedTexture module', () => { } }); - it('successfully imported and rendered with subtle api', (done) => { + it('successfully imported and rendered with subtle api', async function () { + this.timeout(debugSpec ? 100000 : 10000); type CapturedTextureHolder = { importedSubtle: Electron.SharedTextureImportedSubtle, texture: Electron.OffscreenSharedTexture @@ -45,237 +49,236 @@ describe('sharedTexture module', () => { const preloadPath = path.join(dirPath, 'subtle', 'preload.js'); const htmlPath = path.join(dirPath, 'subtle', 'index.html'); - const createWindow = () => { - const win = new BrowserWindow({ - width: 256, - height: 256, - show: debugSpec, - webPreferences: { - preload: preloadPath - } - }); + return new Promise((resolve, reject) => { + const createWindow = () => { + const win = new BrowserWindow({ + width: 256, + height: 256, + show: debugSpec, + webPreferences: { + preload: preloadPath + } + }); - const osr = new BrowserWindow({ - width: 128, - height: 128, - show: debugSpec, - webPreferences: { - offscreen: { - useSharedTexture: true + const osr = new BrowserWindow({ + width: 128, + height: 128, + show: debugSpec, + webPreferences: { + offscreen: { + useSharedTexture: true + } } - } - }); + }); - osr.webContents.setFrameRate(1); - osr.webContents.on('paint', (event: any) => { + osr.webContents.setFrameRate(1); + osr.webContents.on('paint', (event: any) => { // Step 1: Input source of shared texture handle. - const texture = event.texture; + const texture = event.texture; - if (!texture) { - console.error('No texture, GPU may be unavailable, skipping.'); - done(); - return; - } + if (!texture) { + console.error('No texture, GPU may be unavailable, skipping.'); + resolve(); + } - // Step 2: Import as SharedTextureImported - console.log(texture.textureInfo); - const importedSubtle = sharedTexture.subtle.importSharedTexture(texture.textureInfo); + // Step 2: Import as SharedTextureImported + const importedSubtle = sharedTexture.subtle.importSharedTexture(texture.textureInfo); - // Step 3: Prepare for transfer to another process (win's renderer) - const transfer = importedSubtle.startTransferSharedTexture(); + // Step 3: Prepare for transfer to another process (win's renderer) + const transfer = importedSubtle.startTransferSharedTexture(); - const id = randomUUID(); - capturedTextures.set(id, { importedSubtle, texture }); + const id = randomUUID(); + capturedTextures.set(id, { importedSubtle, texture }); - // Step 4: Send the shared texture to the renderer process (goto preload.js) - win.webContents.send('shared-texture', id, transfer); - }); + // Step 4: Send the shared texture to the renderer process (goto preload.js) + win.webContents.send('shared-texture', id, transfer); + }); - ipcMain.on('shared-texture-done', (event: any, id: string) => { + ipcMain.on('shared-texture-done', (event: any, id: string) => { // Step 12: Release the shared texture resources at main process - const data = capturedTextures.get(id); - if (data) { - capturedTextures.delete(id); - const { importedSubtle, texture } = data; + const data = capturedTextures.get(id); + if (data) { + capturedTextures.delete(id); + const { importedSubtle, texture } = data; - // Step 13: Release the imported shared texture - importedSubtle.release(() => { + // Step 13: Release the imported shared texture + importedSubtle.release(() => { // Step 14: Release the shared texture once GPU is done - texture.release(); - }); + texture.release(); + }); - // Step 15: Slightly timeout and capture the node screenshot - setTimeout(async () => { + // Step 15: Slightly timeout and capture the node screenshot + setTimeout(async () => { // Step 16: Compare the captured image with the target image - const captured = await win.webContents.capturePage({ - x: 16, - y: 16, - width: 128, - height: 128 - }); + const captured = await win.webContents.capturePage({ + x: 16, + y: 16, + width: 128, + height: 128 + }); - // Step 17: Resize the target image to match the captured image size, in case dpr != 1 - const target = targetImage.resize({ ...captured.getSize() }); + // Step 17: Resize the target image to match the captured image size, in case dpr != 1 + const target = targetImage.resize({ ...captured.getSize() }); - // Step 18: nativeImage have error comparing pixel data when color space is different, - // send to browser for comparison using canvas. - win.webContents.send('verify-captured-image', { - captured: captured.toDataURL(), - target: target.toDataURL() - }); - }, 300); - } - }); + // Step 18: nativeImage have error comparing pixel data when color space is different, + // send to browser for comparison using canvas. + win.webContents.send('verify-captured-image', { + captured: captured.toDataURL(), + target: target.toDataURL() + }); + }, 300); + } + }); - ipcMain.on('verify-captured-image-done', (event: any, result: { difference: number, total: number }) => { + ipcMain.on('verify-captured-image-done', (event: any, result: { difference: number, total: number }) => { // Step 22: Verify the result from renderer process - try { + try { // macOS may have tiny color difference after the whole rendering process, // and the color may change slightly when resizing at device pixel ratio != 1. // Limit error should not be different more than 1% of the whole image. - const ratio = result.difference / result.total; - console.log('image difference: ', ratio); - expect(ratio).to.be.lessThan(0.01); - done(); - } catch (e) { - done(e); - } - }); + const ratio = result.difference / result.total; + expect(ratio).to.be.lessThan(0.01); + resolve(); + } catch (e) { + reject(e); + } + }); - ipcMain.on('webgpu-unavailable', () => { - console.error('WebGPU is not available, skipping.'); - done(); - }); + ipcMain.on('webgpu-unavailable', () => { + console.error('WebGPU is not available, skipping.'); + resolve(); + }); - win.loadFile(htmlPath); - osr.loadFile(osrPath); - }; + win.loadFile(htmlPath); + osr.loadFile(osrPath); + }; - app.whenReady().then(() => { - createWindow(); + app.whenReady().then(() => { + createWindow(); + }); }); - }).timeout(debugSpec ? 100000 : 10000); + }); - const runSharedTextureManagedTest = (done: Mocha.Done, iframe: boolean) => { + const runSharedTextureManagedTest = (iframe: boolean): Promise => { const preloadPath = path.join(dirPath, 'managed', 'preload.js'); const htmlPath = path.join(dirPath, 'managed', iframe ? 'frame.html' : 'index.html'); - const createWindow = () => { - const win = new BrowserWindow({ - width: 256, - height: 256, - show: debugSpec, - webPreferences: { - preload: preloadPath, - nodeIntegrationInSubFrames: iframe - } - }); + return new Promise((resolve, reject) => { + const createWindow = () => { + const win = new BrowserWindow({ + width: 256, + height: 256, + show: debugSpec, + webPreferences: { + preload: preloadPath, + nodeIntegrationInSubFrames: iframe + } + }); - const osr = new BrowserWindow({ - width: 128, - height: 128, - show: debugSpec, - webPreferences: { - offscreen: { - useSharedTexture: true + const osr = new BrowserWindow({ + width: 128, + height: 128, + show: debugSpec, + webPreferences: { + offscreen: { + useSharedTexture: true + } } - } - }); + }); - osr.webContents.setFrameRate(1); - osr.webContents.on('paint', async (event: any) => { - const targetFrame = iframe ? win.webContents.mainFrame.frames[0] : win.webContents.mainFrame; - if (!targetFrame) { - done(new Error('Target frame not found')); - return; - } + osr.webContents.setFrameRate(1); + osr.webContents.on('paint', async (event: any) => { + const targetFrame = iframe ? win.webContents.mainFrame.frames[0] : win.webContents.mainFrame; + if (!targetFrame) { + reject(new Error('Target frame not found')); + return; + } - // Step 1: Input source of shared texture handle. - const texture = event.texture; - - if (!texture) { - console.error('No texture, GPU may be unavailable, skipping.'); - done(); - return; - } - - // Step 2: Import as SharedTextureImported - console.log(texture.textureInfo); - const imported = sharedTexture.importSharedTexture({ - textureInfo: texture.textureInfo, - allReferencesReleased: () => { + // Step 1: Input source of shared texture handle. + const texture = event.texture; + + if (!texture) { + console.error('No texture, GPU may be unavailable, skipping.'); + resolve(); + return; + } + + // Step 2: Import as SharedTextureImported + const imported = sharedTexture.importSharedTexture({ + textureInfo: texture.textureInfo, + allReferencesReleased: () => { // Release the shared texture source once GPU is done. // Will be called when all processes have finished using the shared texture. - texture.release(); + texture.release(); - // Slightly timeout and capture the node screenshot - setTimeout(async () => { + // Slightly timeout and capture the node screenshot + setTimeout(async () => { // Compare the captured image with the target image - const captured = await win.webContents.capturePage({ - x: 16, - y: 16, - width: 128, - height: 128 - }); - - // Resize the target image to match the captured image size, in case dpr != 1 - const target = targetImage.resize({ ...captured.getSize() }); + const captured = await win.webContents.capturePage({ + x: 16, + y: 16, + width: 128, + height: 128 + }); + + // Resize the target image to match the captured image size, in case dpr != 1 + const target = targetImage.resize({ ...captured.getSize() }); + + // nativeImage have error comparing pixel data when color space is different, + // send to browser for comparison using canvas. + targetFrame.send('verify-captured-image', { + captured: captured.toDataURL(), + target: target.toDataURL() + }); + }, 300); + } + }); - // nativeImage have error comparing pixel data when color space is different, - // send to browser for comparison using canvas. - targetFrame.send('verify-captured-image', { - captured: captured.toDataURL(), - target: target.toDataURL() - }); - }, 300); - } - }); + // Step 3: Transfer to another process (win's renderer) + await sharedTexture.sendSharedTexture({ + frame: iframe ? targetFrame : win.webContents.mainFrame, + importedSharedTexture: imported + }); - // Step 3: Transfer to another process (win's renderer) - await sharedTexture.sendSharedTexture({ - frame: iframe ? targetFrame : win.webContents.mainFrame, - importedSharedTexture: imported + // Step 4: Release the imported and wait for signal to release the source + imported.release(); }); - // Step 4: Release the imported and wait for signal to release the source - imported.release(); - }); - - ipcMain.on('verify-captured-image-done', (event: any, result: { difference: number, total: number }) => { + ipcMain.on('verify-captured-image-done', (event: any, result: { difference: number, total: number }) => { // Verify the result from renderer process - try { + try { // macOS may have tiny color difference after the whole rendering process, // and the color may change slightly when resizing at device pixel ratio != 1. // Limit error should not be different more than 1% of the whole image. - const ratio = result.difference / result.total; - console.log('image difference: ', ratio); - expect(ratio).to.be.lessThan(0.01); - done(); - } catch (e) { - setTimeout(() => done(e), 1000000); - } - }); + const ratio = result.difference / result.total; + expect(ratio).to.be.lessThan(0.01); + resolve(); + } catch (e) { + setTimeout(() => reject(e), 1000000); + } + }); - ipcMain.on('webgpu-unavailable', () => { - console.error('WebGPU is not available, skipping.'); - done(); - }); + ipcMain.on('webgpu-unavailable', () => { + console.error('WebGPU is not available, skipping.'); + resolve(); + }); - win.loadFile(htmlPath); - osr.loadFile(osrPath); - }; + win.loadFile(htmlPath); + osr.loadFile(osrPath); + }; - app.whenReady().then(() => { - createWindow(); + app.whenReady().then(() => { + createWindow(); + }); }); }; - it('successfully imported and rendered with managed api, without iframe', (done) => { - runSharedTextureManagedTest(done, false); + it('successfully imported and rendered with managed api, without iframe', async () => { + return runSharedTextureManagedTest(false); }).timeout(debugSpec ? 100000 : 10000); - it('successfully imported and rendered with managed api, with iframe', (done) => { - runSharedTextureManagedTest(done, true); + it('successfully imported and rendered with managed api, with iframe', async () => { + return runSharedTextureManagedTest(true); }).timeout(debugSpec ? 100000 : 10000); }); }); diff --git a/spec/api-web-contents-spec.ts b/spec/api-web-contents-spec.ts index dc23cb44b7bbe..695b3d357541c 100644 --- a/spec/api-web-contents-spec.ts +++ b/spec/api-web-contents-spec.ts @@ -1067,13 +1067,15 @@ describe('webContents module', () => { assert(devToolsWebContents !== null); const windowFocused = once(window, 'focus'); + const devToolsBlurred = once(devToolsWebContents, 'blur'); window.focus(); - await windowFocused; + await Promise.all([windowFocused, devToolsBlurred]); expect(devToolsWebContents.isFocused()).to.be.false(); const devToolsWebContentsFocused = once(devToolsWebContents, 'focus'); + const windowBlurred = once(window, 'blur'); window.webContents.inspectElement(100, 100); - await devToolsWebContentsFocused; + await Promise.all([devToolsWebContentsFocused, windowBlurred]); expect(devToolsWebContents.isFocused()).to.be.true(); expect(window.isFocused()).to.be.false(); diff --git a/spec/chromium-spec.ts b/spec/chromium-spec.ts index b962dc363c72e..93b3d03b5983b 100644 --- a/spec/chromium-spec.ts +++ b/spec/chromium-spec.ts @@ -2878,16 +2878,26 @@ describe('chromium features', () => { }); }); - // This is intentionally disabled on arm macs: https://chromium-review.googlesource.com/c/chromium/src/+/4143761 - ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')('webgl', () => { - it('can be gotten as context in canvas', async () => { - const w = new BrowserWindow({ show: false }); + describe('webgl', () => { + it('can be gotten as context in canvas', async function () { + const w = new BrowserWindow({ + show: false + }); w.loadURL('about:blank'); await w.loadURL(`file://${fixturesPath}/pages/blank.html`); - const canWebglContextBeCreated = await w.webContents.executeJavaScript(` - document.createElement('canvas').getContext('webgl') != null; - `); - expect(canWebglContextBeCreated).to.be.true(); + const isFallbackAdapter = await w.webContents.executeJavaScript(` + navigator.gpu?.requestAdapter().then(adapter => (adapter?.info?.isFallbackAdapter || !adapter?.info), true)` + ); + + if (isFallbackAdapter) { + console.log('Skipping webgl test on fallback adapter'); + this.skip(); + } else { + const canWebglContextBeCreated = await w.webContents.executeJavaScript(` + document.createElement('canvas').getContext('webgl') != null; + `); + expect(canWebglContextBeCreated).to.be.true(); + } }); }); diff --git a/spec/package.json b/spec/package.json index 6538ac6178792..545e704362c8c 100644 --- a/spec/package.json +++ b/spec/package.json @@ -27,12 +27,13 @@ "@types/uuid": "^3.4.6", "@types/w3c-web-serial": "^1.0.7", "@types/ws": "^7.2.0", + "abstract-socket": "github:deepak1556/node-abstractsocket#928cc591decd12aff7dad96449da8afc29832c19", "basic-auth": "^2.0.1", "busboy": "^1.6.0", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", "coffeescript": "^2.4.1", - "dbus-ts": "^0.0.7", + "dbus-native": "github:nornagon/dbus-native#master", "dirty-chai": "^2.0.1", "express": "^4.20.0", "graceful-fs": "^4.1.15", diff --git a/spec/spellchecker-spec.ts b/spec/spellchecker-spec.ts index 25341e4bddc9b..3a36f3e9c81bf 100644 --- a/spec/spellchecker-spec.ts +++ b/spec/spellchecker-spec.ts @@ -88,8 +88,8 @@ ifdescribe(features.isBuiltinSpellCheckerEnabled())('spellchecker', function () await closeWindow(w); }); - // Context menu test can not run on Windows. - const shouldRun = process.platform !== 'win32'; + // Context menu test can not run on Windows or Linux (https://github.com/electron/electron/pull/48657 broke linux). + const shouldRun = process.platform !== 'win32' && process.platform !== 'linux'; ifit(shouldRun)('should detect correctly spelled words as correct', async () => { await w.webContents.executeJavaScript('document.body.querySelector("textarea").value = "typography"'); diff --git a/yarn.lock b/yarn.lock index 5dc7614808e54..c0122e77837b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -412,13 +412,6 @@ __metadata: languageName: node linkType: hard -"@dbus-types/dbus@npm:^0.0.4": - version: 0.0.4 - resolution: "@dbus-types/dbus@npm:0.0.4" - checksum: 10c0/7d3e2f6f5da72d42ad29e8bbc41c296846795d5685f672e85e71bf5e4c3f6b3b0dc17459cad62683b93b7fd48395c2e19e30a79d6c45e3b7b53f833e21caa29f - languageName: node - linkType: hard - "@discoveryjs/json-ext@npm:^0.6.1": version: 0.6.3 resolution: "@discoveryjs/json-ext@npm:0.6.3" @@ -801,20 +794,6 @@ __metadata: languageName: node linkType: hard -"@homebridge/long@npm:^5.2.1": - version: 5.2.1 - resolution: "@homebridge/long@npm:5.2.1" - checksum: 10c0/b8a5aa8a515152d6ad6f19d9ade41c56fadf01b14d717c62ba208a838fd69716cfcc44a8448b0ebf5a8a106f37ef517fc0a65c46da022ab8bc22dc027162d426 - languageName: node - linkType: hard - -"@homebridge/put@npm:^0.0.8": - version: 0.0.8 - resolution: "@homebridge/put@npm:0.0.8" - checksum: 10c0/ac61ce4f2df9fee9e2c6a7b1e959468129f8f307a5a9320710e8f5da2e5b5a467d02c07937777084676d61aa40b221ca399e51f02182ba8bc8a02031bfb92d7a - languageName: node - linkType: hard - "@humanwhocodes/config-array@npm:^0.13.0": version: 0.13.0 resolution: "@humanwhocodes/config-array@npm:0.13.0" @@ -1031,6 +1010,13 @@ __metadata: languageName: node linkType: hard +"@nornagon/put@npm:0.0.8": + version: 0.0.8 + resolution: "@nornagon/put@npm:0.0.8" + checksum: 10c0/855f9cee72d76570c76cdded2c3727ae7c3caa08208066ba77561675a43173bc62c8ee6dce6f4b64d65c5b465d20b4f9d986975ef3f2a6413e6f6c97bb5e1627 + languageName: node + linkType: hard + "@npmcli/agent@npm:^3.0.0": version: 3.0.0 resolution: "@npmcli/agent@npm:3.0.0" @@ -2592,6 +2578,16 @@ __metadata: languageName: node linkType: hard +"abstract-socket@github:deepak1556/node-abstractsocket#928cc591decd12aff7dad96449da8afc29832c19": + version: 2.1.1 + resolution: "abstract-socket@https://github.com/deepak1556/node-abstractsocket.git#commit=928cc591decd12aff7dad96449da8afc29832c19" + dependencies: + bindings: "npm:^1.2.1" + node-addon-api: "npm:8.0.0" + checksum: 10c0/b2117ef92456f0c8fedbac9cf9a6cdec2b957bd320943e01eeff396ebfc2ca50eb2a67cef4461ce5326e4b97d6d2fd16777037131518a1f0b7aa7a5b6ef4f207 + languageName: node + linkType: hard + "accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" @@ -3204,6 +3200,15 @@ __metadata: languageName: node linkType: hard +"bindings@npm:^1.2.1": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: "npm:1.0.0" + checksum: 10c0/3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba + languageName: node + linkType: hard + "bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -4213,15 +4218,24 @@ __metadata: languageName: node linkType: hard -"dbus-ts@npm:^0.0.7": - version: 0.0.7 - resolution: "dbus-ts@npm:0.0.7" - dependencies: - "@dbus-types/dbus": "npm:^0.0.4" - "@homebridge/long": "npm:^5.2.1" - "@homebridge/put": "npm:^0.0.8" - xml2js: "npm:^0.4.23" - checksum: 10c0/195b65ba2e87f584c83cd7805d5ad8d83890b1f9b1a2ba779393b43c64a1a66fd4e9e87944bf9b0f49e7e22091296b213490120111fc014e68167a6e1e83b3fe +"dbus-native@github:nornagon/dbus-native#master": + version: 0.4.0 + resolution: "dbus-native@https://github.com/nornagon/dbus-native.git#commit=b90ed62d0b5cb93909173c3e0551d9bff0602a90" + dependencies: + "@nornagon/put": "npm:0.0.8" + abstract-socket: "npm:^2.0.0" + event-stream: "npm:^4.0.0" + hexy: "npm:^0.2.10" + long: "npm:^4.0.0" + optimist: "npm:^0.6.1" + safe-buffer: "npm:^5.1.1" + xml2js: "npm:^0.4.17" + dependenciesMeta: + abstract-socket: + optional: true + bin: + dbus2js: ./bin/dbus2js.js + checksum: 10c0/4467ae4f9f1e9d5f7fc4d12f227a7cf5e45f77c89743646ccef7a1f89e5f37fbe671b47488cf78d6557fd6d4f2c3719f5c5a1de70078843e6b0f317d12aa55b1 languageName: node linkType: hard @@ -4570,6 +4584,13 @@ __metadata: languageName: node linkType: hard +"duplexer@npm:^0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 10c0/c57bcd4bdf7e623abab2df43a7b5b23d18152154529d166c1e0da6bee341d84c432d157d7e97b32fecb1bf3a8b8857dd85ed81a915789f550637ed25b8e64fc2 + languageName: node + linkType: hard + "duplexer@npm:~0.1.1": version: 0.1.1 resolution: "duplexer@npm:0.1.1" @@ -4634,12 +4655,13 @@ __metadata: "@types/uuid": "npm:^3.4.6" "@types/w3c-web-serial": "npm:^1.0.7" "@types/ws": "npm:^7.2.0" + abstract-socket: "github:deepak1556/node-abstractsocket#928cc591decd12aff7dad96449da8afc29832c19" basic-auth: "npm:^2.0.1" busboy: "npm:^1.6.0" chai: "npm:^4.2.0" chai-as-promised: "npm:^7.1.1" coffeescript: "npm:^2.4.1" - dbus-ts: "npm:^0.0.7" + dbus-native: "github:nornagon/dbus-native#master" dirty-chai: "npm:^2.0.1" express: "npm:^4.20.0" graceful-fs: "npm:^4.1.15" @@ -4727,6 +4749,8 @@ __metadata: webpack-cli: "npm:^6.0.1" wrapper-webpack-plugin: "npm:^2.2.0" dependenciesMeta: + abstract-socket: + built: true dugite: built: true languageName: unknown @@ -5722,6 +5746,21 @@ __metadata: languageName: node linkType: hard +"event-stream@npm:^4.0.0": + version: 4.0.1 + resolution: "event-stream@npm:4.0.1" + dependencies: + duplexer: "npm:^0.1.1" + from: "npm:^0.1.7" + map-stream: "npm:0.0.7" + pause-stream: "npm:^0.0.11" + split: "npm:^1.0.1" + stream-combiner: "npm:^0.2.2" + through: "npm:^2.3.8" + checksum: 10c0/cedb3f7ffda81f1524b66c284b4a41bb8407246bd7fe461b89a07807d28753460596e430f1346c135a64c5ba88d2a5d0711d072379b39c2266756125877aebd5 + languageName: node + linkType: hard + "eventemitter3@npm:^5.0.1": version: 5.0.1 resolution: "eventemitter3@npm:5.0.1" @@ -5960,6 +5999,13 @@ __metadata: languageName: node linkType: hard +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: 10c0/3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 + languageName: node + linkType: hard + "filename-reserved-regex@npm:^2.0.0": version: 2.0.0 resolution: "filename-reserved-regex@npm:2.0.0" @@ -6163,6 +6209,13 @@ __metadata: languageName: node linkType: hard +"from@npm:^0.1.7": + version: 0.1.7 + resolution: "from@npm:0.1.7" + checksum: 10c0/3aab5aea8fe8e1f12a5dee7f390d46a93431ce691b6222dcd5701c5d34378e51ca59b44967da1105a0f90fcdf5d7629d963d51e7ccd79827d19693bdcfb688d4 + languageName: node + linkType: hard + "fs-extra@npm:^10.0.0, fs-extra@npm:^10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" @@ -6915,6 +6968,15 @@ __metadata: languageName: node linkType: hard +"hexy@npm:^0.2.10": + version: 0.2.11 + resolution: "hexy@npm:0.2.11" + bin: + hexy: ./bin/hexy_cmd.js + checksum: 10c0/469fb0f9e4fb491cb60660bfecd6ddfc5be3cc4a9edd938eabcde449b6fc5215a1ca3a9e7285dd352fe7f0e2b94a259dc141d8a9cee4097989c60e24e0f8e590 + languageName: node + linkType: hard + "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -8410,6 +8472,13 @@ __metadata: languageName: node linkType: hard +"long@npm:^4.0.0": + version: 4.0.0 + resolution: "long@npm:4.0.0" + checksum: 10c0/50a6417d15b06104dbe4e3d4a667c39b137f130a9108ea8752b352a4cfae047531a3ac351c181792f3f8768fe17cca6b0f406674a541a86fb638aaac560d83ed + languageName: node + linkType: hard + "longest-streak@npm:^3.0.0": version: 3.0.0 resolution: "longest-streak@npm:3.0.0" @@ -8532,6 +8601,13 @@ __metadata: languageName: node linkType: hard +"map-stream@npm:0.0.7": + version: 0.0.7 + resolution: "map-stream@npm:0.0.7" + checksum: 10c0/77da244656dad5013bd147b0eef6f0343a212f14761332b97364fe348d4d70f0b8a0903457d6fc88772ec7c3d4d048b24f8db3aa5c0f77a8ce8bf2391473b8ec + languageName: node + linkType: hard + "markdown-extensions@npm:^2.0.0": version: 2.0.0 resolution: "markdown-extensions@npm:2.0.0" @@ -9354,14 +9430,14 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.0.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:~1.2.0": - version: 1.2.6 - resolution: "minimist@npm:1.2.6" - checksum: 10c0/d0b566204044481c4401abbd24cc75814e753b37268e7fe7ccc78612bf3e37bf1e45a6c43fb0b119445ea1c413c000bde013f320b7211974f2f49bcbec1d0dbf +"minimist@npm:0.2.4": + version: 0.2.4 + resolution: "minimist@npm:0.2.4" + checksum: 10c0/6a8e8f4afa4a60d578b3eddabef1e3a40f3aa308290b17a55e060bbacfba7a575fd77f310969dd6b514c24251438a43039aafa0d6c9a3471ac2b5b45027d3369 languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.8": +"minimist@npm:^1.0.0, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8, minimist@npm:~1.2.0": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 @@ -9656,6 +9732,15 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:8.0.0": + version: 8.0.0 + resolution: "node-addon-api@npm:8.0.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/20eb231362cc07c62d9839164473744d985be5d82685214f3750d990d9f61ef366e0ba112a766c925d640ed29b2a500b83568e895dc2444dcd5db01e615aac2b + languageName: node + linkType: hard + "node-fetch@npm:^2.6.1": version: 2.6.8 resolution: "node-fetch@npm:2.6.8" @@ -10032,6 +10117,16 @@ __metadata: languageName: node linkType: hard +"optimist@npm:^0.6.1": + version: 0.6.1 + resolution: "optimist@npm:0.6.1" + dependencies: + minimist: "npm:~0.0.1" + wordwrap: "npm:~0.0.2" + checksum: 10c0/8cb417328121e732dbfb4d94d53bb39b1406446b55323ed4ce787decc52394927e051ba879eb3ffa3171fe22a35ce13b460114b60effcead77443ee87c2f9b0f + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -10475,6 +10570,15 @@ __metadata: languageName: node linkType: hard +"pause-stream@npm:^0.0.11": + version: 0.0.11 + resolution: "pause-stream@npm:0.0.11" + dependencies: + through: "npm:~2.3" + checksum: 10c0/86f12c64cdaaa8e45ebaca4e39a478e1442db8b4beabc280b545bfaf79c0e2f33c51efb554aace5c069cc441c7b924ba484837b345eaa4ba6fc940d62f826802 + languageName: node + linkType: hard + "pdfjs-dist@npm:4.2.67": version: 4.2.67 resolution: "pdfjs-dist@npm:4.2.67" @@ -12068,7 +12172,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 @@ -12744,6 +12848,16 @@ __metadata: languageName: node linkType: hard +"stream-combiner@npm:^0.2.2": + version: 0.2.2 + resolution: "stream-combiner@npm:0.2.2" + dependencies: + duplexer: "npm:~0.1.1" + through: "npm:~2.3.4" + checksum: 10c0/b5d2782fbfa9251c88e01af1b1f54bc183673a776989dce2842b345be7fc3ce7eb2eade363b3c198ba0e5153a20a96e0014d0d0e884153f885d7ee919f22b639 + languageName: node + linkType: hard + "stream-json@npm:^1.9.1": version: 1.9.1 resolution: "stream-json@npm:1.9.1" @@ -13250,7 +13364,7 @@ __metadata: languageName: node linkType: hard -"through@npm:2, through@npm:^2.3.6": +"through@npm:2, through@npm:^2.3.6, through@npm:^2.3.8, through@npm:~2.3, through@npm:~2.3.4": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc @@ -14440,6 +14554,13 @@ __metadata: languageName: node linkType: hard +"wordwrap@npm:~0.0.2": + version: 0.0.3 + resolution: "wordwrap@npm:0.0.3" + checksum: 10c0/b3b212f8b2167091f59bc60929ada2166eb157abb6c8c82e2a705fe5aa5876440c3966ab39eb6c7bcb2ff0ac0c8d9fba726a9c2057b83bd65cdc1858f9d816ce + languageName: node + linkType: hard + "workerpool@npm:^6.5.1": version: 6.5.1 resolution: "workerpool@npm:6.5.1" @@ -14539,16 +14660,6 @@ __metadata: languageName: node linkType: hard -"xml2js@npm:^0.4.23": - version: 0.4.23 - resolution: "xml2js@npm:0.4.23" - dependencies: - sax: "npm:>=0.6.0" - xmlbuilder: "npm:~11.0.0" - checksum: 10c0/a3f41c9afc46d5bd0bea4070e5108777b605fd5ce2ebb978a68fd4c75513978ad5939f8135664ffea6f1adb342f391b1ba1584ed7955123b036e9ab8a1d26566 - languageName: node - linkType: hard - "xml@npm:^1.0.0": version: 1.0.1 resolution: "xml@npm:1.0.1"