[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 <ahaas@chromium.org>
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 <ahaas@chromium.org>
    Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
    Owners-Override: Rick Byers <rbyers@chromium.org>
    Reviewed-by: Rick Byers <rbyers@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#1481539}

Chromium changes:
https://chromium.googlesource.com/chromium/src/+/f99163fe2d3428680834db3f141a6d83590561f0

commit f99163fe2d3428680834db3f141a6d83590561f0
Author: Nina Satragno <nsatragno@chromium.org>
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<WrappableSubClass>::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 <mlippautz@chromium.org>
    > Commit-Queue: Andreas Haas <ahaas@chromium.org>
    > 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 <rubber-stamper@appspot.gserviceaccount.com>
    Auto-Submit: Nina Satragno <nsatragno@chromium.org>
    Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
    Owners-Override: Nina Satragno <nsatragno@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#1481635}
This commit is contained in:
Claudio DeSouza
2025-08-19 19:54:18 +01:00
parent 7baeb170d7
commit b4dd3a37f7
12 changed files with 59 additions and 41 deletions
@@ -49,10 +49,11 @@ std::string JSCardanoProvider::GetApiVersion() {
return "1";
}
// gin::Wrappable<JSCardanoProvider>
// gin::DeprecatedWrappable<JSCardanoProvider>
gin::ObjectTemplateBuilder JSCardanoProvider::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return gin::Wrappable<JSCardanoProvider>::GetObjectTemplateBuilder(isolate)
return gin::DeprecatedWrappable<JSCardanoProvider>::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);
@@ -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<JSCardanoProvider>,
public content::RenderFrameObserver {
class JSCardanoProvider final
: public gin::DeprecatedWrappable<JSCardanoProvider>,
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(
@@ -51,10 +51,11 @@ v8::Local<v8::Value> ConvertError(
// content::RenderFrameObserver
void JSCardanoWalletApi::OnDestruct() {}
// gin::Wrappable<JSCardanoProvider>
// gin::DeprecatedWrappable<JSCardanoProvider>
gin::ObjectTemplateBuilder JSCardanoWalletApi::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return gin::Wrappable<JSCardanoWalletApi>::GetObjectTemplateBuilder(isolate)
return gin::DeprecatedWrappable<JSCardanoWalletApi>::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;
@@ -29,8 +29,9 @@ v8::Local<v8::Value> 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<JSCardanoWalletApi>,
public content::RenderFrameObserver {
class JSCardanoWalletApi final
: public gin::DeprecatedWrappable<JSCardanoWalletApi>,
public content::RenderFrameObserver {
public:
JSCardanoWalletApi(mojo::Remote<mojom::CardanoApi> remote,
base::PassKey<class JSCardanoProvider> pass_key,
@@ -41,7 +42,7 @@ class JSCardanoWalletApi final : public gin::Wrappable<JSCardanoWalletApi>,
JSCardanoWalletApi(const JSCardanoWalletApi&) = delete;
JSCardanoWalletApi& operator=(const JSCardanoWalletApi&) = delete;
static gin::WrapperInfo kWrapperInfo;
static gin::DeprecatedWrapperInfo kWrapperInfo;
// gin::WrappableBase
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
@@ -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<v8::Context>,
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<MetaMask>::GetObjectTemplateBuilder(isolate).SetMethod(
kIsUnlocked, &JSEthereumProvider::MetaMask::IsUnlocked);
return gin::DeprecatedWrappable<MetaMask>::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<JSEthereumProvider>::GetObjectTemplateBuilder(isolate)
return gin::DeprecatedWrappable<JSEthereumProvider>::GetObjectTemplateBuilder(
isolate)
.SetProperty(kIsBraveWallet, &JSEthereumProvider::GetIsBraveWallet)
.SetProperty(kIsMetaMask, &JSEthereumProvider::GetIsMetaMask)
.SetProperty(kMetaMask, &JSEthereumProvider::GetMetaMask)
@@ -25,11 +25,12 @@
namespace brave_wallet {
class JSEthereumProvider final : public gin::Wrappable<JSEthereumProvider>,
public content::RenderFrameObserver,
public mojom::EventsListener {
class JSEthereumProvider final
: public gin::DeprecatedWrappable<JSEthereumProvider>,
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<JSEthereumProvider>,
explicit JSEthereumProvider(content::RenderFrame* render_frame);
~JSEthereumProvider() override;
class MetaMask final : public gin::Wrappable<MetaMask> {
class MetaMask final : public gin::DeprecatedWrappable<MetaMask> {
public:
static gin::WrapperInfo kWrapperInfo;
static gin::DeprecatedWrapperInfo kWrapperInfo;
explicit MetaMask(content::RenderFrame*);
~MetaMask() override;
@@ -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<JSSolanaProvider>::GetObjectTemplateBuilder(isolate)
return gin::DeprecatedWrappable<JSSolanaProvider>::GetObjectTemplateBuilder(
isolate)
.SetProperty("isPhantom", &JSSolanaProvider::GetIsPhantom)
.SetProperty("isBraveWallet", &JSSolanaProvider::GetIsBraveWallet)
.SetProperty("isConnected", &JSSolanaProvider::GetIsConnected)
@@ -22,15 +22,16 @@
namespace brave_wallet {
class JSSolanaProvider final : public gin::Wrappable<JSSolanaProvider>,
public content::RenderFrameObserver,
public mojom::SolanaEventsListener {
class JSSolanaProvider final
: public gin::DeprecatedWrappable<JSSolanaProvider>,
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);
+4 -2
View File
@@ -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<SkusJSHandler>::GetObjectTemplateBuilder(isolate)
return gin::DeprecatedWrappable<SkusJSHandler>::GetObjectTemplateBuilder(
isolate)
.SetMethod("refresh_order", &SkusJSHandler::RefreshOrder)
.SetMethod("fetch_order_credentials",
&SkusJSHandler::FetchOrderCredentials)
+2 -2
View File
@@ -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<SkusJSHandler> {
public gin::DeprecatedWrappable<SkusJSHandler> {
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);
@@ -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<SpeedreaderRenderFrameObserver> owner)
@@ -78,7 +79,8 @@ void SpeedreaderJSHandler::Install(
gin::ObjectTemplateBuilder SpeedreaderJSHandler::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return gin::Wrappable<SpeedreaderJSHandler>::GetObjectTemplateBuilder(isolate)
return gin::DeprecatedWrappable<
SpeedreaderJSHandler>::GetObjectTemplateBuilder(isolate)
.SetMethod("showOriginalPage", &SpeedreaderJSHandler::ShowOriginalPage)
.SetMethod("ttsPlayPause", &SpeedreaderJSHandler::TtsPlayPause);
}
@@ -14,9 +14,10 @@ namespace speedreader {
class SpeedreaderRenderFrameObserver;
class SpeedreaderJSHandler final : public gin::Wrappable<SpeedreaderJSHandler> {
class SpeedreaderJSHandler final
: public gin::DeprecatedWrappable<SpeedreaderJSHandler> {
public:
static gin::WrapperInfo kWrapperInfo;
static gin::DeprecatedWrapperInfo kWrapperInfo;
SpeedreaderJSHandler(const SpeedreaderJSHandler&) = delete;
SpeedreaderJSHandler& operator=(const SpeedreaderJSHandler&) = delete;