chore: bump chromium to 144.0.7527.0 (main) (#48959)

* chore: bump chromium in DEPS to 144.0.7527.0

* 7106405: [video pip] Fix gesture handling issues

https://chromium-review.googlesource.com/c/chromium/src/+/7106405

* 7130938: Reland "Remove some dependencies from the custom_handlers component"

https://chromium-review.googlesource.com/c/chromium/src/+/7130938

* 7139361: Rename PluginService's GetPlugins methods

https://chromium-review.googlesource.com/c/chromium/src/+/7139361

* chore: fixup patch indices

* test: fix macos webgl test | 7128438: Reland "Flip SwiftShader deprecation to launched." | https://chromium-review.googlesource.com/c/chromium/src/+/7128438

* test: update webgl test to skip on fallback adapters

* Fixup spec runner to properly fail on linux when tests fail

* test: fixup dbus tests

* test: convert shared-texture-spec from old done callback to async

Fixes Error: done() called multiple times in test <sharedTexture module import shared texture produced by osr successfully imported and rendered with subtle api> of file /__w/electron/electron/src/electron/spec/api-shared-texture-spec.ts

* test: fixup shared texture spec

* Revert "test: fixup dbus tests"

This reverts commit 3e2e720003.

* test: fixup dbus tests

* test: disable context menu spellcheck tests on linux

https://github.com/electron/electron/pull/48657 broke those tests

* disable sharedTexture tests on platforms other than macOS arm64

They were not working on other platforms previously but now they error out.

Also removed extraneous debugging.

* fix: use github.sha for yarn cache key to avoid hashFiles() composite action bug

* Use --immutable-cache to allow native module builds

* fix: wait for devtools blur event in focus test to avoid race condition

* fix: wait for devtools blur event in focus test to avoid race condition

* fix allow native module builds in spec workspace

* test:rebuild native modules

* Revert "fix allow native module builds in spec workspace"

This reverts commit ffda3be98c.

* Revert "Use --immutable-cache to allow native module builds"

This reverts commit 2e6eea4348.

* Revert "fix: use github.sha for yarn cache key to avoid hashFiles() composite action bug"

This reverts commit 33560ba0de.

---------

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: Keeley Hammond <khammond@slack-corp.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: Alice Zhao <alicelovescake@anthropic.com>
This commit is contained in:
electron-roller[bot]
2025-11-24 12:30:57 -05:00
committed by GitHub
parent 05233b4962
commit 66367e9db4
31 changed files with 495 additions and 370 deletions

View File

@@ -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

2
DEPS
View File

@@ -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':

View File

@@ -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
}

View File

@@ -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) {

View File

@@ -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",

View File

@@ -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())) {

View File

@@ -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() {

View File

@@ -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<network::mojom::DurableMessageCollector> 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<DurableMessageCollector> 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<mojom::MatchedNetworkConditionsPtr>) override {}

View File

@@ -405,10 +405,10 @@ index 33e2ff42e4d9da442d522b959a4a21c2f7032b6b..a0d81212327fc17e1f4704e78803c1d7
std::vector<std::string> 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<SchemeWithHandler> predefined_handler_schemes;
@@ -673,6 +676,15 @@ const std::vector<std::string>& GetEmptyDocumentSchemes() {
@@ -668,6 +671,15 @@ const std::vector<std::string>& GetEmptyDocumentSchemes() {
return GetSchemeRegistry().empty_document_schemes;
}

View File

@@ -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 @@

View File

@@ -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> VideoOverlayWindowViews::Create(
@@ -443,11 +443,13 @@ std::unique_ptr<VideoOverlayWindowViews> VideoOverlayWindowViews::Create(
#endif // BUILDFLAG(IS_WIN)

View File

@@ -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(
}
}

View File

@@ -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",

View File

@@ -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<base::OnceClosure> dismount_closures_;
#endif // BUILDFLAG(IS_DIRECTORY_TRANSFER_REQUIRED)
@@ -190,7 +190,7 @@ index 3795ce4def719c36e1dace911be53b0103aeafc5..90cf1a70c068771ac98b2d5a283cba5e
std::unique_ptr<HostResolver> internal_host_resolver_;
std::set<std::unique_ptr<HostResolver>, 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<URLLoaderFactory> 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 {

View File

@@ -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> VideoOverlayWindowViews::Create(
@@ -401,7 +407,7 @@ std::unique_ptr<VideoOverlayWindowViews> 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<views::Label>(
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<ToggleMicrophoneButton>(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) {

View File

@@ -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);

View File

@@ -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 @@
]
}
],

View File

@@ -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() {

View File

@@ -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;

View File

@@ -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> 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> DesktopCapturer::CreateRawScreenCapturer(
@@ -38,11 +38,10 @@ std::unique_ptr<DesktopCapturer> 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> DesktopCapturer::CreateRawWindowCapturer(
@@ -38,11 +38,10 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer(
#endif // defined(WEBRTC_USE_PIPEWIRE)
#if defined(WEBRTC_USE_X11)

View File

@@ -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 () {

View File

@@ -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)));
}

2
spec/ambient.d.ts vendored
View File

@@ -1,2 +1,4 @@
declare let standardScheme: string;
declare let serviceWorkerScheme: string;
declare module 'dbus-native';

View File

@@ -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));
});

View File

@@ -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));

View File

@@ -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,172 +49,67 @@ 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
}
});
const osr = new BrowserWindow({
width: 128,
height: 128,
show: debugSpec,
webPreferences: {
offscreen: {
useSharedTexture: true
return new Promise<void>((resolve, reject) => {
const createWindow = () => {
const win = new BrowserWindow({
width: 256,
height: 256,
show: debugSpec,
webPreferences: {
preload: preloadPath
}
}
});
});
osr.webContents.setFrameRate(1);
osr.webContents.on('paint', (event: any) => {
const osr = new BrowserWindow({
width: 128,
height: 128,
show: debugSpec,
webPreferences: {
offscreen: {
useSharedTexture: true
}
}
});
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();
});
// 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
texture.release();
});
// 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);
}
});
ipcMain.on('verify-captured-image-done', (event: any, result: { difference: number, total: number }) => {
// Step 22: Verify the result from renderer process
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);
}
});
ipcMain.on('webgpu-unavailable', () => {
console.error('WebGPU is not available, skipping.');
done();
});
win.loadFile(htmlPath);
osr.loadFile(osrPath);
};
app.whenReady().then(() => {
createWindow();
});
}).timeout(debugSpec ? 100000 : 10000);
const runSharedTextureManagedTest = (done: Mocha.Done, iframe: boolean) => {
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
}
});
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;
}
// 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: () => {
// Release the shared texture source once GPU is done.
// Will be called when all processes have finished using the shared texture.
texture.release();
// Slightly timeout and capture the node screenshot
// Step 15: Slightly timeout and capture the node screenshot
setTimeout(async () => {
// Compare the captured image with the target image
// Step 16: Compare the captured image with the target image
const captured = await win.webContents.capturePage({
x: 16,
y: 16,
@@ -218,12 +117,12 @@ describe('sharedTexture module', () => {
height: 128
});
// Resize the target image to match the captured image size, in case dpr != 1
// Step 17: 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,
// Step 18: nativeImage have error comparing pixel data when color space is different,
// send to browser for comparison using canvas.
targetFrame.send('verify-captured-image', {
win.webContents.send('verify-captured-image', {
captured: captured.toDataURL(),
target: target.toDataURL()
});
@@ -231,51 +130,155 @@ describe('sharedTexture module', () => {
}
});
// 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();
});
ipcMain.on('verify-captured-image-done', (event: any, result: { difference: number, total: number }) => {
// Verify the result from renderer process
try {
ipcMain.on('verify-captured-image-done', (event: any, result: { difference: number, total: number }) => {
// Step 22: Verify the result from renderer process
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) {
reject(e);
}
});
ipcMain.on('webgpu-unavailable', () => {
console.error('WebGPU is not available, skipping.');
resolve();
});
win.loadFile(htmlPath);
osr.loadFile(osrPath);
};
app.whenReady().then(() => {
createWindow();
});
});
});
ipcMain.on('webgpu-unavailable', () => {
console.error('WebGPU is not available, skipping.');
done();
const runSharedTextureManagedTest = (iframe: boolean): Promise<void> => {
const preloadPath = path.join(dirPath, 'managed', 'preload.js');
const htmlPath = path.join(dirPath, 'managed', iframe ? 'frame.html' : 'index.html');
return new Promise<void>((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
}
}
});
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.');
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();
// 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() });
// 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 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 }) => {
// Verify the result from renderer process
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;
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.');
resolve();
});
win.loadFile(htmlPath);
osr.loadFile(osrPath);
};
app.whenReady().then(() => {
createWindow();
});
win.loadFile(htmlPath);
osr.loadFile(osrPath);
};
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);
});
});

View File

@@ -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();

View File

@@ -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();
}
});
});

View File

@@ -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",

View File

@@ -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"');

205
yarn.lock
View File

@@ -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"
"dbus-native@github:nornagon/dbus-native#master":
version: 0.4.0
resolution: "dbus-native@https://github.com/nornagon/dbus-native.git#commit=b90ed62d0b5cb93909173c3e0551d9bff0602a90"
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
"@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"