package Ġcom . code stream . webview Ċ Ċ import Ġcom . code stream . DEBUG Ċ import Ġcom . intellij . ide . Browser Util Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . util . download . Download able File Description Ċ import Ġcom . intellij . util . download . Download able File Service Ċ import Ġcom . team dev . j xb rowser . browser . Browser Ċ import Ġcom . team dev . j xb rowser . engine . Engine Ċ import Ġcom . team dev . j xb rowser . engine . Engine Options Ċ import Ġcom . team dev . j xb rowser . engine . Rendering Mode Ċ import Ġcom . team dev . j xb rowser . net . ResourceType Ċ import Ġcom . team dev . j xb rowser . net . callback . Before Url Request Callback Ċ import Ġcom . team dev . j xb rowser . plugin . callback . Allow Plugin Callback Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . future . await Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . io . File Ċ import Ġjava . net . URL ClassLoader Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ const Ġval ĠDOWN LOAD _ URL _ PREFIX Ġ= Ġ" https :// assets . code stream . com / j xb rowser /" Ċ Ċ class ĠJ xB rowser Engine Service Ġ: ĠDis posable Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLogger . getInstance ( J xB rowser Engine Service :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġengine Future Ġ= ĠCompletableFuture < Engine >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġch romium Dir Ġ= Ġdownload And Extract J xB rowser Ch romium () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= Ġcreate TempDir () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" J xB rowser Ġwork Ġdir : Ġ$ dir ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlicense Key Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Class . getResource ("/ j xb rowser . license "). read Text (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSystem . setProperty (" j xb rowser . ipc . external ", Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Builder Ġ= ĠEngine Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder ( Rendering Mode . OFF _ SCREEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. license Key ( license Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. userData Dir ( Paths . get ( dir . to URI ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable Gpu () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable Ch romium Traffic () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Switch ("-- disable - gpu - comp osit ing ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Switch ("-- enable - begin - frame - scheduling ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Switch ("-- software - rendering - fps = 6 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġif Ġ( J re Hi D pi Util . is J re Hi DPI Enabled () Ġ&& Ġ! System Info . is Mac ) Ġ"-- force - device - scale - factor = 1 " Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. allow File Access From Files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. chromium Dir ( chromium Dir . to Path ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Builder . remote Debugging Port ( 9 2 2 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġoptions Builder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġengine Ġ= ĠEngine . newInstance ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Future . complete ( engine ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġengine . network () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine . spell Checker (). disable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine . plugins () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( Allow Plugin Callback :: class . java , ĠAllow Plugin Callback Ġ{ ĠAllow Plugin Callback . Response . deny () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine . network (). set ( Before Url Request Callback :: class . java , ĠBefore Url Request Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . url Request (). resourceType () Ġ== ĠResource Type . IMAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġit . url Request (). url (). startsWith (" file :// ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġit . url Request (). url (). contains ("/ dns - query ? dns =") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBefore Url Request Callback . Response . proceed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . url Request (). resourceType () Ġ== ĠResource Type . MAIN _ FRAME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBrowser Util . browse ( it . url Request (). url ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBefore Url Request Callback . Response . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġnew Browser (): ĠBrowser Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . audio (). mute () ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Confirm Callback :: class . java , ĠConfirm Callback Ġ{ Ġ_, Ġtell Ġ-> Ġtell . cancel () Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Certificate Error Callback :: class . java , ĠCertificate Error Callback Ġ{ Ġ_, Ġaction Ġ-> Ġaction . deny () Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Before Unload Callback :: class . java , ĠBefore Unload Callback Ġ{ Ġ_, Ġaction Ġ-> Ġaction . st ay () Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Alert Callback :: class . java , ĠAlert Callback Ġ{ Ġ_, Ġaction Ġ-> Ġaction . ok () Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Confirm Callback :: class . java , ĠConfirm Callback Ġ{ Ġ_, Ġaction Ġ-> Ġaction . cancel () Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Open File Callback :: class . java , ĠOpen File Callback Ġ{ Ġ_, Ġaction Ġ-> Ġaction . cancel () Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Open Files Callback :: class . java , ĠOpen Files Callback Ġ{ Ġ_, Ġaction Ġ-> Ġaction . cancel () Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Open Folder Callback :: class . java , ĠOpen Folder Callback Ġ{ Ġ_, Ġaction Ġ-> Ġaction . cancel () Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Prompt Callback :: class . java , ĠPrompt Callback Ġ{ Ġ_, Ġaction Ġ-> Ġaction . cancel () Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Select Color Callback :: class . java , ĠSelect Color Callback Ġ{ Ġ_, Ġaction Ġ-> Ġaction . cancel () Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser . set ( Select Client Certificate Callback :: class . java , ĠSelect Client Certificate Callback Ġ{ Ġ_, Ġaction Ġ-> Ġaction . cancel () Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġengine Future . await (). new Browser () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Dis posing ĠJ xB rowser Ġengine ") ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Future . await (). close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdownload And Extract J xB rowser Ch romium (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Ens uring ĠJ xB rowser ĠChromium Ġis Ġavailable ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjar Names Ġ= ĠJ xB rowser Jar Name . list () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Home Dir Ġ= ĠFile ( System . getProperty (" user . home ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj xB rowser J ars Dir Ġ= Ġuser Home Dir . resolve (". code stream "). resolve (" j xb rowser ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġch romium Dir Ġ= Ġj xB rowser J ars Dir . resolve (" chromium ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! chromium Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Directories ( chromium Dir . to Path ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmissing J ars Descriptions Ġ= Ġmutable ListOf < Download able File Description >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjar Names . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjar File Ġ= Ġj xB rowser J ars Dir . resolve ( it . value ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Files . exists ( jar File . to Path ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= ĠDownload able File Service . getInstance (). create File Description ( DOWNLOAD _ URL _ PREFIX Ġ+ Ġit . value (), Ġit . value ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing J ars Descriptions . add ( description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( missing J ars Descriptions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdown loader Ġ= ĠDownload able File Service . getInstance (). create Downloader ( missing J ars Descriptions , Ġ" J xB rowser ĠChromium Ġbinaries ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdownloaded Files Ġ= Ġdown loader . download With Background Progress ( j xB rowser J ars Dir . absolute Path , Ġnull ). await () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownloaded Files ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Downloaded Ġ${ it . first . name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjar Urls Ġ= Ġjar Names . map Ġ{ Ġj xB rowser J ars Dir . resolve ( it . value ()). to URI (). to URL () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild ClassLoader Ġ= ĠURL ClassLoader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjar Urls . to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj ni Library Ġ= ĠClass . forName (" com . team dev . j xb rowser . internal . J ni Library ", Ġtrue , Ġchild ClassLoader )// . path ( chromium Dir ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Method Ġ= Ġj ni Library . getDeclared Method (" path ", ĠPath :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Method . invoke ( null , Ġch romium Dir . to Path ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġengine Impl Ġ= ĠClass . forName (" com . team dev . j xb rowser . engine . internal . Engine Impl ", Ġtrue , Ġchild ClassLoader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextractor Method Ġ= Ġengine Impl . getDeclared Method (" extract Ch romium Bin aries If Ne cessary ", ĠPath :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextractor Method . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextractor Method . invoke ( null , Ġch romium Dir . to Path ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" J xB rowser ĠChromium Ġavailable Ġat Ġ${ chromium Dir . canonical Path }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġch romium Dir ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ