<!--  As an open source project with a dedicated but small maintainer team, it can sometimes take a long time for issues to be addressed so please be patient and we will get back to you as soon as we can.
-->

### Preflight Checklist
<!-- Please ensure you've completed the following steps by replacing [ ] with [x]-->

* [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:**
  * 12.0.0-beta.21, though as far back as 5.0.13
* **Operating System:**
  * Windows 10
* **Last Known Working Electron version:**
  * N/A

### Expected Behavior
1. Put an iframe inside of a webview
2. Call requestFullScreen on the inner iframe
3. Expect the iframe to expand and take up the entire window

### Actual Behavior
For step 3, neither the iframe nor the webview expand fully. Only the window itself becomes full-screen.

### To Reproduce
Check the "iframe inside webview" case of this minimal repro:
[fiddle.zip](https://github.com/electron/electron/files/5968821/fiddle.zip)

<!--
Your best chance of getting this bug looked at quickly is to provide an example.
-->

<!--
For bugs that can be encapsulated in a small experiment, you can use Electron Fiddle (https://github.com/electron/fiddle) to publish your example to a GitHub Gist and link it your bug report.
-->

<!--
If Fiddle is insufficient to produce an example, please provide an example REPOSITORY that can be cloned and run. You can fork electron-quick-start (https://github.com/electron/electron-quick-start) and include a link to the branch with your changes.
-->

<!--
If you provide a URL, please list the commands required to clone/setup/run your repo e.g.
```sh
$ git clone $YOUR_URL -b $BRANCH
$ npm install
$ npm start || electron .
```
-->

### Screenshots
On an earlier version of the fiddle attached above:
<!-- If applicable, add screenshots to help explain your problem. -->
![electron-iframe-webview](https://user-images.githubusercontent.com/7199958/107708227-0030b700-6c78-11eb-9c2b-cddd1d0a3cee.gif)

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() {