* Electron Version: 3.0.0-beta.1
* Operating System (Platform and Version): macOS 10.13.5
* Last known working Electron version: 2.0.3

**Expected Behavior**
Dev tools extension tabs should appear after being added with the `BrowserWindow.addDevToolsExtension` API. I specifically tested the React and Redux extensions. I can tell the React extension is getting installed but not being shown because the usual
> Download the React DevTools for a better development experience

warning is absent.

**Actual behavior**
Dev tools extension tabs do not appear.

**To Reproduce**
Manually obtain the extension paths following the instructions here:
https://electronjs.org/docs/tutorial/devtools-extension
and supply them to `addDevToolsExtensions`.

Alternately, use [electron-devtools-installer](https://github.com/MarshallOfSound/electron-devtools-installer), which I have a repro case for using just Redux here:
https://github.com/ajmacd/electron-quick-start-typescript

Working with 2.0.3:
```sh
$ git clone https://github.com/ajmacd/electron-quick-start-typescript -b 2.0.3-devtools-working 
$ cd electron-quick-start-typescript
$ npm install
$ npm start
```

Not working with 3.0.0-beta.1:
```sh
$ git checkout 3.0.0-beta.1-devtools-not-working
$ npm install
$ npm start
```
brightray/browser/inspectable_web_contents_impl.cc
const std::string& origin,
    const std::string& script) {
  extensions_api_[origin + "/"] = script;
}
void InspectableWebContentsImpl::HandleMessageFromDevToolsFrontend(
    const std::string& message) {
  
  if (!embedder_message_dispatcher_) {
    return;
  }
  std::string method;
  base::ListValue empty_params;
  base::ListValue* params = &empty_params;
  base::DictionaryValue* dict = nullptr;
  std::unique_ptr<base::Value> parsed_message(base::JSONReader::Read(message));
  if (!parsed_message || !parsed_message->GetAsDictionary(&dict) ||
      !dict->GetString(kFrontendHostMethod, &method) ||
      (dict->HasKey(kFrontendHostParams) &&
       !dict->GetList(kFrontendHostParams, &params))) {
    LOG(ERROR) << "Invalid message was sent to embedder: " << message;
    return;
  }
  int id = 0;
  dict->GetInteger(kFrontendHostId, &id);
  embedder_message_dispatcher_->Dispatch(
      base::Bind(&InspectableWebContentsImpl::SendMessageAck,
                 weak_factory_.GetWeakPtr(), id),
      method, params);
}
void InspectableWebContentsImpl::DispatchProtocolMessage(