<!--
Thanks for opening an issue! A few things to keep in mind:

- The issue tracker is only for bugs and feature requests.
- Before reporting a bug, please try reproducing your issue against
  the latest version of Electron.
- If you need general advice, join our Slack: http://atom-slack.herokuapp.com
-->

* Electron version: 1.6.1
* Operating system: openSUSE Leap 42.2 (Linux 4.4.49, x86-64); also reproducible on Windows Server 2016 14393.

### Expected behavior

<!-- What do you think should happen? -->
In BrowserWindow or webview with context isolation enabled, calling `fetch` in preload script should work.  

### Actual behavior

<!-- What actually happens? -->
The page crashes and becomes blank. Devtools shows "Devtools was disconnected from the page".

### How to reproduce

<!-- For bugs, provide sample code or a repo URL that demos the problem -->
Download electron-quick-start, add `webPreferences: {preload: path.join(__dirname, 'index.js'), contextIsolation: true}` to the BrowserWindow options in main.js. 

Create index.js: `console.log(fetch('http://example.com'))`

Run `electron .` and it crashes. If started without preload script, calling `fetch('http://example.com')` in Electron Isolated Context of devtools also causes crash.

----

I think the problem may be related with the Isolated Context's security origin. In my local electron build I add the following to CreateIsolatedWorldContext() in atom/renderer/atom_renderer_client.cc to enable cross origin requests, which can make `fetch` work.

    static auto universalOriginURL = blink::WebURL(GURL("app://universal"));
    static auto universalOrigin = []() {
        auto result = blink::WebSecurityOrigin::create(universalOriginURL);
        for (const char* scheme : {"http", "https"}) {
            blink::WebSecurityPolicy::addOriginAccessWhitelistEntry(universalOriginURL,
                blink::WebString::fromUTF8(scheme), blink::WebString(), true);
        }
        return result;
    }();
    render_frame_->GetWebFrame()->setIsolatedWorldSecurityOrigin(
        World::ISOLATED_WORLD, universalOrigin);
atom/renderer/atom_renderer_client.cc
}
void AtomRendererClient::RenderThreadStarted() {
  blink::WebCustomElement::addEmbedderCustomElementName("webview");
  blink::WebCustomElement::addEmbedderCustomElementName("browserplugin");
  OverrideNodeArrayBuffer();
  preferences_manager_.reset(new PreferencesManager);
#if defined(OS_WIN)
  
  base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
  base::string16 app_id =
      command_line->GetSwitchValueNative(switches::kAppUserModelId);
  if (!app_id.empty()) {
    SetCurrentProcessExplicitAppUserModelID(app_id.c_str());
  }
#endif
#if defined(OS_MACOSX)
  
  base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
  if (!command_line->HasSwitch(switches::kScrollBounce)) {
    base::ScopedCFTypeRef<CFStringRef> key(
        base::SysUTF8ToCFStringRef("NSScrollViewRubberbanding"));
    base::ScopedCFTypeRef<CFStringRef> value(
        base::SysUTF8ToCFStringRef("false"));
    CFPreferencesSetAppValue(key, value, kCFPreferencesCurrentApplication);
    CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
  }
#endif
}
void AtomRendererClient::RenderFrameCreated(