### Issue Details

* **Electron Version:**
  * 13.0.0-nightly.20201203
* **Operating System:**
  * macOS
* **Last Known Working Electron version:**
  * N/A

### Expected Behavior
`WebFrameMain.frames` should never contain undefined

### Actual Behavior
```
Uncaught Exception:
TypeError: Cannot read property 'processId' of undefined
    at id (/private/var/folders/_7/jm5cr84j7jd4v7btf2d3bqwm0000gn/T/tmp-59557-p4DTr3KWOsNk/main.js:4:38)
    at pft (/private/var/folders/_7/jm5cr84j7jd4v7btf2d3bqwm0000gn/T/tmp-59557-p4DTr3KWOsNk/main.js:6:36)
    at Timeout._onTimeout (/private/var/folders/_7/jm5cr84j7jd4v7btf2d3bqwm0000gn/T/tmp-59557-p4DTr3KWOsNk/main.js:27:5)
    at listOnTimeout (internal/timers.js:554:17)
    at processTimers (internal/timers.js:497:7)
```

### To Reproduce
Run https://gist.github.com/f46823470955034b4a456b6275862bfb for a short while and you'll observe the above error.

cc @samuelmaddock 

shell/browser/api/electron_api_web_frame_main.cc
bool user_gesture;
  if (!args->PeekNext().IsEmpty()) {
    if (args->PeekNext()->IsBoolean()) {
      args->GetNext(&user_gesture);
    } else {
      args->ThrowTypeError("userGesture must be a boolean");
      return handle;
    }
  } else {
    user_gesture = false;
  }
  if (render_frame_disposed_) {
    promise.RejectWithErrorMessage(
        "Render frame was disposed before WebFrameMain could be accessed");
    return handle;
  }
  if (user_gesture) {
    auto* ftn = content::FrameTreeNode::From(render_frame_);
    ftn->UpdateUserActivationState(
        blink::mojom::UserActivationUpdateType::kNotifyActivation,
        blink::mojom::UserActivationNotificationType::kTest);
  }
  render_frame_->ExecuteJavaScriptForTests(
      code, base::BindOnce([](gin_helper::Promise<base::Value> promise,
                              base::Value value) { promise.Resolve(value); },
                           std::move(promise)));
  return handle;
}
v8::Local<v8::Promise> WebFrameMain::ExecuteJavaScriptInIsolatedWorld(