[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:
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user