- Electron version: 1.3.6
- Operating system: Windows 7 x64
- Other: Microsoft Office 2013 (will make more sense in a bit)

`shell.openItem()` is a blocking call, it would be nice if it's async or has an async version to handle synchronous external application behavior.

Reproduce: 
Open a password-protected Microsoft Excel file, `shell.openItem()` will be blocking until the Password window is submitted or dismissed. Consequently Microsoft Word does not have this issue.

Related to #2761.

shell/browser/ui/inspectable_web_contents_impl.cc
return GURL(base::StringPrintf("%s%s/%s/",
                                 kChromeUIDevToolsRemoteFrontendBase,
                                 kChromeUIDevToolsRemoteFrontendPath,
                                 content::GetWebKitRevision().c_str()));
}
GURL GetDevToolsURL(bool can_dock) {
  auto url_string = base::StringPrintf(kChromeUIDevToolsURL,
                                       GetRemoteBaseURL().spec().c_str(),
                                       can_dock ? "true" : "");
  return GURL(url_string);
}
}  
class InspectableWebContentsImpl::NetworkResourceLoader
    : public network::SimpleURLLoaderStreamConsumer {
 public:
  NetworkResourceLoader(int stream_id,
                        InspectableWebContentsImpl* bindings,
                        std::unique_ptr<network::SimpleURLLoader> loader,
                        network::mojom::URLLoaderFactory* url_loader_factory,
                        const DispatchCallback& callback)
      : stream_id_(stream_id),
        bindings_(bindings),
        loader_(std::move(loader)),
        callback_(callback) {
    loader_->SetOnResponseStartedCallback(base::BindOnce(
        &NetworkResourceLoader::OnResponseStarted, base::Unretained(this)));
    loader_->DownloadAsStream(url_loader_factory, this);
  }
  NetworkResourceLoader(const NetworkResourceLoader&) = delete;