- Electron version: 1.2.1
- Operating system: Mac OS X

See also https://github.com/electron/electron/issues/5714

STR:
1. Start a webserver on localhost:port that serves a dummy index.html
2. Register a custom http protocol.
   
   ``` js
   electron.protocol.registerStandardSchemes(['foobar', 'http', 'https']);
   
   app.on('ready', function() {
     electron.protocol.registerHttpProtocol('foobar', (request, callback) => {
       const redirectPath = `http://localhost:port/index.html`;
       callback({ method: request.method, referrer: request.referrer, url: redirectPath });
     }, e => { if (e) { console.log(e); } });
   });
   ```
3. Either through devtools, or via some js in our index.html, have a single line that does `fetch('http://localhost:port/index.html')` or anything else from our server.

Results: as soon as `fetch` is called, the webview becomes black, and the devtools crash if they were open. No other visible error or stdout.

If devtools were open, they show this message: "Devtools was disconnected from the page.
Once page is reloaded, DevTools will automatically reconnect."

atom/browser/atom_browser_client.cc
const std::vector<std::string>& schemes) {
  g_custom_service_worker_schemes = base::JoinString(schemes, ",");
}
AtomBrowserClient::AtomBrowserClient() : delegate_(nullptr) {
}
AtomBrowserClient::~AtomBrowserClient() {
}
content::WebContents* AtomBrowserClient::GetWebContentsFromProcessID(
    int process_id) {
  
  if (ContainsKey(pending_processes_, process_id))
    process_id = pending_processes_[process_id];
  
  
  return WebContentsPreferences::GetWebContentsFromProcessID(process_id);
}
void AtomBrowserClient::RenderProcessWillLaunch(
    content::RenderProcessHost* host) {
  int process_id = host->GetID();
  host->AddFilter(new printing::PrintingMessageFilter(process_id));
  host->AddFilter(new TtsMessageFilter(process_id, host->GetBrowserContext()));
  host->AddFilter(
      new WidevineCdmMessageFilter(process_id, host->GetBrowserContext()));
}
content::SpeechRecognitionManagerDelegate*
    AtomBrowserClient::CreateSpeechRecognitionManagerDelegate() {
  return new AtomSpeechRecognitionManagerDelegate;
}
content::AccessTokenStore* AtomBrowserClient::CreateAccessTokenStore() {