* Electron version: 1.7.9
* Operating system: macOS 10.12.6

### Expected behavior

Often Electron apps want to get in front of `openExternal` calls to prevent them, or display a "are you sure you want to open" dialog for possibly unsafe url schemes like `ssh://`. At the moment, you can either blanket deny these or allow all for a give host via a `permissionRequestHandler`. It would be helpful for the permission handler to be given the url that the window is attempting to navigate to better determine the action it should take.


```
 $ git clone git@github.com:gerges/electron-quick-start.git -b  feat/set-permission-handler-openexternal-url
 $ npm install
 $ npm run start
```
atom/browser/atom_permission_manager.cc
content::WebContents::FromRenderFrameHost(render_frame_host);
  int request_id = pending_requests_.Add(base::MakeUnique<PendingRequest>(
      render_frame_host, permissions, response_callback));
  for (size_t i = 0; i < permissions.size(); ++i) {
    auto permission = permissions[i];
    if (permission == content::PermissionType::MIDI_SYSEX) {
      content::ChildProcessSecurityPolicy::GetInstance()->
          GrantSendMidiSysExMessage(render_frame_host->GetProcess()->GetID());
    }
    const auto callback =
        base::Bind(&AtomPermissionManager::OnPermissionResponse,
                   base::Unretained(this), request_id, i);
    request_handler_.Run(web_contents, permission, callback);
  }
  return request_id;
}
void AtomPermissionManager::OnPermissionResponse(
    int request_id,
    int permission_id,
    blink::mojom::PermissionStatus status) {
  auto pending_request = pending_requests_.Lookup(request_id);
  if (!pending_request)
    return;
  pending_request->SetPermissionStatus(permission_id, status);
  if (pending_request->IsComplete()) {
    pending_request->RunCallback();
    pending_requests_.Remove(request_id);
  }
}
void AtomPermissionManager::CancelPermissionRequest(int request_id) {