mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
refactor: make api::Cookies inherit from gin::Wrappable*
This commit is contained in:
@@ -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 <
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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_;
|
||||
|
||||
Reference in New Issue
Block a user