### Preflight Checklist

- [X] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/main/CONTRIBUTING.md) for this project.
- [X] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/main/CODE_OF_CONDUCT.md) that this project adheres to.
- [X] I have searched the [issue tracker](https://www.github.com/electron/electron/issues) for a bug report that matches the one I want to file, without success.

### Electron Version

18.0.3

### What operating system are you using?

Windows

### Operating System Version

Windows 10

### What arch are you using?

x64

### Last Known Working Electron version

18.0.0

### Expected Behavior

After entering and exiting fullscreen from an iframe and then focusing the parent page, <kbd>Escape</kbd> key events should be delivered to the parent page.

### Actual Behavior

<kbd>Escape</kbd> key events seem not to be delivered to the page after exiting fullscreen.

https://user-images.githubusercontent.com/172800/162848678-c067d18a-e323-49ea-a6b3-f1526149cad1.mp4




### Testcase Gist URL

https://gist.github.com/bc382eeeb368b70fbed1e177bcaacfde

### Additional Information

This only reproduces on Windows, not on macOS.

Also, this only reproduces when _clicking_ the "exit fullscreen" button in the YouTube embed. Pressing <kbd>Esc</kbd> to exit fullscreen allows the parent page to receive subsequent key events.

18.0.0 - not reproducible
18.0.1 - reproducible
18.0.2 - reproducible
18.0.3 - reproducible

This seems likely to be related to https://github.com/electron/electron/pull/32369. cc @codebytere 
shell/browser/api/electron_api_web_contents.cc
}
   Calling LoadURLWithParams() can trigger JS which destroys |this|.
  auto weak_this = GetWeakPtr();
  params.transition_type = ui::PageTransitionFromInt(
      ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
  params.override_user_agent = content::NavigationController::UA_OVERRIDE_TRUE;
   Discord non-committed entries to ensure that we don't re-use a pending
   entry
  ontents()->GetController().DiscardNonCommittedEntries();
  ontents()->GetController().LoadURLWithParams(params);
   ⚠️WARNING!⚠️
   LoadURLWithParams() triggers JS events which can call destroy() on |this|.
   It's not safe to assume that |this| points to valid memory at this point.
  if (!weak_this || !ontents())
    return;
   Required to make beforeunload handler work.
  NotifyUserActivation();
}
 TODO(MarshallOfSound): Figure out what we need to do with post data here, I
 believe the default behavior when we pass "true" is to phone out to the
 delegate and then the controller expects this method to be called again with
 "false" if the user approves the reload.  For now this would result in
 ".reload()" calls on POST data domains failing silently.  Passing false would
 result in them succeeding, but reposting which although more correct could be
 considering a breaking change.
void WebContents::Reload() {
  ontents()->GetController().Reload(content::ReloadType::NORMAL,
                                         /* check_for_repost */ true);
}
void WebContents::ReloadIgnoringCache() {