Add new-webview event that can be prevented
authorKevin Sawicki <kevinsawicki@gmail.com>
Fri, 3 Feb 2017 20:46:22 +0000 (12:46 -0800)
committerKevin Sawicki <kevinsawicki@gmail.com>
Thu, 9 Feb 2017 19:45:07 +0000 (11:45 -0800)
lib/browser/guest-view-manager.js

index 500ed37bbbf0cad20cd1722843bfa50e6f0ebef8..95e4e0d47f8d11eb1353cd18178612340c2161d9 100644 (file)
@@ -147,7 +147,8 @@ const createGuest = function (embedder, params) {
 }
 
 // Attach the guest to an element of embedder.
-const attachGuest = function (embedder, elementInstanceId, guestInstanceId, params) {
+const attachGuest = function (event, elementInstanceId, guestInstanceId, params) {
+  const embedder = event.sender
   // Destroy the old guest when attaching.
   const key = `${embedder.getId()}-${elementInstanceId}`
   const oldGuestInstanceId = embedderElementsMap[key]
@@ -204,6 +205,14 @@ const attachGuest = function (embedder, elementInstanceId, guestInstanceId, para
   if (params.preload) {
     webPreferences.preloadURL = params.preload
   }
+
+  event.sender.emit('new-webview', event, guest, webPreferences)
+  if (event.defaultPrevented) {
+    if (guest.viewInstanceId == null) guest.viewInstanceId = params.instanceId
+    destroyGuest(embedder, guestInstanceId)
+    return
+  }
+
   webViewManager.addGuest(guestInstanceId, elementInstanceId, embedder, guest, webPreferences)
   guest.attachParams = params
   embedderElementsMap[key] = guestInstanceId
@@ -276,7 +285,7 @@ ipcMain.on('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST', function (event, params,
 })
 
 ipcMain.on('ELECTRON_GUEST_VIEW_MANAGER_ATTACH_GUEST', function (event, elementInstanceId, guestInstanceId, params) {
-  attachGuest(event.sender, elementInstanceId, guestInstanceId, params)
+  attachGuest(event, elementInstanceId, guestInstanceId, params)
 })
 
 ipcMain.on('ELECTRON_GUEST_VIEW_MANAGER_DESTROY_GUEST', function (event, guestInstanceId) {