### Preflight Checklist
* [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
```js
let ret = shell.openItem('file:///noexistent');
console.log(ret);
```
`ret` is always `true` on Linux even if opening fails, e.g.
```sh
xdg-open 'file:///noexistent'
echo $?
```
Shows nonzero error code.

* **Electron Version:**
  * v6.0.11
* **Operating System:**
  *Linux / Ubuntu 16.04 x64

### Expected Behavior
`ret` should be `false`, if `xdg-open` returns non-zero code.

Optional: It would be very nice if the `xdg-open` error (catch stderr) would be displayed in `dialog.showErrorBox` if it returns non-zero code. Just take care that `xdg-open` may write some warnings to stderr even if it returns 0.

shell/browser/ui/inspectable_web_contents_impl.cc
const char kChromeUIDevToolsRemoteFrontendPath[] = "serve_file";
const char kDevToolsBoundsPref[] = "electron.devtools.bounds";
const char kDevToolsZoomPref[] = "electron.devtools.zoom";
const char kDevToolsPreferences[] = "electron.devtools.preferences";
const char kFrontendHostId[] = "id";
const char kFrontendHostMethod[] = "method";
const char kFrontendHostParams[] = "params";
const char kTitleFormat[] = "Developer Tools - %s";
const size_t kMaxMessageChunkSize = IPC::Channel::kMaximumMessageSize / 4;
InspectableWebContentsImpl::List g_web_contents_instances_;
base::Value RectToDictionary(const gfx::Rect& bounds) {
  base::Value dict(base::Value::Type::DICTIONARY);
  dict.SetKey("x", base::Value(bounds.x()));
  dict.SetKey("y", base::Value(bounds.y()));
  dict.SetKey("width", base::Value(bounds.width()));
  dict.SetKey("height", base::Value(bounds.height()));
  return dict;
}
gfx::Rect DictionaryToRect(const base::Value* dict) {
  const base::Value* found = dict->FindKey("x");
  int x = found ? found->GetInt() : 0;
  found = dict->FindKey("y");
  int y = found ? found->GetInt() : 0;
  found = dict->FindKey("width");
  int width = found ? found->GetInt() : 800;
  found = dict->FindKey("height");
  int height = found ? found->GetInt() : 600;
  return gfx::Rect(x, y, width, height);
}
bool IsPointInRect(const gfx::Point& point, const gfx::Rect& rect) {