Browse Source

Add spec for configuring web preferences from sandboxed new-window event

Kevin Sawicki 7 years ago
parent
commit
c71b0a5441

+ 20 - 0
spec/api-browser-window-spec.js

@@ -1066,6 +1066,26 @@ describe('BrowserWindow module', function () {
         })
       })
 
+      it('should open windows with the options configured via new-window event listeners', function (done) {
+        w.destroy()
+        w = new BrowserWindow({
+          show: false,
+          webPreferences: {
+            sandbox: true
+          }
+        })
+
+        const preloadPath = path.join(fixtures, 'api', 'new-window-preload.js')
+        ipcRenderer.send('set-web-preferences-on-next-new-window', w.webContents.id, 'preload', preloadPath)
+        ipcRenderer.send('set-web-preferences-on-next-new-window', w.webContents.id, 'sandbox', true)
+        ipcMain.once('answer', (event, args) => {
+          assert.ok(args.includes('--enable-sandbox'))
+          assert.ok(args.includes(`--preload=${path.join(fixtures, 'api', 'new-window-preload.js')}`))
+          done()
+        })
+        w.loadURL(`file://${path.join(fixtures, 'api', 'new-window.html')}`)
+      })
+
       it('should set ipc event sender correctly', function (done) {
         w.destroy()
         w = new BrowserWindow({

+ 4 - 0
spec/fixtures/api/new-window-preload.js

@@ -0,0 +1,4 @@
+const {ipcRenderer} = require('electron')
+
+ipcRenderer.send('answer', process.argv)
+window.close()

+ 14 - 0
spec/fixtures/api/new-window.html

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title></title>
+  </head>
+  <body>
+    <script type="text/javascript">
+      setTimeout(function () {
+        window.open('http://localhost')
+      })
+    </script>
+  </body>
+</html>

+ 8 - 0
spec/static/main.js

@@ -264,6 +264,14 @@ ipcMain.on('prevent-next-new-window', (event, id) => {
   webContents.fromId(id).once('new-window', event => event.preventDefault())
 })
 
+ipcMain.on('set-web-preferences-on-next-new-window', (event, id, key, value) => {
+  webContents.fromId(id).once('new-window', (event, url, frameName, disposition, options) => {
+    options.webPreferences[key] = value
+
+    console.log('her?', options.webPreferences)
+  })
+})
+
 ipcMain.on('prevent-next-will-attach-webview', (event) => {
   event.sender.once('will-attach-webview', event => event.preventDefault())
 })