Discovered while triaging https://github.com/electron/electron/issues/29260 - `app.quit()` checks for closed windows but `app.exit()` doesn't, leading to a potential DCHECK.

<details><summary>Stacktrace</summary>
```
[54299:0222/114036.228945:FATAL:native_window_mac.mm(1694)] Check failed: !IsClosed().
0   Electron Framework                  0x00000001230a8c99 base::debug::CollectStackTrace(void**, unsigned long) + 9
1   Electron Framework                  0x0000000122fbc3d3 base::debug::StackTrace::StackTrace() + 19
2   Electron Framework                  0x0000000122fd5f3f logging::LogMessage::~LogMessage() + 175
3   Electron Framework                  0x0000000122fd6f9e logging::LogMessage::~LogMessage() + 14
4   Electron Framework                  0x000000011eb85848 electron::NativeWindowMac::Cleanup() + 72
5   Electron Framework                  0x000000011eb8f954 -[ElectronNSWindowDelegate windowWillClose:] + 36
6   CoreFoundation                      0x00007ff80ce90f23 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
7   CoreFoundation                      0x00007ff80cf2e3f9 ___CFXRegistrationPost_block_invoke + 49
8   CoreFoundation                      0x00007ff80cf2e376 _CFXRegistrationPost + 496
9   CoreFoundation                      0x00007ff80ce62836 _CFXNotificationPost + 733
10  Foundation                          0x00007ff80dcaa1be -[NSNotificationCenter postNotificationName:object:userInfo:] + 82
11  AppKit                              0x00007ff81015602f -[NSWindow _finishClosingWindow] + 120
12  AppKit                              0x00007ff80fbe248f -[NSWindow _close] + 336
13  Electron Framework                  0x000000011eb80dcb electron::NativeWindowMac::CloseImmediately() + 59
14  Electron Framework                  0x000000011eafb0aa electron::WindowList::DestroyAllWindows() + 282
15  Electron Framework                  0x000000011ea67ce3 electron::Browser::Exit(gin::Arguments*) + 675
16  Electron Framework                  0x000000011e9858d4 gin::internal::Dispatcher<void (gin::Arguments*)>::DispatchToCallbackImpl(gin::Arguments*) + 276
17  Electron Framework                  0x000000011e985739 gin::internal::Dispatcher<void (gin::Arguments*)>::DispatchToCallback(v8::FunctionCallbackInfo<v8::Value> const&) + 57
18  Electron Framework                  0x0000000120369278 v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) + 296
19  Electron Framework                  0x0000000120367684 v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) + 1748
20  Electron Framework                  0x0000000120365603 v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) + 483
21  Electron Framework                  0x000000012036518d v8::internal::Builtin_HandleApiCall(int, unsigned long*, v8::internal::Isolate*) + 109
22  ???                                 0x0000001d07ee23f8 0x0 + 124687098872
Task trace:
0   Electron Framework                  0x000000011ea18ec8 electron::api::WebContents::Destroy() + 168
1   Electron Framework                  0x0000000123767802 IPC::(anonymous namespace)::ChannelAssociatedGroupController::Accept(mojo::Message*) + 994
2   Electron Framework                  0x000000012348f5bc mojo::SimpleWatcher::Context::Notify(unsigned int, MojoHandleSignalsState, unsigned int) + 428
Crash keys:
  "ui_scheduler_async_stack" = "0x11EA18EC8 0x123767802"
  "io_scheduler_async_stack" = "0x12348F5BC 0x0"
  "platform" = "darwin"
  "process_type" = "browser"
```
</details>
shell/browser/window_list.cc
return GetInstance()->windows_;
}
bool WindowList::IsEmpty() {
  return GetInstance()->windows_.empty();
}
void WindowList::AddWindow(NativeWindow* window) {
  DCHECK(window);
  
  WindowVector& windows = GetInstance()->windows_;
  windows.push_back(window);
  for (WindowListObserver& observer : observers_.Get())
    observer.OnWindowAdded(window);
}
void WindowList::RemoveWindow(NativeWindow* window) {
  WindowVector& windows = GetInstance()->windows_;
  windows.erase(std::remove(windows.begin(), windows.end(), window),
                windows.end());
  for (WindowListObserver& observer : observers_.Get())
    observer.OnWindowRemoved(window);
  if (windows.empty()) {
    for (WindowListObserver& observer : observers_.Get())
      observer.OnWindowAllClosed();
  }
}
void WindowList::WindowCloseCancelled(NativeWindow* window) {
  for (WindowListObserver& observer : observers_.Get())
    observer.OnWindowCloseCancelled(window);
}
void WindowList::AddObserver(WindowListObserver* observer) {