### 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:**
  * 9.0.0-beta.5
* **Operating System:**
  * MacOS 10.15.3
* **Last Known Working Electron version:**
  * Unknown

### Expected Behavior

Navigating to a page (afaict when it has an iframe) and then navigating away via "Back" should not crash Electron.

### Actual Behavior

Electron crashes with the following trace (with debug symbols):

<details>
```
Received signal 11 SEGV_MAPERR 058c0000057c
0   Electron Framework                  0x0000000117ad7739 base::debug::CollectStackTrace(void**, unsigned long) + 9
1   Electron Framework                  0x00000001179a8df3 base::debug::StackTrace::StackTrace() + 19
2   Electron Framework                  0x0000000117ad75e1 base::debug::(anonymous namespace)::StackDumpSignalHandler(int, __siginfo*, void*) + 2385
3   libsystem_platform.dylib            0x00007fff652b242d _sigtramp + 29
4   ???                                 0x00007f9d56173880 0x0 + 140313730955392
5   Electron Framework                  0x0000000117231c1c network_hints::mojom::NetworkHintsHandlerStubDispatch::Accept(network_hints::mojom::NetworkHintsHandler*, mojo::Message*) + 1148
6   Electron Framework                  0x0000000117ebc45f mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message*) + 991
7   Electron Framework                  0x0000000117ec09fb mojo::MessageDispatcher::Accept(mojo::Message*) + 283
8   Electron Framework                  0x0000000117ebdb08 mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message*) + 120
9   Electron Framework                  0x0000000117ec65cb mojo::internal::MultiplexRouter::ProcessIncomingMessage(mojo::internal::MultiplexRouter::MessageWrapper*, mojo::internal::MultiplexRouter::ClientCallBehavior, base::SequencedTaskRunner*) + 1451
10  Electron Framework                  0x0000000117ec5a7a mojo::internal::MultiplexRouter::Accept(mojo::Message*) + 426
11  Electron Framework                  0x0000000117ec09fb mojo::MessageDispatcher::Accept(mojo::Message*) + 283
12  Electron Framework                  0x0000000117eb4184 mojo::Connector::DispatchMessage(mojo::Message) + 420
13  Electron Framework                  0x0000000117eb5146 mojo::Connector::ReadAllAvailableMessages() + 710
14  Electron Framework                  0x0000000117eb4d89 mojo::Connector::OnHandleReadyInternal(unsigned int) + 185
15  Electron Framework                  0x0000000112819447 mojo::SimpleWatcher::DiscardReadyState(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&) + 103
16  Electron Framework                  0x0000000117eea8fb mojo::SimpleWatcher::OnHandleReady(int, unsigned int, mojo::HandleSignalsState const&) + 443
17  Electron Framework                  0x0000000117eeaea1 void base::internal::Invoker<base::internal::BindState<void (mojo::SimpleWatcher::*)(int, unsigned int, mojo::HandleSignalsState const&), base::WeakPtr<mojo::SimpleWatcher>, int, unsigned int, mojo::HandleSignalsState>, void ()>::RunImpl<void (mojo::SimpleWatcher::*)(int, unsigned int, mojo::HandleSignalsState const&), std::__1::tuple<base::WeakPtr<mojo::SimpleWatcher>, int, unsigned int, mojo::HandleSignalsState>, 0ul, 1ul, 2ul, 3ul>(void (mojo::SimpleWatcher::*&&)(int, unsigned int, mojo::HandleSignalsState const&), std::__1::tuple<base::WeakPtr<mojo::SimpleWatcher>, int, unsigned int, mojo::HandleSignalsState>&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul, 2ul, 3ul>) + 193
18  Electron Framework                  0x0000000117a3baf4 base::TaskAnnotator::RunTask(char const*, base::PendingTask*) + 404
19  Electron Framework                  0x0000000117a5d195 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::sequence_manager::LazyNow*, bool*) + 485
20  Electron Framework                  0x0000000117a5ce8e base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoSomeWork() + 94
21  Electron Framework                  0x0000000117af945f base::MessagePumpCFRunLoopBase::RunWork() + 63
22  Electron Framework                  0x0000000117aed45a base::mac::CallWithEHFrame(void () block_pointer) + 10
23  Electron Framework                  0x0000000117af8c3f base::MessagePumpCFRunLoopBase::RunWorkSource(void*) + 63
24  CoreFoundation                      0x00007fff2da15b21 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
25  CoreFoundation                      0x00007fff2da15ac0 __CFRunLoopDoSource0 + 103
26  CoreFoundation                      0x00007fff2da158d4 __CFRunLoopDoSources0 + 209
27  CoreFoundation                      0x00007fff2da14740 __CFRunLoopRun + 1272
28  CoreFoundation                      0x00007fff2da13bd3 CFRunLoopRunSpecific + 499
29  HIToolbox                           0x00007fff2c56965d RunCurrentEventLoopInMode + 292
30  HIToolbox                           0x00007fff2c56939d ReceiveNextEventCommon + 600
31  HIToolbox                           0x00007fff2c569127 _BlockUntilNextEventMatchingListInModeWithFilter + 64
32  AppKit                              0x00007fff2abd9ba4 _DPSNextEvent + 990
33  AppKit                              0x00007fff2abd8380 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1352
34  AppKit                              0x00007fff2abca09e -[NSApplication run] + 658
35  Electron Framework                  0x0000000117afa5fc base::MessagePumpNSApplication::DoRun(base::MessagePump::Delegate*) + 348
36  Electron Framework                  0x0000000117af8592 base::MessagePumpCFRunLoopBase::Run(base::MessagePump::Delegate*) + 130
37  Electron Framework                  0x0000000117a5db22 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(bool, base::TimeDelta) + 242
38  Electron Framework                  0x0000000117a0f12a base::RunLoop::Run() + 826
39  Electron Framework                  0x00000001164296a1 content::BrowserMainLoop::RunMainMessageLoopParts() + 225
40  Electron Framework                  0x000000011642bdf6 content::BrowserMainRunnerImpl::Run() + 102
41  Electron Framework                  0x000000011642625d content::BrowserMain(content::MainFunctionParams const&) + 269
42  Electron Framework                  0x00000001161c7f06 content::ContentMainRunnerImpl::RunServiceManager(content::MainFunctionParams&, bool) + 998
43  Electron Framework                  0x00000001161c7af3 content::ContentMainRunnerImpl::Run(bool) + 483
44  Electron Framework                  0x000000011a1031d9 service_manager::Main(service_manager::MainParams const&) + 3017
45  Electron Framework                  0x000000011441da48 content::ContentMain(content::ContentMainParams const&) + 120
46  Electron Framework                  0x00000001127d5946 ElectronMain + 134
47  Electron                            0x0000000106f22071 main + 289
48  libdyld.dylib                       0x00007fff650b97fd start + 1
49  ???                                 0x0000000000000002 0x0 + 2
```
</details>

Using lldb I was able to trace the crash to https://github.com/electron/electron/blob/efc11563e8562e87ed56e1e961434730334e9826/shell/browser/network_hints_handler_impl.cc#L33

I'm unable to get lldb to emit any frame variables, but based on some test accesses I added to the code, it appears that `render_frame_host_` is no longer valid.

### To Reproduce

This does not occur frequently, but it seems to happen most when I go "back" from a page with an iframe. I am able to reproduce using the following fiddle:

```js
const {app, BrowserWindow} = require('electron')
let mainWindow

function createWindow () {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: false,
      sandbox: true
    }
  })

  mainWindow.loadURL('https://www.google.com/search?q=js+time+interval+format')

  mainWindow.on('closed', function () {
    mainWindow = null
  })
}

app.on('ready', createWindow)

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', function () {
  if (mainWindow === null) createWindow()
})
```

Steps to recreate:

 - Wait for the google results
 - Click on the second result (html-goodies.com)
 - Wait for the page to finish loading (some iframes will load on the right side)
 - Go back (use the devtools to enter `history.back()`)

Electron should crash during the "back" navigation.
shell/browser/network_hints_handler_impl.cc
content::RenderFrameHost* frame_host)
    : network_hints::SimpleNetworkHintsHandlerImpl(
          frame_host->GetProcess()->GetID(),
          frame_host->GetRoutingID()),
      render_frame_host_(frame_host) {}
NetworkHintsHandlerImpl::~NetworkHintsHandlerImpl() = default;
void NetworkHintsHandlerImpl::Preconnect(const GURL& url,
                                         bool allow_credentials) {
  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
  content::BrowserContext* browser_context =
      render_frame_host_->GetProcess()->GetBrowserContext();
  auto* session = electron::api::Session::FromWrappedClass(
      v8::Isolate::GetCurrent(),
      static_cast<electron::ElectronBrowserContext*>(browser_context));
  if (session) {
    session->Emit("preconnect", url, allow_credentials);
  }
}
void NetworkHintsHandlerImpl::Create(
    content::RenderFrameHost* frame_host,
    mojo::PendingReceiver<network_hints::mojom::NetworkHintsHandler> receiver) {
  mojo::MakeSelfOwnedReceiver(
      base::WrapUnique(new NetworkHintsHandlerImpl(frame_host)),
      std::move(receiver));
}