2023-12-05 17:36:23 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  app ,  ipcMain ,  session ,  webFrameMain ,  dialog  }  from  'electron/main' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  type  {  BrowserWindowConstructorOptions ,  LoadURLOptions ,  MessageBoxOptions ,  WebFrameMain  }  from  'electron/main' ;  
						 
					
						
							
								
									
										
										
										
											2020-07-06 10:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  *  as  url  from  'url' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  *  as  path  from  'path' ;  
						 
					
						
							
								
									
										
										
										
											2021-04-13 12:35:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  openGuestWindow ,  makeWebPreferences ,  parseContentTypeFormat  }  from  '@electron/internal/browser/guest-window-manager' ;  
						 
					
						
							
								
									
										
										
										
											2021-11-10 17:54:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  parseFeatures  }  from  '@electron/internal/browser/parse-features-string' ;  
						 
					
						
							
								
									
										
										
										
											2020-07-13 09:58:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  ipcMainInternal  }  from  '@electron/internal/browser/ipc-main-internal' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  *  as  ipcMainUtils  from  '@electron/internal/browser/ipc-main-internal-utils' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  {  MessagePortMain  }  from  '@electron/internal/browser/message-port-main' ;  
						 
					
						
							
								
									
										
										
										
											2020-10-13 23:11:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  IPC_MESSAGES  }  from  '@electron/internal/common/ipc-messages' ;  
						 
					
						
							
								
									
										
										
										
											2022-08-03 16:55:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  IpcMainImpl  }  from  '@electron/internal/browser/ipc-main-impl' ;  
						 
					
						
							
								
									
										
										
										
											2023-10-10 17:50:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  *  as  deprecate  from  '@electron/internal/common/deprecate' ;  
						 
					
						
							
								
									
										
										
										
											2018-09-11 11:56:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-06-16 03:46:11 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// session is not used here, the purpose is to make sure session is initialized
  
						 
					
						
							
								
									
										
										
										
											2016-06-01 14:57:35 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// before the webContents module.
  
						 
					
						
							
								
									
										
										
										
											2023-05-25 03:09:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// eslint-disable-next-line no-unused-expressions
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								session ;  
						 
					
						
							
								
									
										
										
										
											2016-01-11 18:40:23 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-03 16:55:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  webFrameMainBinding  =  process . _linkedBinding ( 'electron_browser_web_frame_main' ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  nextId  =  0 ;  
						 
					
						
							
								
									
										
										
										
											2016-06-01 15:08:51 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  getNextId  =  function  ( )  {  
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  ++ nextId ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2016-01-11 18:40:23 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								type  PostData  =  LoadURLOptions [ 'postData' ]  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-01 15:24:53 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Stock page sizes
  
						 
					
						
							
								
									
										
										
										
											2021-01-29 21:41:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  PDFPageSizes : Record < string ,  ElectronInternal.MediaSize >  =  {  
						 
					
						
							
								
									
										
										
										
											2023-02-14 10:44:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Letter :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    custom_display_name :  'Letter' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    height_microns : 279400 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'NA_LETTER' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    width_microns : 215900 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-11 18:40:23 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Legal :  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 13:15:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    custom_display_name :  'Legal' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-11 18:40:23 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    height_microns : 355600 , 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 13:15:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    name :  'NA_LEGAL' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-11 18:40:23 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    width_microns : 215900 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Tabloid :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    height_microns : 431800 , 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 13:15:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    name :  'NA_LEDGER' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-11 18:40:23 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    width_microns : 279400 , 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 13:15:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    custom_display_name :  'Tabloid' 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-14 10:44:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  A0 :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    custom_display_name :  'A0' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    height_microns : 1189000 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'ISO_A0' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    width_microns : 841000 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  A1 :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    custom_display_name :  'A1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    height_microns : 841000 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'ISO_A1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    width_microns : 594000 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  A2 :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    custom_display_name :  'A2' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    height_microns : 594000 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'ISO_A2' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    width_microns : 420000 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  A3 :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    custom_display_name :  'A3' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    height_microns : 420000 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'ISO_A3' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    width_microns : 297000 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  A4 :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    custom_display_name :  'A4' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    height_microns : 297000 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'ISO_A4' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    is_default :  'true' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    width_microns : 210000 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  A5 :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    custom_display_name :  'A5' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    height_microns : 210000 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'ISO_A5' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    width_microns : 148000 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  A6 :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    custom_display_name :  'A6' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    height_microns : 148000 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'ISO_A6' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    width_microns : 105000 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-11 18:40:23 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-04 23:12:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  as  const ;  
						 
					
						
							
								
									
										
										
										
											2016-01-11 18:40:23 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-31 08:21:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  paperFormats : Record < string ,  ElectronInternal.PageSize >  =  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  letter :  {  width : 8.5 ,  height : 11  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  legal :  {  width : 8.5 ,  height : 14  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  tabloid :  {  width : 11 ,  height : 17  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ledger :  {  width : 17 ,  height : 11  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  a0 :  {  width : 33.1 ,  height : 46.8  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  a1 :  {  width : 23.4 ,  height : 33.1  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  a2 :  {  width : 16.54 ,  height : 23.4  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  a3 :  {  width : 11.7 ,  height : 16.54  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  a4 :  {  width : 8.27 ,  height : 11.7  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  a5 :  {  width : 5.83 ,  height : 8.27  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  a6 :  {  width : 4.13 ,  height : 5.83  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  as  const ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-10 09:42:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// The minimum micron size Chromium accepts is that where:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Per printing/units.h:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//  * kMicronsPerInch - Length of an inch in 0.001mm unit.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//  * kPointsPerInch - Length of an inch in CSS's 1pt unit.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Formula: (kPointsPerInch / kMicronsPerInch) * size >= 1
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Practically, this means microns need to be > 352 microns.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// We therefore need to verify this or it will silently fail.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  isValidCustomPageSize  =  ( width : number ,  height : number )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  [ width ,  height ] . every ( x  = >  x  >  352 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 20:52:07 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// JavaScript implementations of WebContents.
  
						 
					
						
							
								
									
										
										
										
											2020-06-22 20:32:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  binding  =  process . _linkedBinding ( 'electron_browser_web_contents' ) ;  
						 
					
						
							
								
									
										
										
										
											2020-11-17 14:14:09 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  printing  =  process . _linkedBinding ( 'electron_browser_printing' ) ;  
						 
					
						
							
								
									
										
										
										
											2020-10-02 04:52:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  {  WebContents  }  =  binding  as  {  WebContents :  {  prototype : Electron.WebContents  }  } ;  
						 
					
						
							
								
									
										
										
										
											2016-08-02 20:38:35 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 01:00:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . postMessage  =  function  ( . . . args )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  this . mainFrame . postMessage ( . . . args ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 20:52:07 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . send  =  function  ( channel ,  . . . args )  {  
						 
					
						
							
								
									
										
										
										
											2021-02-09 12:16:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  this . mainFrame . send ( channel ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2019-01-20 23:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-06 13:48:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . _sendInternal  =  function  ( channel ,  . . . args )  {  
						 
					
						
							
								
									
										
										
										
											2021-02-09 12:16:21 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  this . mainFrame . _sendInternal ( channel ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2021-01-15 01:00:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function  getWebFrame  ( contents : Electron.WebContents ,  frame : number  |  [ number ,  number ] )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( typeof  frame  ===  'number' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  webFrameMain . fromId ( contents . mainFrame . processId ,  frame ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  if  ( Array . isArray ( frame )  &&  frame . length  ===  2  &&  frame . every ( value  = >  typeof  value  ===  'number' ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  webFrameMain . fromId ( frame [ 0 ] ,  frame [ 1 ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  Error ( 'Missing required frame argument (must be number or [processId, frameId])' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-22 11:24:46 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 01:00:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2019-01-22 11:24:46 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 01:00:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . sendToFrame  =  function  ( frameId ,  channel ,  . . . args )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  frame  =  getWebFrame ( this ,  frameId ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! frame )  return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  frame . send ( channel ,  . . . args ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2018-12-10 09:37:42 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 11:55:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Following methods are mapped to webFrame.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  webFrameMethods  =  [  
						 
					
						
							
								
									
										
										
										
											2016-12-19 15:50:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  'insertCSS' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 11:55:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  'insertText' , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-17 17:39:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  'removeInsertedCSS' , 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-20 08:57:48 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  'setVisualZoomLevelLimits' 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 10:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								]  as  ( 'insertCSS'  |  'insertText'  |  'removeInsertedCSS'  |  'setVisualZoomLevelLimits' ) [ ] ;  
						 
					
						
							
								
									
										
										
										
											2017-11-18 00:51:14 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 20:52:07 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								for  ( const  method  of  webFrameMethods )  {  
						 
					
						
							
								
									
										
										
										
											2020-07-06 10:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  WebContents . prototype [ method ]  =  function  ( . . . args : any [ ] ) :  Promise < any >  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-03 07:55:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ipcMainUtils . invokeInWebContents ( this ,  IPC_MESSAGES . RENDERER_WEB_FRAME_METHOD ,  method ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 20:52:07 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2016-01-11 18:40:23 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-02 04:52:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  waitTillCanExecuteJavaScript  =  async  ( webContents : Electron.WebContents )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( webContents . getURL ( )  &&  ! webContents . isLoadingMainFrame ( ) )  return ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-22 15:33:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-22 20:25:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  new  Promise < void > ( ( resolve )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-22 15:33:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    webContents . once ( 'did-stop-loading' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      resolve ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2019-03-14 20:08:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 20:52:07 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Make sure WebContents::executeJavaScript would run the code only when the
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// WebContents has been loaded.
  
						 
					
						
							
								
									
										
										
										
											2019-11-22 15:33:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . executeJavaScript  =  async  function  ( code ,  hasUserGesture )  {  
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  await  waitTillCanExecuteJavaScript ( this ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-03 07:55:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  ipcMainUtils . invokeInWebContents ( this ,  IPC_MESSAGES . RENDERER_WEB_FRAME_METHOD ,  'executeJavaScript' ,  String ( code ) ,  ! ! hasUserGesture ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2020-07-08 16:13:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . executeJavaScriptInIsolatedWorld  =  async  function  ( worldId ,  code ,  hasUserGesture )  {  
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  await  waitTillCanExecuteJavaScript ( this ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-03 07:55:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  ipcMainUtils . invokeInWebContents ( this ,  IPC_MESSAGES . RENDERER_WEB_FRAME_METHOD ,  'executeJavaScriptInIsolatedWorld' ,  worldId ,  code ,  ! ! hasUserGesture ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2016-08-02 13:02:55 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 21:38:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function  checkType < T >  ( value : T ,  type :  'number'  |  'boolean'  |  'string'  |  'object' ,  name : string ) :  T  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // eslint-disable-next-line valid-typeof
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( typeof  value  !==  type )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  TypeError ( ` ${ name }  must be a  ${ type } ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-18 08:40:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-28 20:47:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 21:38:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  value ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2016-01-13 11:55:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 21:38:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function  parsePageSize  ( pageSize : string  |  ElectronInternal . PageSize )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( typeof  pageSize  ===  'string' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  format  =  paperFormats [ pageSize . toLowerCase ( ) ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! format )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      throw  new  Error ( ` Invalid pageSize  ${ pageSize } ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-31 08:21:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-10 09:42:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 21:38:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  {  paperWidth : format.width ,  paperHeight : format.height  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  if  ( typeof  pageSize  ===  'object' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( typeof  pageSize . width  !==  'number'  ||  typeof  pageSize . height  !==  'number' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      throw  new  TypeError ( 'width and height properties are required for pageSize' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-31 08:21:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-10 09:42:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 21:38:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  {  paperWidth : pageSize.width ,  paperHeight : pageSize.height  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  TypeError ( 'pageSize must be a string or an object' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-31 08:21:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 21:38:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2022-05-31 08:21:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 21:38:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Translate the options of printToPDF.
  
						 
					
						
							
								
									
										
										
										
											2016-02-22 19:30:21 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 21:38:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  pendingPromise : Promise < any >  |  undefined ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								WebContents . prototype . printToPDF  =  async  function  ( options )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  margins  =  checkType ( options . margins  ? ?  { } ,  'object' ,  'margins' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  printSettings  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    requestID : getNextId ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    landscape : checkType ( options . landscape  ? ?  false ,  'boolean' ,  'landscape' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    displayHeaderFooter : checkType ( options . displayHeaderFooter  ? ?  false ,  'boolean' ,  'displayHeaderFooter' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    headerTemplate : checkType ( options . headerTemplate  ? ?  '' ,  'string' ,  'headerTemplate' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    footerTemplate : checkType ( options . footerTemplate  ? ?  '' ,  'string' ,  'footerTemplate' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    printBackground : checkType ( options . printBackground  ? ?  false ,  'boolean' ,  'printBackground' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    scale : checkType ( options . scale  ? ?  1.0 ,  'number' ,  'scale' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    marginTop : checkType ( margins . top  ? ?  0.4 ,  'number' ,  'margins.top' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    marginBottom : checkType ( margins . bottom  ? ?  0.4 ,  'number' ,  'margins.bottom' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    marginLeft : checkType ( margins . left  ? ?  0.4 ,  'number' ,  'margins.left' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    marginRight : checkType ( margins . right  ? ?  0.4 ,  'number' ,  'margins.right' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    pageRanges : checkType ( options . pageRanges  ? ?  '' ,  'string' ,  'pageRanges' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    preferCSSPageSize : checkType ( options . preferCSSPageSize  ? ?  false ,  'boolean' ,  'preferCSSPageSize' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    generateTaggedPDF : checkType ( options . generateTaggedPDF  ? ?  false ,  'boolean' ,  'generateTaggedPDF' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    . . . parsePageSize ( options . pageSize  ? ?  'letter' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-24 17:01:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-11 01:06:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( this . _printToPDF )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-13 18:13:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( pendingPromise )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      pendingPromise  =  pendingPromise . then ( ( )  = >  this . _printToPDF ( printSettings ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      pendingPromise  =  this . _printToPDF ( printSettings ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  pendingPromise ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 09:12:34 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-07-31 10:39:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    throw  new  Error ( 'Printing feature is disabled' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 09:12:34 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2018-11-09 09:12:34 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-07 19:18:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// TODO(codebytere): deduplicate argument sanitization by moving rest of
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// print param logic into new file shared between printToPDF and print
  
						 
					
						
							
								
									
										
										
										
											2023-06-09 21:41:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . print  =  function  ( options : ElectronInternal.WebContentsPrintOptions ,  callback )  {  
						 
					
						
							
								
									
										
										
										
											2023-09-28 10:41:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( typeof  options  !==  'object' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 21:38:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    throw  new  TypeError ( 'webContents.print(): Invalid print settings specified.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-28 10:41:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-07 19:18:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-09-28 10:41:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  printSettings : Record < string ,  any >  =  {  . . . options  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-07 19:18:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-09-28 10:41:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  pageSize  =  options . pageSize  ? ?  'A4' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( typeof  pageSize  ===  'object' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! pageSize . height  ||  ! pageSize . width )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      throw  new  Error ( 'height and width properties are required for pageSize' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // Dimensions in Microns - 1 meter = 10^6 microns
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  height  =  Math . ceil ( pageSize . height ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  width  =  Math . ceil ( pageSize . width ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! isValidCustomPageSize ( width ,  height ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 21:38:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      throw  new  RangeError ( 'height and width properties must be minimum 352 microns.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-05 04:25:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-28 10:41:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    printSettings . mediaSize  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      name :  'CUSTOM' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      custom_display_name :  'Custom' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      height_microns : height , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      width_microns : width , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      imageable_area_left_microns : 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      imageable_area_bottom_microns : 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      imageable_area_right_microns : width , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      imageable_area_top_microns : height 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  if  ( typeof  pageSize  ===  'string'  &&  PDFPageSizes [ pageSize ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  mediaSize  =  PDFPageSizes [ pageSize ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    printSettings . mediaSize  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      . . . mediaSize , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      imageable_area_left_microns : 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      imageable_area_bottom_microns : 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      imageable_area_right_microns : mediaSize.width_microns , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      imageable_area_top_microns : mediaSize.height_microns 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  Error ( ` Unsupported pageSize:  ${ pageSize } ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-05 04:25:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-11 01:06:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( this . _print )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-05 04:25:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( callback )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-28 10:41:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      this . _print ( printSettings ,  callback ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-05 04:25:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-28 10:41:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      this . _print ( printSettings ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-05 04:25:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 09:12:34 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    console . error ( 'Error: Printing feature is disabled.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 09:12:34 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2018-11-09 09:12:34 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 23:46:58 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . getPrintersAsync  =  async  function  ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // TODO(nornagon): this API has nothing to do with WebContents and should be
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // moved.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( printing . getPrinterListAsync )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  printing . getPrinterListAsync ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    console . error ( 'Error: Printing feature is disabled.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  [ ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 09:12:34 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2016-08-02 20:52:07 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-11 09:56:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . loadFile  =  function  ( filePath ,  options  =  { } )  {  
						 
					
						
							
								
									
										
										
										
											2018-01-04 11:38:56 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( typeof  filePath  !==  'string' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-07-25 18:08:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    throw  new  TypeError ( 'Must pass filePath as a string' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-04 11:38:56 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  {  query ,  search ,  hash  }  =  options ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-11 09:56:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-04 11:38:56 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  this . loadURL ( url . format ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    protocol :  'file' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    slashes : true , 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-11 09:56:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    pathname : path.resolve ( app . getAppPath ( ) ,  filePath ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    query , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    search , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    hash 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2018-01-04 11:38:56 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-12-12 20:45:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								type  LoadError  =  {  errorCode : number ,  errorDescription : string ,  url : string  } ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . loadURL  =  function  ( url ,  options )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  p  =  new  Promise < void > ( ( resolve ,  reject )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  resolveAndCleanup  =  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      removeListeners ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      resolve ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-12 20:45:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  error : LoadError  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  rejectAndCleanup  =  ( {  errorCode ,  errorDescription ,  url  } :  LoadError )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  err  =  new  Error ( ` ${ errorDescription }  ( ${ errorCode } ) loading ' ${ typeof  url  ===  'string'  ?  url . substr ( 0 ,  2048 )  :  url } ' ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Object . assign ( err ,  {  errno : errorCode ,  code : errorDescription ,  url  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      removeListeners ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      reject ( err ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  finishListener  =  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-12 20:45:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( error )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rejectAndCleanup ( error ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        resolveAndCleanup ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  failListener  =  ( event : Electron.Event ,  errorCode : number ,  errorDescription : string ,  validatedURL : string ,  isMainFrame : boolean )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-12 20:45:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( ! error  &&  isMainFrame )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        error  =  {  errorCode ,  errorDescription ,  url : validatedURL  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  navigationStarted  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-28 18:37:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  browserInitiatedInPageNavigation  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  navigationListener  =  ( event : Electron.Event ,  url : string ,  isSameDocument : boolean ,  isMainFrame : boolean )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  ( isMainFrame )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( navigationStarted  &&  ! isSameDocument )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // the webcontents has started another unrelated navigation in the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // main frame (probably from the app calling `loadURL` again); reject
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // the promise
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // We should only consider the request aborted if the "navigation" is
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // actually navigating and not simply transitioning URL state in the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // current context.  E.g. pushState and `location.hash` changes are
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // considered navigation events but are triggered with isSameDocument.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // We can ignore these to allow virtual routing on page load as long
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // as the routing does not leave the document
 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-12 20:45:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          return  rejectAndCleanup ( {  errorCode :  - 3 ,  errorDescription :  'ERR_ABORTED' ,  url  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-28 18:37:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        browserInitiatedInPageNavigation  =  navigationStarted  &&  isSameDocument ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        navigationStarted  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  stopLoadingListener  =  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      // By the time we get here, either 'finish' or 'fail' should have fired
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      // if the navigation occurred. However, in some situations (e.g. when
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      // attempting to load a page with a bad scheme), loading will stop
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      // without emitting finish or fail. In this case, we reject the promise
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      // with a generic failure.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      // TODO(jeremy): enumerate all the cases in which this can happen. If
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      // the only one is with a bad scheme, perhaps ERR_INVALID_ARGUMENT
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      // would be more appropriate.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-12 20:45:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( ! error )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        error  =  {  errorCode :  - 2 ,  errorDescription :  'ERR_FAILED' ,  url : url  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      finishListener ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-28 18:37:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  finishListenerWhenUserInitiatedNavigation  =  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  ( ! browserInitiatedInPageNavigation )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        finishListener ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  removeListeners  =  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this . removeListener ( 'did-finish-load' ,  finishListener ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this . removeListener ( 'did-fail-load' ,  failListener ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-28 18:37:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      this . removeListener ( 'did-navigate-in-page' ,  finishListenerWhenUserInitiatedNavigation ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      this . removeListener ( 'did-start-navigation' ,  navigationListener ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this . removeListener ( 'did-stop-loading' ,  stopLoadingListener ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this . removeListener ( 'destroyed' ,  stopLoadingListener ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . on ( 'did-finish-load' ,  finishListener ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . on ( 'did-fail-load' ,  failListener ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-28 18:37:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . on ( 'did-navigate-in-page' ,  finishListenerWhenUserInitiatedNavigation ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . on ( 'did-start-navigation' ,  navigationListener ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . on ( 'did-stop-loading' ,  stopLoadingListener ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . on ( 'destroyed' ,  stopLoadingListener ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // Add a no-op rejection handler to silence the unhandled rejection error.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  p . catch ( ( )  = >  { } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-27 10:05:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . _loadURL ( url ,  options  ? ?  { } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-27 16:11:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . setWindowOpenHandler  =  function  ( handler :  ( details : Electron.HandlerDetails )  = >  ( { action :  'deny' }  |  { action :  'allow' ,  overrideBrowserWindowOptions? : BrowserWindowConstructorOptions ,  outlivesOpener? : boolean } ) )  {  
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . _windowOpenHandler  =  handler ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebContents . prototype . _callWindowOpenHandler  =  function  ( event : Electron.Event ,  details : Electron.HandlerDetails ) :  { browserWindowConstructorOptions : BrowserWindowConstructorOptions  |  null ,  outlivesOpener : boolean }  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  defaultResponse  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    browserWindowConstructorOptions : null , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    outlivesOpener : false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( ! this . _windowOpenHandler )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  defaultResponse ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-14 18:22:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-13 12:35:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  response  =  this . _windowOpenHandler ( details ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( typeof  response  !==  'object' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    event . preventDefault ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    console . error ( ` The window open handler response must be an object, but was instead of type ' ${ typeof  response } '. ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  defaultResponse ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( response  ===  null )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    event . preventDefault ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    console . error ( 'The window open handler response must be an object, but was instead null.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  defaultResponse ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( response . action  ===  'deny' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    event . preventDefault ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  defaultResponse ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  }  else  if  ( response . action  ===  'allow' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-02 14:44:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      browserWindowConstructorOptions : typeof  response . overrideBrowserWindowOptions  ===  'object'  ?  response.overrideBrowserWindowOptions  : null , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      outlivesOpener : typeof  response . outlivesOpener  ===  'boolean'  ?  response.outlivesOpener  : false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    event . preventDefault ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    console . error ( 'The window open handler response must be an object with an \'action\' property of \'allow\' or \'deny\'.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  defaultResponse ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-29 21:41:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  addReplyToEvent  =  ( event : Electron.IpcMainEvent )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-12-09 12:48:16 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  {  processId ,  frameId  }  =  event ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-29 21:41:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  event . reply  =  ( channel : string ,  . . . args : any [ ] )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    event . sender . sendToFrame ( [ processId ,  frameId ] ,  channel ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2019-01-22 11:24:46 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  addSenderToEvent  =  ( event : Electron.IpcMainEvent  |  Electron . IpcMainInvokeEvent ,  sender : Electron.WebContents )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  event . sender  =  sender ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-10 00:34:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  {  processId ,  frameId  }  =  event ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Object . defineProperty ( event ,  'senderFrame' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get :  ( )  = >  webFrameMain . fromId ( processId ,  frameId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-29 21:41:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  addReturnValueToEvent  =  ( event : Electron.IpcMainEvent )  = >  {  
						 
					
						
							
								
									
										
										
										
											2019-01-23 17:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Object . defineProperty ( event ,  'returnValue' ,  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    set :  ( value )  = >  event . _replyChannel . sendReply ( value ) , 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-23 17:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    get :  ( )  = >  { } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2019-01-23 17:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 21:19:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  getWebFrameForEvent  =  ( event : Electron.IpcMainEvent  |  Electron . IpcMainInvokeEvent )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! event . processId  ||  ! event . frameId )  return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  webFrameMainBinding . fromIdOrNull ( event . processId ,  event . frameId ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-06 02:58:31 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  commandLine  =  process . _linkedBinding ( 'electron_common_command_line' ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  environment  =  process . _linkedBinding ( 'electron_common_environment' ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 13:01:50 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  loggingEnabled  =  ( )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-10-06 02:58:31 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  environment . hasVar ( 'ELECTRON_ENABLE_LOGGING' )  ||  commandLine . hasSwitch ( 'enable-logging' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 13:01:50 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 20:52:07 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Add JavaScript wrappers for WebContents class.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								WebContents . prototype . _init  =  function  ( )  {  
						 
					
						
							
								
									
										
										
										
											2022-03-08 15:39:53 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  prefs  =  this . getLastWebPreferences ( )  ||  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-17 00:13:48 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( ! prefs . nodeIntegration  &&  prefs . preload  !=  null  &&  prefs . sandbox  ==  null )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-08 15:39:53 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    deprecate . log ( 'The default sandbox option for windows without nodeIntegration is changing. Presently, by default, when a window has a preload script, it defaults to being unsandboxed. In Electron 20, this default will be changing, and all windows that have nodeIntegration: false (which is the default) will be sandboxed by default. If your preload script doesn\'t use Node, no action is needed. If your preload script does use Node, either refactor it to move Node usage to the main process, or specify sandbox: false in your WebPreferences.' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-17 12:10:29 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Read off the ID at construction time, so that it's accessible even after
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // the underlying C++ WebContents is destroyed.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  id  =  this . id ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Object . defineProperty ( this ,  'id' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value : id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    writable : false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 20:55:56 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . _windowOpenHandler  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-03 16:55:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  ipc  =  new  IpcMainImpl ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Object . defineProperty ( this ,  'ipc' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get  ( )  {  return  ipc ;  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    enumerable : true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-14 10:35:29 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Dispatch IPC messages to the ipc module.
 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-29 21:41:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . on ( '-ipc-message'  as  any ,  function  ( this :  Electron . WebContents ,  event : Electron.IpcMainEvent ,  internal : boolean ,  channel : string ,  args : any [ ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    addSenderToEvent ( event ,  this ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-23 17:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( internal )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      ipcMainInternal . emit ( channel ,  event ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-23 17:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      addReplyToEvent ( event ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this . emit ( 'ipc-message' ,  event ,  channel ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 21:19:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  maybeWebFrame  =  getWebFrameForEvent ( event ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-03 16:55:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      maybeWebFrame  &&  maybeWebFrame . ipc . emit ( channel ,  event ,  . . . args ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ipc . emit ( channel ,  event ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      ipcMain . emit ( channel ,  event ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-23 17:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-27 23:50:53 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . on ( '-ipc-invoke'  as  any ,  async  function  ( this :  Electron . WebContents ,  event : Electron.IpcMainInvokeEvent ,  internal : boolean ,  channel : string ,  args : any [ ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    addSenderToEvent ( event ,  this ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  replyWithResult  =  ( result : any )  = >  event . _replyChannel . sendReply ( {  result  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  replyWithError  =  ( error : Error )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      console . error ( ` Error occurred in handler for ' ${ channel } ': ` ,  error ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      event . _replyChannel . sendReply ( {  error : error.toString ( )  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 21:19:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  maybeWebFrame  =  getWebFrameForEvent ( event ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  targets :  ( ElectronInternal . IpcMainInternal |  undefined ) [ ]  =  internal  ?  [ ipcMainInternal ]  :  [ maybeWebFrame ? . ipc ,  ipc ,  ipcMain ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-03 16:55:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  target  =  targets . find ( target  = >  target  &&  ( target  as  any ) . _invokeHandlers . has ( channel ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( target )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  handler  =  ( target  as  any ) . _invokeHandlers . get ( channel ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        replyWithResult ( await  Promise . resolve ( handler ( event ,  . . . args ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      }  catch  ( err )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        replyWithError ( err  as  Error ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-31 10:25:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      replyWithError ( new  Error ( ` No handler registered for ' ${ channel } ' ` ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-31 10:25:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-31 10:25:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-29 21:41:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . on ( '-ipc-message-sync'  as  any ,  function  ( this :  Electron . WebContents ,  event : Electron.IpcMainEvent ,  internal : boolean ,  channel : string ,  args : any [ ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    addSenderToEvent ( event ,  this ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    addReturnValueToEvent ( event ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-23 17:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( internal )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      ipcMainInternal . emit ( channel ,  event ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-23 17:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      addReplyToEvent ( event ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 21:19:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  maybeWebFrame  =  getWebFrameForEvent ( event ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-03 16:55:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( this . listenerCount ( 'ipc-message-sync' )  ===  0  &&  ipc . listenerCount ( channel )  ===  0  &&  ipcMain . listenerCount ( channel )  ===  0  &&  ( ! maybeWebFrame  ||  maybeWebFrame . ipc . listenerCount ( channel )  ===  0 ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 20:24:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        console . warn ( ` WebContents # ${ this . id }  called ipcRenderer.sendSync() with ' ${ channel } ' channel without listeners. ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      this . emit ( 'ipc-message-sync' ,  event ,  channel ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-03 16:55:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      maybeWebFrame  &&  maybeWebFrame . ipc . emit ( channel ,  event ,  . . . args ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ipc . emit ( channel ,  event ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      ipcMain . emit ( channel ,  event ,  . . . args ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-23 17:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-06 13:48:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . on ( '-ipc-ports'  as  any ,  function  ( this :  Electron . WebContents ,  event : Electron.IpcMainEvent ,  internal : boolean ,  channel : string ,  message : any ,  ports : any [ ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    addSenderToEvent ( event ,  this ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    event . ports  =  ports . map ( p  = >  new  MessagePortMain ( p ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 21:19:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  maybeWebFrame  =  getWebFrameForEvent ( event ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-03 16:55:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    maybeWebFrame  &&  maybeWebFrame . ipc . emit ( channel ,  event ,  message ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-16 04:21:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ipc . emit ( channel ,  event ,  message ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ipcMain . emit ( channel ,  event ,  message ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-11 18:07:54 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-24 17:22:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . on ( 'render-process-gone' ,  ( event ,  details )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    app . emit ( 'render-process-gone' ,  event ,  this ,  details ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 13:01:50 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // Log out a hint to help users better debug renderer crashes.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( loggingEnabled ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-24 17:22:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      console . info ( ` Renderer process  ${ details . reason }  - see https://www.electronjs.org/docs/tutorial/application-debugging for potential debugging information. ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 13:01:50 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-12 00:17:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-12-13 13:01:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . on ( '-before-unload-fired'  as  any ,  function  ( this :  Electron . WebContents ,  event : Electron.Event ,  proceed : boolean )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  type  =  this . getType ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // These are the "interactive" types, i.e. ones a user might be looking at.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // All other types should ignore the "proceed" signal and unload
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // regardless.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( type  ===  'window'  ||  type  ===  'offscreen'  ||  type  ===  'browserView' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  ( ! proceed )  {  return  event . preventDefault ( ) ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-12 16:36:12 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // The devtools requests the webContents to reload.
 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-02 04:52:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . on ( 'devtools-reload-page' ,  function  ( this :  Electron . WebContents )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . reload ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-12 16:36:12 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 19:05:45 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( this . getType ( )  !==  'remote' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:00:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // Make new windows requested by links behave like "window.open".
 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . on ( '-new-window'  as  any ,  ( event : Electron.Event ,  url : string ,  frameName : string ,  disposition : Electron.HandlerDetails [ 'disposition' ] , 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-29 21:41:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      rawFeatures : string ,  referrer : Electron.Referrer ,  postData : PostData )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-13 12:35:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  postBody  =  postData  ?  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        data : postData , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        . . . parseContentTypeFormat ( postData ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      }  :  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  details : Electron.HandlerDetails  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        url , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        frameName , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        features : rawFeatures , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        referrer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        postBody , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        disposition 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-14 18:22:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-06-21 03:39:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      let  result : ReturnType < typeof  this._callWindowOpenHandler > ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-14 18:22:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        result  =  this . _callWindowOpenHandler ( event ,  details ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      }  catch  ( err )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        event . preventDefault ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        throw  err ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  options  =  result . browserWindowConstructorOptions ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-06 01:04:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( ! event . defaultPrevented )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        openGuestWindow ( { 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          embedder : this , 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-06 01:04:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          disposition , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          referrer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          postData , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          overrideBrowserWindowOptions : options  ||  { } , 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          windowOpenArgs : details , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          outlivesOpener : result.outlivesOpener 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-06 01:04:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 19:05:45 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  windowOpenOverriddenOptions : BrowserWindowConstructorOptions  |  null  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  windowOpenOutlivesOpenerOption : boolean  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . on ( '-will-add-new-contents'  as  any ,  ( event : Electron.Event ,  url : string ,  frameName : string ,  rawFeatures : string ,  disposition : Electron.HandlerDetails [ 'disposition' ] ,  referrer : Electron.Referrer ,  postData : PostData )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-13 12:35:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  postBody  =  postData  ?  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        data : postData , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        . . . parseContentTypeFormat ( postData ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      }  :  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  details : Electron.HandlerDetails  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        url , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        frameName , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        features : rawFeatures , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        disposition , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        referrer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        postBody 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-14 18:22:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-06-21 03:39:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      let  result : ReturnType < typeof  this._callWindowOpenHandler > ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-14 18:22:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        result  =  this . _callWindowOpenHandler ( event ,  details ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      }  catch  ( err )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        event . preventDefault ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        throw  err ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      windowOpenOutlivesOpenerOption  =  result . outlivesOpener ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      windowOpenOverriddenOptions  =  result . browserWindowConstructorOptions ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( ! event . defaultPrevented )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  secureOverrideWebPreferences  =  windowOpenOverriddenOptions  ?  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // Allow setting of backgroundColor as a webPreference even though
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // it's technically a BrowserWindowConstructorOptions option because
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          // we need to access it in the renderer at init time.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          backgroundColor : windowOpenOverriddenOptions.backgroundColor , 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-10 12:44:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          transparent : windowOpenOverriddenOptions.transparent , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          . . . windowOpenOverriddenOptions . webPreferences 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  :  undefined ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-06 12:54:14 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  {  webPreferences : parsedWebPreferences  }  =  parseFeatures ( rawFeatures ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  webPreferences  =  makeWebPreferences ( { 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          embedder : this , 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-06 12:54:14 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          insecureParsedWebPreferences : parsedWebPreferences , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          secureOverrideWebPreferences 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-09 23:57:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        windowOpenOverriddenOptions  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          . . . windowOpenOverriddenOptions , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          webPreferences 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-06 12:54:14 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        this . _setNextChildWebPreferences ( webPreferences ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:00:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-06 09:28:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // Create a new browser window for "window.open"
 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . on ( '-add-new-contents'  as  any ,  ( event : Electron.Event ,  webContents : Electron.WebContents ,  disposition : string , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      _userGesture : boolean ,  _left : number ,  _top : number ,  _width : number ,  _height : number ,  url : string ,  frameName : string , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      referrer : Electron.Referrer ,  rawFeatures : string ,  postData : PostData )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  overriddenOptions  =  windowOpenOverriddenOptions  ||  undefined ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  outlivesOpener  =  windowOpenOutlivesOpenerOption ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      windowOpenOverriddenOptions  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      // false is the default
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      windowOpenOutlivesOpenerOption  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:00:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( ( disposition  !==  'foreground-tab'  &&  disposition  !==  'new-window'  && 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           disposition  !==  'background-tab' ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        event . preventDefault ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:00:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      openGuestWindow ( { 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        embedder : this , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        guest : webContents , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        overrideBrowserWindowOptions : overriddenOptions , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        disposition , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        referrer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        postData , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        windowOpenArgs :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          url , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          frameName , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          features : rawFeatures 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-23 08:59:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        outlivesOpener 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 09:06:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:00:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-11-11 09:47:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . on ( 'login' ,  ( event ,  . . . args )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    app . emit ( 'login' ,  event ,  this ,  . . . args ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-11 09:47:01 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-28 22:36:45 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . on ( 'ready-to-show'  as  any ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  owner  =  this . getOwnerBrowserWindow ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( owner  &&  ! owner . isDestroyed ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      process . nextTick ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        owner . emit ( 'ready-to-show' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-12-16 08:46:48 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  this . on ( 'select-bluetooth-device' ,  ( event ,  devices ,  callback )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-17 16:55:43 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( this . listenerCount ( 'select-bluetooth-device' )  ===  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-16 08:46:48 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      // Cancel it if there are no handlers
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      event . preventDefault ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      callback ( '' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-12-05 17:36:23 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  originCounts  =  new  Map < string ,  number > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  openDialogs  =  new  Set < AbortController > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  this . on ( '-run-dialog'  as  any ,  async  ( info :  { frame : WebFrameMain ,  dialogType :  'prompt'  |  'confirm'  |  'alert' ,  messageText : string ,  defaultPromptText : string } ,  callback :  ( success : boolean ,  user_input : string )  = >  void )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  originUrl  =  new  URL ( info . frame . url ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  origin  =  originUrl . protocol  ===  'file:'  ?  originUrl.href  : originUrl.origin ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ( originCounts . get ( origin )  ? ?  0 )  <  0 )  return  callback ( false ,  '' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  prefs  =  this . getLastWebPreferences ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! prefs  ||  prefs . disableDialogs )  return  callback ( false ,  '' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // We don't support prompt() for some reason :)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( info . dialogType  ===  'prompt' )  return  callback ( false ,  '' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    originCounts . set ( origin ,  ( originCounts . get ( origin )  ? ?  0 )  +  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // TODO: translate?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  checkbox  =  originCounts . get ( origin ) !  >  1  &&  prefs . safeDialogs  ?  prefs . safeDialogsMessage  ||  'Prevent this app from creating additional dialogs'  :  '' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  parent  =  this . getOwnerBrowserWindow ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  abortController  =  new  AbortController ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  options : MessageBoxOptions  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      message : info.messageText , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      checkboxLabel : checkbox , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      signal : abortController.signal , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      . . . ( info . dialogType  ===  'confirm' )  ?  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        buttons :  [ 'OK' ,  'Cancel' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        defaultId : 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cancelId : 1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      }  :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        buttons :  [ 'OK' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        defaultId :  - 1 ,  // No default button
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cancelId : 0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    openDialogs . add ( abortController ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  promise  =  parent  &&  ! prefs . offscreen  ?  dialog . showMessageBox ( parent ,  options )  :  dialog . showMessageBox ( options ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  result  =  await  promise ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-13 13:01:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( abortController . signal . aborted  ||  this . isDestroyed ( ) )  return ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-05 17:36:23 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( result . checkboxChecked )  originCounts . set ( origin ,  - 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  callback ( result . response  ===  0 ,  '' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  finally  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      openDialogs . delete ( abortController ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  this . on ( '-cancel-dialogs'  as  any ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( const  controller  of  openDialogs )  {  controller . abort ( ) ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    openDialogs . clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-02-13 13:39:18 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  app . emit ( 'web-contents-created' ,  {  sender : this ,  preventDefault  ( )  { } ,  get  defaultPrevented  ( )  {  return  false ;  }  } ,  this ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-11 18:40:23 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-13 17:16:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Properties
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Object . defineProperty ( this ,  'audioMuted' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get :  ( )  = >  this . isAudioMuted ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set :  ( muted )  = >  this . setAudioMuted ( muted ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-13 17:16:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Object . defineProperty ( this ,  'userAgent' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get :  ( )  = >  this . getUserAgent ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set :  ( agent )  = >  this . setUserAgent ( agent ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-13 17:16:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Object . defineProperty ( this ,  'zoomLevel' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get :  ( )  = >  this . getZoomLevel ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set :  ( level )  = >  this . setZoomLevel ( level ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-13 17:16:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Object . defineProperty ( this ,  'zoomFactor' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get :  ( )  = >  this . getZoomFactor ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set :  ( factor )  = >  this . setZoomFactor ( factor ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-13 17:16:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Object . defineProperty ( this ,  'frameRate' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get :  ( )  = >  this . getFrameRate ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set :  ( rate )  = >  this . setFrameRate ( rate ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 15:11:45 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Object . defineProperty ( this ,  'backgroundThrottling' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get :  ( )  = >  this . getBackgroundThrottling ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set :  ( allowed )  = >  this . setBackgroundThrottling ( allowed ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-20 13:28:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2019-07-03 08:57:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 20:38:35 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Public APIs.
  
						 
					
						
							
								
									
										
										
										
											2020-11-17 14:14:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  create  ( options  =  { } ) :  Electron . WebContents  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  new  ( WebContents  as  any ) ( options ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 10:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2016-07-13 12:15:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 10:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  fromId  ( id : string )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  binding . fromId ( id ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2016-07-14 08:59:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-26 12:37:08 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  fromFrame  ( frame : Electron.WebFrameMain )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  binding . fromFrame ( frame ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-27 17:01:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  fromDevToolsTargetId  ( targetId : string )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  binding . fromDevToolsTargetId ( targetId ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 10:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  getFocusedWebContents  ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  let  focused  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for  ( const  contents  of  binding . getAllWebContents ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! contents . isFocused ( ) )  continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( focused  ==  null )  focused  =  contents ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // Return webview web contents which may be embedded inside another
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // web contents that is also reporting as focused
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( contents . getType ( )  ===  'webview' )  return  contents ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-13 08:59:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 10:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  focused ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  function  getAllWebContents  ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  binding . getAllWebContents ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}