feat: service worker preload scripts for improved extensions support (#44411)
* feat: preload scripts for service workers * feat: service worker IPC * test: service worker preload scripts and ipc
This commit is contained in:
		
					parent
					
						
							
								bc22ee7897
							
						
					
				
			
			
				commit
				
					
						26da3c5d6e
					
				
			
		
					 67 changed files with 2103 additions and 298 deletions
				
			
		| 
						 | 
				
			
			@ -9,6 +9,8 @@ import * as path from 'path';
 | 
			
		|||
 | 
			
		||||
// Implements window.close()
 | 
			
		||||
ipcMainInternal.on(IPC_MESSAGES.BROWSER_WINDOW_CLOSE, function (event) {
 | 
			
		||||
  if (event.type !== 'frame') return;
 | 
			
		||||
 | 
			
		||||
  const window = event.sender.getOwnerBrowserWindow();
 | 
			
		||||
  if (window) {
 | 
			
		||||
    window.close();
 | 
			
		||||
| 
						 | 
				
			
			@ -17,10 +19,12 @@ ipcMainInternal.on(IPC_MESSAGES.BROWSER_WINDOW_CLOSE, function (event) {
 | 
			
		|||
});
 | 
			
		||||
 | 
			
		||||
ipcMainInternal.handle(IPC_MESSAGES.BROWSER_GET_LAST_WEB_PREFERENCES, function (event) {
 | 
			
		||||
  if (event.type !== 'frame') return;
 | 
			
		||||
  return event.sender.getLastWebPreferences();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
ipcMainInternal.handle(IPC_MESSAGES.BROWSER_GET_PROCESS_MEMORY_INFO, function (event) {
 | 
			
		||||
  if (event.type !== 'frame') return;
 | 
			
		||||
  return event.sender._getProcessMemoryInfo();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -45,16 +49,23 @@ ipcMainUtils.handleSync(IPC_MESSAGES.BROWSER_CLIPBOARD_SYNC, function (event, me
 | 
			
		|||
});
 | 
			
		||||
 | 
			
		||||
const getPreloadScriptsFromEvent = (event: ElectronInternal.IpcMainInternalEvent) => {
 | 
			
		||||
  const session: Electron.Session = event.sender.session;
 | 
			
		||||
  const preloadScripts = session.getPreloadScripts();
 | 
			
		||||
  const framePreloads = preloadScripts.filter(script => script.type === 'frame');
 | 
			
		||||
  const session: Electron.Session = event.type === 'service-worker' ? event.session : event.sender.session;
 | 
			
		||||
  let preloadScripts = session.getPreloadScripts();
 | 
			
		||||
 | 
			
		||||
  const webPrefPreload = event.sender._getPreloadScript();
 | 
			
		||||
  if (webPrefPreload) framePreloads.push(webPrefPreload);
 | 
			
		||||
  if (event.type === 'frame') {
 | 
			
		||||
    preloadScripts = preloadScripts.filter(script => script.type === 'frame');
 | 
			
		||||
 | 
			
		||||
    const webPrefPreload = event.sender._getPreloadScript();
 | 
			
		||||
    if (webPrefPreload) preloadScripts.push(webPrefPreload);
 | 
			
		||||
  } else if (event.type === 'service-worker') {
 | 
			
		||||
    preloadScripts = preloadScripts.filter(script => script.type === 'service-worker');
 | 
			
		||||
  } else {
 | 
			
		||||
    throw new Error(`getPreloadScriptsFromEvent: event.type is invalid (${(event as any).type})`);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // TODO(samuelmaddock): Remove filter after Session.setPreloads is fully
 | 
			
		||||
  // deprecated. The new API will prevent relative paths from being registered.
 | 
			
		||||
  return framePreloads.filter(script => path.isAbsolute(script.filePath));
 | 
			
		||||
  return preloadScripts.filter(script => path.isAbsolute(script.filePath));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const readPreloadScript = async function (script: Electron.PreloadScript): Promise<ElectronInternal.PreloadScript> {
 | 
			
		||||
| 
						 | 
				
			
			@ -95,5 +106,6 @@ ipcMainUtils.handleSync(IPC_MESSAGES.BROWSER_NONSANDBOX_LOAD, function (event) {
 | 
			
		|||
});
 | 
			
		||||
 | 
			
		||||
ipcMainInternal.on(IPC_MESSAGES.BROWSER_PRELOAD_ERROR, function (event, preloadPath: string, error: Error) {
 | 
			
		||||
  event.sender.emit('preload-error', event, preloadPath, error);
 | 
			
		||||
  if (event.type !== 'frame') return;
 | 
			
		||||
  event.sender?.emit('preload-error', event, preloadPath, error);
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue