From b4dd3a37f76196965aac8cc0e280d6532795bc5d Mon Sep 17 00:00:00 2001 From: Claudio DeSouza Date: Thu, 3 Jul 2025 15:02:50 +0100 Subject: [PATCH] [cr140] `gin::Wrappable` deprecated This class is now called `gin::DeprecatedWrappable`. There seems to be some work to introduce a new class, but for now it is reverted. Chromium changes: https://chromium.googlesource.com/chromium/src/+/3c15226886207c98dffc33a20b6a3dfd7df7a21c commit 3c15226886207c98dffc33a20b6a3dfd7df7a21c Author: Andreas Haas Date: Wed Jul 2 05:57:48 2025 -0700 [gin] Rename gin::Wrappable to gin::DeprecatedWrappable This is the first CL of a sequence of CLs to refactor gin::Wrappable such that it is based on cppgc. In a follow-up CL we will re-introduce `gin::Wrappable` again, and then port all uses from `gin::DeprecatedWrappable` to `gin::Wrappable`. BYPASS_LARGE_CHANGE_WARNING Bug: 345640553 Change-Id: Iad028a1cec93aa8ade3b35c8099f8de5081f88fe Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6513641 Commit-Queue: Andreas Haas Reviewed-by: Michael Lippautz Owners-Override: Rick Byers Reviewed-by: Rick Byers Cr-Commit-Position: refs/heads/main@{#1481539} Chromium changes: https://chromium.googlesource.com/chromium/src/+/f99163fe2d3428680834db3f141a6d83590561f0 commit f99163fe2d3428680834db3f141a6d83590561f0 Author: Nina Satragno Date: Wed Jul 2 08:36:22 2025 -0700 Revert "[gin] Introduce gin::Wrappable based on cppgc" This reverts commit dfbe3b4a57ddbfbfc74ab261b51db2ed87f754c2. Reason for revert: WrappableTest.WrapAndUnwrap failing on Linux UBSan tests https://ci.chromium.org/ui/p/chromium/builders/ci/Linux%20UBSan%20Tests/7971/overview Bug: 345640553 Original change's description: > [gin] Introduce gin::Wrappable based on cppgc > > This CL implements the new `gin::Wrappable` based on cppgc, and ports > the tests in `wrappable_unittest` from `gin::DeprecatedWrappable` to > `gin::Wrappable`. > > The new implementation of `gin::Wrappable` has sightly different > semantics than the old one. In the old one it was possible to call > `Converter::FromV8()` with any JSObject, and the > JSObject would either get unwrapped if it wrapped an object of type > `WrappableSubClass`, or it would return nullptr. The new implementation > would either return nullptr or crash in a DCHECK if the JSObject wrapped > an object which is not of type `WrappableSubClass`. > > Bug: 345640553 > Change-Id: Ia32e2d82f0383afb56382e9fe78fd94677b00fe8 > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6519611 > Reviewed-by: Michael Lippautz > Commit-Queue: Andreas Haas > Cr-Commit-Position: refs/heads/main@{#1481565} Bug: 345640553 No-Presubmit: true No-Tree-Checks: true No-Try: true Change-Id: I6499b57f278ce600d03e2d3bbeaee1df04ba3512 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6701047 Commit-Queue: Rubber Stamper Auto-Submit: Nina Satragno Bot-Commit: Rubber Stamper Owners-Override: Nina Satragno Cr-Commit-Position: refs/heads/main@{#1481635} --- .../brave_wallet/renderer/js_cardano_provider.cc | 13 ++++++++----- .../brave_wallet/renderer/js_cardano_provider.h | 7 ++++--- .../brave_wallet/renderer/js_cardano_wallet_api.cc | 8 +++++--- .../brave_wallet/renderer/js_cardano_wallet_api.h | 7 ++++--- .../brave_wallet/renderer/js_ethereum_provider.cc | 14 ++++++++------ .../brave_wallet/renderer/js_ethereum_provider.h | 13 +++++++------ .../brave_wallet/renderer/js_solana_provider.cc | 8 +++++--- .../brave_wallet/renderer/js_solana_provider.h | 9 +++++---- components/skus/renderer/skus_js_handler.cc | 6 ++++-- components/skus/renderer/skus_js_handler.h | 4 ++-- .../speedreader/renderer/speedreader_js_handler.cc | 6 ++++-- .../speedreader/renderer/speedreader_js_handler.h | 5 +++-- 12 files changed, 59 insertions(+), 41 deletions(-) diff --git a/components/brave_wallet/renderer/js_cardano_provider.cc b/components/brave_wallet/renderer/js_cardano_provider.cc index 80840383f53..6b1d639db8c 100644 --- a/components/brave_wallet/renderer/js_cardano_provider.cc +++ b/components/brave_wallet/renderer/js_cardano_provider.cc @@ -49,10 +49,11 @@ std::string JSCardanoProvider::GetApiVersion() { return "1"; } -// gin::Wrappable +// gin::DeprecatedWrappable gin::ObjectTemplateBuilder JSCardanoProvider::GetObjectTemplateBuilder( v8::Isolate* isolate) { - return gin::Wrappable::GetObjectTemplateBuilder(isolate) + return gin::DeprecatedWrappable::GetObjectTemplateBuilder( + isolate) .SetMethod("enable", &JSCardanoProvider::Enable) .SetMethod("isEnabled", &JSCardanoProvider::IsEnabled) .SetProperty("supportedExtensions", @@ -67,7 +68,8 @@ const char* JSCardanoProvider::GetTypeName() { } // JSCardanoProvider -gin::WrapperInfo JSCardanoProvider::kWrapperInfo = {gin::kEmbedderNativeGin}; +gin::DeprecatedWrapperInfo JSCardanoProvider::kWrapperInfo = { + gin::kEmbedderNativeGin}; JSCardanoProvider::~JSCardanoProvider() = default; @@ -147,7 +149,8 @@ void JSCardanoProvider::OnEnableResponse( return; } - // Non-function properties are readonly guaranteed by gin::Wrappable + // Non-function properties are readonly guaranteed by + // gin::DeprecatedWrappable for (const std::string& method : {"getNetworkId", "getUsedAddresses", "getUnusedAddresses", "getChangeAddress", "getRewardAddresses", "getUtxos", "getBalance", @@ -260,7 +263,7 @@ void JSCardanoProvider::Install(content::RenderFrame* render_frame) { cardano_brave_provider_object, gin::StringToV8(isolate, kBrave), true); - // Non-function properties are readonly guaranteed by gin::Wrappable + // Non-function properties are readonly guaranteed by gin::DeprecatedWrappable for (const std::string& method : {"enable", "isEnabled"}) { SetOwnPropertyWritable(context, cardano_brave_provider_object, gin::StringToV8(isolate, method), false); diff --git a/components/brave_wallet/renderer/js_cardano_provider.h b/components/brave_wallet/renderer/js_cardano_provider.h index 02a8c5aa8e2..4dd73b38890 100644 --- a/components/brave_wallet/renderer/js_cardano_provider.h +++ b/components/brave_wallet/renderer/js_cardano_provider.h @@ -21,14 +21,15 @@ namespace brave_wallet { // https://cips.cardano.org/cip/CIP-30 // This class implements cardano.brave object. -class JSCardanoProvider final : public gin::Wrappable, - public content::RenderFrameObserver { +class JSCardanoProvider final + : public gin::DeprecatedWrappable, + public content::RenderFrameObserver { public: ~JSCardanoProvider() override; JSCardanoProvider(const JSCardanoProvider&) = delete; JSCardanoProvider& operator=(const JSCardanoProvider&) = delete; - static gin::WrapperInfo kWrapperInfo; + static gin::DeprecatedWrapperInfo kWrapperInfo; // gin::WrappableBase gin::ObjectTemplateBuilder GetObjectTemplateBuilder( diff --git a/components/brave_wallet/renderer/js_cardano_wallet_api.cc b/components/brave_wallet/renderer/js_cardano_wallet_api.cc index 0599b296d2c..3457a6fe9db 100644 --- a/components/brave_wallet/renderer/js_cardano_wallet_api.cc +++ b/components/brave_wallet/renderer/js_cardano_wallet_api.cc @@ -51,10 +51,11 @@ v8::Local ConvertError( // content::RenderFrameObserver void JSCardanoWalletApi::OnDestruct() {} -// gin::Wrappable +// gin::DeprecatedWrappable gin::ObjectTemplateBuilder JSCardanoWalletApi::GetObjectTemplateBuilder( v8::Isolate* isolate) { - return gin::Wrappable::GetObjectTemplateBuilder(isolate) + return gin::DeprecatedWrappable::GetObjectTemplateBuilder( + isolate) .SetMethod("getNetworkId", &JSCardanoWalletApi::GetNetworkId) .SetMethod("getUsedAddresses", &JSCardanoWalletApi::GetUsedAddresses) .SetMethod("getUnusedAddresses", &JSCardanoWalletApi::GetUnusedAddresses) @@ -74,7 +75,8 @@ const char* JSCardanoWalletApi::GetTypeName() { } // JSCardanoProvider -gin::WrapperInfo JSCardanoWalletApi::kWrapperInfo = {gin::kEmbedderNativeGin}; +gin::DeprecatedWrapperInfo JSCardanoWalletApi::kWrapperInfo = { + gin::kEmbedderNativeGin}; JSCardanoWalletApi::~JSCardanoWalletApi() = default; diff --git a/components/brave_wallet/renderer/js_cardano_wallet_api.h b/components/brave_wallet/renderer/js_cardano_wallet_api.h index 9313cd62c6b..e4e6750d6da 100644 --- a/components/brave_wallet/renderer/js_cardano_wallet_api.h +++ b/components/brave_wallet/renderer/js_cardano_wallet_api.h @@ -29,8 +29,9 @@ v8::Local ConvertError( // https://cips.cardano.org/cip/CIP-30 // This class implements API object which is available after // cardano.brave.enable() is called. -class JSCardanoWalletApi final : public gin::Wrappable, - public content::RenderFrameObserver { +class JSCardanoWalletApi final + : public gin::DeprecatedWrappable, + public content::RenderFrameObserver { public: JSCardanoWalletApi(mojo::Remote remote, base::PassKey pass_key, @@ -41,7 +42,7 @@ class JSCardanoWalletApi final : public gin::Wrappable, JSCardanoWalletApi(const JSCardanoWalletApi&) = delete; JSCardanoWalletApi& operator=(const JSCardanoWalletApi&) = delete; - static gin::WrapperInfo kWrapperInfo; + static gin::DeprecatedWrapperInfo kWrapperInfo; // gin::WrappableBase gin::ObjectTemplateBuilder GetObjectTemplateBuilder( diff --git a/components/brave_wallet/renderer/js_ethereum_provider.cc b/components/brave_wallet/renderer/js_ethereum_provider.cc index 6393a0b9894..9778e72e21f 100644 --- a/components/brave_wallet/renderer/js_ethereum_provider.cc +++ b/components/brave_wallet/renderer/js_ethereum_provider.cc @@ -122,7 +122,8 @@ JSEthereumProvider::JSEthereumProvider(content::RenderFrame* render_frame) JSEthereumProvider::~JSEthereumProvider() = default; -gin::WrapperInfo JSEthereumProvider::kWrapperInfo = {gin::kEmbedderNativeGin}; +gin::DeprecatedWrapperInfo JSEthereumProvider::kWrapperInfo = { + gin::kEmbedderNativeGin}; void JSEthereumProvider::WillReleaseScriptContext(v8::Local, int32_t world_id) { @@ -234,7 +235,7 @@ void JSEthereumProvider::Install(bool install_ethereum_provider, } } - // Non-function properties are readonly guaranteed by gin::Wrappable + // Non-function properties are readonly guaranteed by gin::DeprecatedWrappable // send should be writable because of // https://github.com/brave/brave-browser/issues/25078 for (const std::string& method : @@ -266,7 +267,7 @@ bool JSEthereumProvider::GetIsMetaMask() { return true; } -gin::WrapperInfo JSEthereumProvider::MetaMask::kWrapperInfo = { +gin::DeprecatedWrapperInfo JSEthereumProvider::MetaMask::kWrapperInfo = { gin::kEmbedderNativeGin}; JSEthereumProvider::MetaMask::MetaMask(content::RenderFrame* render_frame) @@ -275,8 +276,8 @@ JSEthereumProvider::MetaMask::~MetaMask() = default; gin::ObjectTemplateBuilder JSEthereumProvider::MetaMask::GetObjectTemplateBuilder(v8::Isolate* isolate) { - return gin::Wrappable::GetObjectTemplateBuilder(isolate).SetMethod( - kIsUnlocked, &JSEthereumProvider::MetaMask::IsUnlocked); + return gin::DeprecatedWrappable::GetObjectTemplateBuilder(isolate) + .SetMethod(kIsUnlocked, &JSEthereumProvider::MetaMask::IsUnlocked); } const char* JSEthereumProvider::MetaMask::GetTypeName() { @@ -371,7 +372,8 @@ gin::ObjectTemplateBuilder JSEthereumProvider::GetObjectTemplateBuilder( v8::Isolate* isolate) { // Note: When adding a new method, you would need to update the list in // kEthereumProxyHandlerScript too otherwise the function call would fail. - return gin::Wrappable::GetObjectTemplateBuilder(isolate) + return gin::DeprecatedWrappable::GetObjectTemplateBuilder( + isolate) .SetProperty(kIsBraveWallet, &JSEthereumProvider::GetIsBraveWallet) .SetProperty(kIsMetaMask, &JSEthereumProvider::GetIsMetaMask) .SetProperty(kMetaMask, &JSEthereumProvider::GetMetaMask) diff --git a/components/brave_wallet/renderer/js_ethereum_provider.h b/components/brave_wallet/renderer/js_ethereum_provider.h index 71f500824c5..11026f48bb4 100644 --- a/components/brave_wallet/renderer/js_ethereum_provider.h +++ b/components/brave_wallet/renderer/js_ethereum_provider.h @@ -25,11 +25,12 @@ namespace brave_wallet { -class JSEthereumProvider final : public gin::Wrappable, - public content::RenderFrameObserver, - public mojom::EventsListener { +class JSEthereumProvider final + : public gin::DeprecatedWrappable, + public content::RenderFrameObserver, + public mojom::EventsListener { public: - static gin::WrapperInfo kWrapperInfo; + static gin::DeprecatedWrapperInfo kWrapperInfo; JSEthereumProvider(const JSEthereumProvider&) = delete; JSEthereumProvider& operator=(const JSEthereumProvider&) = delete; @@ -53,9 +54,9 @@ class JSEthereumProvider final : public gin::Wrappable, explicit JSEthereumProvider(content::RenderFrame* render_frame); ~JSEthereumProvider() override; - class MetaMask final : public gin::Wrappable { + class MetaMask final : public gin::DeprecatedWrappable { public: - static gin::WrapperInfo kWrapperInfo; + static gin::DeprecatedWrapperInfo kWrapperInfo; explicit MetaMask(content::RenderFrame*); ~MetaMask() override; diff --git a/components/brave_wallet/renderer/js_solana_provider.cc b/components/brave_wallet/renderer/js_solana_provider.cc index 637a2ad5228..3915112e72f 100644 --- a/components/brave_wallet/renderer/js_solana_provider.cc +++ b/components/brave_wallet/renderer/js_solana_provider.cc @@ -101,7 +101,8 @@ JSSolanaProvider::JSSolanaProvider(content::RenderFrame* render_frame) JSSolanaProvider::~JSSolanaProvider() = default; -gin::WrapperInfo JSSolanaProvider::kWrapperInfo = {gin::kEmbedderNativeGin}; +gin::DeprecatedWrapperInfo JSSolanaProvider::kWrapperInfo = { + gin::kEmbedderNativeGin}; // static void JSSolanaProvider::Install(bool allow_overwrite_window_solana, @@ -167,7 +168,7 @@ void JSSolanaProvider::Install(bool allow_overwrite_window_solana, .Check(); } - // Non-function properties are readonly guaranteed by gin::Wrappable + // Non-function properties are readonly guaranteed by gin::DeprecatedWrappable for (const std::string& method : {"connect", "disconnect", "signAndSendTransaction", "signMessage", "request", "signTransaction", "signAllTransactions", @@ -188,7 +189,8 @@ gin::ObjectTemplateBuilder JSSolanaProvider::GetObjectTemplateBuilder( v8::Isolate* isolate) { // Note: When adding a new method, you would need to update the list in // kSolanaProxyHandlerScript too otherwise the function call would fail. - return gin::Wrappable::GetObjectTemplateBuilder(isolate) + return gin::DeprecatedWrappable::GetObjectTemplateBuilder( + isolate) .SetProperty("isPhantom", &JSSolanaProvider::GetIsPhantom) .SetProperty("isBraveWallet", &JSSolanaProvider::GetIsBraveWallet) .SetProperty("isConnected", &JSSolanaProvider::GetIsConnected) diff --git a/components/brave_wallet/renderer/js_solana_provider.h b/components/brave_wallet/renderer/js_solana_provider.h index d8d9a1b1c12..33f1c6b5d8b 100644 --- a/components/brave_wallet/renderer/js_solana_provider.h +++ b/components/brave_wallet/renderer/js_solana_provider.h @@ -22,15 +22,16 @@ namespace brave_wallet { -class JSSolanaProvider final : public gin::Wrappable, - public content::RenderFrameObserver, - public mojom::SolanaEventsListener { +class JSSolanaProvider final + : public gin::DeprecatedWrappable, + public content::RenderFrameObserver, + public mojom::SolanaEventsListener { public: ~JSSolanaProvider() override; JSSolanaProvider(const JSSolanaProvider&) = delete; JSSolanaProvider& operator=(const JSSolanaProvider&) = delete; - static gin::WrapperInfo kWrapperInfo; + static gin::DeprecatedWrapperInfo kWrapperInfo; static void Install(bool allow_overwrite_window_solana, content::RenderFrame* render_frame); diff --git a/components/skus/renderer/skus_js_handler.cc b/components/skus/renderer/skus_js_handler.cc index 1bdbba527c0..d696d80d2ca 100644 --- a/components/skus/renderer/skus_js_handler.cc +++ b/components/skus/renderer/skus_js_handler.cc @@ -35,7 +35,8 @@ namespace skus { -gin::WrapperInfo SkusJSHandler::kWrapperInfo = {gin::kEmbedderNativeGin}; +gin::DeprecatedWrapperInfo SkusJSHandler::kWrapperInfo = { + gin::kEmbedderNativeGin}; SkusJSHandler::SkusJSHandler(content::RenderFrame* render_frame) : content::RenderFrameObserver(render_frame) {} @@ -319,7 +320,8 @@ void SkusJSHandler::OnCredentialSummary( gin::ObjectTemplateBuilder SkusJSHandler::GetObjectTemplateBuilder( v8::Isolate* isolate) { - return gin::Wrappable::GetObjectTemplateBuilder(isolate) + return gin::DeprecatedWrappable::GetObjectTemplateBuilder( + isolate) .SetMethod("refresh_order", &SkusJSHandler::RefreshOrder) .SetMethod("fetch_order_credentials", &SkusJSHandler::FetchOrderCredentials) diff --git a/components/skus/renderer/skus_js_handler.h b/components/skus/renderer/skus_js_handler.h index 31f0995c106..9d7546b1daa 100644 --- a/components/skus/renderer/skus_js_handler.h +++ b/components/skus/renderer/skus_js_handler.h @@ -37,14 +37,14 @@ namespace skus { // detect the purchase and use those credentials during authentication when // establishing a connection to our partner providing the VPN service. class SkusJSHandler : public content::RenderFrameObserver, - public gin::Wrappable { + public gin::DeprecatedWrappable { public: explicit SkusJSHandler(content::RenderFrame* render_frame); SkusJSHandler(const SkusJSHandler&) = delete; SkusJSHandler& operator=(const SkusJSHandler&) = delete; ~SkusJSHandler() override; - static gin::WrapperInfo kWrapperInfo; + static gin::DeprecatedWrapperInfo kWrapperInfo; static void Install(content::RenderFrame* render_frame); diff --git a/components/speedreader/renderer/speedreader_js_handler.cc b/components/speedreader/renderer/speedreader_js_handler.cc index cf4ceb0d52b..46d3c0add81 100644 --- a/components/speedreader/renderer/speedreader_js_handler.cc +++ b/components/speedreader/renderer/speedreader_js_handler.cc @@ -28,7 +28,8 @@ constexpr const char kSpeedreader[] = "speedreader"; namespace speedreader { -gin::WrapperInfo SpeedreaderJSHandler::kWrapperInfo = {gin::kEmbedderNativeGin}; +gin::DeprecatedWrapperInfo SpeedreaderJSHandler::kWrapperInfo = { + gin::kEmbedderNativeGin}; SpeedreaderJSHandler::SpeedreaderJSHandler( base::WeakPtr owner) @@ -78,7 +79,8 @@ void SpeedreaderJSHandler::Install( gin::ObjectTemplateBuilder SpeedreaderJSHandler::GetObjectTemplateBuilder( v8::Isolate* isolate) { - return gin::Wrappable::GetObjectTemplateBuilder(isolate) + return gin::DeprecatedWrappable< + SpeedreaderJSHandler>::GetObjectTemplateBuilder(isolate) .SetMethod("showOriginalPage", &SpeedreaderJSHandler::ShowOriginalPage) .SetMethod("ttsPlayPause", &SpeedreaderJSHandler::TtsPlayPause); } diff --git a/components/speedreader/renderer/speedreader_js_handler.h b/components/speedreader/renderer/speedreader_js_handler.h index 1240b2296b6..b331675edba 100644 --- a/components/speedreader/renderer/speedreader_js_handler.h +++ b/components/speedreader/renderer/speedreader_js_handler.h @@ -14,9 +14,10 @@ namespace speedreader { class SpeedreaderRenderFrameObserver; -class SpeedreaderJSHandler final : public gin::Wrappable { +class SpeedreaderJSHandler final + : public gin::DeprecatedWrappable { public: - static gin::WrapperInfo kWrapperInfo; + static gin::DeprecatedWrapperInfo kWrapperInfo; SpeedreaderJSHandler(const SpeedreaderJSHandler&) = delete; SpeedreaderJSHandler& operator=(const SpeedreaderJSHandler&) = delete;