fix: use appropriate site instance for cross-site nav's (#15821)
* fix: use Chromium's determined new site instance as candidate when navigating. When navigating to a new address, consider using Chromium's determined site instance for the new page as it should belong to an existing browsing instance when the navigation was triggered by window.open(). fixes 8100. * Revert "fix: use Chromium's determined new site instance as candidate when navigating." This reverts commit eb95f935654a2c4d4457821297670836c10fdfd5. * fix: delegate site instance creation back to content when sandboxed. * fix: ensure site isolation is on * test: adapt ut for cross-site navigation * fix: register pending processes during a navigation. * refactor: dont call loadURL for a window constructed from an existing webContents. * test: add sandboxed affinity UT's. * fix: check affinity before deciding if to force a new site instance. * chore: adapt subsequent patch. * refactor: constify logically const methods. * fix: do not reuse site instances when navigation redirects cross-site. * test: ensure localStorage accessible after x-site redirect. * test: adapt localStorage acess denied UT for site isolation. * fix: do not send render-view-deleted for speculative frames. * chore: amend tests after rebase. * test: add ut for webContents' render-view-deleted emission * fix: introduce current-render-view-deleted for current RVH's deletions. Revert render-view-deleted to being emitted with any RVH's deletion. current-render-view-deleted is emitted only when the RVH being deleted is the current one. * refactor: style and comments fixed.
This commit is contained in:
parent
46e7214974
commit
d5d1fa8290
14 changed files with 581 additions and 240 deletions
|
@ -26,67 +26,73 @@ describe('BrowserWindow with affinity module', () => {
|
|||
})
|
||||
}
|
||||
|
||||
describe(`BrowserWindow with an affinity '${myAffinityName}'`, () => {
|
||||
let mAffinityWindow
|
||||
before(done => {
|
||||
createWindowWithWebPrefs({ affinity: myAffinityName })
|
||||
.then((w) => {
|
||||
mAffinityWindow = w
|
||||
function testAffinityProcessIds (name, webPreferences = {}) {
|
||||
describe(name, () => {
|
||||
let mAffinityWindow
|
||||
before(done => {
|
||||
createWindowWithWebPrefs({ affinity: myAffinityName, ...webPreferences })
|
||||
.then((w) => {
|
||||
mAffinityWindow = w
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
after(done => {
|
||||
closeWindow(mAffinityWindow, { assertSingleWindow: false }).then(() => {
|
||||
mAffinityWindow = null
|
||||
done()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
after(done => {
|
||||
closeWindow(mAffinityWindow, { assertSingleWindow: false }).then(() => {
|
||||
mAffinityWindow = null
|
||||
done()
|
||||
it('should have a different process id than a default window', done => {
|
||||
createWindowWithWebPrefs({ ...webPreferences })
|
||||
.then(w => {
|
||||
const affinityID = mAffinityWindow.webContents.getOSProcessId()
|
||||
const wcID = w.webContents.getOSProcessId()
|
||||
|
||||
expect(affinityID).to.not.equal(wcID, 'Should have different OS process IDs')
|
||||
closeWindow(w, { assertSingleWindow: false }).then(() => { done() })
|
||||
})
|
||||
})
|
||||
|
||||
it(`should have a different process id than a window with a different affinity '${anotherAffinityName}'`, done => {
|
||||
createWindowWithWebPrefs({ affinity: anotherAffinityName, ...webPreferences })
|
||||
.then(w => {
|
||||
const affinityID = mAffinityWindow.webContents.getOSProcessId()
|
||||
const wcID = w.webContents.getOSProcessId()
|
||||
|
||||
expect(affinityID).to.not.equal(wcID, 'Should have different OS process IDs')
|
||||
closeWindow(w, { assertSingleWindow: false }).then(() => { done() })
|
||||
})
|
||||
})
|
||||
|
||||
it(`should have the same OS process id than a window with the same affinity '${myAffinityName}'`, done => {
|
||||
createWindowWithWebPrefs({ affinity: myAffinityName, ...webPreferences })
|
||||
.then(w => {
|
||||
const affinityID = mAffinityWindow.webContents.getOSProcessId()
|
||||
const wcID = w.webContents.getOSProcessId()
|
||||
|
||||
expect(affinityID).to.equal(wcID, 'Should have the same OS process ID')
|
||||
closeWindow(w, { assertSingleWindow: false }).then(() => { done() })
|
||||
})
|
||||
})
|
||||
|
||||
it(`should have the same OS process id than a window with an equivalent affinity '${myAffinityNameUpper}' (case insensitive)`, done => {
|
||||
createWindowWithWebPrefs({ affinity: myAffinityNameUpper, ...webPreferences })
|
||||
.then(w => {
|
||||
const affinityID = mAffinityWindow.webContents.getOSProcessId()
|
||||
const wcID = w.webContents.getOSProcessId()
|
||||
|
||||
expect(affinityID).to.equal(wcID, 'Should have the same OS process ID')
|
||||
closeWindow(w, { assertSingleWindow: false }).then(() => { done() })
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
it('should have a different process id than a default window', done => {
|
||||
createWindowWithWebPrefs({})
|
||||
.then(w => {
|
||||
const affinityID = mAffinityWindow.webContents.getOSProcessId()
|
||||
const wcID = w.webContents.getOSProcessId()
|
||||
|
||||
expect(affinityID).to.not.equal(wcID, 'Should have different OS process IDs')
|
||||
closeWindow(w, { assertSingleWindow: false }).then(() => { done() })
|
||||
})
|
||||
})
|
||||
|
||||
it(`should have a different process id than a window with a different affinity '${anotherAffinityName}'`, done => {
|
||||
createWindowWithWebPrefs({ affinity: anotherAffinityName })
|
||||
.then(w => {
|
||||
const affinityID = mAffinityWindow.webContents.getOSProcessId()
|
||||
const wcID = w.webContents.getOSProcessId()
|
||||
|
||||
expect(affinityID).to.not.equal(wcID, 'Should have different OS process IDs')
|
||||
closeWindow(w, { assertSingleWindow: false }).then(() => { done() })
|
||||
})
|
||||
})
|
||||
|
||||
it(`should have the same OS process id than a window with the same affinity '${myAffinityName}'`, done => {
|
||||
createWindowWithWebPrefs({ affinity: myAffinityName })
|
||||
.then(w => {
|
||||
const affinityID = mAffinityWindow.webContents.getOSProcessId()
|
||||
const wcID = w.webContents.getOSProcessId()
|
||||
|
||||
expect(affinityID).to.equal(wcID, 'Should have the same OS process ID')
|
||||
closeWindow(w, { assertSingleWindow: false }).then(() => { done() })
|
||||
})
|
||||
})
|
||||
|
||||
it(`should have the same OS process id than a window with an equivalent affinity '${myAffinityNameUpper}' (case insensitive)`, done => {
|
||||
createWindowWithWebPrefs({ affinity: myAffinityNameUpper })
|
||||
.then(w => {
|
||||
const affinityID = mAffinityWindow.webContents.getOSProcessId()
|
||||
const wcID = w.webContents.getOSProcessId()
|
||||
|
||||
expect(affinityID).to.equal(wcID, 'Should have the same OS process ID')
|
||||
closeWindow(w, { assertSingleWindow: false }).then(() => { done() })
|
||||
})
|
||||
})
|
||||
})
|
||||
testAffinityProcessIds(`BrowserWindow with an affinity '${myAffinityName}'`)
|
||||
testAffinityProcessIds(`BrowserWindow with an affinity '${myAffinityName}' and sandbox enabled`, { sandbox: true })
|
||||
testAffinityProcessIds(`BrowserWindow with an affinity '${myAffinityName}' and nativeWindowOpen enabled`, { nativeWindowOpen: true })
|
||||
|
||||
describe(`BrowserWindow with an affinity : nodeIntegration=false`, () => {
|
||||
const preload = path.join(fixtures, 'module', 'send-later.js')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue