Compare commits

...

1 Commits

Author SHA1 Message Date
Charles Kerr
bf3848ef2b refactor: make api::Cookies inherit from gin::Wrappable* 2025-09-17 18:04:45 -05:00
5 changed files with 42 additions and 30 deletions

View File

@@ -8,20 +8,21 @@ electron objects that extend gin::Wrappable and gets
allocated on the cpp heap allocated on the cpp heap
diff --git a/gin/public/wrappable_pointer_tags.h b/gin/public/wrappable_pointer_tags.h diff --git a/gin/public/wrappable_pointer_tags.h b/gin/public/wrappable_pointer_tags.h
index 80ec409efe1635390887d1324be661643818abff..2e20b63d1fca56efb43c18d0fa04b1e2b4cf339a 100644 index 80ec409efe1635390887d1324be661643818abff..c730ac82e94c2d380f5172e36e5422530e776e0d 100644
--- a/gin/public/wrappable_pointer_tags.h --- a/gin/public/wrappable_pointer_tags.h
+++ b/gin/public/wrappable_pointer_tags.h +++ b/gin/public/wrappable_pointer_tags.h
@@ -66,7 +66,12 @@ enum WrappablePointerTag : uint16_t { @@ -66,7 +66,13 @@ enum WrappablePointerTag : uint16_t {
kTextInputControllerBindings, // content::TextInputControllerBindings kTextInputControllerBindings, // content::TextInputControllerBindings
kWebAXObjectProxy, // content::WebAXObjectProxy kWebAXObjectProxy, // content::WebAXObjectProxy
kWrappedExceptionHandler, // extensions::WrappedExceptionHandler kWrappedExceptionHandler, // extensions::WrappedExceptionHandler
- kLastPointerTag = kWrappedExceptionHandler, - kLastPointerTag = kWrappedExceptionHandler,
+ kElectronApp, // electron::api::App + kElectronApp, // electron::api::App
+ kElectronCookies, // electron::api::Cookies
+ kElectronDebugger, // electron::api::Debugger + kElectronDebugger, // electron::api::Debugger
+ kElectronEvent, // gin_helper::internal::Event + kElectronEvent, // gin_helper::internal::Event
+ kElectronNetLog, // electron::api::NetLog + kElectronNetLog, // electron::api::NetLog
+ kElectronSession, // electron::api::Session + kElectronSession, // electron::api::Session
+ kLastPointerTag = kElectronEvent, + kLastPointerTag = ElectronSession,
}; };
static_assert(kLastPointerTag < static_assert(kLastPointerTag <

View File

@@ -32,6 +32,8 @@
#include "shell/common/gin_helper/handle.h" #include "shell/common/gin_helper/handle.h"
#include "shell/common/gin_helper/object_template_builder.h" #include "shell/common/gin_helper/object_template_builder.h"
#include "shell/common/gin_helper/promise.h" #include "shell/common/gin_helper/promise.h"
#include "v8/include/cppgc/allocation.h"
#include "v8/include/v8-cppgc.h"
namespace gin { namespace gin {
@@ -274,7 +276,8 @@ std::string StringToCookieSameSite(const std::string* str_ptr,
} // namespace } // namespace
gin::DeprecatedWrapperInfo Cookies::kWrapperInfo = {gin::kEmbedderNativeGin}; gin::WrapperInfo Cookies::kWrapperInfo = {{gin::kEmbedderNativeGin},
gin::kElectronCookies};
Cookies::Cookies(ElectronBrowserContext* browser_context) Cookies::Cookies(ElectronBrowserContext* browser_context)
: browser_context_{browser_context} { : browser_context_{browser_context} {
@@ -442,24 +445,27 @@ void Cookies::OnCookieChanged(const net::CookieChangeInfo& change) {
} }
// static // static
gin_helper::Handle<Cookies> Cookies::Create( Cookies* Cookies::Create(v8::Isolate* isolate,
v8::Isolate* isolate, ElectronBrowserContext* browser_context) {
ElectronBrowserContext* browser_context) { return cppgc::MakeGarbageCollected<Cookies>(
return gin_helper::CreateHandle(isolate, new Cookies{browser_context}); isolate->GetCppHeap()->GetAllocationHandle(), browser_context);
} }
gin::ObjectTemplateBuilder Cookies::GetObjectTemplateBuilder( gin::ObjectTemplateBuilder Cookies::GetObjectTemplateBuilder(
v8::Isolate* isolate) { v8::Isolate* isolate) {
return gin_helper::EventEmitterMixin<Cookies>::GetObjectTemplateBuilder( return gin::Wrappable<Cookies>::GetObjectTemplateBuilder(isolate)
isolate)
.SetMethod("get", &Cookies::Get) .SetMethod("get", &Cookies::Get)
.SetMethod("remove", &Cookies::Remove) .SetMethod("remove", &Cookies::Remove)
.SetMethod("set", &Cookies::Set) .SetMethod("set", &Cookies::Set)
.SetMethod("flushStore", &Cookies::FlushStore); .SetMethod("flushStore", &Cookies::FlushStore);
} }
const char* Cookies::GetTypeName() { const gin::WrapperInfo* Cookies::wrapper_info() const {
return "Cookies"; return &kWrapperInfo;
}
const char* Cookies::GetHumanReadableName() const {
return "Electron / Cookies";
} }
} // namespace electron::api } // namespace electron::api

View File

@@ -10,8 +10,8 @@
#include "base/callback_list.h" #include "base/callback_list.h"
#include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr.h"
#include "base/values.h" #include "base/values.h"
#include "gin/wrappable.h"
#include "shell/browser/event_emitter_mixin.h" #include "shell/browser/event_emitter_mixin.h"
#include "shell/common/gin_helper/wrappable.h"
class GURL; class GURL;
@@ -31,27 +31,28 @@ class ElectronBrowserContext;
namespace api { namespace api {
class Cookies final : public gin_helper::DeprecatedWrappable<Cookies>, class Cookies final : public gin::Wrappable<Cookies>,
public gin_helper::EventEmitterMixin<Cookies> { public gin_helper::EventEmitterMixin<Cookies> {
public: public:
static gin_helper::Handle<Cookies> Create( static Cookies* Create(v8::Isolate* isolate,
v8::Isolate* isolate, ElectronBrowserContext* browser_context);
ElectronBrowserContext* browser_context);
// gin_helper::Wrappable // Make public for cppgc::MakeGarbageCollected.
static gin::DeprecatedWrapperInfo kWrapperInfo; explicit Cookies(ElectronBrowserContext* browser_context);
gin::ObjectTemplateBuilder GetObjectTemplateBuilder( ~Cookies() override;
v8::Isolate* isolate) override;
const char* GetTypeName() override;
// disable copy // disable copy
Cookies(const Cookies&) = delete; Cookies(const Cookies&) = delete;
Cookies& operator=(const Cookies&) = delete; Cookies& operator=(const Cookies&) = delete;
protected: // gin_helper::Wrappable
explicit Cookies(ElectronBrowserContext* browser_context); static gin::WrapperInfo kWrapperInfo;
~Cookies() override; gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
const gin::WrapperInfo* wrapper_info() const override;
const char* GetHumanReadableName() const override;
protected:
v8::Local<v8::Promise> Get(v8::Isolate*, v8::Local<v8::Promise> Get(v8::Isolate*,
const gin_helper::Dictionary& filter); const gin_helper::Dictionary& filter);
v8::Local<v8::Promise> Set(v8::Isolate*, base::Value::Dict details); v8::Local<v8::Promise> Set(v8::Isolate*, base::Value::Dict details);

View File

@@ -1321,11 +1321,14 @@ v8::Local<v8::Promise> Session::GetSharedDictionaryUsageInfo() {
} }
v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) { v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) {
if (cookies_.IsEmptyThreadSafe()) { if (!cookies_) {
auto handle = Cookies::Create(isolate, browser_context()); cookies_ = Cookies::Create(isolate, browser_context());
cookies_.Reset(isolate, handle.ToV8());
} }
return cookies_.Get(isolate);
v8::Local<v8::Object> wrapper;
return cookies_->GetWrapper(isolate).ToLocal(&wrapper)
? wrapper.As<v8::Value>()
: v8::Null(isolate);
} }
v8::Local<v8::Value> Session::Extensions(v8::Isolate* isolate) { v8::Local<v8::Value> Session::Extensions(v8::Isolate* isolate) {

View File

@@ -60,6 +60,7 @@ struct PreloadScript;
namespace api { namespace api {
class Cookies;
class NetLog; class NetLog;
class Session final : public gin::Wrappable<Session>, class Session final : public gin::Wrappable<Session>,
@@ -207,7 +208,7 @@ class Session final : public gin::Wrappable<Session>,
v8::Local<v8::Value> val); v8::Local<v8::Value> val);
// Cached gin_helper::Wrappable objects. // Cached gin_helper::Wrappable objects.
v8::TracedReference<v8::Value> cookies_; cppgc::Member<api::Cookies> cookies_;
v8::TracedReference<v8::Value> extensions_; v8::TracedReference<v8::Value> extensions_;
v8::TracedReference<v8::Value> protocol_; v8::TracedReference<v8::Value> protocol_;
cppgc::Member<api::NetLog> net_log_; cppgc::Member<api::NetLog> net_log_;