### Preflight Checklist
* [x] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
* [x] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
* [x] I have searched the issue tracker for an issue that matches the one I want to file, without success.

### Issue Details

* **Electron Version:**
  * 10.1.1
* **Operating System:**
  * macOS 10.15.4

We recently started launching as hidden on macOS (that is, `show: false` or `browserWindow.hide()` while loading the page, followed by `browserWindow.show()` when the dock icon is clicked). This results in some busted focus behavior on the first activation of the window. The second activation restores it.

### Expected Behavior
The guest page receives a `focus` event on the first activation of the app, when created with `show: false`.

### Actual Behavior
The guest page doesn't receive the first `focus` event. Subsequent activations do trigger a `focus` event.

### To Reproduce
[Electron Fiddle](https://gist.github.com/CharlieHess/c507468cd40630d04f58c6514100b997)

shell/browser/api/electron_api_web_contents.cc
1. call webContents.destroy();
 2. garbage collection;
 3. user closes the window of webContents;
 4. the embedder detaches the frame.
 For webview only #4 will happen, for BrowserWindow both #1 and #3 may
 happen. The #2 should never happen for webContents, because webview is
 managed by GuestViewManager, and BrowserWindow's webContents is managed
 by api::BrowserWindow.
 For #1, the destructor will do the cleanup work and we only need to make
 sure "destroyed" event is emitted. For #3, the content::WebContents will
 be destroyed on close, and WebContentsDestroyed would be called for it, so
 we need to make sure the api::WebContents is also deleted.
 For #4, the WebContents will be destroyed by embedder.
void WebContents::WebContentsDestroyed() {
   Give chance for guest delegate to cleanup its observers
   since the native class is only destroyed in the next tick.
  if (guest_delegate_)
    guest_delegate_->WillDestroy();
   Cleanup relationships with other parts.
   We can not call Destroy here because we need to call Emit first, but we
   also do not want any method to be used, so just mark as destroyed here.
  MarkDestroyed();
  Emit("destroyed");
   For guest view based on OOPIF, the WebContents is released by the embedder
   frame, and we need to clear the reference to the memory.
  if (IsGuest() && managed_ontents()) {
    managed_ontents()->ReleaseWebContents();
    ResetManagedWebContents(false);
  }
   Destroy the native class in next tick.