### 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.h
const base::string16& code);
  bool Reload();
  void Send(v8::Isolate* isolate,
            bool internal,
            const std::string& channel,
            v8::Local<v8::Value> args);
  void PostMessage(v8::Isolate* isolate,
                   const std::string& channel,
                   v8::Local<v8::Value> message_value,
                   base::Optional<v8::Local<v8::Value>> transfer);
  int FrameTreeNodeID() const;
  std::string Name() const;
  base::ProcessId OSProcessID() const;
  int ProcessID() const;
  int RoutingID() const;
  GURL URL() const;
  content::RenderFrameHost* Top() const;
  content::RenderFrameHost* Parent() const;
  std::vector<content::RenderFrameHost*> Frames() const;
  std::vector<content::RenderFrameHost*> FramesInSubtree() const;
  content::RenderFrameHost* render_frame_ = nullptr;
  
  
  bool render_frame_disposed_ = false;
  DISALLOW_COPY_AND_ASSIGN(WebFrameMain);
};
}  
}  
#endif