webContents: providing dom-ready event
authordeepak1556 <hop2deep@gmail.com>
Wed, 29 Apr 2015 13:49:31 +0000 (19:19 +0530)
committerdeepak1556 <hop2deep@gmail.com>
Thu, 30 Apr 2015 04:28:29 +0000 (09:58 +0530)
atom/browser/api/atom_api_web_contents.cc
atom/browser/api/atom_api_web_contents.h
atom/browser/lib/guest-view-manager.coffee
atom/renderer/lib/web-view/guest-view-internal.coffee
docs/api/browser-window.md
docs/api/web-view-tag.md
spec/api-browser-window-spec.coffee
spec/fixtures/pages/f.html [new file with mode: 0644]

index 0400e94..a25a00a 100644 (file)
@@ -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();
index 371c338..0d146a6 100644 (file)
@@ -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,
index 6fc7013..43f4d7c 100644 (file)
@@ -10,6 +10,7 @@ supportedWebViewEvents = [
   'did-stop-loading'
   'did-get-response-details'
   'did-get-redirect-request'
+  'dom-ready'
   'console-message'
   'new-window'
   'close'
index 402bb5c..04aa5c5 100644 (file)
@@ -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': []
index e4cec40..6852144 100644 (file)
@@ -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
index 3d2a7fa..697860c 100644 (file)
@@ -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
index fce7eeb..e2e03ac 100644 (file)
@@ -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 (file)
index 0000000..e2003a3
--- /dev/null
@@ -0,0 +1,11 @@
+<html>
+<body>
+<img src='http://127.0.0.1:62542/logo.png' />
+<script type="text/javascript" charset="utf-8">
+  var remote = require('remote')
+  remote.getCurrentWindow().webContents.on('dom-ready', function() {
+    require('ipc').send('dom-ready', document.readyState);
+  })
+</script>
+</body>
+</html>