diff --git a/shell/browser/native_window.cc b/shell/browser/native_window.cc index 150d6aa3cf35..1de6d968435c 100644 --- a/shell/browser/native_window.cc +++ b/shell/browser/native_window.cc @@ -423,11 +423,11 @@ void NativeWindow::NotifyWindowClosed() { if (is_closed_) return; - WindowList::RemoveWindow(this); - is_closed_ = true; for (NativeWindowObserver& observer : observers_) observer.OnWindowClosed(); + + WindowList::RemoveWindow(this); } void NativeWindow::NotifyWindowEndSession() { diff --git a/spec-main/api-app-spec.ts b/spec-main/api-app-spec.ts index cbc03724e49d..fe8666e6b534 100644 --- a/spec-main/api-app-spec.ts +++ b/spec-main/api-app-spec.ts @@ -1626,6 +1626,8 @@ describe('default behavior', () => { }); describe('window-all-closed', () => { + afterEach(closeAllWindows); + it('quits when the app does not handle the event', async () => { const result = await runTestApp('window-all-closed'); expect(result).to.equal(false); @@ -1635,6 +1637,17 @@ describe('default behavior', () => { const result = await runTestApp('window-all-closed', '--handle-event'); expect(result).to.equal(true); }); + + it('should omit closed windows from getAllWindows', async () => { + const w = new BrowserWindow({ show: false }); + const len = new Promise(resolve => { + app.on('window-all-closed', () => { + resolve(BrowserWindow.getAllWindows().length); + }); + }); + w.close(); + expect(await len).to.equal(0); + }); }); describe('user agent fallback', () => {