feat: support chrome extensions in sandboxed renderer (#16218)

* Add content script injector to sandboxed renderer

* Fix 'getRenderProcessPreferences' binding to the wrong object

* Pass getRenderProcessPreferences to content-scripts-injector

* Emit document-start and document-end  events in sandboxed renderer

* Use GetContext from RendererClientBase

* Prevent script context crash caused by lazily initialization

* Remove frame filtering logic for onExit callback

Since we're keeping track of which frames we've injected the bundle into, this logic is redundant.

* Add initial content script tests

* Add contextIsolation variants to content script tests

* Add set include

* Fix already loaded extension error

* Add tests for content scripts 'run_at' options

* Catch script injection eval error when CSP forbids it

This can occur in a rendered sandbox when a CSP is enabled. We'll need to switch to using isolated worlds to fix this.

* Fix content script tests not properly cleaning up extensions

* Fix lint and type errors
This commit is contained in:
Samuel Maddock 2019-03-07 19:00:28 -05:00 committed by Samuel Attard
parent 825e526456
commit 42b7b25ac3
12 changed files with 215 additions and 26 deletions

View file

@ -61,6 +61,14 @@ ipcNative.onExit = function () {
process.emit('exit')
}
ipcNative.onDocumentStart = function () {
process.emit('document-start')
}
ipcNative.onDocumentEnd = function () {
process.emit('document-end')
}
const { webFrameInit } = require('@electron/internal/renderer/web-frame-init')
webFrameInit()
@ -110,6 +118,13 @@ switch (window.location.protocol) {
require('@electron/internal/renderer/chrome-api').injectTo(window.location.hostname, isBackgroundPage, window)
break
}
case 'chrome': {
break
}
default: {
// Inject content scripts.
require('@electron/internal/renderer/content-scripts-injector')(binding.getRenderProcessPreferences)
}
}
const guestInstanceId = binding.guestInstanceId && parseInt(binding.guestInstanceId)