Propagate referrer to new windows (#12397)
* Propagate referrer to new windows Fixes #9205 * Rearrange -new-window event arguments for backwards-compatibility * Plumb referrer policy through guest-window-manager * Document the Referrer structure and its uses * Add tests for referrer in new windows * Docs nits
This commit is contained in:
parent
4316949a1d
commit
f0d08f4da1
14 changed files with 186 additions and 22 deletions
|
@ -102,7 +102,7 @@ const setupGuest = function (embedder, frameName, guest, options) {
|
|||
}
|
||||
|
||||
// Create a new guest created by |embedder| with |options|.
|
||||
const createGuest = function (embedder, url, frameName, options, postData) {
|
||||
const createGuest = function (embedder, url, referrer, frameName, options, postData) {
|
||||
let guest = frameToGuest.get(frameName)
|
||||
if (frameName && (guest != null)) {
|
||||
guest.loadURL(url)
|
||||
|
@ -137,7 +137,9 @@ const createGuest = function (embedder, url, frameName, options, postData) {
|
|||
//
|
||||
// The above code would not work if a navigation to "about:blank" is done
|
||||
// here, since the window would be cleared of all changes in the next tick.
|
||||
const loadOptions = {}
|
||||
const loadOptions = {
|
||||
httpReferrer: referrer
|
||||
}
|
||||
if (postData != null) {
|
||||
loadOptions.postData = postData
|
||||
loadOptions.extraHeaders = 'content-type: application/x-www-form-urlencoded'
|
||||
|
@ -242,16 +244,17 @@ ipcMain.on('ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN', (event, url, frameName,
|
|||
}
|
||||
}
|
||||
|
||||
const referrer = { url: '', policy: 'default' }
|
||||
ipcMain.emit('ELECTRON_GUEST_WINDOW_MANAGER_INTERNAL_WINDOW_OPEN', event,
|
||||
url, frameName, disposition, options, additionalFeatures)
|
||||
url, referrer, frameName, disposition, options, additionalFeatures)
|
||||
})
|
||||
|
||||
// Routed window.open messages with fully parsed options
|
||||
ipcMain.on('ELECTRON_GUEST_WINDOW_MANAGER_INTERNAL_WINDOW_OPEN', function (event, url, frameName,
|
||||
disposition, options,
|
||||
ipcMain.on('ELECTRON_GUEST_WINDOW_MANAGER_INTERNAL_WINDOW_OPEN', function (event, url, referrer,
|
||||
frameName, disposition, options,
|
||||
additionalFeatures, postData) {
|
||||
options = mergeBrowserWindowOptions(event.sender, options)
|
||||
event.sender.emit('new-window', event, url, frameName, disposition, options, additionalFeatures)
|
||||
event.sender.emit('new-window', event, url, frameName, disposition, options, additionalFeatures, referrer)
|
||||
const {newGuest} = event
|
||||
if ((event.sender.isGuest() && !event.sender.allowPopups) || event.defaultPrevented) {
|
||||
if (newGuest != null) {
|
||||
|
@ -265,7 +268,7 @@ ipcMain.on('ELECTRON_GUEST_WINDOW_MANAGER_INTERNAL_WINDOW_OPEN', function (event
|
|||
event.returnValue = null
|
||||
}
|
||||
} else {
|
||||
event.returnValue = createGuest(event.sender, url, frameName, options, postData)
|
||||
event.returnValue = createGuest(event.sender, url, referrer, frameName, options, postData)
|
||||
}
|
||||
})
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue