From 81ab8339063ff7feac2724fbcce95af9018b0724 Mon Sep 17 00:00:00 2001 From: Jeremy Rose Date: Wed, 16 Mar 2022 16:23:14 -0700 Subject: [PATCH] fix: BrowserWindow.fromWebContents should work in browser-window-created (#33257) --- shell/common/gin_helper/trackable_object.h | 2 +- spec-main/api-browser-window-spec.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/shell/common/gin_helper/trackable_object.h b/shell/common/gin_helper/trackable_object.h index 309e412e8a6f6..7f5b45c75fbcb 100644 --- a/shell/common/gin_helper/trackable_object.h +++ b/shell/common/gin_helper/trackable_object.h @@ -117,11 +117,11 @@ class TrackableObject : public TrackableObjectBase, public EventEmitter { ~TrackableObject() override { RemoveFromWeakMap(); } void InitWith(v8::Isolate* isolate, v8::Local wrapper) override { - gin_helper::WrappableBase::InitWith(isolate, wrapper); if (!weak_map_) { weak_map_ = new electron::KeyWeakMap; } weak_map_->Set(isolate, weak_map_id_, wrapper); + gin_helper::WrappableBase::InitWith(isolate, wrapper); } private: diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index 1ed8734711f33..89ff468ec5202 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -1816,6 +1816,18 @@ describe('BrowserWindow module', () => { expect(BrowserWindow.fromWebContents(webviewContents)!.id).to.equal(w.id); await p; }); + + it('is usable immediately on browser-window-created', async () => { + const w = new BrowserWindow({ show: false }); + w.loadURL('about:blank'); + w.webContents.executeJavaScript('window.open(""); null'); + const [win, winFromWebContents] = await new Promise((resolve) => { + app.once('browser-window-created', (e, win) => { + resolve([win, BrowserWindow.fromWebContents(win.webContents)]); + }); + }); + expect(winFromWebContents).to.equal(win); + }); }); describe('BrowserWindow.openDevTools()', () => {