2022-07-03 20:44:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Copyright  ( c )  2022 ,  Andreas  Kling  < kling @ serenityos . org > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  SPDX - License - Identifier :  BSD - 2 - Clause 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-03 21:26:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "BrowserWindow.h" 
  
						 
					
						
							
								
									
										
										
										
											2023-04-24 14:51:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "EventLoopImplementationQt.h" 
  
						 
					
						
							
								
									
										
										
										
											2022-07-14 05:41:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "Settings.h" 
  
						 
					
						
							
								
									
										
										
										
											2023-01-27 10:41:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "WebContentView.h" 
  
						 
					
						
							
								
									
										
										
										
											2023-08-05 10:42:26 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <Ladybird/HelperProcess.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <Ladybird/Utilities.h> 
  
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  <LibCore/ArgsParser.h> 
  
						 
					
						
							
								
									
										
										
										
											2022-10-05 15:23:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <LibCore/EventLoop.h> 
  
						 
					
						
							
								
									
										
										
										
											2023-08-02 10:27:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <LibCore/Process.h> 
  
						 
					
						
							
								
									
										
										
										
											2022-10-24 11:18:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <LibCore/System.h> 
  
						 
					
						
							
								
									
										
										
										
											2022-10-05 15:23:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <LibGfx/Font/FontDatabase.h> 
  
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  <LibMain/Main.h> 
  
						 
					
						
							
								
									
										
										
										
											2023-08-31 07:07:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <LibWebView/CookieJar.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <LibWebView/Database.h> 
  
						 
					
						
							
								
									
										
										
										
											2024-03-25 18:29:14 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <LibWebView/ProcessManager.h> 
  
						 
					
						
							
								
									
										
										
										
											2023-10-13 09:52:06 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <LibWebView/URL.h> 
  
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  <QApplication> 
  
						 
					
						
							
								
									
										
										
										
											2023-11-13 14:45:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <QFileOpenEvent> 
  
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-04-04 14:13:14 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if defined(AK_OS_MACOS) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#     include <Ladybird / MachPortServer.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-02 11:52:59 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								namespace  Ladybird  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bool  is_using_dark_system_theme ( QWidget &  widget )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // FIXME: Qt does not provide any method to query if the system is using a dark theme. We will have to implement
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    //        platform-specific methods if we wish to have better detection. For now, this inspects if Qt is using a
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    //        dark color for widget backgrounds using Rec. 709 luma coefficients.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    //        https://en.wikipedia.org/wiki/Rec._709#Luma_coefficients
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    auto  color  =  widget . palette ( ) . color ( widget . backgroundRole ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    auto  luma  =  0.2126f  *  color . redF ( )  +  0.7152f  *  color . greenF ( )  +  0.0722f  *  color . blueF ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  luma  < =  0.5f ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-24 11:18:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  ErrorOr < void >  handle_attached_debugger ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ifdef AK_OS_LINUX 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // Let's ignore SIGINT if we're being debugged because GDB
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // incorrectly forwards the signal to us even when it's set to
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // "nopass". See https://sourceware.org/bugzilla/show_bug.cgi?id=9425
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // for details.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-02 10:27:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( TRY ( Core : : Process : : is_being_debugged ( ) ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dbgln ( " Debugger is attached, ignoring SIGINT " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        TRY ( Core : : System : : signal ( SIGINT ,  SIG_IGN ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-24 11:18:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-11-13 14:45:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  LadybirdApplication  :  public  QApplication  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    LadybirdApplication ( int &  argc ,  char * *  argv ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        :  QApplication ( argc ,  argv ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-03-18 16:22:27 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Function < void ( URL : : URL ) >  on_open_file ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-13 14:45:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bool  event ( QEvent *  event )  override 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        switch  ( event - > type ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  QEvent : : FileOpen :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! on_open_file ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            auto  const &  open_event  =  * static_cast < QFileOpenEvent  const * > ( event ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-04 10:08:16 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            auto  file  =  ak_string_from_qstring ( open_event . file ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-13 14:45:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( auto  file_url  =  WebView : : sanitize_url ( file ) ;  file_url . has_value ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                on_open_file ( file_url . release_value ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  QApplication : : event ( event ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								ErrorOr < int >  serenity_main ( Main : : Arguments  arguments )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-12-11 11:19:41 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    AK : : set_rich_debug_enabled ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-11-13 14:45:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    LadybirdApplication  app ( arguments . argc ,  arguments . argv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-24 14:51:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-04-25 17:38:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Core : : EventLoopManager : : install ( * new  Ladybird : : EventLoopManagerQt ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-05 15:23:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Core : : EventLoop  event_loop ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-25 16:53:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static_cast < Ladybird : : EventLoopImplementationQt & > ( event_loop . impl ( ) ) . set_main_loop ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-05 15:23:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-24 11:18:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    TRY ( handle_attached_debugger ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-07 17:08:29 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    platform_init ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // NOTE: We only instantiate this to ensure that Gfx::FontDatabase has its default queries initialized.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Gfx : : FontDatabase : : set_default_font_query ( " Katica 10 400 0 " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Gfx : : FontDatabase : : set_fixed_width_font_query ( " Csilla 10 400 0 " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-09-11 15:31:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Vector < StringView >  raw_urls ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-12-15 09:18:52 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    StringView  webdriver_content_ipc_path ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-06 08:25:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Vector < ByteString >  certificates ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-15 01:04:28 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bool  enable_callgrind_profiling  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-14 12:24:58 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bool  disable_sql_database  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-14 12:23:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bool  enable_qt_networking  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 17:28:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bool  use_gpu_painting  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-20 09:52:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bool  debug_web_content  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-14 11:08:44 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    Core : : ArgsParser  args_parser ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    args_parser . set_general_help ( " The Ladybird web browser :^) " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-11 15:31:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    args_parser . add_positional_argument ( raw_urls ,  " URLs to open " ,  " url " ,  Core : : ArgsParser : : Required : : No ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-03 09:14:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    args_parser . add_option ( webdriver_content_ipc_path ,  " Path to WebDriver IPC for WebContent " ,  " webdriver-content-path " ,  0 ,  " path " ,  Core : : ArgsParser : : OptionHideMode : : CommandLineAndMarkdown ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-15 01:04:28 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    args_parser . add_option ( enable_callgrind_profiling ,  " Enable Callgrind profiling " ,  " enable-callgrind-profiling " ,  ' P ' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-14 12:24:58 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    args_parser . add_option ( disable_sql_database ,  " Disable SQL database " ,  " disable-sql-database " ,  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-14 12:23:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    args_parser . add_option ( enable_qt_networking ,  " Enable Qt as the backend networking service " ,  " enable-qt-networking " ,  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 17:28:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    args_parser . add_option ( use_gpu_painting ,  " Enable GPU painting " ,  " enable-gpu-painting " ,  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-20 09:52:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    args_parser . add_option ( debug_web_content ,  " Wait for debugger to attach to WebContent " ,  " debug-web-content " ,  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-06 08:25:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    args_parser . add_option ( certificates ,  " Path to a certificate file " ,  " certificate " ,  ' C ' ,  " certificate " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    args_parser . parse ( arguments ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-04-04 14:13:14 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    WebView : : ProcessManager : : initialize ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# if defined(AK_OS_MACOS) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    auto  mach_port_server  =  make < Ladybird : : MachPortServer > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_mach_server_name ( mach_port_server - > server_port_name ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mach_port_server - > on_receive_child_mach_port  =  [ ] ( auto  pid ,  auto  port )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        WebView : : ProcessManager : : the ( ) . add_process ( pid ,  move ( port ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-31 07:07:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    RefPtr < WebView : : Database >  database ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-29 07:20:20 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-12-14 12:24:58 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! disable_sql_database )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-20 14:26:06 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        auto  sql_server_paths  =  TRY ( get_paths_for_helper_process ( " SQLServer " sv ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-31 07:21:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        database  =  TRY ( WebView : : Database : : create ( move ( sql_server_paths ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-20 14:26:06 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-31 07:07:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    auto  cookie_jar  =  database  ?  TRY ( WebView : : CookieJar : : create ( * database ) )  :  WebView : : CookieJar : : create ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-12-05 13:09:42 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-03-18 16:22:27 +13:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Vector < URL : : URL >  initial_urls ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-08 15:59:55 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-09-11 15:31:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  ( auto  const &  raw_url  :  raw_urls )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-13 09:52:06 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( auto  url  =  WebView : : sanitize_url ( raw_url ) ;  url . has_value ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            initial_urls . append ( url . release_value ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( initial_urls . is_empty ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        auto  new_tab_page  =  Ladybird : : Settings : : the ( ) - > new_tab_page ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-04 10:08:16 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        initial_urls . append ( ak_string_from_qstring ( new_tab_page ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-11 15:31:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-01-16 18:55:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    StringBuilder  command_line_builder ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    command_line_builder . join ( '   ' ,  arguments . strings ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-01 12:18:40 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Ladybird : : WebContentOptions  web_content_options  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-16 18:55:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        . command_line  =  MUST ( command_line_builder . to_string ( ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        . executable_path  =  MUST ( String : : from_byte_string ( MUST ( Core : : System : : current_executable_path ( ) ) ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-06 08:25:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        . certificates  =  move ( certificates ) , 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-01 12:18:40 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        . enable_callgrind_profiling  =  enable_callgrind_profiling  ?  Ladybird : : EnableCallgrindProfiling : : Yes  :  Ladybird : : EnableCallgrindProfiling : : No , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        . enable_gpu_painting  =  use_gpu_painting  ?  Ladybird : : EnableGPUPainting : : Yes  :  Ladybird : : EnableGPUPainting : : No , 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-14 12:23:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        . use_lagom_networking  =  enable_qt_networking  ?  Ladybird : : UseLagomNetworking : : No  :  Ladybird : : UseLagomNetworking : : Yes , 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-20 09:52:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        . wait_for_debugger  =  debug_web_content  ?  Ladybird : : WaitForDebugger : : Yes  :  Ladybird : : WaitForDebugger : : No , 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-01 12:18:40 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Ladybird : : BrowserWindow  window ( initial_urls ,  cookie_jar ,  web_content_options ,  webdriver_content_ipc_path ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    window . setWindowTitle ( " Ladybird " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-09 12:23:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-11-13 14:45:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    app . on_open_file  =  [ & ] ( auto  file_url )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        window . view ( ) . load ( file_url ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-05-29 19:05:30 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( Ladybird : : Settings : : the ( ) - > is_maximized ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-09 12:23:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        window . showMaximized ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-29 19:05:30 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        auto  last_position  =  Ladybird : : Settings : : the ( ) - > last_position ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-09 12:23:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( last_position . has_value ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            window . move ( last_position . value ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-29 19:05:30 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        window . resize ( Ladybird : : Settings : : the ( ) - > last_size ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-09 12:23:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    window . show ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-04-24 14:51:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  event_loop . exec ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-03 20:36:07 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}