- 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/api/atom_api_protocol.cc
const CompletionCallback& callback, ProtocolError error) {
  
  if (callback.is_null())
    return;
  v8::Locker locker(isolate());
  v8::HandleScope handle_scope(isolate());
  if (error == PROTOCOL_OK) {
    callback.Run(v8::Null(isolate()));
  } else {
    std::string str = ErrorCodeToString(error);
    callback.Run(v8::Exception::Error(mate::StringToV8(isolate(), str)));
  }
}
std::string Protocol::ErrorCodeToString(ProtocolError error) {
  switch (error) {
    case PROTOCOL_FAIL: return "Failed to manipulate protocol factory";
    case PROTOCOL_REGISTERED: return "The scheme has been registred";
    case PROTOCOL_NOT_REGISTERED: return "The scheme has not been registred";
    case PROTOCOL_INTERCEPTED: return "The scheme has been intercepted";
    case PROTOCOL_NOT_INTERCEPTED: return "The scheme has not been intercepted";
    default: return "Unexpected error";
  }
}
mate::Handle<Protocol> Protocol::Create(
    v8::Isolate* isolate, AtomBrowserContext* browser_context) {
  return mate::CreateHandle(isolate, new Protocol(isolate, browser_context));
}
void Protocol::BuildPrototype(