@@ -52,12 +52,24 @@ struct Converter<electron::AutoResizeFlags> {
52
52
53
53
} // namespace gin
54
54
55
+ namespace {
56
+
57
+ int32_t GetNextId () {
58
+ static int32_t next_id = 1 ;
59
+ return next_id++;
60
+ }
61
+
62
+ } // namespace
63
+
55
64
namespace electron {
56
65
57
66
namespace api {
58
67
68
+ gin::WrapperInfo BrowserView::kWrapperInfo = {gin::kEmbedderNativeGin };
69
+
59
70
BrowserView::BrowserView (gin::Arguments* args,
60
- const gin_helper::Dictionary& options) {
71
+ const gin_helper::Dictionary& options)
72
+ : id_(GetNextId()) {
61
73
v8::Isolate* isolate = args->isolate ();
62
74
gin_helper::Dictionary web_preferences =
63
75
gin::Dictionary::CreateEmpty (isolate);
@@ -72,8 +84,6 @@ BrowserView::BrowserView(gin::Arguments* args,
72
84
73
85
view_.reset (
74
86
NativeBrowserView::Create (api_web_contents_->managed_web_contents ()));
75
-
76
- InitWithArgs (args);
77
87
}
78
88
79
89
BrowserView::~BrowserView () {
@@ -87,24 +97,24 @@ BrowserView::~BrowserView() {
87
97
void BrowserView::WebContentsDestroyed () {
88
98
api_web_contents_ = nullptr ;
89
99
web_contents_.Reset ();
100
+ Unpin ();
90
101
}
91
102
92
103
// static
93
- gin_helper::WrappableBase* BrowserView::New (gin_helper::ErrorThrower thrower,
94
- gin::Arguments* args) {
104
+ gin:: Handle <BrowserView> BrowserView::New (gin_helper::ErrorThrower thrower,
105
+ gin::Arguments* args) {
95
106
if (!Browser::Get ()->is_ready ()) {
96
107
thrower.ThrowError (" Cannot create BrowserView before app is ready" );
97
- return nullptr ;
108
+ return gin:: Handle <BrowserView>() ;
98
109
}
99
110
100
111
gin::Dictionary options = gin::Dictionary::CreateEmpty (args->isolate ());
101
112
args->GetNext (&options);
102
113
103
- return new BrowserView (args, options);
104
- }
105
-
106
- int32_t BrowserView::ID () const {
107
- return weak_map_id ();
114
+ auto handle =
115
+ gin::CreateHandle (args->isolate (), new BrowserView (args, options));
116
+ handle->Pin (args->isolate ());
117
+ return handle;
108
118
}
109
119
110
120
void BrowserView::SetAutoResize (AutoResizeFlags flags) {
@@ -123,26 +133,25 @@ void BrowserView::SetBackgroundColor(const std::string& color_name) {
123
133
view_->SetBackgroundColor (ParseHexColor (color_name));
124
134
}
125
135
126
- v8::Local<v8::Value> BrowserView::GetWebContents () {
136
+ v8::Local<v8::Value> BrowserView::GetWebContents (v8::Isolate* isolate ) {
127
137
if (web_contents_.IsEmpty ()) {
128
- return v8::Null (isolate () );
138
+ return v8::Null (isolate);
129
139
}
130
140
131
- return v8::Local<v8::Value>::New (isolate () , web_contents_);
141
+ return v8::Local<v8::Value>::New (isolate, web_contents_);
132
142
}
133
143
134
144
// static
135
- void BrowserView::BuildPrototype (v8::Isolate* isolate,
136
- v8::Local<v8::FunctionTemplate> prototype) {
137
- prototype->SetClassName (gin::StringToV8 (isolate, " BrowserView" ));
138
- gin_helper::Destroyable::MakeDestroyable (isolate, prototype);
139
- gin_helper::ObjectTemplateBuilder (isolate, prototype->PrototypeTemplate ())
145
+ v8::Local<v8::ObjectTemplate> BrowserView::FillObjectTemplate (
146
+ v8::Isolate* isolate,
147
+ v8::Local<v8::ObjectTemplate> templ) {
148
+ return gin::ObjectTemplateBuilder (isolate, " BrowserView" , templ)
140
149
.SetMethod (" setAutoResize" , &BrowserView::SetAutoResize)
141
150
.SetMethod (" setBounds" , &BrowserView::SetBounds)
142
151
.SetMethod (" getBounds" , &BrowserView::GetBounds)
143
152
.SetMethod (" setBackgroundColor" , &BrowserView::SetBackgroundColor)
144
153
.SetProperty (" webContents" , &BrowserView::GetWebContents)
145
- .SetProperty ( " id " , &BrowserView::ID );
154
+ .Build ( );
146
155
}
147
156
148
157
} // namespace api
@@ -158,16 +167,9 @@ void Initialize(v8::Local<v8::Object> exports,
158
167
v8::Local<v8::Context> context,
159
168
void * priv) {
160
169
v8::Isolate* isolate = context->GetIsolate ();
161
- BrowserView::SetConstructor (isolate, base::BindRepeating (&BrowserView::New));
162
-
163
- gin_helper::Dictionary browser_view (isolate,
164
- BrowserView::GetConstructor (isolate)
165
- ->GetFunction (context)
166
- .ToLocalChecked ());
167
- browser_view.SetMethod (" fromId" , &BrowserView::FromWeakMapID);
168
- browser_view.SetMethod (" getAllViews" , &BrowserView::GetAll);
170
+
169
171
gin_helper::Dictionary dict (isolate, exports);
170
- dict.Set (" BrowserView" , browser_view );
172
+ dict.Set (" BrowserView" , BrowserView::GetConstructor (context) );
171
173
}
172
174
173
175
} // namespace
0 commit comments