feat: support node: prefixed requires in sandboxed renderer preloads (#38567)
		
	feat: support node: prefixed requires in sandboxed renderer preloads
This commit is contained in:
		
					parent
					
						
							
								fd5e6fbc14
							
						
					
				
			
			
				commit
				
					
						5d123765d9
					
				
			
		
					 4 changed files with 17 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -51,6 +51,12 @@ but can only import a subset of Electron and Node's built-in modules:
 | 
			
		|||
* [`timers`](https://nodejs.org/api/timers.html)
 | 
			
		||||
* [`url`](https://nodejs.org/api/url.html)
 | 
			
		||||
 | 
			
		||||
[node: imports](https://nodejs.org/api/esm.html#node-imports) are supported as well:
 | 
			
		||||
 | 
			
		||||
* [`node:events`](https://nodejs.org/api/events.html)
 | 
			
		||||
* [`node:timers`](https://nodejs.org/api/timers.html)
 | 
			
		||||
* [`node:url`](https://nodejs.org/api/url.html)
 | 
			
		||||
 | 
			
		||||
In addition, the preload script also polyfills certain Node.js primitives as globals:
 | 
			
		||||
 | 
			
		||||
* [`Buffer`](https://nodejs.org/api/buffer.html)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,12 +38,15 @@ const loadedModules = new Map<string, any>([
 | 
			
		|||
  ['electron', electron],
 | 
			
		||||
  ['electron/common', electron],
 | 
			
		||||
  ['electron/renderer', electron],
 | 
			
		||||
  ['events', events]
 | 
			
		||||
  ['events', events],
 | 
			
		||||
  ['node:events', events]
 | 
			
		||||
]);
 | 
			
		||||
 | 
			
		||||
const loadableModules = new Map<string, Function>([
 | 
			
		||||
  ['timers', () => require('timers')],
 | 
			
		||||
  ['url', () => require('url')]
 | 
			
		||||
  ['node:timers', () => require('timers')],
 | 
			
		||||
  ['url', () => require('url')],
 | 
			
		||||
  ['node:url', () => require('url')]
 | 
			
		||||
]);
 | 
			
		||||
 | 
			
		||||
// Pass different process object to the preload script.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3714,6 +3714,9 @@ describe('BrowserWindow module', () => {
 | 
			
		|||
        expect(test.version).to.equal(process.version);
 | 
			
		||||
        expect(test.versions).to.deep.equal(process.versions);
 | 
			
		||||
        expect(test.contextId).to.be.a('string');
 | 
			
		||||
        expect(test.nodeEvents).to.equal(true);
 | 
			
		||||
        expect(test.nodeTimers).to.equal(true);
 | 
			
		||||
        expect(test.nodeUrl).to.equal(true);
 | 
			
		||||
 | 
			
		||||
        if (process.platform === 'linux' && test.osSandbox) {
 | 
			
		||||
          expect(test.creationTime).to.be.null('creation time');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								spec/fixtures/module/preload-sandbox.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								spec/fixtures/module/preload-sandbox.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -34,6 +34,9 @@
 | 
			
		|||
        cpuUsage: invoke(() => process.getCPUUsage()),
 | 
			
		||||
        ioCounters: invoke(() => process.getIOCounters()),
 | 
			
		||||
        uptime: invoke(() => process.uptime()),
 | 
			
		||||
        nodeEvents: invoke(() => require('events') === require('node:events')),
 | 
			
		||||
        nodeTimers: invoke(() => require('timers') === require('node:timers')),
 | 
			
		||||
        nodeUrl: invoke(() => require('url') === require('node:url')),
 | 
			
		||||
        env: process.env,
 | 
			
		||||
        execPath: process.execPath,
 | 
			
		||||
        pid: process.pid,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue