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
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
+++ 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
kWebAXObjectProxy, // content::WebAXObjectProxy
kWrappedExceptionHandler, // extensions::WrappedExceptionHandler
- kLastPointerTag = kWrappedExceptionHandler,
+ kElectronApp, // electron::api::App
+ kElectronCookies, // electron::api::Cookies
+ kElectronDebugger, // electron::api::Debugger
+ kElectronEvent, // gin_helper::internal::Event
+ kElectronNetLog, // electron::api::NetLog
+ kElectronSession, // electron::api::Session
+ kLastPointerTag = kElectronEvent,
+ kLastPointerTag = ElectronSession,
};
static_assert(kLastPointerTag <

View File

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

View File

@@ -10,8 +10,8 @@
#include "base/callback_list.h"
#include "base/memory/raw_ptr.h"
#include "base/values.h"
#include "gin/wrappable.h"
#include "shell/browser/event_emitter_mixin.h"
#include "shell/common/gin_helper/wrappable.h"
class GURL;
@@ -31,27 +31,28 @@ class ElectronBrowserContext;
namespace api {
class Cookies final : public gin_helper::DeprecatedWrappable<Cookies>,
class Cookies final : public gin::Wrappable<Cookies>,
public gin_helper::EventEmitterMixin<Cookies> {
public:
static gin_helper::Handle<Cookies> Create(
v8::Isolate* isolate,
ElectronBrowserContext* browser_context);
static Cookies* Create(v8::Isolate* isolate,
ElectronBrowserContext* browser_context);
// gin_helper::Wrappable
static gin::DeprecatedWrapperInfo kWrapperInfo;
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
const char* GetTypeName() override;
// Make public for cppgc::MakeGarbageCollected.
explicit Cookies(ElectronBrowserContext* browser_context);
~Cookies() override;
// disable copy
Cookies(const Cookies&) = delete;
Cookies& operator=(const Cookies&) = delete;
protected:
explicit Cookies(ElectronBrowserContext* browser_context);
~Cookies() override;
// gin_helper::Wrappable
static gin::WrapperInfo kWrapperInfo;
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*,
const gin_helper::Dictionary& filter);
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) {
if (cookies_.IsEmptyThreadSafe()) {
auto handle = Cookies::Create(isolate, browser_context());
cookies_.Reset(isolate, handle.ToV8());
if (!cookies_) {
cookies_ = Cookies::Create(isolate, browser_context());
}
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) {

View File

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