<!--  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:**
  * 8.0.2 (also checked on 8.2.5.)
* **Operating System:**
  * Windows 10 Pro (1903)
* **Last Known Working Electron version:**
  * <!-- (if applicable) e.g. 3.1.0 -->

### Expected Behavior
The menu is created without any errors

### Actual Behavior
Error:

```
render.js:48 Uncaught (in promise) Error: Could not call remote method 'buildFromTemplate'. Check that the method signature is correct. Underlying error: Error processing argument at index 1, conversion failure from 
Underlying stack: TypeError: Error processing argument at index 1, conversion failure from 
    at Menu../lib/browser/api/menu.js.Menu.insert (electron/js2c/browser_init.js:1855:23)
    at Menu../lib/browser/api/menu.js.Menu.append (electron/js2c/browser_init.js:1835:15)
    at electron/js2c/browser_init.js:1913:12
    at Array.forEach (<anonymous>)
    at Function../lib/browser/api/menu.js.Menu.buildFromTemplate (electron/js2c/browser_init.js:1909:10)
    at electron/js2c/browser_init.js:6745:67
    at IpcMainImpl.<anonymous> (electron/js2c/browser_init.js:6610:27)
    at IpcMainImpl.emit (events.js:210:5)
    at WebContents.<anonymous> (electron/js2c/browser_init.js:3873:23)
    at WebContents.emit (events.js:210:5)

    at electron/js2c/browser_init.js:6748:21
    at IpcMainImpl.<anonymous> (electron/js2c/browser_init.js:6610:27)
    at IpcMainImpl.emit (events.js:210:5)
    at WebContents.<anonymous> (electron/js2c/browser_init.js:3873:23)
    at WebContents.emit (events.js:210:5)
getVideoSources @ render.js:48
async function (async)
getVideoSources @ render.js:32
```

### To Reproduce

```sh
$ git clone https://github.com/dropsonic/223-electron-screen-recorder.git -b master
$ npm install
$ npm start
```
Press 'Choose a Video Source' button.

The code:

```node
async function getVideoSources() {
	const inputSources = await desktopCapturer.getSources({
		types: [ 'window', 'screen' ],
		fetchWindowIcons: true
	});

	const videoOptionsMenu = Menu.buildFromTemplate(
		inputSources.map((source) => {
			return {
				label: source.name,
				icon: source.appIcon,
				click: () => selectSource(source)
			};
		})
	);

	videoOptionsMenu.popup();
}
```

### Screenshots
![image](https://user-images.githubusercontent.com/1544021/81292903-18363300-9075-11ea-84d1-e22368f0f1ec.png)

### Additional Information
I've also tried to set `nativeImage.createEmpty()` as an icon but got the same error.
shell/common/api/electron_api_native_image.cc
const GURL& url) {
  std::string mime_type, charset, data;
  if (net::DataURL::Parse(url, &mime_type, &charset, &data)) {
    if (mime_type == "image/png")
      return CreateFromPNG(isolate, data.c_str(), data.size());
    else if (mime_type == "image/jpeg")
      return CreateFromJPEG(isolate, data.c_str(), data.size());
  }
  return CreateEmpty(isolate);
}
#if !defined(OS_MACOSX)
gin::Handle<NativeImage> NativeImage::CreateFromNamedImage(gin::Arguments* args,