From f12f87d6f0c330a2516bba61c29b63d5aac59687 Mon Sep 17 00:00:00 2001 From: Rob Brackett Date: Mon, 4 Apr 2016 19:24:58 -0700 Subject: [PATCH] Add `isMainFrame` as last argument to WebContents `did-fail-load` event. Fixes #5013. --- atom/browser/api/atom_api_web_contents.cc | 17 ++++++++++++++--- lib/renderer/web-view/guest-view-internal.js | 2 +- spec/api-browser-window-spec.js | 14 ++++++++++++-- spec/fixtures/api/did-fail-load-iframe.html | 5 +++++ 4 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 spec/fixtures/api/did-fail-load-iframe.html diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 5156600bb..c2b04a87a 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -541,7 +541,12 @@ void WebContents::DidFailProvisionalLoad( int error_code, const base::string16& error_description, bool was_ignored_by_handler) { - Emit("did-fail-provisional-load", error_code, error_description, url); + bool is_main_frame = !render_frame_host->GetParent(); + Emit("did-fail-provisional-load", + error_code, + error_description, + url, + is_main_frame); } void WebContents::DidFailLoad(content::RenderFrameHost* render_frame_host, @@ -549,7 +554,12 @@ void WebContents::DidFailLoad(content::RenderFrameHost* render_frame_host, int error_code, const base::string16& error_description, bool was_ignored_by_handler) { - Emit("did-fail-load", error_code, error_description, validated_url); + bool is_main_frame = !render_frame_host->GetParent(); + Emit("did-fail-load", + error_code, + error_description, + validated_url, + is_main_frame); } void WebContents::DidStartLoading() { @@ -705,7 +715,8 @@ void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) { Emit("did-fail-load", static_cast(net::ERR_INVALID_URL), net::ErrorToShortString(net::ERR_INVALID_URL), - url.possibly_invalid_spec()); + url.possibly_invalid_spec(), + true); return; } diff --git a/lib/renderer/web-view/guest-view-internal.js b/lib/renderer/web-view/guest-view-internal.js index f4023d227..f8a47ac25 100644 --- a/lib/renderer/web-view/guest-view-internal.js +++ b/lib/renderer/web-view/guest-view-internal.js @@ -8,7 +8,7 @@ var requestId = 0 var WEB_VIEW_EVENTS = { 'load-commit': ['url', 'isMainFrame'], 'did-finish-load': [], - 'did-fail-load': ['errorCode', 'errorDescription', 'validatedURL'], + 'did-fail-load': ['errorCode', 'errorDescription', 'validatedURL', 'isMainFrame'], 'did-frame-finish-load': ['isMainFrame'], 'did-start-loading': [], 'did-stop-loading': [], diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index 468586eb7..a9940bde2 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -102,21 +102,31 @@ describe('browser-window module', 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) { + w.webContents.on('did-fail-load', function (event, code, desc, url, isMainFrame) { assert.equal(code, -6) + assert.equal(isMainFrame, true) 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) { + w.webContents.on('did-fail-load', function (event, code, desc, url, isMainFrame) { assert.equal(desc, 'ERR_INVALID_URL') assert.equal(code, -300) + assert.equal(isMainFrame, true) done() }) w.loadURL('http://example:port') }) + + it('should set `mainFrame = false` on did-fail-load events in iframes', function (done) { + w.webContents.on('did-fail-load', function (event, code, desc, url, isMainFrame) { + assert.equal(isMainFrame, false) + done() + }) + w.loadURL('file://' + path.join(fixtures, 'api', 'did-fail-load-iframe.html')) + }) }) describe('BrowserWindow.show()', function () { diff --git a/spec/fixtures/api/did-fail-load-iframe.html b/spec/fixtures/api/did-fail-load-iframe.html new file mode 100644 index 000000000..293041b65 --- /dev/null +++ b/spec/fixtures/api/did-fail-load-iframe.html @@ -0,0 +1,5 @@ + + + + +