From 8c5f171a93217210223cde1cf182d08044d35727 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Wed, 29 Apr 2015 19:19:31 +0530 Subject: [PATCH] webContents: providing dom-ready event --- atom/browser/api/atom_api_web_contents.cc | 6 ++++++ atom/browser/api/atom_api_web_contents.h | 2 ++ atom/browser/lib/guest-view-manager.coffee | 1 + .../lib/web-view/guest-view-internal.coffee | 1 + docs/api/browser-window.md | 6 ++++++ docs/api/web-view-tag.md | 4 ++++ spec/api-browser-window-spec.coffee | 21 +++++++++++++++++++++ spec/fixtures/pages/f.html | 11 +++++++++++ 8 files changed, 52 insertions(+) create mode 100644 spec/fixtures/pages/f.html diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 0400e94..a25a00a 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -196,6 +196,12 @@ void WebContents::RenderProcessGone(base::TerminationStatus status) { Emit("crashed"); } +void WebContents::DocumentLoadedInFrame( + content::RenderFrameHost* render_frame_host) { + if (!render_frame_host->GetParent()) + Emit("dom-ready"); +} + void WebContents::DidFinishLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url) { bool is_main_frame = !render_frame_host->GetParent(); diff --git a/atom/browser/api/atom_api_web_contents.h b/atom/browser/api/atom_api_web_contents.h index 371c338..0d146a6 100644 --- a/atom/browser/api/atom_api_web_contents.h +++ b/atom/browser/api/atom_api_web_contents.h @@ -145,6 +145,8 @@ class WebContents : public mate::EventEmitter, // content::WebContentsObserver: void RenderViewDeleted(content::RenderViewHost*) override; void RenderProcessGone(base::TerminationStatus status) override; + void DocumentLoadedInFrame( + content::RenderFrameHost* render_frame_host) override; void DidFinishLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url) override; void DidFailLoad(content::RenderFrameHost* render_frame_host, diff --git a/atom/browser/lib/guest-view-manager.coffee b/atom/browser/lib/guest-view-manager.coffee index 6fc7013..43f4d7c 100644 --- a/atom/browser/lib/guest-view-manager.coffee +++ b/atom/browser/lib/guest-view-manager.coffee @@ -10,6 +10,7 @@ supportedWebViewEvents = [ 'did-stop-loading' 'did-get-response-details' 'did-get-redirect-request' + 'dom-ready' 'console-message' 'new-window' 'close' diff --git a/atom/renderer/lib/web-view/guest-view-internal.coffee b/atom/renderer/lib/web-view/guest-view-internal.coffee index 402bb5c..04aa5c5 100644 --- a/atom/renderer/lib/web-view/guest-view-internal.coffee +++ b/atom/renderer/lib/web-view/guest-view-internal.coffee @@ -12,6 +12,7 @@ WEB_VIEW_EVENTS = 'did-get-response-details': ['status', 'newUrl', 'originalUrl', 'httpResponseCode', 'requestMethod', 'referrer'] 'did-get-redirect-request': ['oldUrl', 'newUrl', 'isMainFrame'] + 'dom-ready': [] 'console-message': ['level', 'message', 'line', 'sourceId'] 'new-window': ['url', 'frameName', 'disposition'] 'close': [] diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index e4cec40..6852144 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -663,6 +663,12 @@ Emitted when details regarding a requested resource is available. Emitted when a redirect was received while requesting a resource. +### Event: 'dom-ready' + +* `event` Event + +Emitted when document in the given frame is loaded. + ### Event: 'page-favicon-updated' * `event` Event diff --git a/docs/api/web-view-tag.md b/docs/api/web-view-tag.md index 3d2a7fa..697860c 100644 --- a/docs/api/web-view-tag.md +++ b/docs/api/web-view-tag.md @@ -333,6 +333,10 @@ Fired when details regarding a requested resource is available. Fired when a redirect was received while requesting a resource. +### dom-ready + +Fired when document in the given frame is loaded. + ### page-title-set * `title` String diff --git a/spec/api-browser-window-spec.coffee b/spec/api-browser-window-spec.coffee index fce7eeb..e2e03ac 100644 --- a/spec/api-browser-window-spec.coffee +++ b/spec/api-browser-window-spec.coffee @@ -2,6 +2,8 @@ assert = require 'assert' fs = require 'fs' path = require 'path' remote = require 'remote' +http = require 'http' +url = require 'url' BrowserWindow = remote.require 'browser-window' @@ -222,3 +224,22 @@ describe 'browser-window module', -> assert.equal url, 'https://www.github.com/' done() w.loadUrl "file://#{fixtures}/pages/will-navigate.html" + + describe 'dom-ready event', -> + it 'emits when document is loaded', (done) -> + server = http.createServer (req, res) -> + action = url.parse(req.url, true).pathname + if action == '/logo.png' + img = fs.readFileSync(path.join(fixtures, 'assets', 'logo.png')) + res.writeHead(200, {'Content-Type': 'image/png'}) + setTimeout -> + res.end(img, 'binary') + , 2000 + server.close() + server.listen 62542, '127.0.0.1' + remote.require('ipc').on 'dom-ready', (e, state) -> + assert.equal state, 'interactive' + done() + w.webContents.on 'did-finish-load', -> + w.close() + w.loadUrl "file://#{fixtures}/pages/f.html" diff --git a/spec/fixtures/pages/f.html b/spec/fixtures/pages/f.html new file mode 100644 index 0000000..e2003a3 --- /dev/null +++ b/spec/fixtures/pages/f.html @@ -0,0 +1,11 @@ + + + + + + -- 2.7.4