### Preflight Checklist

- [X] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/main/CONTRIBUTING.md) for this project.
- [X] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/main/CODE_OF_CONDUCT.md) that this project adheres to.
- [X] I have searched the [issue tracker](https://www.github.com/electron/electron/issues) for a bug report that matches the one I want to file, without success.

### Electron Version

17, 18

### What operating system are you using?

Windows

### Operating System Version

Windows 10 19042.985

### What arch are you using?

x64

### Last Known Working Electron version

14

### Expected Behavior

No crash

### Actual Behavior

Electron crashes
![2022-04-21 10_07_53-Source Not Found (Debugging) - Microsoft Visual Studio](https://user-images.githubusercontent.com/10595986/164416772-c4800f31-d165-4639-88e3-23be25d8fe8c.png)

This does not happen consistently but fairly often and can be reproduced in the app.
I have not been able yet to make a small/standalone reproducable example

### Testcase Gist URL

_No response_

### Additional Information

_No response_
shell/browser/api/electron_api_web_contents.cc
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) {
  gfx::Size size;
  bool stay_hidden = false;
  bool stay_awake = false;
   get size arguments if they exist
  args->GetNext(&size);
   get stayHidden arguments if they exist
  args->GetNext(&stay_hidden);
   get stayAwake arguments if they exist
  args->GetNext(&stay_awake);
  std::ignore = ontents()
                    ->IncrementCapturerCount(size, stay_hidden, stay_awake)
                    .Release();
}
void WebContents::DecrementCapturerCount(gin::Arguments* args) {