<!--  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:** 
  * v11.2.2 
* **Operating System:** 
  * macOS 11.0.1 
* **Last Known Working Electron version:**
  * <!-- (if applicable) e.g. 3.1.0 --> v10.x.y (but only on Mojave, see "Additional Information") 

### Expected Behavior
<!-- A clear and concise description of what you expected to happen. -->
When I call `navigator.bluetooth.requestDevice({ acceptAllDevices: true})` I expect a promise to be returned, as described in the [documentation](https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API).

### Actual Behavior
<!-- A clear and concise description of what actually happened. -->
When I call `navigator.bluetooth.requestDevice({ acceptAllDevices: true})` (or any other Web Bluetooth API call) electron crashes with the following error trace from the terminal: 
![Screenshot 2021-02-04 at 10 24 12](https://user-images.githubusercontent.com/35025032/106872043-2df38a00-66d3-11eb-879f-c1210a9daf55.png)
The log can be seen here, but nothing in it stands out to me: 
[electron crash log.txt](https://github.com/electron/electron/files/5924542/electron.crash.log.txt)


### To Reproduce
<!--
Your best chance of getting this bug looked at quickly is to provide an example.
-->
I've added a small example for you to try out here: https://github.com/JakobOffersen/electron-bluetooth-issue
Steps: 
- Clone the project: `git clone https://github.com/JakobOffersen/electron-bluetooth-issue.git`. There is only the `main` branch. 
- Run `npm install`
- Run `npm start`
- Click the "Use Web Bluetooth" button 

<!--
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
<!-- If applicable, add screenshots to help explain your problem. -->

### Additional Information
<!-- Add any other context about the problem here. -->
I've run the sample project on 2 macOS versions and I found the following: 
- On MacOS Big Sur (11.0.1): Electron `beta`, `v11`, `v10` and `v9` all lead to crashes.
- MacOS Mojave (10.14.6): Electron `v9` and `v10` works as expected, but `v11` lead to crash. 

shell/browser/api/electron_api_web_contents.cc
gfx::Rect rect;
  gin_helper::Promise<gfx::Image> promise(args->isolate());
  v8::Local<v8::Promise> handle = promise.GetHandle();
   get rect arguments if they exist
  args->GetNext(&rect);
  auto* const view = ontents()->GetRenderWidgetHostView();
  if (!view) {
    promise.Resolve(gfx::Image());
    return handle;
  }
   Capture full page if user doesn't specify a |rect|.
  const gfx::Size view_size =
      rect.IsEmpty() ? view->GetViewBounds().size() : rect.size();
   By default, the requested bitmap size is the view size in screen
   coordinates.  However, if there's more pixel detail available on the
   current system, increase the requested bitmap size to capture it all.
  gfx::Size bitmap_size = view_size;
  const gfx::NativeView native_view = view->GetNativeView();
  const float scale = display::Screen::GetScreen()
                          ->GetDisplayNearestView(native_view)
                          .device_scale_factor();
  if (scale > 1.0f)
    bitmap_size = gfx::ScaleToCeiledSize(view_size, scale);
  view->CopyFromSurface(gfx::Rect(rect.origin(), view_size), bitmap_size,
                        base::BindOnce(&OnCapturePageDone, std::move(promise)));
  return handle;
}
void WebContents::IncrementCapturerCount(gin::Arguments* args) {