Assert remote event names
authorKevin Sawicki <kevinsawicki@gmail.com>
Fri, 13 Jan 2017 00:31:02 +0000 (16:31 -0800)
committerKevin Sawicki <kevinsawicki@gmail.com>
Wed, 25 Jan 2017 20:36:55 +0000 (12:36 -0800)
lib/browser/rpc-server.js
spec/api-ipc-spec.js
spec/fixtures/api/remote-event-handler.html [moved from spec/fixtures/api/reload-page.html with 60% similarity]
spec/static/main.js

index d097d91..5a87170 100644 (file)
@@ -161,7 +161,7 @@ const rendererMissingErrorMessage = (meta, args, callIntoRenderer) => {
   })
 
   if (remoteEvents.length > 0) {
-    message += `\nRemote event names: ${remoteEvents.join(' ')}`
+    message += `\nRemote event names: ${remoteEvents.join(', ')}`
   }
 
   return message
index eab8803..47f9b98 100644 (file)
@@ -499,12 +499,20 @@ describe('ipc module', function () {
       w = new BrowserWindow({
         show: false
       })
-      w.loadURL('file://' + path.join(fixtures, 'api', 'reload-page.html'))
-      setTimeout(() => {
-        assert.throws(() => w.webContents.emit('remote-handler'),
-          /Attempting to call a function in a renderer window that has been closed or released./)
-        done()
-      }, 400)
+      w.webContents.once('did-finish-load', () => {
+        w.webContents.once('did-finish-load', () => {
+          const expectedMessage = [
+            'Attempting to call a function in a renderer window that has been closed or released.',
+            'Function provided here: remote-event-handler.html:11:33',
+            'Remote event names: remote-handler, other-remote-handler'
+          ].join('\n')
+          const errorMessage = ipcRenderer.sendSync('try-emit-web-contents-event', w.webContents.id, 'remote-handler')
+          assert.equal(errorMessage, expectedMessage)
+          done()
+        })
+        w.webContents.reload()
+      })
+      w.loadURL('file://' + path.join(fixtures, 'api', 'remote-event-handler.html'))
     })
   })
 
similarity index 60%
rename from spec/fixtures/api/reload-page.html
rename to spec/fixtures/api/remote-event-handler.html
index 240548c..30c3cfb 100644 (file)
@@ -7,8 +7,9 @@
       const {remote} = require('electron')
       const browserWindow = remote.getCurrentWindow()
 
-      browserWindow.webContents.on('remote-handler', () => { })
-      browserWindow.reload()
+      const handler = () => {}
+      browserWindow.webContents.on('remote-handler', handler)
+      browserWindow.webContents.on('other-remote-handler', handler)
     </script>
   </head>
   <body>
index 9612ed2..cb14f9d 100644 (file)
@@ -249,3 +249,13 @@ ipcMain.on('create-window-with-options-cycle', (event) => {
 ipcMain.on('prevent-next-new-window', (event, id) => {
   webContents.fromId(id).once('new-window', event => event.preventDefault())
 })
+
+ipcMain.on('try-emit-web-contents-event', (event, id, eventName) => {
+  const contents = webContents.fromId(id)
+  try {
+    contents.emit(eventName, {sender: contents})
+    event.returnValue = null
+  } catch (error) {
+    event.returnValue = error.message
+  }
+})