Browse Source

browser: emit did-fail-load for invalid url

Robo 9 years ago
parent
commit
5a8bebc2f8
2 changed files with 21 additions and 4 deletions
  1. 8 0
      atom/browser/api/atom_api_web_contents.cc
  2. 13 4
      spec/api-browser-window-spec.js

+ 8 - 0
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<int>(net::ERR_INVALID_URL),
+         net::ErrorToShortString(net::ERR_INVALID_URL),
+         url.possibly_invalid_spec());
+    return;
+  }
+
   content::NavigationController::LoadURLParams params(url);
 
   GURL http_referrer;

+ 13 - 4
spec/api-browser-window-spec.js

@@ -94,11 +94,20 @@ describe('browser-window module', function() {
       });
       return w.loadURL('about:blank');
     });
-    return it('should emit did-fail-load event', function(done) {
-      w.webContents.on('did-fail-load', function() {
-        return done();
+    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();
       });
-      return w.loadURL('file://a.txt');
+      w.loadURL('http://example:port');
     });
   });
   describe('BrowserWindow.show()', function() {