From d3a7f9ea83359f97b818febbfbcccece03f64a79 Mon Sep 17 00:00:00 2001 From: Claudio DeSouza Date: Fri, 1 Aug 2025 14:25:13 +0100 Subject: [PATCH] [cr140] Migrate `SpeedreaderJSHandler` to `gin::Wrappable` This class was still using the deprecated version that is set to be deleted. This change migrates this class to use Oilpan GC for memory management. Chromium changes: https://chromium.googlesource.com/chromium/src/+/61e491610dac67129273aa96549603483c59759f commit 61e491610dac67129273aa96549603483c59759f Author: Andreas Haas Date: Wed Jul 30 03:35:32 2025 -0700 [gin] Delete DeprecatedWrappable This CL deletes gin::DeprecatedWrappable, and classes and data structures related to gin::DeprecatedWrappable. Additionally it removes internal fields of JS wrapper objects that were only used by gin::DeprecatedWrappable, but are not needed anymore with the new gin::Wrappable. Bug: 345640553 Change-Id: Ideb4424048e62fec6c6a7ee5fd60a4635f6ef1e8 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6799157 Reviewed-by: Michael Lippautz Reviewed-by: Camille Lamy Commit-Queue: Andreas Haas Cr-Commit-Position: refs/heads/main@{#1494071} --- .../gin/public/wrappable_pointer_tags.h | 1 + .../renderer/speedreader_js_handler.cc | 24 +++++++++---------- .../renderer/speedreader_js_handler.h | 13 +++++----- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/chromium_src/gin/public/wrappable_pointer_tags.h b/chromium_src/gin/public/wrappable_pointer_tags.h index 4585c160ebb..e3e91321fa2 100644 --- a/chromium_src/gin/public/wrappable_pointer_tags.h +++ b/chromium_src/gin/public/wrappable_pointer_tags.h @@ -14,6 +14,7 @@ kMetaMask, \ kSolanaProvider, \ kSkusBindings, \ + SpeedreaderBindings, \ kCardanoProvider // clang-format on diff --git a/components/speedreader/renderer/speedreader_js_handler.cc b/components/speedreader/renderer/speedreader_js_handler.cc index 46d3c0add81..fc5c998010e 100644 --- a/components/speedreader/renderer/speedreader_js_handler.cc +++ b/components/speedreader/renderer/speedreader_js_handler.cc @@ -12,7 +12,6 @@ #include "brave/components/speedreader/renderer/speedreader_render_frame_observer.h" #include "content/public/renderer/render_frame.h" #include "gin/converter.h" -#include "gin/handle.h" #include "gin/object_template_builder.h" #include "gin/wrappable.h" #include "mojo/public/cpp/bindings/associated_remote.h" @@ -20,7 +19,9 @@ #include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h" #include "third_party/blink/public/web/blink.h" #include "third_party/blink/public/web/web_local_frame.h" +#include "v8/include/cppgc/allocation.h" #include "v8/include/v8-context.h" +#include "v8/include/v8-cppgc.h" namespace { constexpr const char kSpeedreader[] = "speedreader"; @@ -28,9 +29,6 @@ constexpr const char kSpeedreader[] = "speedreader"; namespace speedreader { -gin::DeprecatedWrapperInfo SpeedreaderJSHandler::kWrapperInfo = { - gin::kEmbedderNativeGin}; - SpeedreaderJSHandler::SpeedreaderJSHandler( base::WeakPtr owner) : owner_(std::move(owner)) {} @@ -62,13 +60,12 @@ void SpeedreaderJSHandler::Install( return; } - gin::Handle handler = - gin::CreateHandle(isolate, new SpeedreaderJSHandler(std::move(owner))); - if (handler.IsEmpty()) { - return; - } + SpeedreaderJSHandler* handler = + cppgc::MakeGarbageCollected( + isolate->GetCppHeap()->GetAllocationHandle(), std::move(owner)); - v8::PropertyDescriptor desc(handler.ToV8(), false); + v8::PropertyDescriptor desc(handler->GetWrapper(isolate).ToLocalChecked(), + false); desc.set_configurable(false); global @@ -79,8 +76,7 @@ void SpeedreaderJSHandler::Install( gin::ObjectTemplateBuilder SpeedreaderJSHandler::GetObjectTemplateBuilder( v8::Isolate* isolate) { - return gin::DeprecatedWrappable< - SpeedreaderJSHandler>::GetObjectTemplateBuilder(isolate) + return gin::Wrappable::GetObjectTemplateBuilder(isolate) .SetMethod("showOriginalPage", &SpeedreaderJSHandler::ShowOriginalPage) .SetMethod("ttsPlayPause", &SpeedreaderJSHandler::TtsPlayPause); } @@ -100,6 +96,10 @@ void SpeedreaderJSHandler::ShowOriginalPage(v8::Isolate* isolate) { } } +const gin::WrapperInfo* SpeedreaderJSHandler::wrapper_info() const { + return &kWrapperInfo; +} + void SpeedreaderJSHandler::TtsPlayPause(v8::Isolate* isolate, int paragraph_index) { DCHECK(isolate); diff --git a/components/speedreader/renderer/speedreader_js_handler.h b/components/speedreader/renderer/speedreader_js_handler.h index b331675edba..0bd617d8052 100644 --- a/components/speedreader/renderer/speedreader_js_handler.h +++ b/components/speedreader/renderer/speedreader_js_handler.h @@ -14,11 +14,14 @@ namespace speedreader { class SpeedreaderRenderFrameObserver; -class SpeedreaderJSHandler final - : public gin::DeprecatedWrappable { +class SpeedreaderJSHandler final : public gin::Wrappable { public: - static gin::DeprecatedWrapperInfo kWrapperInfo; + static constexpr gin::WrapperInfo kWrapperInfo = {{gin::kEmbedderNativeGin}, + gin::SpeedreaderBindings}; + explicit SpeedreaderJSHandler( + base::WeakPtr owner); + ~SpeedreaderJSHandler() final; SpeedreaderJSHandler(const SpeedreaderJSHandler&) = delete; SpeedreaderJSHandler& operator=(const SpeedreaderJSHandler&) = delete; @@ -26,13 +29,11 @@ class SpeedreaderJSHandler final v8::Local context); private: - explicit SpeedreaderJSHandler( - base::WeakPtr owner); - ~SpeedreaderJSHandler() final; // gin::WrappableBase gin::ObjectTemplateBuilder GetObjectTemplateBuilder( v8::Isolate* isolate) final; + const gin::WrapperInfo* wrapper_info() const override; // A function to be called from JS void ShowOriginalPage(v8::Isolate* isolate);