diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 80e5b606ef8d..a7946786c514 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -710,6 +710,14 @@ bool WebContents::Equal(const WebContents* web_contents) const { } void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) { + if (!url.is_valid()) { + Emit("did-fail-load", + static_cast(net::ERR_INVALID_URL), + net::ErrorToShortString(net::ERR_INVALID_URL), + url.possibly_invalid_spec()); + return; + } + content::NavigationController::LoadURLParams params(url); GURL http_referrer; diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index d59eb9a8baa4..1c92d408c4c9 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -102,12 +102,22 @@ describe('browser-window module', function() { w.loadURL('about:blank'); }); - it('should emit did-fail-load event', function(done) { - w.webContents.on('did-fail-load', function() { + it('should emit did-fail-load event for files that do not exist', function(done) { + w.webContents.on('did-fail-load', function(event, code) { + assert.equal(code, -6); done(); }); w.loadURL('file://a.txt'); }); + + it('should emit did-fail-load event for invalid URL', function(done) { + w.webContents.on('did-fail-load', function(event, code, desc) { + assert.equal(desc, 'ERR_INVALID_URL'); + assert.equal(code, -300); + done(); + }); + w.loadURL('http://example:port'); + }); }); describe('BrowserWindow.show()', function() { diff --git a/spec/fixtures/pages/process-exit.html b/spec/fixtures/pages/process-exit.html new file mode 100644 index 000000000000..012c9f85b155 --- /dev/null +++ b/spec/fixtures/pages/process-exit.html @@ -0,0 +1,9 @@ + + + + +