Do not rely on Constructor to call Init
This makes it deterministic when the JavaScript is initialized, which can make our logic more clear.
This commit is contained in:
parent
84bb82866d
commit
1505a46ed0
11 changed files with 44 additions and 44 deletions
|
@ -67,7 +67,8 @@ v8::Local<v8::Value> ToBuffer(v8::Isolate* isolate, void* val, int size) {
|
|||
} // namespace
|
||||
|
||||
|
||||
Window::Window(v8::Isolate* isolate, const mate::Dictionary& options) {
|
||||
Window::Window(v8::Isolate* isolate, v8::Local<v8::Object> wrapper,
|
||||
const mate::Dictionary& options) {
|
||||
// Use options.webPreferences to create WebContents.
|
||||
mate::Dictionary web_preferences = mate::Dictionary::CreateEmpty(isolate);
|
||||
options.Get(options::kWebPreferences, &web_preferences);
|
||||
|
@ -107,7 +108,14 @@ Window::Window(v8::Isolate* isolate, const mate::Dictionary& options) {
|
|||
|
||||
window_->InitFromOptions(options);
|
||||
window_->AddObserver(this);
|
||||
|
||||
InitWith(isolate, wrapper);
|
||||
AttachAsUserData(window_.get());
|
||||
|
||||
// We can only append this window to parent window's child windows after this
|
||||
// window's JS wrapper gets initialized.
|
||||
if (!parent.IsEmpty())
|
||||
parent->child_windows_.Set(isolate, ID(), wrapper);
|
||||
}
|
||||
|
||||
Window::~Window() {
|
||||
|
@ -119,17 +127,6 @@ Window::~Window() {
|
|||
base::MessageLoop::current()->DeleteSoon(FROM_HERE, window_.release());
|
||||
}
|
||||
|
||||
void Window::AfterInit(v8::Isolate* isolate) {
|
||||
mate::TrackableObject<Window>::AfterInit(isolate);
|
||||
|
||||
// We can only append this window to parent window's child windows after this
|
||||
// window's JS wrapper gets initialized.
|
||||
mate::Handle<Window> parent;
|
||||
if (!parent_window_.IsEmpty() &&
|
||||
mate::ConvertFromV8(isolate, GetParentWindow(), &parent))
|
||||
parent->child_windows_.Set(isolate, ID(), GetWrapper());
|
||||
}
|
||||
|
||||
void Window::WillCloseWindow(bool* prevent_default) {
|
||||
*prevent_default = Emit("close");
|
||||
}
|
||||
|
@ -262,10 +259,9 @@ void Window::OnWindowMessage(UINT message, WPARAM w_param, LPARAM l_param) {
|
|||
#endif
|
||||
|
||||
// static
|
||||
mate::WrappableBase* Window::New(v8::Isolate* isolate, mate::Arguments* args) {
|
||||
mate::WrappableBase* Window::New(mate::Arguments* args) {
|
||||
if (!Browser::Get()->is_ready()) {
|
||||
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
|
||||
isolate, "Cannot create BrowserWindow before app is ready")));
|
||||
args->ThrowError("Cannot create BrowserWindow before app is ready");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -276,10 +272,10 @@ mate::WrappableBase* Window::New(v8::Isolate* isolate, mate::Arguments* args) {
|
|||
|
||||
mate::Dictionary options;
|
||||
if (!(args->Length() == 1 && args->GetNext(&options))) {
|
||||
options = mate::Dictionary::CreateEmpty(isolate);
|
||||
options = mate::Dictionary::CreateEmpty(args->isolate());
|
||||
}
|
||||
|
||||
return new Window(isolate, options);
|
||||
return new Window(args->isolate(), args->GetThis(), options);
|
||||
}
|
||||
|
||||
void Window::Close() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue