You've already forked CEF4Delphi
							
							
				mirror of
				https://github.com/salvadordf/CEF4Delphi.git
				synced 2025-10-30 23:07:52 +02:00 
			
		
		
		
	Update to CEF 90.5.4
This commit is contained in:
		
							
								
								
									
										16
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								README.md
									
									
									
									
									
								
							| @@ -3,15 +3,15 @@ CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chro | ||||
|  | ||||
| CEF4Delphi is based on DCEF3 and fpCEF3. The original license of those projects still applies to CEF4Delphi. Read the license terms in the first lines of any *.pas file. | ||||
|  | ||||
| CEF4Delphi uses CEF 89.0.18 which includes Chromium 89.0.4389.114.  | ||||
| CEF4Delphi uses CEF 90.5.4 which includes Chromium 90.0.4430.72.  | ||||
| The CEF binaries used by CEF4Delphi are available for download at spotify : | ||||
| * [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_89.0.18%2Bgb36241d%2Bchromium-89.0.4389.114_windows32.tar.bz2) | ||||
| * [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_89.0.18%2Bgb36241d%2Bchromium-89.0.4389.114_windows64.tar.bz2) | ||||
| * [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_89.0.18%2Bgb36241d%2Bchromium-89.0.4389.114_linux32.tar.bz2) | ||||
| * [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_89.0.18%2Bgb36241d%2Bchromium-89.0.4389.114_linux64.tar.bz2) | ||||
| * [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_89.0.18%2Bgb36241d%2Bchromium-89.0.4389.114_linuxarm.tar.bz2) | ||||
| * [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_89.0.18%2Bgb36241d%2Bchromium-89.0.4389.114_linuxarm64.tar.bz2) | ||||
| * [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_89.0.18%2Bgb36241d%2Bchromium-89.0.4389.114_macosx64.tar.bz2) | ||||
| * [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_90.5.4%2Bgc6a4331%2Bchromium-90.0.4430.72_windows32.tar.bz2) | ||||
| * [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.5.4%2Bgc6a4331%2Bchromium-90.0.4430.72_windows64.tar.bz2) | ||||
| * [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_90.5.4%2Bgc6a4331%2Bchromium-90.0.4430.72_linux32.tar.bz2) | ||||
| * [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.5.4%2Bgc6a4331%2Bchromium-90.0.4430.72_linux64.tar.bz2) | ||||
| * [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_90.5.4%2Bgc6a4331%2Bchromium-90.0.4430.72_linuxarm.tar.bz2) | ||||
| * [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.5.4%2Bgc6a4331%2Bchromium-90.0.4430.72_linuxarm64.tar.bz2) | ||||
| * [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.5.4%2Bgc6a4331%2Bchromium-90.0.4430.72_macosx64.tar.bz2) | ||||
|  | ||||
| CEF4Delphi was developed and tested on Delphi 10.4.2 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2, Delphi 10.3 and Lazarus 2.0.12/FPC 3.2.0. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components. | ||||
|  | ||||
|   | ||||
| @@ -222,8 +222,7 @@ begin | ||||
|          else | ||||
|           TempCache := GlobalCEFApp.RootCache + '\cache' + inttostr(MainForm.BrowserCount); | ||||
|  | ||||
|         TempContext := TCefRequestContextRef.New(TempCache, '', False, False, False) | ||||
|  | ||||
|         TempContext := TCefRequestContextRef.New(TempCache, '', '', True, False, False, False) | ||||
|       end | ||||
|      else | ||||
|       TempContext := nil; | ||||
|   | ||||
| @@ -211,11 +211,11 @@ begin | ||||
|  | ||||
|   // If you use an empty cache path, CEF will use in-memory cache. | ||||
|  | ||||
|     // The cache directories of all the browsers *MUST* be a subdirectory of | ||||
|     // GlobalCEFApp.RootCache unless you use a blank cache (in-memory). | ||||
|   // The cache directories of all the browsers *MUST* be a subdirectory of | ||||
|   // GlobalCEFApp.RootCache unless you use a blank cache (in-memory). | ||||
|  | ||||
|   if MainForm.NewContextChk.Checked then | ||||
|     TempContext := TCefRequestContextRef.New('', '', False, False, False) | ||||
|     TempContext := TCefRequestContextRef.New('', '', '', True, False, False, False) | ||||
|    else | ||||
|     TempContext := nil; | ||||
|  | ||||
|   | ||||
| @@ -445,7 +445,7 @@ begin | ||||
|    else | ||||
|     TempFullPath := TempName; | ||||
|  | ||||
|   callback.cont(TempFullPath, False); | ||||
|   callback.cont(TempFullPath, True); | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.Chromium1BeforePluginLoad(Sender: TObject; | ||||
|   | ||||
| @@ -40,6 +40,7 @@ unit uTinyBrowser2; | ||||
| interface | ||||
|  | ||||
| uses | ||||
|   Types, | ||||
|   uCEFInterfaces, uCEFTypes, uCEFChromiumCore; | ||||
|  | ||||
| type | ||||
| @@ -47,7 +48,6 @@ type | ||||
|     private | ||||
|       FChromium : TChromiumCore; | ||||
|  | ||||
|       procedure Chromium_OnClose(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction); | ||||
|       procedure Chromium_OnBeforeClose(Sender: TObject; const browser: ICefBrowser); | ||||
|       procedure Chromium_OnBeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings; var extra_info: ICefDictionaryValue; var noJavascriptAccess: Boolean; var Result: Boolean); | ||||
|       procedure Chromium_OnOpenUrlFromTab(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; out Result: Boolean); | ||||
| @@ -79,7 +79,7 @@ implementation | ||||
| // and it's necessary to close the message loop. | ||||
|  | ||||
| uses | ||||
|   uCEFApplication; | ||||
|   uCEFApplication, uCEFConstants, uCEFMiscFunctions; | ||||
|  | ||||
| var | ||||
|   TinyBrowser : TTinyBrowser2 = nil; | ||||
| @@ -129,21 +129,20 @@ begin | ||||
| end; | ||||
|  | ||||
| procedure TTinyBrowser2.AfterConstruction; | ||||
| var | ||||
|   TempHandle : TCefWindowHandle; | ||||
|   TempRect : TRect; | ||||
| begin | ||||
|   inherited AfterConstruction; | ||||
|  | ||||
|   FChromium                  := TChromiumCore.Create(nil); | ||||
|   FChromium.DefaultURL       := 'https://www.google.com'; | ||||
|   FChromium.OnClose          := Chromium_OnClose; | ||||
|   FChromium.OnBeforeClose    := Chromium_OnBeforeClose; | ||||
|   FChromium.OnBeforePopup    := Chromium_OnBeforePopup; | ||||
|   FChromium.OnOpenUrlFromTab := Chromium_OnOpenUrlFromTab; | ||||
|   FChromium.CreateBrowser('Tiny Browser 2'); | ||||
| end; | ||||
|  | ||||
| procedure TTinyBrowser2.Chromium_OnClose(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction); | ||||
| begin | ||||
|   aAction := cbaClose; | ||||
|   InitializeWindowHandle(TempHandle); | ||||
|   FChromium.CreateBrowser(TempHandle, TempRect, 'Tiny Browser 2', nil, nil, True); | ||||
| end; | ||||
|  | ||||
| procedure TTinyBrowser2.Chromium_OnBeforeClose(Sender: TObject; const browser: ICefBrowser); | ||||
|   | ||||
| @@ -241,6 +241,12 @@ object MiniBrowserFrm: TMiniBrowserFrm | ||||
|     OnBeforeClose = Chromium1BeforeClose | ||||
|     OnClose = Chromium1Close | ||||
|     OnBeforePluginLoad = Chromium1BeforePluginLoad | ||||
|     OnPrintStart = Chromium1PrintStart | ||||
|     OnPrintSettings = Chromium1PrintSettings | ||||
|     OnPrintDialog = Chromium1PrintDialog | ||||
|     OnPrintJob = Chromium1PrintJob | ||||
|     OnPrintReset = Chromium1PrintReset | ||||
|     OnGetPDFPaperSize = Chromium1GetPDFPaperSize | ||||
|     Left = 32 | ||||
|     Top = 224 | ||||
|   end | ||||
|   | ||||
| @@ -99,9 +99,15 @@ type | ||||
|     procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction); | ||||
|     procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser); | ||||
|     procedure Chromium1BeforePluginLoad(Sender: TObject; const mimeType, pluginUrl: ustring; isMainFrame: boolean; const topOriginUrl: ustring; const pluginInfo: ICefWebPluginInfo; var pluginPolicy: TCefPluginPolicy; var aResult: boolean); | ||||
|     procedure Chromium1GetPDFPaperSize(Sender: TObject; const browser: ICefBrowser; deviceUnitsPerInch: Integer; var aResult: TCefSize); | ||||
|     procedure Chromium1GotFocus(Sender: TObject; const browser: ICefBrowser); | ||||
|     procedure Chromium1Jsdialog(Sender: TObject; const browser: ICefBrowser; const originUrl: ustring; dialogType: TCefJsDialogType; const messageText, defaultPromptText: ustring; const callback: ICefJsDialogCallback; out suppressMessage: Boolean; out Result: Boolean); | ||||
|     procedure Chromium1LoadingStateChange(Sender: TObject; const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean); | ||||
|     procedure Chromium1PrintDialog(Sender: TObject; const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult: boolean); | ||||
|     procedure Chromium1PrintJob(Sender: TObject; const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult: boolean); | ||||
|     procedure Chromium1PrintReset(Sender: TObject; const browser: ICefBrowser); | ||||
|     procedure Chromium1PrintSettings(Sender: TObject; const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean); | ||||
|     procedure Chromium1PrintStart(Sender: TObject; const browser: ICefBrowser); | ||||
|     procedure Chromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring); | ||||
|     procedure Chromium1AddressChange(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const url: ustring); | ||||
|     procedure Chromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel); | ||||
| @@ -210,12 +216,6 @@ type | ||||
|     property  BrowserCanGoForward  : boolean             read GetBrowserCanGoForward write SetBrowserCanGoForward; | ||||
|     property  BrowserStatusText    : string              read GetBrowserStatusText   write SetBrowserStatusText; | ||||
|     property  BrowserTitle         : string              read GetBrowserTitle        write SetBrowserTitle; | ||||
|   public | ||||
|     procedure HandlePrintStart(const browser: ICefBrowser); | ||||
|     procedure HandlePrintSettings(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean);        | ||||
|     procedure HandlePrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult : boolean); | ||||
|     procedure HandlePrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult : boolean); | ||||
|     procedure HandlePrintReset(const browser: ICefBrowser); | ||||
|   end; | ||||
|  | ||||
| var | ||||
| @@ -260,37 +260,6 @@ const | ||||
| // 2. TChromium.OnClose sends a CEFBROWSER_DESTROY message to destroy CEFWindowParent1 in the main thread, which triggers the TChromium.OnBeforeClose event. | ||||
| // 3. TChromium.OnBeforeClose sets FCanClose := True and sends WM_CLOSE to the form. | ||||
|  | ||||
| procedure GlobalCEFApp_OnPrintStart(const browser: ICefBrowser); | ||||
| begin | ||||
|   MiniBrowserFrm.HandlePrintStart(browser); | ||||
| end; | ||||
|  | ||||
| procedure GlobalCEFApp_OnPrintSettings(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean); | ||||
| begin | ||||
|   MiniBrowserFrm.HandlePrintSettings(browser, settings, getDefaults); | ||||
| end; | ||||
|  | ||||
| procedure GlobalCEFApp_OnPrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult : boolean); | ||||
| begin | ||||
|   MiniBrowserFrm.HandlePrintDialog(browser, hasSelection, callback, aResult); | ||||
| end; | ||||
|  | ||||
| procedure GlobalCEFApp_OnPrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult : boolean); | ||||
| begin | ||||
|   MiniBrowserFrm.HandlePrintJob(browser, documentName, PDFFilePath, callback, aResult); | ||||
| end; | ||||
|  | ||||
| procedure GlobalCEFApp_OnPrintReset(const browser: ICefBrowser); | ||||
| begin | ||||
|   MiniBrowserFrm.HandlePrintReset(browser); | ||||
| end; | ||||
|  | ||||
| procedure GlobalCEFApp_OnGetPDFPaperSize(deviceUnitsPerInch: Integer; var aResult : TCefSize); | ||||
| begin | ||||
|   aResult.width  := Printer.PaperSize.Width; | ||||
|   aResult.height := Printer.PaperSize.Height; | ||||
| end; | ||||
|  | ||||
| procedure CreateGlobalCEFApp; | ||||
| begin | ||||
|   GlobalCEFApp                     := TCefApplication.Create; | ||||
| @@ -298,12 +267,6 @@ begin | ||||
|   GlobalCEFApp.LogFile             := 'debug.log'; | ||||
|   GlobalCEFApp.LogSeverity         := LOGSEVERITY_INFO; | ||||
|   //GlobalCEFApp.EnablePrintPreview  := True; | ||||
|   GlobalCEFApp.OnPrintStart        := @GlobalCEFApp_OnPrintStart; | ||||
|   GlobalCEFApp.OnPrintSettings     := @GlobalCEFApp_OnPrintSettings; | ||||
|   GlobalCEFApp.OnPrintDialog       := @GlobalCEFApp_OnPrintDialog; | ||||
|   GlobalCEFApp.OnPrintJob          := @GlobalCEFApp_OnPrintJob; | ||||
|   GlobalCEFApp.OnPrintReset        := @GlobalCEFApp_OnPrintReset; | ||||
|   GlobalCEFApp.OnGetPDFPaperSize   := @GlobalCEFApp_OnGetPDFPaperSize; | ||||
| end; | ||||
|  | ||||
| {Property setters and getters} | ||||
| @@ -831,6 +794,88 @@ begin | ||||
|   SendCompMessage(CEF_UPDATELOADINGSTATE); | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.Chromium1PrintDialog(Sender: TObject; | ||||
|   const browser: ICefBrowser; hasSelection: boolean; | ||||
|   const callback: ICefPrintDialogCallback; var aResult: boolean); | ||||
| begin | ||||
|   if (browser <> nil) and (callback <> nil) and Chromium1.IsSameBrowser(browser) then | ||||
|     begin | ||||
|       FBrowserCS.Acquire; | ||||
|  | ||||
|       FPrintDialogCallback     := callback; | ||||
|       FPrintDialogHasSelection := hasSelection; | ||||
|       aResult                  := True; | ||||
|  | ||||
|       SendCompMessage(CEF_SHOWPRINTDIALOG); | ||||
|  | ||||
|       FBrowserCS.Release; | ||||
|     end | ||||
|    else | ||||
|     aResult := False; | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.Chromium1PrintJob(Sender: TObject; | ||||
|   const browser: ICefBrowser; const documentName, PDFFilePath: ustring; | ||||
|   const callback: ICefPrintJobCallback; var aResult: boolean); | ||||
| begin | ||||
|   if (browser <> nil) and (callback <> nil) and Chromium1.IsSameBrowser(browser) then | ||||
|     begin | ||||
|       FBrowserCS.Acquire; | ||||
|  | ||||
|       FPrintJobCallback     := callback; | ||||
|       FPrintJobDocumentName := documentName; | ||||
|       FPrintJobPDFFilePath  := PDFFilePath; | ||||
|       aResult               := True; | ||||
|  | ||||
|       SendCompMessage(CEF_PRINTJOBSTARTED); | ||||
|  | ||||
|       FBrowserCS.Release; | ||||
|     end | ||||
|    else | ||||
|     aResult := False; | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.Chromium1PrintReset(Sender: TObject; | ||||
|   const browser: ICefBrowser); | ||||
| begin | ||||
|   if (browser <> nil) and Chromium1.IsSameBrowser(browser) then | ||||
|     SendCompMessage(CEF_PRINTRESET); | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.Chromium1PrintSettings(Sender: TObject; | ||||
|   const browser: ICefBrowser; const settings: ICefPrintSettings; | ||||
|   getDefaults: boolean); | ||||
| var | ||||
|   TempSize : TCefSize; | ||||
|   TempArea : TCefRect; | ||||
| begin | ||||
|   if (settings <> nil) and (browser <> nil) and settings.IsValid and not(settings.IsReadOnly) and Chromium1.IsSameBrowser(browser) then | ||||
|     begin | ||||
|       // if getDefaults then ... | ||||
|  | ||||
|       TempSize.width  := Printer.PaperSize.Width; | ||||
|       TempSize.height := Printer.PaperSize.Height; | ||||
|  | ||||
|       TempArea.x      := TPrinterCanvas(Printer.Canvas).LeftMargin; | ||||
|       TempArea.y      := TPrinterCanvas(Printer.Canvas).TopMargin; | ||||
|       TempArea.width  := TPrinterCanvas(Printer.Canvas).PageWidth; | ||||
|       TempArea.height := TPrinterCanvas(Printer.Canvas).PageHeight; | ||||
|  | ||||
|       settings.DeviceName := Printer.PrinterName; | ||||
|       settings.Dpi        := Printer.XDPI; | ||||
|  | ||||
|       settings.SetOrientation(Printer.Orientation in [TPrinterOrientation.poLandscape, TPrinterOrientation.poReverseLandscape]); | ||||
|       settings.SetPrinterPrintableArea(@TempSize, @TempArea, Printer.Orientation = TPrinterOrientation.poReverseLandscape); | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.Chromium1PrintStart(Sender: TObject; | ||||
|   const browser: ICefBrowser); | ||||
| begin | ||||
|   if (browser <> nil) and Chromium1.IsSameBrowser(browser) then | ||||
|     SendCompMessage(CEF_PRINTSTART); | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.Chromium1PdfPrintFinished(Sender: TObject; aResultOK: Boolean); | ||||
| begin                               | ||||
|   SendCompMessage(CEF_PDFPRINTEND, PtrInt(ord(aResultOK))); | ||||
| @@ -875,6 +920,14 @@ begin | ||||
|     aResult := False; | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.Chromium1GetPDFPaperSize(Sender: TObject; | ||||
|   const browser: ICefBrowser; deviceUnitsPerInch: Integer; var aResult: TCefSize | ||||
|   ); | ||||
| begin | ||||
|   aResult.width  := Printer.PaperSize.Width; | ||||
|   aResult.height := Printer.PaperSize.Height; | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.Chromium1GotFocus(Sender: TObject; | ||||
|   const browser: ICefBrowser); | ||||
| begin | ||||
| @@ -1152,81 +1205,4 @@ begin | ||||
| end; | ||||
| {%Endregion} | ||||
|  | ||||
| {Printing procedures} | ||||
| {%Region} | ||||
| procedure TMiniBrowserFrm.HandlePrintStart(const browser: ICefBrowser); | ||||
| begin | ||||
|   if (browser <> nil) and Chromium1.IsSameBrowser(browser) then | ||||
|     SendCompMessage(CEF_PRINTSTART); | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.HandlePrintSettings(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean); | ||||
| var | ||||
|   TempSize : TCefSize; | ||||
|   TempArea : TCefRect; | ||||
| begin | ||||
|   if (settings <> nil) and (browser <> nil) and settings.IsValid and not(settings.IsReadOnly) and Chromium1.IsSameBrowser(browser) then | ||||
|     begin | ||||
|       // if getDefaults then ... | ||||
|  | ||||
|       TempSize.width  := Printer.PaperSize.Width; | ||||
|       TempSize.height := Printer.PaperSize.Height; | ||||
|  | ||||
|       TempArea.x      := TPrinterCanvas(Printer.Canvas).LeftMargin; | ||||
|       TempArea.y      := TPrinterCanvas(Printer.Canvas).TopMargin; | ||||
|       TempArea.width  := TPrinterCanvas(Printer.Canvas).PageWidth; | ||||
|       TempArea.height := TPrinterCanvas(Printer.Canvas).PageHeight; | ||||
|  | ||||
|       settings.DeviceName := Printer.PrinterName; | ||||
|       settings.Dpi        := Printer.XDPI; | ||||
|  | ||||
|       settings.SetOrientation(Printer.Orientation in [TPrinterOrientation.poLandscape, TPrinterOrientation.poReverseLandscape]); | ||||
|       settings.SetPrinterPrintableArea(@TempSize, @TempArea, Printer.Orientation = TPrinterOrientation.poReverseLandscape); | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.HandlePrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult : boolean); | ||||
| begin | ||||
|   if (browser <> nil) and (callback <> nil) and Chromium1.IsSameBrowser(browser) then | ||||
|     begin | ||||
|       FBrowserCS.Acquire; | ||||
|  | ||||
|       FPrintDialogCallback     := callback; | ||||
|       FPrintDialogHasSelection := hasSelection; | ||||
|       aResult                  := True; | ||||
|  | ||||
|       SendCompMessage(CEF_SHOWPRINTDIALOG); | ||||
|  | ||||
|       FBrowserCS.Release; | ||||
|     end | ||||
|    else | ||||
|     aResult := False; | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.HandlePrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult : boolean); | ||||
| begin | ||||
|   if (browser <> nil) and (callback <> nil) and Chromium1.IsSameBrowser(browser) then | ||||
|     begin | ||||
|       FBrowserCS.Acquire; | ||||
|  | ||||
|       FPrintJobCallback     := callback; | ||||
|       FPrintJobDocumentName := documentName; | ||||
|       FPrintJobPDFFilePath  := PDFFilePath; | ||||
|       aResult               := True;    | ||||
|  | ||||
|       SendCompMessage(CEF_PRINTJOBSTARTED); | ||||
|  | ||||
|       FBrowserCS.Release; | ||||
|     end | ||||
|    else | ||||
|     aResult := False; | ||||
| end; | ||||
|  | ||||
| procedure TMiniBrowserFrm.HandlePrintReset(const browser: ICefBrowser); | ||||
| begin | ||||
|   if (browser <> nil) and Chromium1.IsSameBrowser(browser) then | ||||
|     SendCompMessage(CEF_PRINTRESET); | ||||
| end; | ||||
| {%Endregion} | ||||
|  | ||||
| end. | ||||
|   | ||||
| @@ -42,7 +42,7 @@ unit uTinyBrowser2; | ||||
| interface | ||||
|  | ||||
| uses | ||||
|   SysUtils, | ||||
|   SysUtils, Classes, | ||||
|   uCEFInterfaces, uCEFTypes, uCEFChromiumCore; | ||||
|  | ||||
| type | ||||
| @@ -57,6 +57,7 @@ type | ||||
|     public | ||||
|       constructor Create; | ||||
|       destructor  Destroy; override; | ||||
|       procedure   AfterConstruction; override; | ||||
|   end; | ||||
|  | ||||
| procedure CreateGlobalCEFApp; | ||||
| @@ -77,12 +78,12 @@ implementation | ||||
|  | ||||
| // The destruction steps are much simpler for that reason. | ||||
| // In this demo it's only necessary to implement the TChromium.OnBeforeClose | ||||
| // events. The TChromium.OnBeforeClose event calls GlobalCEFApp.QuitMessageLoop | ||||
| // event. The TChromium.OnBeforeClose event calls GlobalCEFApp.QuitMessageLoop | ||||
| // because the browser has been destroyed and it's necessary to close the | ||||
| // message loop. | ||||
|  | ||||
| uses | ||||
|   uCEFApplication, uCEFConstants; | ||||
|   uCEFApplication, uCEFConstants, uCEFMiscFunctions; | ||||
|  | ||||
| var | ||||
|   TinyBrowser : TTinyBrowser2 = nil; | ||||
| @@ -100,8 +101,8 @@ begin | ||||
|   GlobalCEFApp.OnContextInitialized       := GlobalCEFApp_OnContextInitialized; | ||||
|  | ||||
|   // Add a debug log in the BIN directory | ||||
|   //GlobalCEFApp.LogFile     := 'cef.log'; | ||||
|   //GlobalCEFApp.LogSeverity := LOGSEVERITY_VERBOSE; | ||||
|   GlobalCEFApp.LogFile     := 'cef.log'; | ||||
|   GlobalCEFApp.LogSeverity := LOGSEVERITY_VERBOSE; | ||||
| end; | ||||
|  | ||||
| procedure DestroyTinyBrowser; | ||||
| @@ -117,12 +118,7 @@ constructor TTinyBrowser2.Create; | ||||
| begin | ||||
|   inherited Create; | ||||
|  | ||||
|   FChromium                  := TChromiumCore.Create(nil); | ||||
|   FChromium.DefaultURL       := 'https://www.google.com'; | ||||
|   FChromium.OnBeforeClose    := Chromium_OnBeforeClose; | ||||
|   FChromium.OnBeforePopup    := Chromium_OnBeforePopup; | ||||
|   FChromium.OnOpenUrlFromTab := Chromium_OnOpenUrlFromTab; | ||||
|   FChromium.CreateBrowser('Tiny Browser 2'); | ||||
|   FChromium := nil; | ||||
| end; | ||||
|  | ||||
| destructor TTinyBrowser2.Destroy; | ||||
| @@ -133,6 +129,23 @@ begin | ||||
|   inherited Destroy; | ||||
| end; | ||||
|  | ||||
| procedure TTinyBrowser2.AfterConstruction; | ||||
| var | ||||
|   TempHandle : TCefWindowHandle; | ||||
|   TempRect : TRect; | ||||
| begin | ||||
|   inherited AfterConstruction; | ||||
|    | ||||
|   FChromium                  := TChromiumCore.Create(nil); | ||||
|   FChromium.DefaultURL       := 'https://www.google.com'; | ||||
|   FChromium.OnBeforeClose    := Chromium_OnBeforeClose; | ||||
|   FChromium.OnBeforePopup    := Chromium_OnBeforePopup; | ||||
|   FChromium.OnOpenUrlFromTab := Chromium_OnOpenUrlFromTab; | ||||
|  | ||||
|   InitializeWindowHandle(TempHandle); | ||||
|   FChromium.CreateBrowser(TempHandle, TempRect, 'Tiny Browser 2', nil, nil, True); | ||||
| end; | ||||
|  | ||||
| procedure TTinyBrowser2.Chromium_OnBeforeClose(Sender: TObject; | ||||
|   const browser: ICefBrowser); | ||||
| begin | ||||
|   | ||||
| @@ -21,7 +21,7 @@ | ||||
|     </CompilerOptions> | ||||
|     <Description Value="CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chromium-based browsers in applications made with Delphi or Lazarus/FPC."/> | ||||
|     <License Value="MPL 1.1"/> | ||||
|     <Version Major="89" Release="18"/> | ||||
|     <Version Major="90" Minor="5" Release="4"/> | ||||
|     <Files Count="201"> | ||||
|       <Item1> | ||||
|         <Filename Value="..\source\uCEFAccessibilityHandler.pas"/> | ||||
|   | ||||
| @@ -101,8 +101,8 @@ type | ||||
|       destructor  Destroy; override; | ||||
|       procedure   UpdateDeviceScaleFactor; override; | ||||
|  | ||||
|       property DestroyApplicationObject: boolean read FDestroyApplicationObject write FDestroyApplicationObject; | ||||
|       property DestroyAppWindows       : boolean read FDestroyAppWindows        write FDestroyAppWindows; | ||||
|       property DestroyApplicationObject : boolean read FDestroyApplicationObject write FDestroyApplicationObject; | ||||
|       property DestroyAppWindows        : boolean read FDestroyAppWindows        write FDestroyAppWindows; | ||||
|  | ||||
|       {$IFDEF FPC} | ||||
|       procedure Internal_OnContextInitialized; override; // In UI thread | ||||
| @@ -209,17 +209,19 @@ begin | ||||
|   {$ENDIF} | ||||
|  | ||||
|   inherited Create; | ||||
|   if GlobalCEFApp = nil then | ||||
|  | ||||
|   if (GlobalCEFApp = nil) then | ||||
|     GlobalCEFApp := Self; | ||||
|  | ||||
|   FDestroyApplicationObject      := False; | ||||
|   FDestroyAppWindows             := True; | ||||
|   FDestroyApplicationObject := False; | ||||
|   FDestroyAppWindows        := True; | ||||
| end; | ||||
|  | ||||
| destructor TCefApplication.Destroy; | ||||
| begin | ||||
|   if GlobalCEFApp = Self then | ||||
|   if (GlobalCEFApp = Self) then | ||||
|     GlobalCEFApp := nil; | ||||
|  | ||||
|   inherited Destroy; | ||||
|  | ||||
|   {$IFDEF FPC} | ||||
| @@ -301,7 +303,7 @@ var | ||||
| begin | ||||
|   {$IFNDEF FPC} | ||||
|   {$IFNDEF FMX} | ||||
|   if Application <> nil then | ||||
|   if (Application <> nil) then | ||||
|     begin | ||||
|       if FDestroyApplicationObject then | ||||
|         begin | ||||
| @@ -335,7 +337,8 @@ begin | ||||
|               if (Application.PopupControlWnd <> 0) then DeallocateHWnd(Application.PopupControlWnd); | ||||
|               {$ENDIF} | ||||
|             end; | ||||
|           if not IsLibrary then | ||||
|  | ||||
|           if not(IsLibrary) then | ||||
|             begin | ||||
|               // Undo the OleInitialize from TApplication.Create. The sub-processes want a different | ||||
|               // COM thread model and fail with an assertion if the Debug-DLLs are used. | ||||
|   | ||||
| @@ -64,15 +64,15 @@ uses | ||||
|   uCEFTypes, uCEFInterfaces, uCEFBaseRefCounted, uCEFSchemeRegistrar; | ||||
|  | ||||
| const | ||||
|   CEF_SUPPORTED_VERSION_MAJOR   = 89; | ||||
|   CEF_SUPPORTED_VERSION_MINOR   = 0; | ||||
|   CEF_SUPPORTED_VERSION_RELEASE = 18; | ||||
|   CEF_SUPPORTED_VERSION_MAJOR   = 90; | ||||
|   CEF_SUPPORTED_VERSION_MINOR   = 5; | ||||
|   CEF_SUPPORTED_VERSION_RELEASE = 4; | ||||
|   CEF_SUPPORTED_VERSION_BUILD   = 0; | ||||
|  | ||||
|   CEF_CHROMEELF_VERSION_MAJOR   = 89; | ||||
|   CEF_CHROMEELF_VERSION_MAJOR   = 90; | ||||
|   CEF_CHROMEELF_VERSION_MINOR   = 0; | ||||
|   CEF_CHROMEELF_VERSION_RELEASE = 4389; | ||||
|   CEF_CHROMEELF_VERSION_BUILD   = 114; | ||||
|   CEF_CHROMEELF_VERSION_RELEASE = 4430; | ||||
|   CEF_CHROMEELF_VERSION_BUILD   = 72; | ||||
|  | ||||
|   {$IFDEF MSWINDOWS} | ||||
|   LIBCEF_DLL     = 'libcef.dll'; | ||||
| @@ -125,6 +125,8 @@ type | ||||
|       FIgnoreCertificateErrors           : Boolean; | ||||
|       FBackgroundColor                   : TCefColor; | ||||
|       FAcceptLanguageList                : ustring; | ||||
|       FCookieableSchemesList             : ustring; | ||||
|       FCookieableSchemesExcludeDefaults  : boolean; | ||||
|       FApplicationClientID               : ustring; | ||||
|       FWindowsSandboxInfo                : Pointer; | ||||
|       FWindowlessRenderingEnabled        : Boolean; | ||||
| @@ -172,7 +174,6 @@ type | ||||
|       {$ENDIF} | ||||
|       FOnRegisterCustomSchemes           : TOnRegisterCustomSchemesEvent; | ||||
|       FAppSettings                       : TCefSettings; | ||||
|       FCheckDevToolsResources            : boolean; | ||||
|       FDisableExtensions                 : boolean; | ||||
|       FDisableGPUCache                   : boolean; | ||||
|       FStatus                            : TCefAplicationStatus; | ||||
| @@ -218,7 +219,6 @@ type | ||||
|       FMustCreateBrowserProcessHandler   : boolean; | ||||
|       FMustCreateRenderProcessHandler    : boolean; | ||||
|       FMustCreateLoadHandler             : boolean; | ||||
|       FMustCreatePrintHandler            : boolean; | ||||
|  | ||||
|       // ICefBrowserProcessHandler | ||||
|       FOnGetCookieableSchemes            : TOnGetCookieableSchemesEvent; | ||||
| @@ -251,14 +251,6 @@ type | ||||
|       FOnLoadEnd                         : TOnRenderLoadEnd; | ||||
|       FOnLoadError                       : TOnRenderLoadError; | ||||
|  | ||||
|       // ICefPrintHandler | ||||
|       FOnPrintStart                      : TOnPrintStartEvent; | ||||
|       FOnPrintSettings                   : TOnPrintSettingsEvent; | ||||
|       FOnPrintDialog                     : TOnPrintDialogEvent; | ||||
|       FOnPrintJob                        : TOnPrintJobEvent; | ||||
|       FOnPrintReset                      : TOnPrintResetEvent; | ||||
|       FOnGetPDFPaperSize                 : TOnGetPDFPaperSizeEvent; | ||||
|  | ||||
|       procedure SetCache(const aValue : ustring); | ||||
|       procedure SetRootCache(const aValue : ustring); | ||||
|       procedure SetUserDataPath(const aValue : ustring); | ||||
| @@ -278,7 +270,6 @@ type | ||||
|       function  GetMustCreateBrowserProcessHandler : boolean; virtual; | ||||
|       function  GetMustCreateRenderProcessHandler : boolean; virtual; | ||||
|       function  GetMustCreateLoadHandler : boolean; virtual; | ||||
|       function  GetMustCreatePrintHandler : boolean; virtual; | ||||
|       function  GetGlobalContextInitialized : boolean; | ||||
|       function  GetChildProcessesCount : integer; | ||||
|       function  GetUsedMemory : uint64; | ||||
| @@ -364,7 +355,6 @@ type | ||||
|       function  CheckCEFLibrary : boolean; | ||||
|       procedure RegisterWidevineCDM; | ||||
|       procedure ShowErrorMessageDlg(const aError : string); virtual; | ||||
|       procedure UpdateSupportedSchemes(aIncludeDefaults : boolean = True); virtual; | ||||
|       function  ParseProcessType : TCefProcessType; | ||||
|       procedure AddCustomCommandLineSwitches(var aKeys, aValues : TStringList); virtual; | ||||
|       procedure AppendSwitch(var aKeys, aValues : TStringList; const aNewKey : ustring; const aNewValue : ustring = ''); | ||||
| @@ -388,8 +378,8 @@ type | ||||
|       procedure   UpdateDeviceScaleFactor; virtual; | ||||
|  | ||||
|       // Internal procedures. Only ICefApp, ICefBrowserProcessHandler, | ||||
|       // ICefResourceBundleHandler, ICefRenderProcessHandler, ICefRegisterCDMCallback, | ||||
|       // ICefLoadHandler and ICefPrintHandler should use them. | ||||
|       // ICefResourceBundleHandler, ICefRenderProcessHandler, ICefRegisterCDMCallback and | ||||
|       // ICefLoadHandler should use them. | ||||
|       procedure   Internal_OnBeforeCommandLineProcessing(const processType: ustring; const commandLine: ICefCommandLine); | ||||
|       procedure   Internal_OnRegisterCustomSchemes(const registrar: TCefSchemeRegistrarRef); | ||||
|       procedure   Internal_OnContextInitialized; virtual; | ||||
| @@ -413,12 +403,6 @@ type | ||||
|       procedure   Internal_OnLoadError(const browser: ICefBrowser; const frame: ICefFrame; errorCode: Integer; const errorText, failedUrl: ustring); | ||||
|       procedure   Internal_GetCookieableSchemes(var schemes: TStringList; var include_defaults : boolean); | ||||
|       procedure   Internal_GetDefaultClient(var aClient : ICefClient); | ||||
|       procedure   Internal_OnPrintStart(const browser: ICefBrowser); | ||||
|       procedure   Internal_OnPrintSettings(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean); | ||||
|       procedure   Internal_OnPrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult : boolean); | ||||
|       procedure   Internal_OnPrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult : boolean); | ||||
|       procedure   Internal_OnPrintReset(const browser: ICefBrowser); | ||||
|       procedure   Internal_OnGetPDFPaperSize(deviceUnitsPerInch: Integer; var aResult : TCefSize); | ||||
|  | ||||
|       // Properties used to populate TCefSettings (cef_settings_t) | ||||
|       property NoSandbox                         : Boolean                             read FNoSandbox                         write FNoSandbox; | ||||
| @@ -441,14 +425,16 @@ type | ||||
|       property LogFile                           : ustring                             read FLogFile                           write FLogFile; | ||||
|       property LogSeverity                       : TCefLogSeverity                     read FLogSeverity                       write FLogSeverity; | ||||
|       property JavaScriptFlags                   : ustring                             read FJavaScriptFlags                   write FJavaScriptFlags; | ||||
|       property ResourcesDirPath                  : ustring                             read GetResourcesDirPath                  write SetResourcesDirPath; | ||||
|       property LocalesDirPath                    : ustring                             read GetLocalesDirPath                    write SetLocalesDirPath; | ||||
|       property ResourcesDirPath                  : ustring                             read GetResourcesDirPath                write SetResourcesDirPath; | ||||
|       property LocalesDirPath                    : ustring                             read GetLocalesDirPath                  write SetLocalesDirPath; | ||||
|       property PackLoadingDisabled               : Boolean                             read FPackLoadingDisabled               write FPackLoadingDisabled; | ||||
|       property RemoteDebuggingPort               : Integer                             read FRemoteDebuggingPort               write FRemoteDebuggingPort; | ||||
|       property UncaughtExceptionStackSize        : Integer                             read FUncaughtExceptionStackSize        write FUncaughtExceptionStackSize; | ||||
|       property IgnoreCertificateErrors           : Boolean                             read FIgnoreCertificateErrors           write FIgnoreCertificateErrors; | ||||
|       property BackgroundColor                   : TCefColor                           read FBackgroundColor                   write FBackgroundColor; | ||||
|       property AcceptLanguageList                : ustring                             read FAcceptLanguageList                write FAcceptLanguageList; | ||||
|       property CookieableSchemesList             : ustring                             read FCookieableSchemesList             write FCookieableSchemesList; | ||||
|       property CookieableSchemesExcludeDefaults  : boolean                             read FCookieableSchemesExcludeDefaults  write FCookieableSchemesExcludeDefaults; | ||||
|       property ApplicationClientID               : ustring                             read FApplicationClientID               write FApplicationClientID; | ||||
|  | ||||
|       // Properties used to set command line switches | ||||
| @@ -529,14 +515,12 @@ type | ||||
|       property LogProcessInfo                    : boolean                             read FLogProcessInfo                    write FLogProcessInfo; | ||||
|       property ReRaiseExceptions                 : boolean                             read FReRaiseExceptions                 write FReRaiseExceptions; | ||||
|       property DeviceScaleFactor                 : single                              read FDeviceScaleFactor; | ||||
|       property CheckDevToolsResources            : boolean                             read FCheckDevToolsResources            write FCheckDevToolsResources; | ||||
|       property LocalesRequired                   : ustring                             read FLocalesRequired                   write FLocalesRequired; | ||||
|       property ProcessType                       : TCefProcessType                     read FProcessType; | ||||
|       property MustCreateResourceBundleHandler   : boolean                             read GetMustCreateResourceBundleHandler write FMustCreateResourceBundleHandler; | ||||
|       property MustCreateBrowserProcessHandler   : boolean                             read GetMustCreateBrowserProcessHandler write FMustCreateBrowserProcessHandler; | ||||
|       property MustCreateRenderProcessHandler    : boolean                             read GetMustCreateRenderProcessHandler  write FMustCreateRenderProcessHandler; | ||||
|       property MustCreateLoadHandler             : boolean                             read GetMustCreateLoadHandler           write FMustCreateLoadHandler; | ||||
|       property MustCreatePrintHandler            : boolean                             read GetMustCreatePrintHandler          write FMustCreatePrintHandler; | ||||
|       property OsmodalLoop                       : boolean                                                                     write SetOsmodalLoop; | ||||
|       property Status                            : TCefAplicationStatus                read FStatus; | ||||
|       property MissingLibFiles                   : string                              read FMissingLibFiles; | ||||
| @@ -589,16 +573,6 @@ type | ||||
|       property OnLoadStart                       : TOnRenderLoadStart                  read FOnLoadStart                       write FOnLoadStart; | ||||
|       property OnLoadEnd                         : TOnRenderLoadEnd                    read FOnLoadEnd                         write FOnLoadEnd; | ||||
|       property OnLoadError                       : TOnRenderLoadError                  read FOnLoadError                       write FOnLoadError; | ||||
|  | ||||
|       // ICefPrintHandler | ||||
|       {$IFDEF LINUX} | ||||
|       property OnPrintStart                      : TOnPrintStartEvent                  read FOnPrintStart                      write FOnPrintStart; | ||||
|       property OnPrintSettings                   : TOnPrintSettingsEvent               read FOnPrintSettings                   write FOnPrintSettings; | ||||
|       property OnPrintDialog                     : TOnPrintDialogEvent                 read FOnPrintDialog                     write FOnPrintDialog; | ||||
|       property OnPrintJob                        : TOnPrintJobEvent                    read FOnPrintJob                        write FOnPrintJob; | ||||
|       property OnPrintReset                      : TOnPrintResetEvent                  read FOnPrintReset                      write FOnPrintReset; | ||||
|       property OnGetPDFPaperSize                 : TOnGetPDFPaperSizeEvent             read FOnGetPDFPaperSize                 write FOnGetPDFPaperSize; | ||||
|       {$ENDIF} | ||||
|   end; | ||||
|  | ||||
|   TCEFDirectoryDeleterThread = class(TThread) | ||||
| @@ -672,7 +646,8 @@ end; | ||||
| constructor TCefApplicationCore.Create; | ||||
| begin | ||||
|   inherited Create; | ||||
|   if GlobalCEFApp = nil then | ||||
|  | ||||
|   if (GlobalCEFApp = nil) then | ||||
|     GlobalCEFApp := Self; | ||||
|  | ||||
|   FStatus                            := asLoading; | ||||
| @@ -708,6 +683,8 @@ begin | ||||
|   FIgnoreCertificateErrors           := False; | ||||
|   FBackgroundColor                   := 0; | ||||
|   FAcceptLanguageList                := ''; | ||||
|   FCookieableSchemesList             := ''; | ||||
|   FCookieableSchemesExcludeDefaults  := False; | ||||
|   FApplicationClientID               := ''; | ||||
|   FWindowsSandboxInfo                := nil; | ||||
|   FWindowlessRenderingEnabled        := False; | ||||
| @@ -745,7 +722,6 @@ begin | ||||
|   FMissingBinariesException          := False; | ||||
|   FSetCurrentDir                     := False; | ||||
|   FGlobalContextInitialized          := False; | ||||
|   FCheckDevToolsResources            := True; | ||||
|   FDisableExtensions                 := False; | ||||
|   FDisableGPUCache                   := True; | ||||
|   FLocalesRequired                   := ''; | ||||
| @@ -796,7 +772,6 @@ begin | ||||
|   FMustCreateBrowserProcessHandler   := True; | ||||
|   FMustCreateRenderProcessHandler    := False; | ||||
|   FMustCreateLoadHandler             := False; | ||||
|   FMustCreatePrintHandler            := False; | ||||
|  | ||||
|   // ICefBrowserProcessHandler | ||||
|   FOnGetCookieableSchemes            := nil; | ||||
| @@ -829,14 +804,6 @@ begin | ||||
|   FOnLoadEnd                         := nil; | ||||
|   FOnLoadError                       := nil; | ||||
|  | ||||
|   // ICefPrintHandler | ||||
|   FOnPrintStart                      := nil; | ||||
|   FOnPrintSettings                   := nil; | ||||
|   FOnPrintDialog                     := nil; | ||||
|   FOnPrintJob                        := nil; | ||||
|   FOnPrintReset                      := nil; | ||||
|   FOnGetPDFPaperSize                 := nil; | ||||
|  | ||||
|   UpdateDeviceScaleFactor; | ||||
|  | ||||
|   FillChar(FAppSettings, SizeOf(TCefSettings), 0); | ||||
| @@ -1135,7 +1102,7 @@ begin | ||||
|  | ||||
|   TempMissingSubProc := not(CheckSubprocessPath(FBrowserSubprocessPath, FMissingLibFiles)); | ||||
|   TempMissingFrm     := not(CheckDLLs(FFrameworkDirPath, FMissingLibFiles)); | ||||
|   TempMissingRsc     := not(CheckResources(ResourcesDirPath, FMissingLibFiles, FCheckDevToolsResources, not(FDisableExtensions))); | ||||
|   TempMissingRsc     := not(CheckResources(ResourcesDirPath, FMissingLibFiles)); | ||||
|   TempMissingLoc     := not(CheckLocales(LocalesDirPath, FMissingLibFiles, FLocalesRequired)); | ||||
|  | ||||
|   if TempMissingFrm or TempMissingRsc or TempMissingLoc or TempMissingSubProc then | ||||
| @@ -1428,6 +1395,8 @@ begin | ||||
|   aSettings.ignore_certificate_errors               := Ord(FIgnoreCertificateErrors); | ||||
|   aSettings.background_color                        := FBackgroundColor; | ||||
|   aSettings.accept_language_list                    := CefString(FAcceptLanguageList); | ||||
|   aSettings.cookieable_schemes_list                 := CefString(FCookieableSchemesList); | ||||
|   aSettings.cookieable_schemes_exclude_defaults     := Ord(FCookieableSchemesExcludeDefaults); | ||||
|   aSettings.application_client_id_for_file_scanning := CefString(FApplicationClientID); | ||||
| end; | ||||
|  | ||||
| @@ -1632,24 +1601,6 @@ begin | ||||
|     raise Exception.Create(aError); | ||||
| end; | ||||
|  | ||||
| procedure TCefApplicationCore.UpdateSupportedSchemes(aIncludeDefaults : boolean); | ||||
| var | ||||
|   TempManager : ICefCookieManager; | ||||
| begin | ||||
|   try | ||||
|     if (FSupportedSchemes       <> nil) and | ||||
|        (FSupportedSchemes.Count  > 0)   then | ||||
|       begin | ||||
|         TempManager := TCefCookieManagerRef.Global(nil); | ||||
|  | ||||
|         if (TempManager <> nil) then | ||||
|           TempManager.SetSupportedSchemes(FSupportedSchemes, aIncludeDefaults, nil); | ||||
|       end; | ||||
|   finally | ||||
|     TempManager := nil; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| function TCefApplicationCore.ParseProcessType : TCefProcessType; | ||||
| const | ||||
|   TYPE_PARAMETER_NAME = '--type='; | ||||
| @@ -1694,7 +1645,6 @@ end; | ||||
| procedure TCefApplicationCore.Internal_OnContextInitialized; | ||||
| begin | ||||
|   FGlobalContextInitialized := True; | ||||
|   UpdateSupportedSchemes; | ||||
|  | ||||
|   if assigned(FOnContextInitialized) then | ||||
|     FOnContextInitialized(); | ||||
| @@ -1837,42 +1787,6 @@ begin | ||||
|     FOnGetDefaultClient(aClient); | ||||
| end; | ||||
|  | ||||
| procedure TCefApplicationCore.Internal_OnPrintStart(const browser: ICefBrowser); | ||||
| begin | ||||
|   if assigned(FOnPrintStart) then | ||||
|     FOnPrintStart(browser); | ||||
| end; | ||||
|  | ||||
| procedure TCefApplicationCore.Internal_OnPrintSettings(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean); | ||||
| begin | ||||
|   if assigned(FOnPrintSettings) then | ||||
|     FOnPrintSettings(browser, settings, getDefaults); | ||||
| end; | ||||
|  | ||||
| procedure TCefApplicationCore.Internal_OnPrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult : boolean); | ||||
| begin | ||||
|   if assigned(FOnPrintDialog) then | ||||
|     FOnPrintDialog(browser, hasSelection, callback, aResult); | ||||
| end; | ||||
|  | ||||
| procedure TCefApplicationCore.Internal_OnPrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult : boolean); | ||||
| begin | ||||
|   if assigned(FOnPrintJob) then | ||||
|     FOnPrintJob(browser, documentName, PDFFilePath, callback, aResult); | ||||
| end; | ||||
|  | ||||
| procedure TCefApplicationCore.Internal_OnPrintReset(const browser: ICefBrowser); | ||||
| begin | ||||
|   if assigned(FOnPrintReset) then | ||||
|     FOnPrintReset(browser); | ||||
| end; | ||||
|  | ||||
| procedure TCefApplicationCore.Internal_OnGetPDFPaperSize(deviceUnitsPerInch: Integer; var aResult : TCefSize); | ||||
| begin | ||||
|   if assigned(FOnGetPDFPaperSize) then | ||||
|     FOnGetPDFPaperSize(deviceUnitsPerInch, aResult); | ||||
| end; | ||||
|  | ||||
| procedure TCefApplicationCore.AppendSwitch(var aKeys, aValues : TStringList; const aNewKey, aNewValue : ustring); | ||||
| var | ||||
|   TempKey, TempHyphenatedKey : ustring; | ||||
| @@ -2305,7 +2219,6 @@ function TCefApplicationCore.GetMustCreateBrowserProcessHandler : boolean; | ||||
| begin | ||||
|   Result := ((FSingleProcess or (FProcessType = ptBrowser)) and | ||||
|              (FMustCreateBrowserProcessHandler        or | ||||
|               MustCreatePrintHandler                  or | ||||
|               assigned(FOnGetCookieableSchemes)       or | ||||
|               assigned(FOnContextInitialized)         or | ||||
|               assigned(FOnBeforeChildProcessLaunch)   or | ||||
| @@ -2338,22 +2251,6 @@ begin | ||||
|               assigned(FOnLoadError))); | ||||
| end; | ||||
|  | ||||
| function TCefApplicationCore.GetMustCreatePrintHandler : boolean; | ||||
| begin | ||||
|   {$IFDEF LINUX} | ||||
|   Result := ((FSingleProcess or (FProcessType = ptBrowser)) and | ||||
|              (FMustCreatePrintHandler    or | ||||
|               assigned(FOnPrintStart)    or | ||||
|               assigned(FOnPrintSettings) or | ||||
|               assigned(FOnPrintDialog)   or | ||||
|               assigned(FOnPrintJob)      or | ||||
|               assigned(FOnPrintReset)    or | ||||
|               assigned(FOnGetPDFPaperSize))); | ||||
|   {$ELSE} | ||||
|   Result := False; | ||||
|   {$ENDIF} | ||||
| end; | ||||
|  | ||||
| function TCefApplicationCore.GetGlobalContextInitialized : boolean; | ||||
| begin | ||||
|   Result := FGlobalContextInitialized or not(MustCreateBrowserProcessHandler); | ||||
|   | ||||
| @@ -36,8 +36,8 @@ | ||||
|  *) | ||||
|  | ||||
| unit uCEFBrowserProcessHandler; | ||||
|  | ||||
| {$IFDEF FPC} | ||||
|  | ||||
| {$IFDEF FPC} | ||||
|   {$MODE OBJFPC}{$H+} | ||||
| {$ENDIF} | ||||
|  | ||||
| @@ -59,10 +59,8 @@ uses | ||||
| type | ||||
|   TCefBrowserProcessHandlerOwn = class(TCefBaseRefCountedOwn, ICefBrowserProcessHandler) | ||||
|     protected | ||||
|       procedure GetCookieableSchemes(var schemes: TStringList; var include_defaults : boolean); virtual; abstract; | ||||
|       procedure OnContextInitialized; virtual; abstract; | ||||
|       procedure OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); virtual; abstract; | ||||
|       procedure GetPrintHandler(var aHandler : ICefPrintHandler); virtual; | ||||
|       procedure OnScheduleMessagePumpWork(const delayMs: Int64); virtual; abstract; | ||||
|       procedure GetDefaultClient(var aClient : ICefClient); virtual; | ||||
|  | ||||
| @@ -73,80 +71,37 @@ type | ||||
|   end; | ||||
|  | ||||
|   TCefCustomBrowserProcessHandler = class(TCefBrowserProcessHandlerOwn) | ||||
|     protected | ||||
|       FCefApp       : TCefApplicationCore; | ||||
|       FPrintHandler : ICefPrintHandler; | ||||
|  | ||||
|       procedure GetCookieableSchemes(var schemes: TStringList; var include_defaults : boolean); override; | ||||
|       procedure OnContextInitialized; override; | ||||
|       procedure OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); override; | ||||
|       procedure GetPrintHandler(var aHandler : ICefPrintHandler); override; | ||||
|       procedure OnScheduleMessagePumpWork(const delayMs: Int64); override; | ||||
|       procedure GetDefaultClient(var aClient : ICefClient); override; | ||||
|  | ||||
|       procedure RemoveReferences; override; | ||||
|  | ||||
|     public | ||||
|       constructor Create(const aCefApp : TCefApplicationCore); reintroduce; | ||||
|       destructor  Destroy; override; | ||||
|   end; | ||||
|     protected | ||||
|       FCefApp       : TCefApplicationCore; | ||||
|  | ||||
|       procedure OnContextInitialized; override; | ||||
|       procedure OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); override; | ||||
|       procedure OnScheduleMessagePumpWork(const delayMs: Int64); override; | ||||
|       procedure GetDefaultClient(var aClient : ICefClient); override; | ||||
|  | ||||
|       procedure RemoveReferences; override; | ||||
|  | ||||
|     public | ||||
|       constructor Create(const aCefApp : TCefApplicationCore); reintroduce; | ||||
|       destructor  Destroy; override; | ||||
|   end; | ||||
|  | ||||
| implementation | ||||
|  | ||||
| uses | ||||
|   {$IFDEF DELPHI16_UP} | ||||
|   System.SysUtils, | ||||
|   {$ELSE} | ||||
|   SysUtils, | ||||
|   {$IFDEF DELPHI16_UP} | ||||
|   System.SysUtils, | ||||
|   {$ELSE} | ||||
|   SysUtils, | ||||
|   {$ENDIF} | ||||
|   uCEFMiscFunctions, uCEFLibFunctions, uCEFCommandLine, uCEFListValue, uCEFConstants, uCEFStringList, | ||||
|   uCEFPrintHandler; | ||||
|  | ||||
| procedure cef_browser_process_handler_get_cookieable_schemes(self             : PCefBrowserProcessHandler; | ||||
|                                                              schemes          : TCefStringList; | ||||
|                                                              include_defaults : PInteger); stdcall; | ||||
| var | ||||
|   TempSL     : TStringList; | ||||
|   TempCefSL  : ICefStringList; | ||||
|   TempObject : TObject; | ||||
|   TempIncDef : boolean; | ||||
| begin | ||||
|   TempSL := nil; | ||||
|  | ||||
|   try | ||||
|     try | ||||
|       TempObject := CefGetObject(self); | ||||
|  | ||||
|       if (schemes <> nil) and (TempObject <> nil) and (TempObject is TCefBrowserProcessHandlerOwn) then | ||||
|         begin | ||||
|           TempIncDef := (include_defaults^ <> 0); | ||||
|           TempSL     := TStringList.Create; | ||||
|           TempCefSL  := TCefStringListRef.Create(schemes); | ||||
|           TempCefSL.CopyToStrings(TempSL); | ||||
|  | ||||
|           TCefBrowserProcessHandlerOwn(TempObject).GetCookieableSchemes(TempSL, TempIncDef); | ||||
|  | ||||
|           TempCefSL.Clear; | ||||
|           TempCefSL.AddStrings(TempSL); | ||||
|  | ||||
|           include_defaults^ := ord(TempIncDef); | ||||
|         end; | ||||
|     except | ||||
|       on e : exception do | ||||
|         if CustomExceptionHandler('cef_browser_process_handler_get_cookieable_schemes', e) then raise; | ||||
|     end; | ||||
|   finally | ||||
|     if (TempSL <> nil) then FreeAndNil(TempSL); | ||||
|     TempCefSL := nil; | ||||
|   end; | ||||
| end; | ||||
|   uCEFMiscFunctions, uCEFLibFunctions, uCEFCommandLine, uCEFListValue, uCEFConstants, uCEFStringList; | ||||
|  | ||||
| procedure cef_browser_process_handler_on_context_initialized(self: PCefBrowserProcessHandler); stdcall; | ||||
| var | ||||
|   TempObject : TObject; | ||||
| begin | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   if (TempObject <> nil) and | ||||
|      (TempObject is TCefBrowserProcessHandlerOwn) then | ||||
|     TCefBrowserProcessHandlerOwn(TempObject).OnContextInitialized; | ||||
| @@ -157,39 +112,20 @@ procedure cef_browser_process_handler_on_before_child_process_launch(self | ||||
| var | ||||
|   TempObject : TObject; | ||||
| begin | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   if (TempObject <> nil) and | ||||
|      (TempObject is TCefBrowserProcessHandlerOwn) then | ||||
|     TCefBrowserProcessHandlerOwn(TempObject).OnBeforeChildProcessLaunch(TCefCommandLineRef.UnWrap(command_line)); | ||||
| end; | ||||
|  | ||||
| function cef_browser_process_handler_get_print_handler(self: PCefBrowserProcessHandler): PCefPrintHandler; stdcall; | ||||
| var | ||||
|   TempObject  : TObject; | ||||
|   TempHandler : ICefPrintHandler; | ||||
| begin | ||||
|   Result     := nil; | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   if (TempObject <> nil) and | ||||
|      (TempObject is TCefBrowserProcessHandlerOwn) then | ||||
|     try | ||||
|       TempHandler := nil; | ||||
|       TCefBrowserProcessHandlerOwn(TempObject).GetPrintHandler(TempHandler); | ||||
|       if (TempHandler <> nil) then Result := TempHandler.Wrap; | ||||
|     finally | ||||
|       TempHandler := nil; | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| procedure cef_browser_process_handler_on_schedule_message_pump_work(self     : PCefBrowserProcessHandler; | ||||
|                                                                     delay_ms : Int64); stdcall; | ||||
| var | ||||
|   TempObject : TObject; | ||||
| begin | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   if (TempObject <> nil) and | ||||
|      (TempObject is TCefBrowserProcessHandlerOwn) then | ||||
|     TCefBrowserProcessHandlerOwn(TempObject).OnScheduleMessagePumpWork(delay_ms); | ||||
| @@ -201,16 +137,16 @@ var | ||||
|   TempClient : ICefClient; | ||||
| begin | ||||
|   Result     := nil; | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   if (TempObject <> nil) and | ||||
|      (TempObject is TCefBrowserProcessHandlerOwn) then | ||||
|     try | ||||
|       TempClient := nil; | ||||
|       TCefBrowserProcessHandlerOwn(TempObject).GetDefaultClient(TempClient); | ||||
|       if (TempClient <> nil) then Result := TempClient.Wrap; | ||||
|     finally | ||||
|       TempClient := nil; | ||||
|       if (TempClient <> nil) then Result := TempClient.Wrap; | ||||
|     finally | ||||
|       TempClient := nil; | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| @@ -220,114 +156,78 @@ begin | ||||
|  | ||||
|   with PCefBrowserProcessHandler(FData)^ do | ||||
|     begin | ||||
|       get_cookieable_schemes           := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_get_cookieable_schemes; | ||||
|       on_context_initialized           := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_on_context_initialized; | ||||
|       on_before_child_process_launch   := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_on_before_child_process_launch; | ||||
|       get_print_handler                := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_get_print_handler; | ||||
|       on_schedule_message_pump_work    := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_on_schedule_message_pump_work; | ||||
|       get_default_client               := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_get_default_client; | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| procedure TCefBrowserProcessHandlerOwn.GetPrintHandler(var aHandler : ICefPrintHandler); | ||||
| begin | ||||
|   aHandler := nil; | ||||
| end; | ||||
|  | ||||
| procedure TCefBrowserProcessHandlerOwn.GetDefaultClient(var aClient : ICefClient); | ||||
| begin | ||||
|   aClient := nil; | ||||
|   aClient := nil; | ||||
| end; | ||||
|  | ||||
|  | ||||
| // TCefCustomBrowserProcessHandler | ||||
|  | ||||
|  | ||||
| constructor TCefCustomBrowserProcessHandler.Create(const aCefApp : TCefApplicationCore); | ||||
| begin | ||||
|   inherited Create; | ||||
|  | ||||
|   FCefApp := aCefApp; | ||||
|  | ||||
|   if (FCefApp <> nil) and FCefApp.MustCreatePrintHandler then | ||||
|     FPrintHandler := TCustomPrintHandler.Create(FCefApp) | ||||
|    else | ||||
|     FPrintHandler := nil; | ||||
| end; | ||||
|  | ||||
| destructor TCefCustomBrowserProcessHandler.Destroy; | ||||
| begin | ||||
|   RemoveReferences; | ||||
|  | ||||
|   inherited Destroy; | ||||
| end; | ||||
|  | ||||
|  | ||||
| procedure TCefCustomBrowserProcessHandler.RemoveReferences; | ||||
| begin | ||||
|   if (FPrintHandler <> nil) then | ||||
|     FPrintHandler.RemoveReferences; | ||||
|  | ||||
|   FCefApp       := nil; | ||||
|   FPrintHandler := nil; | ||||
|  | ||||
|  | ||||
| procedure TCefCustomBrowserProcessHandler.GetCookieableSchemes(var schemes          : TStringList; | ||||
| constructor TCefCustomBrowserProcessHandler.Create(const aCefApp : TCefApplicationCore); | ||||
| begin | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_GetCookieableSchemes(schemes, include_defaults); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCefCustomBrowserProcessHandler.GetCookieableSchemes', e) then raise; | ||||
|   inherited Create; | ||||
|  | ||||
|   FCefApp := aCefApp; | ||||
| end; | ||||
|  | ||||
| destructor TCefCustomBrowserProcessHandler.Destroy; | ||||
| begin | ||||
|   RemoveReferences; | ||||
|  | ||||
|   inherited Destroy; | ||||
| end; | ||||
| procedure TCefCustomBrowserProcessHandler.RemoveReferences; | ||||
| begin | ||||
|   FCefApp := nil; | ||||
| end; | ||||
|  | ||||
| procedure TCefCustomBrowserProcessHandler.OnContextInitialized; | ||||
| procedure TCefCustomBrowserProcessHandler.OnContextInitialized; | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnContextInitialized; | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCefCustomBrowserProcessHandler.OnContextInitialized', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCefCustomBrowserProcessHandler.OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnBeforeChildProcessLaunch(commandLine); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCefCustomBrowserProcessHandler.OnBeforeChildProcessLaunch', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| begin | ||||
| begin | ||||
|   if (FPrintHandler <> nil) then | ||||
|     aHandler := FPrintHandler | ||||
|    else | ||||
|     inherited GetPrintHandler(aHandler); | ||||
| end; | ||||
|  | ||||
| procedure TCefCustomBrowserProcessHandler.OnScheduleMessagePumpWork(const delayMs: Int64); | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnScheduleMessagePumpWork(delayMs); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCefCustomBrowserProcessHandler.OnScheduleMessagePumpWork', e) then raise; | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnContextInitialized; | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCefCustomBrowserProcessHandler.OnContextInitialized', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCefCustomBrowserProcessHandler.OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnBeforeChildProcessLaunch(commandLine); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCefCustomBrowserProcessHandler.OnBeforeChildProcessLaunch', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCefCustomBrowserProcessHandler.OnScheduleMessagePumpWork(const delayMs: Int64); | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnScheduleMessagePumpWork(delayMs); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCefCustomBrowserProcessHandler.OnScheduleMessagePumpWork', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCefCustomBrowserProcessHandler.GetDefaultClient(var aClient : ICefClient); | ||||
| begin | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_GetDefaultClient(aClient); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCefCustomBrowserProcessHandler.GetDefaultClient', e) then raise; | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_GetDefaultClient(aClient); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCefCustomBrowserProcessHandler.GetDefaultClient', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| end. | ||||
|   | ||||
| @@ -60,6 +60,7 @@ type | ||||
|   TCefBrowserViewRef = class(TCefViewRef, ICefBrowserView) | ||||
|     protected | ||||
|       function  GetBrowser : ICefBrowser; | ||||
|       function  GetChromeToolbar : ICefView; | ||||
|       procedure SetPreferAccelerators(prefer_accelerators: boolean); | ||||
|  | ||||
|     public | ||||
| @@ -78,6 +79,11 @@ begin | ||||
|   Result := TCefBrowserRef.UnWrap(PCefBrowserView(FData)^.get_browser(PCefBrowserView(FData))); | ||||
| end; | ||||
|  | ||||
| function TCefBrowserViewRef.GetChromeToolbar : ICefView; | ||||
| begin | ||||
|   Result := TCefViewRef.UnWrap(PCefBrowserView(FData)^.get_chrome_toolbar(PCefBrowserView(FData))); | ||||
| end; | ||||
|  | ||||
| procedure TCefBrowserViewRef.SetPreferAccelerators(prefer_accelerators: boolean); | ||||
| begin | ||||
|   PCefBrowserView(FData)^.set_prefer_accelerators(PCefBrowserView(FData), | ||||
|   | ||||
| @@ -71,6 +71,7 @@ type | ||||
|       FOnBrowserDestroyed               : TOnBrowserDestroyedEvent; | ||||
|       FOnGetDelegateForPopupBrowserView : TOnGetDelegateForPopupBrowserViewEvent; | ||||
|       FOnPopupBrowserViewCreated        : TOnPopupBrowserViewCreatedEvent; | ||||
|       FOnGetChromeToolbarType           : TOnGetChromeToolbarTypeEvent; | ||||
|  | ||||
|       procedure DestroyView; override; | ||||
|       procedure Initialize; override; | ||||
| @@ -85,6 +86,7 @@ type | ||||
|       procedure doOnBrowserDestroyed(const browser_view: ICefBrowserView; const browser: ICefBrowser); | ||||
|       procedure doOnGetDelegateForPopupBrowserView(const browser_view: ICefBrowserView; const settings: TCefBrowserSettings; const client: ICefClient; is_devtools: boolean; var aResult : ICefBrowserViewDelegate); | ||||
|       procedure doOnPopupBrowserViewCreated(const browser_view, popup_browser_view: ICefBrowserView; is_devtools: boolean; var aResult : boolean); | ||||
|       procedure doOnGetChromeToolbarType(var aChromeToolbarType: TCefChromeToolbarType); | ||||
|  | ||||
|     public | ||||
|       function  CreateBrowserView(const client: ICefClient; const url: ustring; const settings: TCefBrowserSettings; const extra_info: ICefDictionaryValue; const request_context: ICefRequestContext): boolean; | ||||
| @@ -99,6 +101,7 @@ type | ||||
|       property OnBrowserDestroyed                : TOnBrowserDestroyedEvent                read FOnBrowserDestroyed                write FOnBrowserDestroyed; | ||||
|       property OnGetDelegateForPopupBrowserView  : TOnGetDelegateForPopupBrowserViewEvent  read FOnGetDelegateForPopupBrowserView  write FOnGetDelegateForPopupBrowserView; | ||||
|       property OnPopupBrowserViewCreated         : TOnPopupBrowserViewCreatedEvent         read FOnPopupBrowserViewCreated         write FOnPopupBrowserViewCreated; | ||||
|       property OnGetChromeToolbarType            : TOnGetChromeToolbarTypeEvent            read FOnGetChromeToolbarType            write FOnGetChromeToolbarType; | ||||
|   end; | ||||
|  | ||||
| {$IFDEF FPC} | ||||
| @@ -147,6 +150,7 @@ begin | ||||
|   FOnBrowserDestroyed               := nil; | ||||
|   FOnGetDelegateForPopupBrowserView := nil; | ||||
|   FOnPopupBrowserViewCreated        := nil; | ||||
|   FOnGetChromeToolbarType           := nil; | ||||
| end; | ||||
|  | ||||
| procedure TCEFBrowserViewComponent.DestroyView; | ||||
| @@ -250,6 +254,12 @@ begin | ||||
|     FOnPopupBrowserViewCreated(self, browser_view, popup_browser_view, is_devtools, aResult); | ||||
| end; | ||||
|  | ||||
| procedure TCEFBrowserViewComponent.doOnGetChromeToolbarType(var aChromeToolbarType: TCefChromeToolbarType); | ||||
| begin | ||||
|   if assigned(FOnGetChromeToolbarType) then | ||||
|     FOnGetChromeToolbarType(self, aChromeToolbarType); | ||||
| end; | ||||
|  | ||||
| {$IFDEF FPC} | ||||
| procedure Register; | ||||
| begin | ||||
|   | ||||
| @@ -63,6 +63,7 @@ type | ||||
|       procedure OnBrowserDestroyed(const browser_view: ICefBrowserView; const browser: ICefBrowser); | ||||
|       procedure OnGetDelegateForPopupBrowserView(const browser_view: ICefBrowserView; const settings: TCefBrowserSettings; const client: ICefClient; is_devtools: boolean; var aResult : ICefBrowserViewDelegate); | ||||
|       procedure OnPopupBrowserViewCreated(const browser_view, popup_browser_view: ICefBrowserView; is_devtools: boolean; var aResult : boolean); | ||||
|       function  GetChromeToolbarType: TCefChromeToolbarType; | ||||
|  | ||||
|     public | ||||
|       class function UnWrap(data: Pointer): ICefBrowserViewDelegate; | ||||
| @@ -74,6 +75,7 @@ type | ||||
|       procedure OnBrowserDestroyed(const browser_view: ICefBrowserView; const browser: ICefBrowser); virtual; | ||||
|       procedure OnGetDelegateForPopupBrowserView(const browser_view: ICefBrowserView; const settings: TCefBrowserSettings; const client: ICefClient; is_devtools: boolean; var aResult : ICefBrowserViewDelegate); virtual; | ||||
|       procedure OnPopupBrowserViewCreated(const browser_view, popup_browser_view: ICefBrowserView; is_devtools: boolean; var aResult : boolean); virtual; | ||||
|       function  GetChromeToolbarType: TCefChromeToolbarType; virtual; | ||||
|  | ||||
|       procedure InitializeCEFMethods; override; | ||||
|  | ||||
| @@ -92,6 +94,7 @@ type | ||||
|       procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); override; | ||||
|       procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); override; | ||||
|       procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); override; | ||||
|       procedure OnWindowChanged(const view: ICefView; added: boolean); override; | ||||
|       procedure OnFocus(const view: ICefView); override; | ||||
|       procedure OnBlur(const view: ICefView); override; | ||||
|  | ||||
| @@ -100,6 +103,7 @@ type | ||||
|       procedure OnBrowserDestroyed(const browser_view: ICefBrowserView; const browser: ICefBrowser); override; | ||||
|       procedure OnGetDelegateForPopupBrowserView(const browser_view: ICefBrowserView; const settings: TCefBrowserSettings; const client: ICefClient; is_devtools: boolean; var aResult : ICefBrowserViewDelegate); override; | ||||
|       procedure OnPopupBrowserViewCreated(const browser_view, popup_browser_view: ICefBrowserView; is_devtools: boolean; var aResult : boolean); override; | ||||
|       function  GetChromeToolbarType: TCefChromeToolbarType; override; | ||||
|  | ||||
|     public | ||||
|       constructor Create(const events: ICefBrowserViewDelegateEvents); reintroduce; | ||||
| @@ -108,7 +112,7 @@ type | ||||
| implementation | ||||
|  | ||||
| uses | ||||
|   uCEFLibFunctions, uCEFMiscFunctions, uCEFBrowserView, uCEFBrowser, uCEFClient; | ||||
|   uCEFLibFunctions, uCEFMiscFunctions, uCEFBrowserView, uCEFBrowser, uCEFClient, uCEFConstants; | ||||
|  | ||||
|  | ||||
| // ************************************************************** | ||||
| @@ -155,6 +159,11 @@ begin | ||||
|                                                                             ord(is_devtools)) <> 0); | ||||
| end; | ||||
|  | ||||
| function TCefBrowserViewDelegateRef.GetChromeToolbarType: TCefChromeToolbarType; | ||||
| begin | ||||
|   Result := PCefBrowserViewDelegate(FData)^.get_chrome_toolbar_type(PCefBrowserViewDelegate(FData)); | ||||
| end; | ||||
|  | ||||
| class function TCefBrowserViewDelegateRef.UnWrap(data: Pointer): ICefBrowserViewDelegate; | ||||
| begin | ||||
|   if (data <> nil) then | ||||
| @@ -236,6 +245,17 @@ begin | ||||
|   Result := ord(TempResult); | ||||
| end; | ||||
|  | ||||
| function cef_browserview_delegate_get_chrome_toolbar_type(self : PCefBrowserViewDelegate): TCefChromeToolbarType; stdcall; | ||||
| var | ||||
|   TempObject : TObject; | ||||
| begin | ||||
|   TempObject := CefGetObject(self); | ||||
|   Result     := CEF_CTT_NONE; | ||||
|  | ||||
|   if (TempObject <> nil) and (TempObject is TCefBrowserViewDelegateOwn) then | ||||
|     Result := TCefBrowserViewDelegateOwn(TempObject).GetChromeToolbarType(); | ||||
| end; | ||||
|  | ||||
| constructor TCefBrowserViewDelegateOwn.Create; | ||||
| begin | ||||
|   inherited CreateData(SizeOf(TCefBrowserViewDelegate)); | ||||
| @@ -253,6 +273,7 @@ begin | ||||
|       on_browser_destroyed                := {$IFDEF FPC}@{$ENDIF}cef_browserview_delegate_on_browser_destroyed; | ||||
|       get_delegate_for_popup_browser_view := {$IFDEF FPC}@{$ENDIF}cef_browserview_delegate_get_delegate_for_popup_browser_view; | ||||
|       on_popup_browser_view_created       := {$IFDEF FPC}@{$ENDIF}cef_browserview_delegate_on_popup_browser_view_created; | ||||
|       get_chrome_toolbar_type             := {$IFDEF FPC}@{$ENDIF}cef_browserview_delegate_get_chrome_toolbar_type; | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| @@ -276,6 +297,11 @@ begin | ||||
|   // | ||||
| end; | ||||
|  | ||||
| function TCefBrowserViewDelegateOwn.GetChromeToolbarType: TCefChromeToolbarType; | ||||
| begin | ||||
|   Result := CEF_CTT_NONE; | ||||
| end; | ||||
|  | ||||
|  | ||||
| // ************************************************************** | ||||
| // **************** TCustomBrowserViewDelegate ****************** | ||||
| @@ -354,6 +380,17 @@ begin | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomBrowserViewDelegate.OnWindowChanged(const view: ICefView; added: boolean); | ||||
| begin | ||||
|   try | ||||
|     if (FEvents <> nil) then | ||||
|       ICefBrowserViewDelegateEvents(FEvents).doOnWindowChanged(view, added); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomBrowserViewDelegate.OnWindowChanged', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomBrowserViewDelegate.OnFocus(const view: ICefView); | ||||
| begin | ||||
|   try | ||||
| @@ -420,6 +457,18 @@ begin | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| function TCustomBrowserViewDelegate.GetChromeToolbarType: TCefChromeToolbarType; | ||||
| begin | ||||
|   Result := inherited GetChromeToolbarType(); | ||||
|  | ||||
|   try | ||||
|     if (FEvents <> nil) then | ||||
|       ICefBrowserViewDelegateEvents(FEvents).doOnGetChromeToolbarType(Result); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomBrowserViewDelegate.GetChromeToolbarType', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| end. | ||||
|  | ||||
|   | ||||
| @@ -104,8 +104,8 @@ type | ||||
|       function    CreateBrowser(aParentHandle: TCefWindowHandle; | ||||
|                   aParentRect: TRect; const aWindowName: ustring = ''; | ||||
|                   const aContext: ICefRequestContext = nil; | ||||
|                   const aExtraInfo: ICefDictionaryValue = nil): boolean; overload; override; | ||||
|       procedure   CreateBrowser(const aWindowName: ustring); overload; override; | ||||
|                   const aExtraInfo: ICefDictionaryValue = nil; | ||||
|                   aForceAsPopup : boolean = False): boolean; overload; override; | ||||
|       function    CreateBrowser(const aURL: ustring; | ||||
|                   const aBrowserViewComp: TCEFBrowserViewComponent; | ||||
|                   const aContext: ICefRequestContext = nil; | ||||
| @@ -369,19 +369,12 @@ end; | ||||
|  | ||||
| function TEmbeddedChromium.CreateBrowser(aParentHandle: TCefWindowHandle; | ||||
|   aParentRect: TRect; const aWindowName: ustring; | ||||
|   const aContext: ICefRequestContext; const aExtraInfo: ICefDictionaryValue): boolean; | ||||
|   const aContext: ICefRequestContext; const aExtraInfo: ICefDictionaryValue; | ||||
|   aForceAsPopup : boolean): boolean; | ||||
| begin | ||||
|   FState := csCreatingBrowser; | ||||
|   Result := inherited CreateBrowser(aParentHandle, aParentRect, aWindowName, | ||||
|     aContext, aExtraInfo); | ||||
|   if Initialized then | ||||
|     DoCreated(0); | ||||
| end; | ||||
|  | ||||
| procedure TEmbeddedChromium.CreateBrowser(const aWindowName: ustring); | ||||
| begin | ||||
|   FState := csCreatingBrowser; | ||||
|   inherited CreateBrowser(aWindowName); | ||||
|     aContext, aExtraInfo, aForceAsPopup); | ||||
|   if Initialized then | ||||
|     DoCreated(0); | ||||
| end; | ||||
|   | ||||
| @@ -87,6 +87,7 @@ type | ||||
|       procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); override; | ||||
|       procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); override; | ||||
|       procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); override; | ||||
|       procedure OnWindowChanged(const view: ICefView; added: boolean); override; | ||||
|       procedure OnFocus(const view: ICefView); override; | ||||
|       procedure OnBlur(const view: ICefView); override; | ||||
|  | ||||
| @@ -258,6 +259,17 @@ begin | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomButtonDelegate.OnWindowChanged(const view: ICefView; added: boolean); | ||||
| begin | ||||
|   try | ||||
|     if (FEvents <> nil) then | ||||
|       ICefButtonDelegateEvents(FEvents).doOnWindowChanged(view, added); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomButtonDelegate.OnWindowChanged', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomButtonDelegate.OnFocus(const view: ICefView); | ||||
| begin | ||||
|   try | ||||
|   | ||||
| @@ -304,6 +304,14 @@ type | ||||
|       FOnExtensionCanAccessBrowser        : TOnCanAccessBrowserEvent; | ||||
|       FOnExtensionGetExtensionResource    : TOnGetExtensionResourceEvent; | ||||
|  | ||||
|       // ICefPrintHandler | ||||
|       FOnPrintStart                       : TOnPrintStartEvent; | ||||
|       FOnPrintSettings                    : TOnPrintSettingsEvent; | ||||
|       FOnPrintDialog                      : TOnPrintDialogEvent; | ||||
|       FOnPrintJob                         : TOnPrintJobEvent; | ||||
|       FOnPrintReset                       : TOnPrintResetEvent; | ||||
|       FOnGetPDFPaperSize                  : TOnGetPDFPaperSizeEvent; | ||||
|  | ||||
|       // Custom | ||||
|       FOnTextResultAvailable              : TOnTextResultAvailableEvent; | ||||
|       FOnPdfPrintFinished                 : TOnPdfPrintFinishedEvent; | ||||
| @@ -399,8 +407,6 @@ type | ||||
|       procedure SetAcceptLanguageList(const aValue : ustring); | ||||
|       procedure SetAcceptCookies(const aValue : TCefCookiePref); | ||||
|       procedure SetBlock3rdPartyCookies(const aValue : boolean); | ||||
|       procedure SetOnRequestContextInitialized(const aValue : TOnRequestContextInitialized); | ||||
|       procedure SetOnBeforePluginLoad(const aValue : TOnBeforePluginLoad); | ||||
|       procedure SetMultiBrowserMode(aValue : boolean); | ||||
|       procedure SetNetworkPredictions(aValue : TCefNetworkPredictionOptions); | ||||
|       procedure SetQuicAllowed(aValue : boolean); | ||||
| @@ -419,7 +425,6 @@ type | ||||
|       procedure DestroyExtensionHandler; | ||||
|       procedure DestroyAllHandlersAndObservers; | ||||
|  | ||||
|       procedure CreateReqContextHandler; | ||||
|       procedure CreateResourceRequestHandler; | ||||
|       procedure CreateMediaObserver; | ||||
|       procedure CreateDevToolsMsgObserver; | ||||
| @@ -622,6 +627,14 @@ type | ||||
|       function  doOnExtensionCanAccessBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; const target_browser: ICefBrowser): boolean; | ||||
|       function  doOnExtensionGetExtensionResource(const extension: ICefExtension; const browser: ICefBrowser; const file_: ustring; const callback: ICefGetExtensionResourceCallback): boolean; | ||||
|  | ||||
|       // ICefPrintHandler | ||||
|       procedure doOnPrintStart(const browser: ICefBrowser); | ||||
|       procedure doOnPrintSettings(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean); | ||||
|       procedure doOnPrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult : boolean); | ||||
|       procedure doOnPrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult : boolean); | ||||
|       procedure doOnPrintReset(const browser: ICefBrowser); | ||||
|       procedure doOnGetPDFPaperSize(const browser: ICefBrowser; deviceUnitsPerInch: Integer; var aResult : TCefSize); | ||||
|  | ||||
|       // Custom | ||||
|       procedure doCookiesDeleted(numDeleted : integer); virtual; | ||||
|       procedure doPdfPrintFinished(aResultOK : boolean); virtual; | ||||
| @@ -666,9 +679,9 @@ type | ||||
|       function  MustCreateFindHandler : boolean; virtual; | ||||
|       function  MustCreateResourceRequestHandler : boolean; virtual; | ||||
|       function  MustCreateCookieAccessFilter : boolean; virtual; | ||||
|       function  MustCreateRequestContextHandler : boolean; virtual; | ||||
|       function  MustCreateMediaObserver : boolean; virtual; | ||||
|       function  MustCreateExtensionHandler : boolean; virtual; | ||||
|       function  MustCreatePrintHandler : boolean; virtual; | ||||
|  | ||||
|       property  ParentFormHandle   : TCefWindowHandle   read   GetParentFormHandle; | ||||
|  | ||||
| @@ -690,9 +703,8 @@ type | ||||
|       function    SetNewBrowserParent(aNewParentHwnd : HWND) : boolean; | ||||
|       {$ENDIF MSWINDOWS} | ||||
|  | ||||
|       function    CreateBrowser(aParentHandle : TCefWindowHandle; aParentRect : TRect; const aWindowName : ustring = ''; const aContext : ICefRequestContext = nil; const aExtraInfo : ICefDictionaryValue = nil) : boolean; overload; virtual; | ||||
|       function    CreateBrowser(aParentHandle : TCefWindowHandle; aParentRect : TRect; const aWindowName : ustring = ''; const aContext : ICefRequestContext = nil; const aExtraInfo : ICefDictionaryValue = nil; aForceAsPopup : boolean = False) : boolean; overload; virtual; | ||||
|       function    CreateBrowser(const aURL : ustring; const aBrowserViewComp : TCEFBrowserViewComponent; const aContext : ICefRequestContext = nil; const aExtraInfo : ICefDictionaryValue = nil) : boolean; overload; virtual; | ||||
|       procedure   CreateBrowser(const aWindowName : ustring); overload; virtual; | ||||
|  | ||||
|       procedure   LoadURL(const aURL : ustring; const aFrameName : ustring = ''); overload; | ||||
|       procedure   LoadURL(const aURL : ustring; const aFrame : ICefFrame); overload; | ||||
| @@ -743,7 +755,6 @@ type | ||||
|       function    VisitURLCookies(const url : ustring; includeHttpOnly : boolean = False; aID : integer = 0) : boolean; | ||||
|       function    SetCookie(const url, name_, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; same_site : TCefCookieSameSite; priority : TCefCookiePriority; aSetImmediately : boolean = True; aID : integer = 0): Boolean; | ||||
|       function    FlushCookieStore(aFlushImmediately : boolean = True) : boolean; | ||||
|       procedure   UpdateSupportedSchemes(const aSchemes : TStrings; aIncludeDefaults : boolean = True); | ||||
|  | ||||
|       procedure   ShowDevTools(const inspectElementAt: TPoint; aWindowInfo: PCefWindowInfo); | ||||
|       procedure   CloseDevTools; overload; | ||||
| @@ -1058,8 +1069,8 @@ type | ||||
|       property OnFindResult                     : TOnFindResult                     read FOnFindResult                     write FOnFindResult; | ||||
|  | ||||
|       // ICefRequestContextHandler | ||||
|       property OnRequestContextInitialized            : TOnRequestContextInitialized      read FOnRequestContextInitialized            write SetOnRequestContextInitialized; | ||||
|       property OnBeforePluginLoad                     : TOnBeforePluginLoad               read FOnBeforePluginLoad                     write SetOnBeforePluginLoad; | ||||
|       property OnRequestContextInitialized            : TOnRequestContextInitialized      read FOnRequestContextInitialized            write FOnRequestContextInitialized; | ||||
|       property OnBeforePluginLoad                     : TOnBeforePluginLoad               read FOnBeforePluginLoad                     write FOnBeforePluginLoad; | ||||
|       property OnGetResourceRequestHandler_ReqCtxHdlr : TOnGetResourceRequestHandler      read FOnGetResourceRequestHandler_ReqCtxHdlr write FOnGetResourceRequestHandler_ReqCtxHdlr; | ||||
|  | ||||
|       // ICefMediaObserver | ||||
| @@ -1094,6 +1105,16 @@ type | ||||
|       property OnExtensionGetActiveBrowser            : TOnGetActiveBrowserEvent          read FOnExtensionGetActiveBrowser            write FOnExtensionGetActiveBrowser; | ||||
|       property OnExtensionCanAccessBrowser            : TOnCanAccessBrowserEvent          read FOnExtensionCanAccessBrowser            write FOnExtensionCanAccessBrowser; | ||||
|       property OnExtensionGetExtensionResource        : TOnGetExtensionResourceEvent      read FOnExtensionGetExtensionResource        write FOnExtensionGetExtensionResource; | ||||
|  | ||||
|       // ICefPrintHandler | ||||
|       {$IFDEF LINUX} | ||||
|       property OnPrintStart                           : TOnPrintStartEvent                read FOnPrintStart                           write FOnPrintStart; | ||||
|       property OnPrintSettings                        : TOnPrintSettingsEvent             read FOnPrintSettings                        write FOnPrintSettings; | ||||
|       property OnPrintDialog                          : TOnPrintDialogEvent               read FOnPrintDialog                          write FOnPrintDialog; | ||||
|       property OnPrintJob                             : TOnPrintJobEvent                  read FOnPrintJob                             write FOnPrintJob; | ||||
|       property OnPrintReset                           : TOnPrintResetEvent                read FOnPrintReset                           write FOnPrintReset; | ||||
|       property OnGetPDFPaperSize                      : TOnGetPDFPaperSizeEvent           read FOnGetPDFPaperSize                      write FOnGetPDFPaperSize; | ||||
|       {$ENDIF} | ||||
|   end; | ||||
|  | ||||
|   TBrowserInfo = class | ||||
| @@ -1535,13 +1556,6 @@ begin | ||||
|   DestroyClientHandler; | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.CreateReqContextHandler; | ||||
| begin | ||||
|   if MustCreateRequestContextHandler and | ||||
|      (FReqContextHandler = nil) then | ||||
|     FReqContextHandler := TCustomRequestContextHandler.Create(self); | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.CreateMediaObserver; | ||||
| begin | ||||
|   if MustCreateMediaObserver and | ||||
| @@ -1578,14 +1592,15 @@ begin | ||||
|     if not(csDesigning in ComponentState) then | ||||
|       begin | ||||
|         {$IFDEF MSWINDOWS} | ||||
|         FCompHandle      := AllocateHWnd({$IFDEF FPC}@{$ENDIF}WndProc); | ||||
|         FCompHandle        := AllocateHWnd({$IFDEF FPC}@{$ENDIF}WndProc); | ||||
|         {$ENDIF} | ||||
|         FBrowsers        := TBrowserInfoList.Create; | ||||
|         FOptions         := TChromiumOptions.Create; | ||||
|         FFontOptions     := TChromiumFontOptions.Create; | ||||
|         FPDFPrintOptions := TPDFPrintOptions.Create; | ||||
|         FZoomStepCS      := TCriticalSection.Create; | ||||
|         FBrowsersCS      := TCriticalSection.Create; | ||||
|         FBrowsers          := TBrowserInfoList.Create; | ||||
|         FOptions           := TChromiumOptions.Create; | ||||
|         FFontOptions       := TChromiumFontOptions.Create; | ||||
|         FPDFPrintOptions   := TPDFPrintOptions.Create; | ||||
|         FZoomStepCS        := TCriticalSection.Create; | ||||
|         FBrowsersCS        := TCriticalSection.Create; | ||||
|         FReqContextHandler := TCustomRequestContextHandler.Create(self); | ||||
|       end; | ||||
|   except | ||||
|     on e : exception do | ||||
| @@ -1771,6 +1786,14 @@ begin | ||||
|   FOnExtensionCanAccessBrowser        := nil; | ||||
|   FOnExtensionGetExtensionResource    := nil; | ||||
|  | ||||
|   // ICefPrintHandler | ||||
|   FOnPrintStart                       := nil; | ||||
|   FOnPrintSettings                    := nil; | ||||
|   FOnPrintDialog                      := nil; | ||||
|   FOnPrintJob                         := nil; | ||||
|   FOnPrintReset                       := nil; | ||||
|   FOnGetPDFPaperSize                  := nil; | ||||
|  | ||||
|   // Custom | ||||
|   FOnTextResultAvailable              := nil; | ||||
|   FOnPdfPrintFinished                 := nil; | ||||
| @@ -1802,9 +1825,10 @@ function TChromiumCore.CreateBrowser(      aParentHandle  : TCefWindowHandle; | ||||
|                                            aParentRect    : TRect; | ||||
|                                      const aWindowName    : ustring; | ||||
|                                      const aContext       : ICefRequestContext; | ||||
|                                      const aExtraInfo     : ICefDictionaryValue) : boolean; | ||||
|                                      const aExtraInfo     : ICefDictionaryValue; | ||||
|                                            aForceAsPopup  : boolean) : boolean; | ||||
| var | ||||
|   TempNewContext, TempGlobalContext : ICefRequestContext; | ||||
|   TempNewContext, TempOldContext : ICefRequestContext; | ||||
| begin | ||||
|   Result         := False; | ||||
|   TempNewContext := nil; | ||||
| @@ -1825,24 +1849,23 @@ begin | ||||
|          CreateClientHandler(not(ValidCefWindowHandle(aParentHandle))) then | ||||
|         begin | ||||
|           GetSettings(FBrowserSettings); | ||||
|           InitializeWindowInfo(aParentHandle, aParentRect, aWindowName); | ||||
|  | ||||
|           if aForceAsPopup then | ||||
|             WindowInfoAsPopUp(FWindowInfo, aParentHandle, aWindowName) | ||||
|            else | ||||
|             InitializeWindowInfo(aParentHandle, aParentRect, aWindowName); | ||||
|  | ||||
|           CreateResourceRequestHandler; | ||||
|           CreateMediaObserver; | ||||
|           CreateDevToolsMsgObserver; | ||||
|           CreateExtensionHandler; | ||||
|  | ||||
|           if (aContext = nil) then | ||||
|             begin | ||||
|               CreateReqContextHandler; | ||||
|  | ||||
|               if (FReqContextHandler <> nil) then | ||||
|                 begin | ||||
|                   TempGlobalContext := TCefRequestContextRef.Global(); | ||||
|                   TempNewContext    := TCefRequestContextRef.Shared(TempGlobalContext, FReqContextHandler); | ||||
|                 end; | ||||
|             end | ||||
|             TempOldContext := TCefRequestContextRef.Global() | ||||
|            else | ||||
|             TempNewContext := aContext; | ||||
|             TempOldContext := aContext; | ||||
|  | ||||
|           TempNewContext := TCefRequestContextRef.Shared(TempOldContext, FReqContextHandler); | ||||
|  | ||||
|           if GlobalCEFApp.MultiThreadedMessageLoop then | ||||
|             Result := CreateBrowserHost(@FWindowInfo, FDefaultUrl, @FBrowserSettings, aExtraInfo, TempNewContext) | ||||
| @@ -1854,8 +1877,8 @@ begin | ||||
|         if CustomExceptionHandler('TChromiumCore.CreateBrowser', e) then raise; | ||||
|     end; | ||||
|   finally | ||||
|     TempGlobalContext := nil; | ||||
|     TempNewContext    := nil; | ||||
|     TempOldContext := nil; | ||||
|     TempNewContext := nil; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| @@ -1864,9 +1887,10 @@ function TChromiumCore.CreateBrowser(const aURL             : ustring; | ||||
|                                      const aContext         : ICefRequestContext; | ||||
|                                      const aExtraInfo       : ICefDictionaryValue) : boolean; | ||||
| var | ||||
|   TempNewContext, TempGlobalContext : ICefRequestContext; | ||||
|   TempNewContext, TempOldContext : ICefRequestContext; | ||||
| begin | ||||
|   Result := False; | ||||
|   Result         := False; | ||||
|   TempNewContext := nil; | ||||
|  | ||||
|   try | ||||
|     try | ||||
| @@ -1891,17 +1915,11 @@ begin | ||||
|           CreateExtensionHandler; | ||||
|  | ||||
|           if (aContext = nil) then | ||||
|             begin | ||||
|               CreateReqContextHandler; | ||||
|  | ||||
|               if (FReqContextHandler <> nil) then | ||||
|                 begin | ||||
|                   TempGlobalContext := TCefRequestContextRef.Global(); | ||||
|                   TempNewContext    := TCefRequestContextRef.Shared(TempGlobalContext, FReqContextHandler); | ||||
|                 end; | ||||
|             end | ||||
|             TempOldContext := TCefRequestContextRef.Global() | ||||
|            else | ||||
|             TempNewContext := aContext; | ||||
|             TempOldContext := aContext; | ||||
|  | ||||
|           TempNewContext := TCefRequestContextRef.Shared(TempOldContext, FReqContextHandler); | ||||
|  | ||||
|           Result := aBrowserViewComp.CreateBrowserView(FHandler, aURL, FBrowserSettings, aExtraInfo, TempNewContext); | ||||
|         end; | ||||
| @@ -1910,39 +1928,8 @@ begin | ||||
|         if CustomExceptionHandler('TChromiumCore.CreateBrowser', e) then raise; | ||||
|     end; | ||||
|   finally | ||||
|     TempGlobalContext := nil; | ||||
|     TempNewContext    := nil; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.CreateBrowser(const aWindowName : ustring); | ||||
| var | ||||
|   TempHandle : TCefWindowHandle; | ||||
| begin | ||||
|   try | ||||
|     // GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser | ||||
|     // even if you use a custom request context. | ||||
|     // If you create a browser in the initialization of your app, make sure you call this | ||||
|     // function when GlobalCEFApp.GlobalContextInitialized is TRUE. | ||||
|     // Use the GlobalCEFApp.OnContextInitialized event to know when | ||||
|     // GlobalCEFApp.GlobalContextInitialized is set to TRUE. | ||||
|     if (BrowserId    =  0)   and | ||||
|        (GlobalCEFApp <> nil) and | ||||
|        GlobalCEFApp.GlobalContextInitialized and | ||||
|        CreateClientHandler(False) then | ||||
|       begin | ||||
|         GetSettings(FBrowserSettings); | ||||
|         InitializeWindowHandle(TempHandle); | ||||
|         WindowInfoAsPopUp(FWindowInfo, TempHandle, aWindowName); | ||||
|         CreateResourceRequestHandler; | ||||
|         CreateMediaObserver; | ||||
|         CreateDevToolsMsgObserver; | ||||
|         CreateExtensionHandler; | ||||
|         CreateBrowserHostSync(@FWindowInfo, FDefaultUrl, @FBrowserSettings, nil, nil); | ||||
|       end; | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TChromiumCore.CreateBrowser', e) then raise; | ||||
|     TempOldContext := nil; | ||||
|     TempNewContext := nil; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| @@ -2330,7 +2317,6 @@ begin | ||||
|       aSettings.plugins                         := FOptions.Plugins; | ||||
|       aSettings.universal_access_from_file_urls := FOptions.UniversalAccessFromFileUrls; | ||||
|       aSettings.file_access_from_file_urls      := FOptions.FileAccessFromFileUrls; | ||||
|       aSettings.web_security                    := FOptions.WebSecurity; | ||||
|       aSettings.image_loading                   := FOptions.ImageLoading; | ||||
|       aSettings.image_shrink_standalone_to_fit  := FOptions.ImageShrinkStandaloneToFit; | ||||
|       aSettings.text_area_resize                := FOptions.TextAreaResize; | ||||
| @@ -2346,38 +2332,9 @@ end; | ||||
|  | ||||
| procedure TChromiumCore.InitializeSettings(var aSettings : TCefBrowserSettings); | ||||
| begin | ||||
|   aSettings.size                            := SizeOf(TCefBrowserSettings); | ||||
|   aSettings.windowless_frame_rate           := 30; | ||||
|   aSettings.standard_font_family            := CefString(''); | ||||
|   aSettings.fixed_font_family               := CefString(''); | ||||
|   aSettings.serif_font_family               := CefString(''); | ||||
|   aSettings.sans_serif_font_family          := CefString(''); | ||||
|   aSettings.cursive_font_family             := CefString(''); | ||||
|   aSettings.fantasy_font_family             := CefString(''); | ||||
|   aSettings.default_font_size               := 0; | ||||
|   aSettings.default_fixed_font_size         := 0; | ||||
|   aSettings.minimum_font_size               := 0; | ||||
|   aSettings.minimum_logical_font_size       := 0; | ||||
|   aSettings.remote_fonts                    := STATE_DEFAULT; | ||||
|   aSettings.default_encoding                := CefString(''); | ||||
|   aSettings.javascript                      := STATE_DEFAULT; | ||||
|   aSettings.javascript_close_windows        := STATE_DEFAULT; | ||||
|   aSettings.javascript_access_clipboard     := STATE_DEFAULT; | ||||
|   aSettings.javascript_dom_paste            := STATE_DEFAULT; | ||||
|   aSettings.plugins                         := STATE_DEFAULT; | ||||
|   aSettings.universal_access_from_file_urls := STATE_DEFAULT; | ||||
|   aSettings.file_access_from_file_urls      := STATE_DEFAULT; | ||||
|   aSettings.web_security                    := STATE_DEFAULT; | ||||
|   aSettings.image_loading                   := STATE_DEFAULT; | ||||
|   aSettings.image_shrink_standalone_to_fit  := STATE_DEFAULT; | ||||
|   aSettings.text_area_resize                := STATE_DEFAULT; | ||||
|   aSettings.tab_to_links                    := STATE_DEFAULT; | ||||
|   aSettings.local_storage                   := STATE_DEFAULT; | ||||
|   aSettings.databases                       := STATE_DEFAULT; | ||||
|   aSettings.application_cache               := STATE_DEFAULT; | ||||
|   aSettings.webgl                           := STATE_DEFAULT; | ||||
|   aSettings.background_color                := 0; | ||||
|   aSettings.accept_language_list            := CefString(''); | ||||
|   FillChar(aSettings, SizeOf(TCefBrowserSettings), 0); | ||||
|   aSettings.size                  := SizeOf(TCefBrowserSettings); | ||||
|   aSettings.windowless_frame_rate := CEF_OSR_FRAMERATE_DEFAULT;  // Use CEF_OSR_SHARED_TEXTURES_FRAMERATE_DEFAULT if the shared textures are enabled. | ||||
| end; | ||||
|  | ||||
| // Leave aFrameName empty to load the URL in the main frame | ||||
| @@ -3281,20 +3238,6 @@ begin | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.SetOnRequestContextInitialized(const aValue : TOnRequestContextInitialized); | ||||
| begin | ||||
|   FOnRequestContextInitialized := aValue; | ||||
|  | ||||
|   CreateReqContextHandler; | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.SetOnBeforePluginLoad(const aValue : TOnBeforePluginLoad); | ||||
| begin | ||||
|   FOnBeforePluginLoad := aValue; | ||||
|  | ||||
|   CreateReqContextHandler; | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.UpdateHostZoomLevel(const aValue : double); | ||||
| begin | ||||
|   if Initialized then | ||||
| @@ -3611,29 +3554,6 @@ begin | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.UpdateSupportedSchemes(const aSchemes : TStrings; aIncludeDefaults : boolean); | ||||
| var | ||||
|   TempManager : ICefCookieManager; | ||||
|   TempContext : ICefRequestContext; | ||||
| begin | ||||
|   if Initialized then | ||||
|     begin | ||||
|       TempContext := Browser.Host.RequestContext; | ||||
|  | ||||
|       if (TempContext <> nil) then | ||||
|         begin | ||||
|           TempManager := TempContext.GetCookieManager(nil); | ||||
|  | ||||
|           if (TempManager <> nil) then | ||||
|             try | ||||
|               TempManager.SetSupportedSchemes(aSchemes, aIncludeDefaults, nil); | ||||
|             finally | ||||
|               TempManager := nil; | ||||
|             end; | ||||
|         end; | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| // If aClearImmediately is false then OnCertificateExceptionsCleared is triggered when the exceptions are cleared | ||||
| function TChromiumCore.ClearCertificateExceptions(aClearImmediately : boolean) : boolean; | ||||
| var | ||||
| @@ -3960,7 +3880,7 @@ begin | ||||
|   TempRequestContext := RequestContext; | ||||
|  | ||||
|   if (TempRequestContext <> nil) then | ||||
|     Result := TempRequestContext.MediaRouter | ||||
|     Result := TempRequestContext.GetMediaRouter(nil) | ||||
|    else | ||||
|     Result := nil; | ||||
| end; | ||||
| @@ -4784,14 +4704,6 @@ begin | ||||
|             assigned(FOnCanSaveCookie); | ||||
| end; | ||||
|  | ||||
| function TChromiumCore.MustCreateRequestContextHandler : boolean; | ||||
| begin | ||||
|   Result := assigned(FOnRequestContextInitialized) or | ||||
|             assigned(FOnBeforePluginLoad) or | ||||
|             assigned(FOnGetResourceRequestHandler_ReqCtxHdlr) or | ||||
|             MustCreateResourceRequestHandler; | ||||
| end; | ||||
|  | ||||
| function TChromiumCore.MustCreateMediaObserver : boolean; | ||||
| begin | ||||
|   Result := assigned(FOnSinks) or | ||||
| @@ -4833,6 +4745,16 @@ begin | ||||
|             assigned(FOnExtensionGetExtensionResource); | ||||
| end; | ||||
|  | ||||
| function TChromiumCore.MustCreatePrintHandler : boolean; | ||||
| begin | ||||
|   Result := assigned(FOnPrintStart) or | ||||
|             assigned(FOnPrintSettings) or | ||||
|             assigned(FOnPrintDialog) or | ||||
|             assigned(FOnPrintJob) or | ||||
|             assigned(FOnPrintReset) or | ||||
|             assigned(FOnGetPDFPaperSize); | ||||
| end; | ||||
|  | ||||
| {$IFDEF MSWINDOWS} | ||||
| procedure TChromiumCore.PrefsAvailableMsg(aResultOK : boolean); | ||||
| begin | ||||
| @@ -4929,14 +4851,15 @@ begin | ||||
|       if Initialized then | ||||
|         begin | ||||
|           InitializeSettings(FDevBrowserSettings); | ||||
|           if aWindowInfo = nil then | ||||
|  | ||||
|           if (aWindowInfo = nil) then | ||||
|             begin | ||||
|               InitializeWindowHandle(TempHandle); | ||||
|               DefaultInitializeDevToolsWindowInfo(TempHandle, Rect(0, 0, 0, 0), ''); | ||||
|             end | ||||
|            else | ||||
|              if aWindowInfo <> @FDevWindowInfo then | ||||
|                FDevWindowInfo := aWindowInfo^; | ||||
|             if (aWindowInfo <> @FDevWindowInfo) then | ||||
|               FDevWindowInfo := aWindowInfo^; | ||||
|  | ||||
|           TempClient := TCustomClientHandler.Create(Self, True); | ||||
|  | ||||
| @@ -5734,6 +5657,53 @@ begin | ||||
|     FOnExtensionGetExtensionResource(self, extension, browser, file_, callback, Result); | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.doOnPrintStart(const browser: ICefBrowser); | ||||
| begin | ||||
|   if assigned(FOnPrintStart) then | ||||
|     FOnPrintStart(self, browser); | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.doOnPrintSettings(const browser     : ICefBrowser; | ||||
|                                           const settings    : ICefPrintSettings; | ||||
|                                                 getDefaults : boolean); | ||||
| begin | ||||
|   if assigned(FOnPrintSettings) then | ||||
|     FOnPrintSettings(self, browser, settings, getDefaults); | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.doOnPrintDialog(const browser      : ICefBrowser; | ||||
|                                               hasSelection : boolean; | ||||
|                                         const callback     : ICefPrintDialogCallback; | ||||
|                                         var   aResult      : boolean); | ||||
| begin | ||||
|   if assigned(FOnPrintDialog) then | ||||
|     FOnPrintDialog(self, browser, hasSelection, callback, aResult); | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.doOnPrintJob(const browser      : ICefBrowser; | ||||
|                                      const documentName : ustring; | ||||
|                                      const PDFFilePath  : ustring; | ||||
|                                      const callback     : ICefPrintJobCallback; | ||||
|                                      var   aResult      : boolean); | ||||
| begin | ||||
|   if assigned(FOnPrintJob) then | ||||
|     FOnPrintJob(self, browser, documentName, PDFFilePath, callback, aResult); | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.doOnPrintReset(const browser: ICefBrowser); | ||||
| begin | ||||
|   if assigned(FOnPrintReset) then | ||||
|     FOnPrintReset(self, browser); | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.doOnGetPDFPaperSize(const browser            : ICefBrowser; | ||||
|                                                   deviceUnitsPerInch : Integer; | ||||
|                                             var   aResult            : TCefSize); | ||||
| begin | ||||
|   if assigned(FOnGetPDFPaperSize) then | ||||
|     FOnGetPDFPaperSize(self, browser, deviceUnitsPerInch, aResult); | ||||
| end; | ||||
|  | ||||
| procedure TChromiumCore.doOnFullScreenModeChange(const browser    : ICefBrowser; | ||||
|                                                        fullscreen : Boolean); | ||||
| begin | ||||
|   | ||||
| @@ -200,6 +200,14 @@ type | ||||
|   TOnCanAccessBrowserEvent        = procedure(Sender: TObject; const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; const target_browser: ICefBrowser; var aResult : boolean) of object; | ||||
|   TOnGetExtensionResourceEvent    = procedure(Sender: TObject; const extension: ICefExtension; const browser: ICefBrowser; const file_: ustring; const callback: ICefGetExtensionResourceCallback; var aResult : boolean) of object; | ||||
|  | ||||
|   // ICefPrintHandler | ||||
|   TOnPrintStartEvent              = procedure(Sender: TObject; const browser: ICefBrowser) of object; | ||||
|   TOnPrintSettingsEvent           = procedure(Sender: TObject; const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean) of object; | ||||
|   TOnPrintDialogEvent             = procedure(Sender: TObject; const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult : boolean) of object; | ||||
|   TOnPrintJobEvent                = procedure(Sender: TObject; const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult : boolean) of object; | ||||
|   TOnPrintResetEvent              = procedure(Sender: TObject; const browser: ICefBrowser) of object; | ||||
|   TOnGetPDFPaperSizeEvent         = procedure(Sender: TObject; const browser: ICefBrowser; deviceUnitsPerInch: Integer; var aResult : TCefSize) of object; | ||||
|  | ||||
|   // Custom | ||||
|   TOnTextResultAvailableEvent              = procedure(Sender: TObject; const aText : ustring) of object; | ||||
|   TOnPdfPrintFinishedEvent                 = procedure(Sender: TObject; aResultOK : boolean) of object; | ||||
|   | ||||
| @@ -54,7 +54,7 @@ uses | ||||
|   {$ELSE} | ||||
|   Classes, | ||||
|   {$ENDIF} | ||||
|   uCEFTypes; | ||||
|   uCEFTypes, uCEFConstants; | ||||
|  | ||||
| type | ||||
|   TChromiumOptions = class(TPersistent) | ||||
| @@ -67,7 +67,6 @@ type | ||||
|       FPlugins                     : TCefState; | ||||
|       FUniversalAccessFromFileUrls : TCefState; | ||||
|       FFileAccessFromFileUrls      : TCefState; | ||||
|       FWebSecurity                 : TCefState; | ||||
|       FImageLoading                : TCefState; | ||||
|       FImageShrinkStandaloneToFit  : TCefState; | ||||
|       FTextAreaResize              : TCefState; | ||||
| @@ -90,7 +89,6 @@ type | ||||
|       property Plugins                     : TCefState read FPlugins                      write FPlugins                     default STATE_DEFAULT; | ||||
|       property UniversalAccessFromFileUrls : TCefState read FUniversalAccessFromFileUrls  write FUniversalAccessFromFileUrls default STATE_DEFAULT; | ||||
|       property FileAccessFromFileUrls      : TCefState read FFileAccessFromFileUrls       write FFileAccessFromFileUrls      default STATE_DEFAULT; | ||||
|       property WebSecurity                 : TCefState read FWebSecurity                  write FWebSecurity                 default STATE_DEFAULT; | ||||
|       property ImageLoading                : TCefState read FImageLoading                 write FImageLoading                default STATE_DEFAULT; | ||||
|       property ImageShrinkStandaloneToFit  : TCefState read FImageShrinkStandaloneToFit   write FImageShrinkStandaloneToFit  default STATE_DEFAULT; | ||||
|       property TextAreaResize              : TCefState read FTextAreaResize               write FTextAreaResize              default STATE_DEFAULT; | ||||
| @@ -101,14 +99,15 @@ type | ||||
|       property Webgl                       : TCefState read FWebgl                        write FWebgl                       default STATE_DEFAULT; | ||||
|       property BackgroundColor             : TCefColor read FBackgroundColor              write FBackgroundColor             default 0; | ||||
|       property AcceptLanguageList          : ustring   read FAcceptLanguageList           write FAcceptLanguageList; | ||||
|       property WindowlessFrameRate         : Integer   read FWindowlessFrameRate          write FWindowlessFrameRate         default 30; | ||||
|       property WindowlessFrameRate         : Integer   read FWindowlessFrameRate          write FWindowlessFrameRate         default CEF_OSR_FRAMERATE_DEFAULT; | ||||
|   end; | ||||
|  | ||||
| implementation | ||||
|  | ||||
| constructor TChromiumOptions.Create; | ||||
| begin | ||||
|   FWindowlessFrameRate         := 30; | ||||
|  | ||||
|   FWindowlessFrameRate         := CEF_OSR_FRAMERATE_DEFAULT;  // Use CEF_OSR_SHARED_TEXTURES_FRAMERATE_DEFAULT if the shared textures are enabled. | ||||
|   FJavascript                  := STATE_DEFAULT; | ||||
|   FJavascriptCloseWindows      := STATE_DEFAULT; | ||||
|   FJavascriptAccessClipboard   := STATE_DEFAULT; | ||||
| @@ -116,7 +115,6 @@ begin | ||||
|   FPlugins                     := STATE_DEFAULT; | ||||
|   FUniversalAccessFromFileUrls := STATE_DEFAULT; | ||||
|   FFileAccessFromFileUrls      := STATE_DEFAULT; | ||||
|   FWebSecurity                 := STATE_DEFAULT; | ||||
|   FImageLoading                := STATE_DEFAULT; | ||||
|   FImageShrinkStandaloneToFit  := STATE_DEFAULT; | ||||
|   FTextAreaResize              := STATE_DEFAULT; | ||||
|   | ||||
| @@ -66,6 +66,7 @@ type | ||||
|       procedure GetKeyboardHandler(var aHandler : ICefKeyboardHandler); virtual; | ||||
|       procedure GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler); virtual; | ||||
|       procedure GetLoadHandler(var aHandler : ICefLoadHandler); virtual; | ||||
|       procedure GetPrintHandler(var aHandler : ICefPrintHandler); virtual; | ||||
|       procedure GetRenderHandler(var aHandler : ICefRenderHandler); virtual; | ||||
|       procedure GetRequestHandler(var aHandler : ICefRequestHandler); virtual; | ||||
|       function  OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const message_ : ICefProcessMessage): Boolean; virtual; | ||||
| @@ -90,6 +91,7 @@ type | ||||
|       procedure GetKeyboardHandler(var aHandler : ICefKeyboardHandler); virtual; | ||||
|       procedure GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler); virtual; | ||||
|       procedure GetLoadHandler(var aHandler : ICefLoadHandler); virtual; | ||||
|       procedure GetPrintHandler(var aHandler : ICefPrintHandler); virtual; | ||||
|       procedure GetRenderHandler(var aHandler : ICefRenderHandler); virtual; | ||||
|       procedure GetRequestHandler(var aHandler : ICefRequestHandler); virtual; | ||||
|       function  OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const message_ : ICefProcessMessage): Boolean; virtual; | ||||
| @@ -117,6 +119,7 @@ type | ||||
|       FRequestHandler     : ICefRequestHandler; | ||||
|       FDragHandler        : ICefDragHandler; | ||||
|       FFindHandler        : ICefFindHandler; | ||||
|       FPrintHandler       : ICefPrintHandler; | ||||
|  | ||||
|       procedure GetAudioHandler(var aHandler : ICefAudioHandler); override; | ||||
|       procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); override; | ||||
| @@ -130,6 +133,7 @@ type | ||||
|       procedure GetKeyboardHandler(var aHandler : ICefKeyboardHandler); override; | ||||
|       procedure GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler); override; | ||||
|       procedure GetLoadHandler(var aHandler : ICefLoadHandler); override; | ||||
|       procedure GetPrintHandler(var aHandler : ICefPrintHandler); override; | ||||
|       procedure GetRenderHandler(var aHandler : ICefRenderHandler); override; | ||||
|       procedure GetRequestHandler(var aHandler : ICefRequestHandler); override; | ||||
|       function  OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const message_ : ICefProcessMessage): Boolean; override; | ||||
| @@ -154,7 +158,8 @@ uses | ||||
|   uCEFFocusHandler, uCEFContextMenuHandler, uCEFDialogHandler, uCEFKeyboardHandler, | ||||
|   uCEFDisplayHandler, uCEFDownloadHandler, uCEFJsDialogHandler, | ||||
|   uCEFLifeSpanHandler, uCEFRequestHandler, uCEFRenderHandler, uCEFDragHandler, | ||||
|   uCEFFindHandler, uCEFConstants, uCEFApplicationCore, uCEFFrame, uCEFAudioHandler; | ||||
|   uCEFFindHandler, uCEFConstants, uCEFApplicationCore, uCEFFrame, uCEFAudioHandler, | ||||
|   uCEFPrintHandler; | ||||
|  | ||||
|  | ||||
| // ****************************************************** | ||||
| @@ -229,6 +234,11 @@ begin | ||||
|   aHandler := nil; | ||||
| end; | ||||
|  | ||||
| procedure TCefClientRef.GetPrintHandler(var aHandler : ICefPrintHandler); | ||||
| begin | ||||
|   aHandler := nil; | ||||
| end; | ||||
|  | ||||
| procedure TCefClientRef.GetRenderHandler(var aHandler : ICefRenderHandler); | ||||
| begin | ||||
|   aHandler := nil; | ||||
| @@ -459,7 +469,7 @@ begin | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| function cef_client_own_get_get_render_handler(self: PCefClient): PCefRenderHandler; stdcall; | ||||
| function cef_client_own_get_render_handler(self: PCefClient): PCefRenderHandler; stdcall; | ||||
| var | ||||
|   TempObject  : TObject; | ||||
|   TempHandler : ICefRenderHandler; | ||||
| @@ -493,6 +503,24 @@ begin | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| function cef_client_own_get_print_handler(self: PCefClient): PCefPrintHandler; stdcall; | ||||
| var | ||||
|   TempObject  : TObject; | ||||
|   TempHandler : ICefPrintHandler; | ||||
| begin | ||||
|   Result     := nil; | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   if (TempObject <> nil) and (TempObject is TCefClientOwn) then | ||||
|     try | ||||
|       TempHandler := nil; | ||||
|       TCefClientOwn(TempObject).GetPrintHandler(TempHandler); | ||||
|       if (TempHandler <> nil) then Result := TempHandler.Wrap; | ||||
|     finally | ||||
|       TempHandler := nil; | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| function cef_client_own_on_process_message_received(self           : PCefClient; | ||||
|                                                     browser        : PCefBrowser; | ||||
|                                                     frame          : PCefFrame; | ||||
| @@ -529,7 +557,8 @@ begin | ||||
|       get_keyboard_handler        := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_keyboard_handler; | ||||
|       get_life_span_handler       := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_life_span_handler; | ||||
|       get_load_handler            := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_load_handler; | ||||
|       get_render_handler          := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_get_render_handler; | ||||
|       get_print_handler           := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_print_handler; | ||||
|       get_render_handler          := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_render_handler; | ||||
|       get_request_handler         := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_request_handler; | ||||
|       on_process_message_received := {$IFDEF FPC}@{$ENDIF}cef_client_own_on_process_message_received; | ||||
|     end; | ||||
| @@ -595,6 +624,11 @@ begin | ||||
|   aHandler := nil; | ||||
| end; | ||||
|  | ||||
| procedure TCefClientOwn.GetPrintHandler(var aHandler : ICefPrintHandler); | ||||
| begin | ||||
|   aHandler := nil; | ||||
| end; | ||||
|  | ||||
| procedure TCefClientOwn.GetRenderHandler(var aHandler : ICefRenderHandler); | ||||
| begin | ||||
|   aHandler := nil; | ||||
| @@ -654,6 +688,7 @@ begin | ||||
|           if events.MustCreateRequestHandler     then FRequestHandler     := TCustomRequestHandler.Create(events); | ||||
|           if events.MustCreateDragHandler        then FDragHandler        := TCustomDragHandler.Create(events); | ||||
|           if events.MustCreateFindHandler        then FFindHandler        := TCustomFindHandler.Create(events); | ||||
|           if events.MustCreatePrintHandler       then FPrintHandler       := TCustomPrintHandler.Create(events); | ||||
|         end; | ||||
|     end; | ||||
| end; | ||||
| @@ -683,6 +718,7 @@ begin | ||||
|   if (FRenderHandler      <> nil) then FRenderHandler.RemoveReferences; | ||||
|   if (FDragHandler        <> nil) then FDragHandler.RemoveReferences; | ||||
|   if (FFindHandler        <> nil) then FFindHandler.RemoveReferences; | ||||
|   if (FPrintHandler       <> nil) then FPrintHandler.RemoveReferences; | ||||
| end; | ||||
|  | ||||
| procedure TCustomClientHandler.InitializeVars; | ||||
| @@ -701,6 +737,7 @@ begin | ||||
|   FRenderHandler      := nil; | ||||
|   FDragHandler        := nil; | ||||
|   FFindHandler        := nil; | ||||
|   FPrintHandler       := nil; | ||||
|   FEvents             := nil; | ||||
| end; | ||||
|  | ||||
| @@ -800,6 +837,14 @@ begin | ||||
|     aHandler := nil; | ||||
| end; | ||||
|  | ||||
| procedure TCustomClientHandler.GetPrintHandler(var aHandler : ICefPrintHandler); | ||||
| begin | ||||
|   if (FPrintHandler <> nil) then | ||||
|     aHandler := FPrintHandler | ||||
|    else | ||||
|     aHandler := nil; | ||||
| end; | ||||
|  | ||||
| procedure TCustomClientHandler.GetRenderHandler(var aHandler : ICefRenderHandler); | ||||
| begin | ||||
|   if (FRenderHandler <> nil) then | ||||
|   | ||||
| @@ -552,6 +552,11 @@ const | ||||
|   CEF_TFC_DELETE     = 5; | ||||
|   CEF_TFC_SELECT_ALL = 6; | ||||
|  | ||||
|   // /include/internal/cef_types.h (cef_chrome_toolbar_type_t) | ||||
|   CEF_CTT_NONE       = 1; | ||||
|   CEF_CTT_NORMAL     = 2; | ||||
|   CEF_CTT_LOCATION   = 3; | ||||
|  | ||||
|   // /include/cef_api_hash.h (used as "cef_api_hash" parameters) | ||||
|   CEF_API_HASH_PLATFORM  = 0; | ||||
|   CEF_API_HASH_UNIVERSAL = 1; | ||||
| @@ -638,9 +643,14 @@ const | ||||
|   WM_POINTERUP             = $0247; | ||||
|   {$IFEND} | ||||
|  | ||||
|   // Default values for the Windowsless framerate setting in TChromiumOptions | ||||
|   // The values are frames per second. | ||||
|   CEF_OSR_FRAMERATE_DEFAULT                  = 30;  // Used when the shared textures are disabled. | ||||
|   CEF_OSR_SHARED_TEXTURES_FRAMERATE_DEFAULT  = 60;  // Used when the shared textures are enabled. | ||||
|  | ||||
|   CEF_TIMER_MINIMUM            = $0000000A; | ||||
|   CEF_TIMER_MAXIMUM            = $7FFFFFFF; | ||||
|   CEF_TIMER_MAXDELAY           = 1000 div 30; // 30fps | ||||
|   CEF_TIMER_MAXDELAY           = 1000 div CEF_OSR_FRAMERATE_DEFAULT; | ||||
|   CEF_TIMER_DEPLETEWORK_CYCLES = 10; | ||||
|   CEF_TIMER_DEPLETEWORK_DELAY  = 50; | ||||
|  | ||||
|   | ||||
| @@ -79,7 +79,6 @@ type | ||||
|     function IsSpellCheckEnabled: Boolean; | ||||
|     function GetEditStateFlags: TCefContextMenuEditStateFlags; | ||||
|     function IsCustomMenu: Boolean; | ||||
|     function IsPepperMenu: Boolean; | ||||
|   public | ||||
|     class function UnWrap(data: Pointer): ICefContextMenuParams; | ||||
|   end; | ||||
| @@ -193,11 +192,6 @@ begin | ||||
|   Result := PCefContextMenuParams(FData)^.is_editable(PCefContextMenuParams(FData)) <> 0; | ||||
| end; | ||||
|  | ||||
| function TCefContextMenuParamsRef.IsPepperMenu: Boolean; | ||||
| begin | ||||
|   Result := PCefContextMenuParams(FData)^.is_pepper_menu(PCefContextMenuParams(FData)) <> 0; | ||||
| end; | ||||
|  | ||||
| function TCefContextMenuParamsRef.IsSpellCheckEnabled: Boolean; | ||||
| begin | ||||
|   Result := PCefContextMenuParams(FData)^.is_spell_check_enabled(PCefContextMenuParams(FData)) <> 0; | ||||
|   | ||||
| @@ -59,8 +59,6 @@ uses | ||||
| type | ||||
|   TCefCookieManagerRef = class(TCefBaseRefCountedRef, ICefCookieManager) | ||||
|     protected | ||||
|       procedure SetSupportedSchemes(const schemes: TStrings; include_defaults: boolean; const callback: ICefCompletionCallback); | ||||
|       procedure SetSupportedSchemesProc(const schemes: TStrings; include_defaults: boolean; const callback: TCefCompletionCallbackProc); | ||||
|       function  VisitAllCookies(const visitor: ICefCookieVisitor): Boolean; | ||||
|       function  VisitAllCookiesProc(const visitor: TCefCookieVisitorProc): Boolean; | ||||
|       function  VisitUrlCookies(const url: ustring; includeHttpOnly: Boolean; const visitor: ICefCookieVisitor): Boolean; | ||||
| @@ -173,39 +171,6 @@ begin | ||||
|                       TCefFastSetCookieCallback.Create(callback)); | ||||
| end; | ||||
|  | ||||
| procedure TCefCookieManagerRef.SetSupportedSchemes(const schemes          : TStrings; | ||||
|                                                          include_defaults : boolean; | ||||
|                                                    const callback         : ICefCompletionCallback); | ||||
| var | ||||
|   TempSL     : ICefStringList; | ||||
|   TempHandle : TCefStringList; | ||||
| begin | ||||
|   try | ||||
|     if (schemes <> nil) and (schemes.count > 0) then | ||||
|       begin | ||||
|         TempSL := TCefStringListOwn.Create; | ||||
|         TempSL.AddStrings(schemes); | ||||
|         TempHandle := TempSL.Handle; | ||||
|       end | ||||
|      else | ||||
|       TempHandle := nil; | ||||
|  | ||||
|     PCefCookieManager(FData)^.set_supported_schemes(PCefCookieManager(FData), | ||||
|                                                     TempHandle, | ||||
|                                                     ord(include_defaults), | ||||
|                                                     CefGetData(callback)); | ||||
|   finally | ||||
|     TempSL := nil; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCefCookieManagerRef.SetSupportedSchemesProc(const schemes          : TStrings; | ||||
|                                                              include_defaults : boolean; | ||||
|                                                        const callback         : TCefCompletionCallbackProc); | ||||
| begin | ||||
|   SetSupportedSchemes(schemes, include_defaults, TCefFastCompletionCallback.Create(callback)); | ||||
| end; | ||||
|  | ||||
| class function TCefCookieManagerRef.UnWrap(data: Pointer): ICefCookieManager; | ||||
| begin | ||||
|   if (data <> nil) then | ||||
|   | ||||
| @@ -146,7 +146,8 @@ procedure TCustomFindHandler.OnFindResult(const browser            : ICefBrowser | ||||
|                                                 activeMatchOrdinal : Integer; | ||||
|                                                 finalUpdate        : Boolean); | ||||
| begin | ||||
|   if (FEvents <> nil) then IChromiumEvents(FEvents).doOnFindResult(browser, identifier, count, selectionRect, activeMatchOrdinal, finalUpdate); | ||||
|   if (FEvents <> nil) then | ||||
|     IChromiumEvents(FEvents).doOnFindResult(browser, identifier, count, selectionRect, activeMatchOrdinal, finalUpdate); | ||||
| end; | ||||
|  | ||||
| end. | ||||
|   | ||||
| @@ -220,12 +220,8 @@ type | ||||
|   TOnRenderLoadEnd                   = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer) {$IFNDEF DELPHI12_UP}{$IFNDEF FPC}of object{$ENDIF}{$ENDIF}; | ||||
|   TOnRenderLoadError                 = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const frame: ICefFrame; errorCode: TCefErrorCode; const errorText, failedUrl: ustring) {$IFNDEF DELPHI12_UP}{$IFNDEF FPC}of object{$ENDIF}{$ENDIF}; | ||||
|   TOnRenderLoadingStateChange        = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean) {$IFNDEF DELPHI12_UP}{$IFNDEF FPC}of object{$ENDIF}{$ENDIF}; | ||||
|   TOnPrintStartEvent                 = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser) {$IFNDEF DELPHI12_UP}{$IFNDEF FPC}of object{$ENDIF}{$ENDIF}; | ||||
|   TOnPrintSettingsEvent              = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean) {$IFNDEF DELPHI12_UP}{$IFNDEF FPC}of object{$ENDIF}{$ENDIF}; | ||||
|   TOnPrintDialogEvent                = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult : boolean) {$IFNDEF DELPHI12_UP}{$IFNDEF FPC}of object{$ENDIF}{$ENDIF}; | ||||
|   TOnPrintJobEvent                   = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult : boolean) {$IFNDEF DELPHI12_UP}{$IFNDEF FPC}of object{$ENDIF}{$ENDIF}; | ||||
|   TOnPrintResetEvent                 = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser) {$IFNDEF DELPHI12_UP}{$IFNDEF FPC}of object{$ENDIF}{$ENDIF}; | ||||
|   TOnGetPDFPaperSizeEvent            = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(deviceUnitsPerInch: Integer; var aResult : TCefSize) {$IFNDEF DELPHI12_UP}{$IFNDEF FPC}of object{$ENDIF}{$ENDIF}; | ||||
|  | ||||
|  | ||||
|  | ||||
|   // ******************************************* | ||||
|   // **** Callback procedures and functions **** | ||||
| @@ -458,6 +454,14 @@ type | ||||
|     function  doOnExtensionCanAccessBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; const target_browser: ICefBrowser): boolean; | ||||
|     function  doOnExtensionGetExtensionResource(const extension: ICefExtension; const browser: ICefBrowser; const file_: ustring; const callback: ICefGetExtensionResourceCallback): boolean; | ||||
|  | ||||
|     // ICefPrintHandler | ||||
|     procedure doOnPrintStart(const browser: ICefBrowser); | ||||
|     procedure doOnPrintSettings(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean); | ||||
|     procedure doOnPrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult : boolean); | ||||
|     procedure doOnPrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult : boolean); | ||||
|     procedure doOnPrintReset(const browser: ICefBrowser); | ||||
|     procedure doOnGetPDFPaperSize(const browser: ICefBrowser; deviceUnitsPerInch: Integer; var aResult : TCefSize); | ||||
|  | ||||
|     // Custom | ||||
|     procedure doCookiesDeleted(numDeleted : integer); | ||||
|     procedure doPdfPrintFinished(aResultOK : boolean); | ||||
| @@ -501,8 +505,8 @@ type | ||||
|     function  MustCreateFindHandler : boolean; | ||||
|     function  MustCreateResourceRequestHandler : boolean; | ||||
|     function  MustCreateCookieAccessFilter : boolean; | ||||
|     function  MustCreateRequestContextHandler : boolean; | ||||
|     function  MustCreateMediaObserver : boolean; | ||||
|     function  MustCreatePrintHandler : boolean; | ||||
|   end; | ||||
|  | ||||
|   IServerEvents = interface | ||||
| @@ -1438,10 +1442,8 @@ type | ||||
|   // /include/capi/cef_browser_process_handler_capi.h (cef_browser_process_handler_t) | ||||
|   ICefBrowserProcessHandler = interface(ICefBaseRefCounted) | ||||
|     ['{27291B7A-C0AE-4EE0-9115-15C810E22F6C}'] | ||||
|     procedure GetCookieableSchemes(var schemes: TStringList; var include_defaults : boolean); | ||||
|     procedure OnContextInitialized; | ||||
|     procedure OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); | ||||
|     procedure GetPrintHandler(var aHandler : ICefPrintHandler); | ||||
|     procedure OnScheduleMessagePumpWork(const delayMs: Int64); | ||||
|     procedure GetDefaultClient(var aClient : ICefClient); | ||||
|  | ||||
| @@ -1503,8 +1505,6 @@ type | ||||
|   // /include/capi/cef_cookie_capi.h (cef_cookie_manager_t) | ||||
|   ICefCookieManager = Interface(ICefBaseRefCounted) | ||||
|     ['{CC1749E6-9AD3-4283-8430-AF6CBF3E8785}'] | ||||
|     procedure SetSupportedSchemes(const schemes: TStrings; include_defaults: boolean; const callback: ICefCompletionCallback); | ||||
|     procedure SetSupportedSchemesProc(const schemes: TStrings; include_defaults: boolean; const callback: TCefCompletionCallbackProc); | ||||
|     function  VisitAllCookies(const visitor: ICefCookieVisitor): Boolean; | ||||
|     function  VisitAllCookiesProc(const visitor: TCefCookieVisitorProc): Boolean; | ||||
|     function  VisitUrlCookies(const url: ustring; includeHttpOnly: Boolean; const visitor: ICefCookieVisitor): Boolean; | ||||
| @@ -1613,7 +1613,6 @@ type | ||||
|     function IsSpellCheckEnabled: Boolean; | ||||
|     function GetEditStateFlags: TCefContextMenuEditStateFlags; | ||||
|     function IsCustomMenu: Boolean; | ||||
|     function IsPepperMenu: Boolean; | ||||
|  | ||||
|     property XCoord            : Integer                        read GetXCoord; | ||||
|     property YCoord            : Integer                        read GetYCoord; | ||||
| @@ -2091,6 +2090,7 @@ type | ||||
|     procedure GetKeyboardHandler(var aHandler : ICefKeyboardHandler); | ||||
|     procedure GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler); | ||||
|     procedure GetLoadHandler(var aHandler : ICefLoadHandler); | ||||
|     procedure GetPrintHandler(var aHandler : ICefPrintHandler); | ||||
|     procedure GetRenderHandler(var aHandler : ICefRenderHandler); | ||||
|     procedure GetRequestHandler(var aHandler : ICefRequestHandler); | ||||
|     function  OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const message_ : ICefProcessMessage): Boolean; | ||||
| @@ -2261,11 +2261,10 @@ type | ||||
|     function  HasExtension(const extension_id: ustring): boolean; | ||||
|     function  GetExtensions(const extension_ids: TStringList): boolean; | ||||
|     function  GetExtension(const extension_id: ustring): ICefExtension; | ||||
|     function  GetMediaRouter: ICefMediaRouter; | ||||
|     function  GetMediaRouter(const callback: ICefCompletionCallback): ICefMediaRouter; | ||||
|  | ||||
|     property  CachePath        : ustring         read GetCachePath; | ||||
|     property  IsGlobalContext  : boolean         read IsGlobal; | ||||
|     property  MediaRouter      : ICefMediaRouter read GetMediaRouter; | ||||
|   end; | ||||
|  | ||||
|   // TCefPrintSettings | ||||
| @@ -2329,7 +2328,7 @@ type | ||||
|     procedure OnPrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult: boolean); | ||||
|     procedure OnPrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult: boolean); | ||||
|     procedure OnPrintReset(const browser: ICefBrowser); | ||||
|     procedure GetPDFPaperSize(deviceUnitsPerInch: integer; var aResult: TCefSize); | ||||
|     procedure GetPDFPaperSize(const browser: ICefBrowser; deviceUnitsPerInch: integer; var aResult: TCefSize); | ||||
|  | ||||
|     procedure RemoveReferences; // custom procedure to clear all references | ||||
|   end; | ||||
| @@ -2631,6 +2630,7 @@ type | ||||
|     procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); | ||||
|     procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); | ||||
|     procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); | ||||
|     procedure OnWindowChanged(const view: ICefView; added: boolean); | ||||
|     procedure OnFocus(const view: ICefView); | ||||
|     procedure OnBlur(const view: ICefView); | ||||
|   end; | ||||
| @@ -2644,6 +2644,7 @@ type | ||||
|     procedure doOnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); | ||||
|     procedure doOnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); | ||||
|     procedure doOnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); | ||||
|     procedure doOnWindowChanged(const view: ICefView; added: boolean); | ||||
|     procedure doOnFocus(const view: ICefView); | ||||
|     procedure doOnBlur(const view: ICefView); | ||||
|  | ||||
| @@ -2764,6 +2765,7 @@ type | ||||
|   ICefBrowserView = interface(ICefView) | ||||
|     ['{A617EE5D-B933-4E14-9FC0-7E88E9B6C051}'] | ||||
|     function  GetBrowser : ICefBrowser; | ||||
|     function  GetChromeToolbar : ICefView; | ||||
|     procedure SetPreferAccelerators(prefer_accelerators: boolean); | ||||
|   end; | ||||
|  | ||||
| @@ -2775,6 +2777,9 @@ type | ||||
|     procedure OnBrowserDestroyed(const browser_view: ICefBrowserView; const browser: ICefBrowser); | ||||
|     procedure OnGetDelegateForPopupBrowserView(const browser_view: ICefBrowserView; const settings: TCefBrowserSettings; const client: ICefClient; is_devtools: boolean; var aResult : ICefBrowserViewDelegate); | ||||
|     procedure OnPopupBrowserViewCreated(const browser_view, popup_browser_view: ICefBrowserView; is_devtools: boolean; var aResult : boolean); | ||||
|     function  GetChromeToolbarType: TCefChromeToolbarType; | ||||
|  | ||||
|     property ChromeToolbarType: TCefChromeToolbarType read GetChromeToolbarType; | ||||
|   end; | ||||
|  | ||||
|   ICefBrowserViewDelegateEvents = interface(ICefViewDelegateEvents) | ||||
| @@ -2783,6 +2788,7 @@ type | ||||
|     procedure doOnBrowserDestroyed(const browser_view: ICefBrowserView; const browser: ICefBrowser); | ||||
|     procedure doOnGetDelegateForPopupBrowserView(const browser_view: ICefBrowserView; const settings: TCefBrowserSettings; const client: ICefClient; is_devtools: boolean; var aResult : ICefBrowserViewDelegate); | ||||
|     procedure doOnPopupBrowserViewCreated(const browser_view, popup_browser_view: ICefBrowserView; is_devtools: boolean; var aResult : boolean); | ||||
|     procedure doOnGetChromeToolbarType(var aChromeToolbarType: TCefChromeToolbarType); | ||||
|   end; | ||||
|  | ||||
|   // TCefButton | ||||
|   | ||||
| @@ -115,7 +115,7 @@ var | ||||
|   cef_image_create : function : PCefImage; cdecl; | ||||
|  | ||||
|   // /include/capi/cef_media_router_capi.h | ||||
|   cef_media_router_get_global : function : PCefMediaRouter; cdecl; | ||||
|   cef_media_router_get_global : function(callback: PCefCompletionCallback) : PCefMediaRouter; cdecl; | ||||
|  | ||||
|   // /include/capi/cef_menu_model_capi.h | ||||
|   cef_menu_model_create : function(delegate: PCefMenuModelDelegate): PCefMenuModel; cdecl; | ||||
|   | ||||
| @@ -115,7 +115,7 @@ end; | ||||
|  | ||||
| class function TCefMediaRouterRef.Global: ICefMediaRouter; | ||||
| begin | ||||
|   Result := UnWrap(cef_media_router_get_global()); | ||||
|   Result := UnWrap(cef_media_router_get_global(nil)); | ||||
| end; | ||||
|  | ||||
| end. | ||||
|   | ||||
| @@ -85,6 +85,7 @@ type | ||||
|       procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); override; | ||||
|       procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); override; | ||||
|       procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); override; | ||||
|       procedure OnWindowChanged(const view: ICefView; added: boolean); override; | ||||
|       procedure OnFocus(const view: ICefView); override; | ||||
|       procedure OnBlur(const view: ICefView); override; | ||||
|  | ||||
| @@ -247,6 +248,17 @@ begin | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomMenuButtonDelegate.OnWindowChanged(const view: ICefView; added: boolean); | ||||
| begin | ||||
|   try | ||||
|     if (FEvents <> nil) then | ||||
|       ICefMenuButtonDelegateEvents(FEvents).doOnWindowChanged(view, added); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomMenuButtonDelegate.OnWindowChanged', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomMenuButtonDelegate.OnFocus(const view: ICefView); | ||||
| begin | ||||
|   try | ||||
|   | ||||
| @@ -212,7 +212,7 @@ function SplitLongString(aSrcString : string) : string; | ||||
| function GetAbsoluteDirPath(const aSrcPath : string; var aRsltPath : string) : boolean; | ||||
| function CheckSubprocessPath(const aSubprocessPath : string; var aMissingFiles : string) : boolean; | ||||
| function CheckLocales(const aLocalesDirPath : string; var aMissingFiles : string; const aLocalesRequired : string = '') : boolean; | ||||
| function CheckResources(const aResourcesDirPath : string; var aMissingFiles : string; aCheckDevResources: boolean = True; aCheckExtensions: boolean = True) : boolean; | ||||
| function CheckResources(const aResourcesDirPath : string; var aMissingFiles : string) : boolean; | ||||
| function CheckDLLs(const aFrameworkDirPath : string; var aMissingFiles : string) : boolean; | ||||
| {$IFDEF MSWINDOWS} | ||||
| function CheckDLLVersion(const aDLLFile : ustring; aMajor, aMinor, aRelease, aBuild : uint16) : boolean; | ||||
| @@ -1141,7 +1141,7 @@ begin | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| function CheckResources(const aResourcesDirPath : string; var aMissingFiles : string; aCheckDevResources, aCheckExtensions: boolean) : boolean; | ||||
| function CheckResources(const aResourcesDirPath : string; var aMissingFiles : string) : boolean; | ||||
| var | ||||
|   TempDir    : string; | ||||
|   TempList   : TStringList; | ||||
| @@ -1156,12 +1156,9 @@ begin | ||||
|       TempList := TStringList.Create; | ||||
|       TempList.Add(TempDir + 'snapshot_blob.bin'); | ||||
|       TempList.Add(TempDir + 'v8_context_snapshot.bin'); | ||||
|       TempList.Add(TempDir + 'cef.pak'); | ||||
|       TempList.Add(TempDir + 'cef_100_percent.pak'); | ||||
|       TempList.Add(TempDir + 'cef_200_percent.pak'); | ||||
|  | ||||
|       if aCheckExtensions   then TempList.Add(TempDir + 'cef_extensions.pak'); | ||||
|       if aCheckDevResources then TempList.Add(TempDir + 'devtools_resources.pak'); | ||||
|       TempList.Add(TempDir + 'resources.pak'); | ||||
|       TempList.Add(TempDir + 'chrome_100_percent.pak'); | ||||
|       TempList.Add(TempDir + 'chrome_200_percent.pak'); | ||||
|  | ||||
|       if TempExists then | ||||
|         Result := CheckFilesExist(TempList, aMissingFiles) | ||||
|   | ||||
| @@ -78,6 +78,7 @@ type | ||||
|       procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); override; | ||||
|       procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); override; | ||||
|       procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); override; | ||||
|       procedure OnWindowChanged(const view: ICefView; added: boolean); override; | ||||
|       procedure OnFocus(const view: ICefView); override; | ||||
|       procedure OnBlur(const view: ICefView); override; | ||||
|  | ||||
| @@ -190,6 +191,17 @@ begin | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomPanelDelegate.OnWindowChanged(const view: ICefView; added: boolean); | ||||
| begin | ||||
|   try | ||||
|     if (FEvents <> nil) then | ||||
|       ICefPanelDelegateEvents(FEvents).doOnWindowChanged(view, added); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomPanelDelegate.OnWindowChanged', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomPanelDelegate.OnFocus(const view: ICefView); | ||||
| begin | ||||
|   try | ||||
|   | ||||
| @@ -59,7 +59,7 @@ type | ||||
|       procedure OnPrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult: boolean); virtual; | ||||
|       procedure OnPrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult: boolean); virtual; | ||||
|       procedure OnPrintReset(const browser: ICefBrowser); virtual; abstract; | ||||
|       procedure GetPDFPaperSize(deviceUnitsPerInch: Integer; var aResult: TCefSize); virtual; | ||||
|       procedure GetPDFPaperSize(const browser: ICefBrowser; deviceUnitsPerInch: Integer; var aResult: TCefSize); virtual; | ||||
|  | ||||
|       procedure RemoveReferences; virtual; abstract; | ||||
|  | ||||
| @@ -69,19 +69,19 @@ type | ||||
|  | ||||
|   TCustomPrintHandler = class(TCefPrintHandlerOwn) | ||||
|     protected | ||||
|       FCefApp : TCefApplicationCore; | ||||
|       FEvents : Pointer; | ||||
|  | ||||
|       procedure OnPrintStart(const browser: ICefBrowser); override; | ||||
|       procedure OnPrintSettings(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean); override; | ||||
|       procedure OnPrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback; var aResult: boolean); override; | ||||
|       procedure OnPrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult: boolean); override; | ||||
|       procedure OnPrintReset(const browser: ICefBrowser); override; | ||||
|       procedure GetPDFPaperSize(deviceUnitsPerInch: Integer; var aResult: TCefSize); override; | ||||
|       procedure GetPDFPaperSize(const browser: ICefBrowser; deviceUnitsPerInch: Integer; var aResult: TCefSize); override; | ||||
|  | ||||
|       procedure RemoveReferences; override; | ||||
|  | ||||
|     public | ||||
|       constructor Create(const aCefApp : TCefApplicationCore); reintroduce; virtual; | ||||
|       constructor Create(const events : IChromiumEvents); reintroduce; virtual; | ||||
|       destructor  Destroy; override; | ||||
|   end; | ||||
|  | ||||
| @@ -178,6 +178,7 @@ begin | ||||
| end; | ||||
|  | ||||
| function cef_print_handler_get_pdf_paper_size(self                  : PCefPrintHandler; | ||||
|                                               browser               : PCefBrowser; | ||||
|                                               device_units_per_inch : Integer): TCefSize; stdcall; | ||||
| var | ||||
|   TempObject : TObject; | ||||
| @@ -188,7 +189,9 @@ begin | ||||
|   TempSize.Height := 0; | ||||
|  | ||||
|   if (TempObject <> nil) and (TempObject is TCefPrintHandlerOwn) then | ||||
|     TCefPrintHandlerOwn(TempObject).GetPDFPaperSize(device_units_per_inch, TempSize); | ||||
|     TCefPrintHandlerOwn(TempObject).GetPDFPaperSize(TCefBrowserRef.UnWrap(browser), | ||||
|                                                     device_units_per_inch, | ||||
|                                                     TempSize); | ||||
|  | ||||
|   Result := TempSize; | ||||
| end; | ||||
| @@ -218,7 +221,7 @@ begin | ||||
|   aResult := False; | ||||
| end; | ||||
|  | ||||
| procedure TCefPrintHandlerOwn.GetPDFPaperSize(deviceUnitsPerInch: Integer; var aResult: TCefSize); | ||||
| procedure TCefPrintHandlerOwn.GetPDFPaperSize(const browser: ICefBrowser; deviceUnitsPerInch: Integer; var aResult: TCefSize); | ||||
| begin | ||||
|   aResult.Width  := 0; | ||||
|   aResult.Height := 0; | ||||
| @@ -227,11 +230,11 @@ end; | ||||
|  | ||||
| // TCustomPrintHandler | ||||
|  | ||||
| constructor TCustomPrintHandler.Create(const aCefApp : TCefApplicationCore); | ||||
| constructor TCustomPrintHandler.Create(const events : IChromiumEvents); | ||||
| begin | ||||
|   inherited Create; | ||||
|  | ||||
|   FCefApp := aCefApp; | ||||
|   FEvents := Pointer(events); | ||||
| end; | ||||
|  | ||||
| destructor TCustomPrintHandler.Destroy; | ||||
| @@ -243,29 +246,21 @@ end; | ||||
|  | ||||
| procedure TCustomPrintHandler.RemoveReferences; | ||||
| begin | ||||
|   FCefApp := nil; | ||||
|   FEvents := nil; | ||||
| end; | ||||
|  | ||||
| procedure TCustomPrintHandler.OnPrintStart(const browser : ICefBrowser); | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnPrintStart(browser); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomPrintHandler.OnPrintStart', e) then raise; | ||||
|   end; | ||||
|   if (FEvents <> nil) then | ||||
|     IChromiumEvents(FEvents).doOnPrintStart(browser); | ||||
| end; | ||||
|  | ||||
| procedure TCustomPrintHandler.OnPrintSettings(const browser     : ICefBrowser; | ||||
|                                               const settings    : ICefPrintSettings; | ||||
|                                                     getDefaults : boolean); | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnPrintSettings(browser, settings, getDefaults); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomPrintHandler.OnPrintSettings', e) then raise; | ||||
|   end; | ||||
|   if (FEvents <> nil) then | ||||
|     IChromiumEvents(FEvents).doOnPrintSettings(browser, settings, getDefaults); | ||||
| end; | ||||
|  | ||||
| procedure TCustomPrintHandler.OnPrintDialog(const browser      : ICefBrowser; | ||||
| @@ -273,12 +268,8 @@ procedure TCustomPrintHandler.OnPrintDialog(const browser      : ICefBrowser; | ||||
|                                             const callback     : ICefPrintDialogCallback; | ||||
|                                             var   aResult      : boolean); | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnPrintDialog(browser, hasSelection, callback, aResult); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomPrintHandler.OnPrintDialog', e) then raise; | ||||
|   end; | ||||
|   if (FEvents <> nil) then | ||||
|     IChromiumEvents(FEvents).doOnPrintDialog(browser, hasSelection, callback, aResult); | ||||
| end; | ||||
|  | ||||
| procedure TCustomPrintHandler.OnPrintJob(const browser      : ICefBrowser; | ||||
| @@ -287,33 +278,22 @@ procedure TCustomPrintHandler.OnPrintJob(const browser      : ICefBrowser; | ||||
|                                          const callback     : ICefPrintJobCallback; | ||||
|                                          var   aResult      : boolean); | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnPrintJob(browser, documentName, PDFFilePath, callback, aResult); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomPrintHandler.OnPrintJob', e) then raise; | ||||
|   end; | ||||
|   if (FEvents <> nil) then | ||||
|     IChromiumEvents(FEvents).doOnPrintJob(browser, documentName, PDFFilePath, callback, aResult); | ||||
| end; | ||||
|  | ||||
| procedure TCustomPrintHandler.OnPrintReset(const browser : ICefBrowser); | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnPrintReset(browser); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomPrintHandler.OnPrintReset', e) then raise; | ||||
|   end; | ||||
|   if (FEvents <> nil) then | ||||
|     IChromiumEvents(FEvents).doOnPrintReset(browser); | ||||
| end; | ||||
|  | ||||
| procedure TCustomPrintHandler.GetPDFPaperSize(    deviceUnitsPerInch : Integer; | ||||
|                                               var aResult            : TCefSize); | ||||
| procedure TCustomPrintHandler.GetPDFPaperSize(const browser            : ICefBrowser; | ||||
|                                                     deviceUnitsPerInch : Integer; | ||||
|                                               var   aResult            : TCefSize); | ||||
| begin | ||||
|   try | ||||
|     if (FCefApp <> nil) then FCefApp.Internal_OnGetPDFPaperSize(deviceUnitsPerInch, aResult); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomPrintHandler.GetPDFPaperSize', e) then raise; | ||||
|   end; | ||||
|   if (FEvents <> nil) then | ||||
|     IChromiumEvents(FEvents).doOnGetPDFPaperSize(browser, deviceUnitsPerInch, aResult); | ||||
| end; | ||||
|  | ||||
| end. | ||||
|   | ||||
| @@ -83,13 +83,13 @@ type | ||||
|       function  HasExtension(const extension_id: ustring): boolean; | ||||
|       function  GetExtensions(const extension_ids: TStringList): boolean; | ||||
|       function  GetExtension(const extension_id: ustring): ICefExtension; | ||||
|       function  GetMediaRouter: ICefMediaRouter; | ||||
|       function  GetMediaRouter(const callback: ICefCompletionCallback): ICefMediaRouter; | ||||
|  | ||||
|     public | ||||
|       class function UnWrap(data: Pointer): ICefRequestContext; | ||||
|       class function Global: ICefRequestContext; | ||||
|       class function New(const settings: PCefRequestContextSettings; const handler: ICefRequestContextHandler = nil): ICefRequestContext; overload; | ||||
|       class function New(const aCache, aAcceptLanguageList : ustring; aPersistSessionCookies, aPersistUserPreferences, aIgnoreCertificateErrors : boolean; const handler: ICefRequestContextHandler = nil): ICefRequestContext; overload; | ||||
|       class function New(const aCache, aAcceptLanguageList, aCookieableSchemesList : ustring; aCookieableSchemesExcludeDefaults, aPersistSessionCookies, aPersistUserPreferences, aIgnoreCertificateErrors : boolean; const handler: ICefRequestContextHandler = nil): ICefRequestContext; overload; | ||||
|       class function Shared(const other: ICefRequestContext; const handler: ICefRequestContextHandler): ICefRequestContext; | ||||
|   end; | ||||
|  | ||||
| @@ -173,21 +173,25 @@ begin | ||||
|   Result := UnWrap(cef_request_context_create_context(settings, CefGetData(handler))); | ||||
| end; | ||||
|  | ||||
| class function TCefRequestContextRef.New(const aCache                       : ustring; | ||||
|                                          const aAcceptLanguageList          : ustring; | ||||
|                                                aPersistSessionCookies       : boolean; | ||||
|                                                aPersistUserPreferences      : boolean; | ||||
|                                                aIgnoreCertificateErrors     : boolean; | ||||
|                                          const handler                      : ICefRequestContextHandler): ICefRequestContext; | ||||
| class function TCefRequestContextRef.New(const aCache                            : ustring; | ||||
|                                          const aAcceptLanguageList               : ustring; | ||||
|                                          const aCookieableSchemesList            : ustring; | ||||
|                                                aCookieableSchemesExcludeDefaults : boolean; | ||||
|                                                aPersistSessionCookies            : boolean; | ||||
|                                                aPersistUserPreferences           : boolean; | ||||
|                                                aIgnoreCertificateErrors          : boolean; | ||||
|                                          const handler                           : ICefRequestContextHandler): ICefRequestContext; | ||||
| var | ||||
|   TempSettings : TCefRequestContextSettings; | ||||
| begin | ||||
|   TempSettings.size                           := SizeOf(TCefRequestContextSettings); | ||||
|   TempSettings.cache_path                     := CefString(aCache); | ||||
|   TempSettings.persist_session_cookies        := Ord(aPersistSessionCookies); | ||||
|   TempSettings.persist_user_preferences       := Ord(aPersistUserPreferences); | ||||
|   TempSettings.ignore_certificate_errors      := Ord(aIgnoreCertificateErrors); | ||||
|   TempSettings.accept_language_list           := CefString(aAcceptLanguageList); | ||||
|   TempSettings.size                                 := SizeOf(TCefRequestContextSettings); | ||||
|   TempSettings.cache_path                           := CefString(aCache); | ||||
|   TempSettings.persist_session_cookies              := Ord(aPersistSessionCookies); | ||||
|   TempSettings.persist_user_preferences             := Ord(aPersistUserPreferences); | ||||
|   TempSettings.ignore_certificate_errors            := Ord(aIgnoreCertificateErrors); | ||||
|   TempSettings.accept_language_list                 := CefString(aAcceptLanguageList); | ||||
|   TempSettings.cookieable_schemes_list              := CefString(aCookieableSchemesList); | ||||
|   TempSettings.cookieable_schemes_exclude_defaults  := Ord(aCookieableSchemesExcludeDefaults); | ||||
|  | ||||
|   Result := UnWrap(cef_request_context_create_context(@TempSettings, CefGetData(handler))); | ||||
| end; | ||||
| @@ -309,9 +313,9 @@ begin | ||||
|   Result := TCefExtensionRef.UnWrap(PCefRequestContext(FData)^.get_extension(PCefRequestContext(FData), @TempID)); | ||||
| end; | ||||
|  | ||||
| function TCefRequestContextRef.GetMediaRouter: ICefMediaRouter; | ||||
| function TCefRequestContextRef.GetMediaRouter(const callback: ICefCompletionCallback): ICefMediaRouter; | ||||
| begin | ||||
|   Result := TCefMediaRouterRef.UnWrap(PCefRequestContext(FData)^.get_media_router(PCefRequestContext(FData))); | ||||
|   Result := TCefMediaRouterRef.UnWrap(PCefRequestContext(FData)^.get_media_router(PCefRequestContext(FData), CefGetData(callback))); | ||||
| end; | ||||
|  | ||||
| function TCefRequestContextRef.RegisterSchemeHandlerFactory(const schemeName : ustring; | ||||
|   | ||||
| @@ -88,6 +88,7 @@ type | ||||
|       procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); override; | ||||
|       procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); override; | ||||
|       procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); override; | ||||
|       procedure OnWindowChanged(const view: ICefView; added: boolean); override; | ||||
|       procedure OnFocus(const view: ICefView); override; | ||||
|       procedure OnBlur(const view: ICefView); override; | ||||
|  | ||||
| @@ -267,6 +268,17 @@ begin | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomTextfieldDelegate.OnWindowChanged(const view: ICefView; added: boolean); | ||||
| begin | ||||
|   try | ||||
|     if (FEvents <> nil) then | ||||
|       ICefTextfieldDelegateEvents(FEvents).doOnWindowChanged(view, added); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomTextfieldDelegate.OnWindowChanged', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomTextfieldDelegate.OnFocus(const view: ICefView); | ||||
| begin | ||||
|   try | ||||
|   | ||||
| @@ -322,6 +322,7 @@ type | ||||
|   TCefMediaRouterCreateResult      = Integer;     // /include/internal/cef_types.h (cef_media_route_create_result_t) | ||||
|   TCefCookiePriority               = Integer;     // /include/internal/cef_types.h (cef_cookie_priority_t) | ||||
|   TCefTextFieldCommands            = Integer;     // /include/internal/cef_types.h (cef_text_field_commands_t) | ||||
|   TCefChromeToolbarType            = Integer;     // /include/internal/cef_types.h (cef_chrome_toolbar_type_t) | ||||
|  | ||||
|  | ||||
| {$IFDEF FPC} | ||||
| @@ -1235,6 +1236,8 @@ type | ||||
|     ignore_certificate_errors                : Integer; | ||||
|     background_color                         : TCefColor; | ||||
|     accept_language_list                     : TCefString; | ||||
|     cookieable_schemes_list                  : TCefString; | ||||
|     cookieable_schemes_exclude_defaults      : integer; | ||||
|     application_client_id_for_file_scanning  : TCefString; | ||||
|   end; | ||||
|  | ||||
| @@ -1341,7 +1344,6 @@ type | ||||
|     plugins                         : TCefState; | ||||
|     universal_access_from_file_urls : TCefState; | ||||
|     file_access_from_file_urls      : TCefState; | ||||
|     web_security                    : TCefState; | ||||
|     image_loading                   : TCefState; | ||||
|     image_shrink_standalone_to_fit  : TCefState; | ||||
|     text_area_resize                : TCefState; | ||||
| @@ -1366,12 +1368,14 @@ type | ||||
|  | ||||
|   // /include/internal/cef_types.h (cef_request_context_settings_t) | ||||
|   TCefRequestContextSettings = record | ||||
|     size                           : NativeUInt; | ||||
|     cache_path                     : TCefString; | ||||
|     persist_session_cookies        : Integer; | ||||
|     persist_user_preferences       : Integer; | ||||
|     ignore_certificate_errors      : Integer; | ||||
|     accept_language_list           : TCefString; | ||||
|     size                                     : NativeUInt; | ||||
|     cache_path                               : TCefString; | ||||
|     persist_session_cookies                  : Integer; | ||||
|     persist_user_preferences                 : Integer; | ||||
|     ignore_certificate_errors                : Integer; | ||||
|     accept_language_list                     : TCefString; | ||||
|     cookieable_schemes_list                  : TCefString; | ||||
|     cookieable_schemes_exclude_defaults      : integer; | ||||
|   end; | ||||
|  | ||||
|   // /include/internal/cef_types.h (cef_cookie_t) | ||||
| @@ -2136,7 +2140,7 @@ type | ||||
|     has_extension                   : function(self: PCefRequestContext; const extension_id: PCefString): Integer; stdcall; | ||||
|     get_extensions                  : function(self: PCefRequestContext; extension_ids: TCefStringList): Integer; stdcall; | ||||
|     get_extension                   : function(self: PCefRequestContext; const extension_id: PCefString): PCefExtension; stdcall; | ||||
|     get_media_router                : function(self: PCefRequestContext): PCefMediaRouter; stdcall; | ||||
|     get_media_router                : function(self: PCefRequestContext; callback: PCefCompletionCallback): PCefMediaRouter; stdcall; | ||||
|   end; | ||||
|  | ||||
|   // /include/capi/cef_request_context_handler_capi.h (cef_request_context_handler_t) | ||||
| @@ -2156,7 +2160,6 @@ type | ||||
|   // /include/capi/cef_cookie_capi.h (cef_cookie_manager_t) | ||||
|   TCefCookieManager = record | ||||
|     base                  : TCefBaseRefCounted; | ||||
|     set_supported_schemes : procedure(self: PCefCookieManager; schemes: TCefStringList; include_defaults: Integer; callback: PCefCompletionCallback); stdcall; | ||||
|     visit_all_cookies     : function(self: PCefCookieManager; visitor: PCefCookieVisitor): Integer; stdcall; | ||||
|     visit_url_cookies     : function(self: PCefCookieManager; const url: PCefString; includeHttpOnly: Integer; visitor: PCefCookieVisitor): Integer; stdcall; | ||||
|     set_cookie            : function(self: PCefCookieManager; const url: PCefString; const cookie: PCefCookie; callback: PCefSetCookieCallback): Integer; stdcall; | ||||
| @@ -2308,7 +2311,7 @@ type | ||||
|     on_print_dialog     : function(self: PCefPrintHandler; browser: PCefBrowser; has_selection: Integer; callback: PCefPrintDialogCallback): Integer; stdcall; | ||||
|     on_print_job        : function(self: PCefPrintHandler; browser: PCefBrowser; const document_name, pdf_file_path: PCefString; callback: PCefPrintJobCallback): Integer; stdcall; | ||||
|     on_print_reset      : procedure(self: PCefPrintHandler; browser: PCefBrowser); stdcall; | ||||
|     get_pdf_paper_size  : function(self: PCefPrintHandler; device_units_per_inch: Integer): TCefSize; stdcall; | ||||
|     get_pdf_paper_size  : function(self: PCefPrintHandler; browser: PCefBrowser; device_units_per_inch: Integer): TCefSize; stdcall; | ||||
|   end; | ||||
|  | ||||
|   // /include/capi/cef_drag_data_capi.h (cef_drag_data_t) | ||||
| @@ -2632,7 +2635,6 @@ type | ||||
|     is_spell_check_enabled      : function(self: PCefContextMenuParams): Integer; stdcall; | ||||
|     get_edit_state_flags        : function(self: PCefContextMenuParams): TCefContextMenuEditStateFlags; stdcall; | ||||
|     is_custom_menu              : function(self: PCefContextMenuParams): Integer; stdcall; | ||||
|     is_pepper_menu              : function(self: PCefContextMenuParams): Integer; stdcall; | ||||
|   end; | ||||
|  | ||||
|   // /include/capi/cef_download_item_capi.h (cef_download_item_t) | ||||
| @@ -2891,6 +2893,7 @@ type | ||||
|     get_keyboard_handler        : function(self: PCefClient): PCefKeyboardHandler; stdcall; | ||||
|     get_life_span_handler       : function(self: PCefClient): PCefLifeSpanHandler; stdcall; | ||||
|     get_load_handler            : function(self: PCefClient): PCefLoadHandler; stdcall; | ||||
|     get_print_handler           : function(self: PCefClient): PCefPrintHandler; stdcall; | ||||
|     get_render_handler          : function(self: PCefClient): PCefRenderHandler; stdcall; | ||||
|     get_request_handler         : function(self: PCefClient): PCefRequestHandler; stdcall; | ||||
|     on_process_message_received : function(self: PCefClient; browser: PCefBrowser; frame: PCefFrame; source_process: TCefProcessId; message_: PCefProcessMessage): Integer; stdcall; | ||||
| @@ -2997,10 +3000,8 @@ type | ||||
|   // /include/capi/cef_browser_process_handler_capi.h (cef_browser_process_handler_t) | ||||
|   TCefBrowserProcessHandler = record | ||||
|     base                              : TCefBaseRefCounted; | ||||
|     get_cookieable_schemes            : procedure(self: PCefBrowserProcessHandler; schemes: TCefStringList; include_defaults: PInteger); stdcall; | ||||
|     on_context_initialized            : procedure(self: PCefBrowserProcessHandler); stdcall; | ||||
|     on_before_child_process_launch    : procedure(self: PCefBrowserProcessHandler; command_line: PCefCommandLine); stdcall; | ||||
|     get_print_handler                 : function(self: PCefBrowserProcessHandler): PCefPrintHandler; stdcall; | ||||
|     on_schedule_message_pump_work     : procedure(self: PCefBrowserProcessHandler; delay_ms: Int64); stdcall; | ||||
|     get_default_client                : function(self: PCefBrowserProcessHandler): PCefClient; stdcall; | ||||
|   end; | ||||
| @@ -3179,6 +3180,7 @@ type | ||||
|     get_height_for_width        : function(self: PCefViewDelegate; view: PCefView; width: Integer): Integer; stdcall; | ||||
|     on_parent_view_changed      : procedure(self: PCefViewDelegate; view: PCefView; added: Integer; parent: PCefView); stdcall; | ||||
|     on_child_view_changed       : procedure(self: PCefViewDelegate; view: PCefView; added: Integer; child: PCefView); stdcall; | ||||
|     on_window_changed           : procedure(self: PCefViewDelegate; view: PCefView; added: Integer); stdcall; | ||||
|     on_focus                    : procedure(self: PCefViewDelegate; view: PCefView); stdcall; | ||||
|     on_blur                     : procedure(self: PCefViewDelegate; view: PCefView); stdcall; | ||||
|   end; | ||||
| @@ -3264,6 +3266,7 @@ type | ||||
|   TCefBrowserView = record | ||||
|     base                            : TCefView; | ||||
|     get_browser                     : function(self: PCefBrowserView): PCefBrowser; stdcall; | ||||
|     get_chrome_toolbar              : function(self: PCefBrowserView): PCefView; stdcall; | ||||
|     set_prefer_accelerators         : procedure(self: PCefBrowserView; prefer_accelerators: Integer); stdcall; | ||||
|   end; | ||||
|  | ||||
| @@ -3274,6 +3277,7 @@ type | ||||
|     on_browser_destroyed                : procedure(self: PCefBrowserViewDelegate; browser_view: PCefBrowserView; browser: PCefBrowser); stdcall; | ||||
|     get_delegate_for_popup_browser_view : function(self: PCefBrowserViewDelegate; browser_view: PCefBrowserView; const settings: PCefBrowserSettings; client: PCefClient; is_devtools: Integer): PCefBrowserViewDelegate; stdcall; | ||||
|     on_popup_browser_view_created       : function(self: PCefBrowserViewDelegate; browser_view, popup_browser_view: PCefBrowserView; is_devtools: Integer): Integer; stdcall; | ||||
|     get_chrome_toolbar_type             : function(self: PCefBrowserViewDelegate): TCefChromeToolbarType; stdcall; | ||||
|   end; | ||||
|  | ||||
|   // /include/capi/views/cef_button_capi.h (cef_button_t) | ||||
|   | ||||
| @@ -69,6 +69,7 @@ type | ||||
|       FOnGetHeightForWidth       : TOnGetHeightForWidthEvent; | ||||
|       FOnParentViewChanged       : TOnParentViewChangedEvent; | ||||
|       FOnChildViewChanged        : TOnChildViewChangedEvent; | ||||
|       FOnWindowChanged           : TOnWindowChangedEvent; | ||||
|       FOnFocus                   : TOnFocusEvent; | ||||
|       FOnBlur                    : TOnBlurEvent; | ||||
|  | ||||
| @@ -124,6 +125,7 @@ type | ||||
|       procedure doOnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); virtual; | ||||
|       procedure doOnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); virtual; | ||||
|       procedure doOnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); virtual; | ||||
|       procedure doOnWindowChanged(const view: ICefView; added: boolean); virtual; | ||||
|       procedure doOnFocus(const view: ICefView); virtual; | ||||
|       procedure doOnBlur(const view: ICefView); virtual; | ||||
|       procedure doCreateCustomView; virtual; | ||||
| @@ -183,6 +185,7 @@ type | ||||
|       property OnGetHeightForWidth            : TOnGetHeightForWidthEvent  read FOnGetHeightForWidth           write FOnGetHeightForWidth; | ||||
|       property OnParentViewChanged            : TOnParentViewChangedEvent  read FOnParentViewChanged           write FOnParentViewChanged; | ||||
|       property OnChildViewChanged             : TOnChildViewChangedEvent   read FOnChildViewChanged            write FOnChildViewChanged; | ||||
|       property OnWindowChanged                : TOnWindowChangedEvent      read FOnWindowChanged               write FOnWindowChanged; | ||||
|       property OnFocus                        : TOnFocusEvent              read FOnFocus                       write FOnFocus; | ||||
|       property OnBlur                         : TOnBlurEvent               read FOnBlur                        write FOnBlur; | ||||
|   end; | ||||
| @@ -241,6 +244,7 @@ begin | ||||
|   FOnGetHeightForWidth := nil; | ||||
|   FOnParentViewChanged := nil; | ||||
|   FOnChildViewChanged  := nil; | ||||
|   FOnWindowChanged     := nil; | ||||
|   FOnFocus             := nil; | ||||
|   FOnBlur              := nil; | ||||
| end; | ||||
| @@ -694,6 +698,13 @@ begin | ||||
|     FOnChildViewChanged(self, view, added, child); | ||||
| end; | ||||
|  | ||||
| procedure TCEFViewComponent.doOnWindowChanged(const view  : ICefView; | ||||
|                                                     added : boolean); | ||||
| begin | ||||
|   if assigned(FOnWindowChanged) then | ||||
|     FOnWindowChanged(self, view, added); | ||||
| end; | ||||
|  | ||||
| procedure TCEFViewComponent.doOnFocus(const view: ICefView); | ||||
| begin | ||||
|   if assigned(FOnFocus) then | ||||
|   | ||||
| @@ -65,6 +65,7 @@ type | ||||
|       procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); | ||||
|       procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); | ||||
|       procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); | ||||
|       procedure OnWindowChanged(const view: ICefView; added: boolean); | ||||
|       procedure OnFocus(const view: ICefView); | ||||
|       procedure OnBlur(const view: ICefView); | ||||
|  | ||||
| @@ -80,6 +81,7 @@ type | ||||
|       procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); virtual; | ||||
|       procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); virtual; | ||||
|       procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); virtual; | ||||
|       procedure OnWindowChanged(const view: ICefView; added: boolean); virtual; | ||||
|       procedure OnFocus(const view: ICefView); virtual; | ||||
|       procedure OnBlur(const view: ICefView); virtual; | ||||
|  | ||||
| @@ -98,6 +100,7 @@ type | ||||
|       procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); override; | ||||
|       procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); override; | ||||
|       procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); override; | ||||
|       procedure OnWindowChanged(const view: ICefView; added: boolean); override; | ||||
|       procedure OnFocus(const view: ICefView); override; | ||||
|       procedure OnBlur(const view: ICefView); override; | ||||
|  | ||||
| @@ -157,6 +160,13 @@ begin | ||||
|                                                  CefGetData(child)); | ||||
| end; | ||||
|  | ||||
| procedure TCefViewDelegateRef.OnWindowChanged(const view: ICefView; added: boolean); | ||||
| begin | ||||
|   PCefViewDelegate(FData)^.on_window_changed(PCefViewDelegate(FData), | ||||
|                                              CefGetData(view), | ||||
|                                              ord(added)); | ||||
| end; | ||||
|  | ||||
| procedure TCefViewDelegateRef.OnFocus(const view: ICefView); | ||||
| begin | ||||
|   PCefViewDelegate(FData)^.on_focus(PCefViewDelegate(FData), | ||||
| @@ -271,6 +281,17 @@ begin | ||||
|                                                        TCefViewRef.UnWrap(child)); | ||||
| end; | ||||
|  | ||||
| procedure cef_view_delegate_on_window_changed(self: PCefViewDelegate; view: PCefView; added: Integer); stdcall; | ||||
| var | ||||
|   TempObject : TObject; | ||||
| begin | ||||
|   TempObject := CefGetObject(self); | ||||
|  | ||||
|   if (TempObject <> nil) and (TempObject is TCefViewDelegateOwn) then | ||||
|     TCefViewDelegateOwn(TempObject).OnWindowChanged(TCefViewRef.UnWrap(view), | ||||
|                                                     added <> 0); | ||||
| end; | ||||
|  | ||||
| procedure cef_view_delegate_on_focus(self: PCefViewDelegate; view: PCefView); stdcall; | ||||
| var | ||||
|   TempObject : TObject; | ||||
| @@ -308,6 +329,7 @@ begin | ||||
|       get_height_for_width    := {$IFDEF FPC}@{$ENDIF}cef_view_delegate_get_height_for_width; | ||||
|       on_parent_view_changed  := {$IFDEF FPC}@{$ENDIF}cef_view_delegate_on_parent_view_changed; | ||||
|       on_child_view_changed   := {$IFDEF FPC}@{$ENDIF}cef_view_delegate_on_child_view_changed; | ||||
|       on_window_changed       := {$IFDEF FPC}@{$ENDIF}cef_view_delegate_on_window_changed; | ||||
|       on_focus                := {$IFDEF FPC}@{$ENDIF}cef_view_delegate_on_focus; | ||||
|       on_blur                 := {$IFDEF FPC}@{$ENDIF}cef_view_delegate_on_blur; | ||||
|     end; | ||||
| @@ -343,6 +365,11 @@ begin | ||||
|   // | ||||
| end; | ||||
|  | ||||
| procedure TCefViewDelegateOwn.OnWindowChanged(const view: ICefView; added: boolean); | ||||
| begin | ||||
|   // | ||||
| end; | ||||
|  | ||||
| procedure TCefViewDelegateOwn.OnFocus(const view: ICefView); | ||||
| begin | ||||
|   // | ||||
| @@ -438,6 +465,17 @@ begin | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomViewDelegate.OnWindowChanged(const view: ICefView; added: boolean); | ||||
| begin | ||||
|   try | ||||
|     if (FEvents <> nil) then | ||||
|       ICefViewDelegateEvents(FEvents).doOnWindowChanged(view, added); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomViewDelegate.OnWindowChanged', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomViewDelegate.OnFocus(const view: ICefView); | ||||
| begin | ||||
|   try | ||||
|   | ||||
| @@ -64,6 +64,7 @@ type | ||||
|   TOnGetHeightForWidthEvent = procedure(const Sender: TObject; const view: ICefView; width: Integer; var aResult: Integer) of object; | ||||
|   TOnParentViewChangedEvent = procedure(const Sender: TObject; const view: ICefView; added: boolean; const parent: ICefView) of object; | ||||
|   TOnChildViewChangedEvent  = procedure(const Sender: TObject; const view: ICefView; added: boolean; const child: ICefView) of object; | ||||
|   TOnWindowChangedEvent     = procedure(const Sender: TObject; const view: ICefView; added: boolean) of object; | ||||
|   TOnFocusEvent             = procedure(const Sender: TObject; const view: ICefView) of object; | ||||
|   TOnBlurEvent              = procedure(const Sender: TObject; const view: ICefView) of object; | ||||
|  | ||||
| @@ -78,6 +79,7 @@ type | ||||
|   TOnBrowserDestroyedEvent               = procedure(const Sender: TObject; const browser_view: ICefBrowserView; const browser: ICefBrowser) of object; | ||||
|   TOnGetDelegateForPopupBrowserViewEvent = procedure(const Sender: TObject; const browser_view: ICefBrowserView; const settings: TCefBrowserSettings; const client: ICefClient; is_devtools: boolean; var aResult : ICefBrowserViewDelegate) of object; | ||||
|   TOnPopupBrowserViewCreatedEvent        = procedure(const Sender: TObject; const browser_view, popup_browser_view: ICefBrowserView; is_devtools: boolean; var aResult : boolean) of object; | ||||
|   TOnGetChromeToolbarTypeEvent           = procedure(const Sender: TObject; var aChromeToolbarType: TCefChromeToolbarType) of object; | ||||
|  | ||||
|   // ICefButtonDelegate | ||||
|   TOnButtonPressedEvent      = procedure(const Sender: TObject; const button: ICefButton) of object; | ||||
|   | ||||
| @@ -106,6 +106,7 @@ type | ||||
|       procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); override; | ||||
|       procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); override; | ||||
|       procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); override; | ||||
|       procedure OnWindowChanged(const view: ICefView; added: boolean); override; | ||||
|       procedure OnFocus(const view: ICefView); override; | ||||
|       procedure OnBlur(const view: ICefView); override; | ||||
|  | ||||
| @@ -544,6 +545,17 @@ begin | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomWindowDelegate.OnWindowChanged(const view: ICefView; added: boolean); | ||||
| begin | ||||
|   try | ||||
|     if (FEvents <> nil) then | ||||
|       ICefWindowDelegateEvents(FEvents).doOnWindowChanged(view, added); | ||||
|   except | ||||
|     on e : exception do | ||||
|       if CustomExceptionHandler('TCustomWindowDelegate.OnWindowChanged', e) then raise; | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| procedure TCustomWindowDelegate.OnFocus(const view: ICefView); | ||||
| begin | ||||
|   try | ||||
|   | ||||
| @@ -2,9 +2,9 @@ | ||||
|   "UpdateLazPackages" : [ | ||||
|     { | ||||
|       "ForceNotify" : true, | ||||
|       "InternalVersion" : 274, | ||||
|       "InternalVersion" : 275, | ||||
|       "Name" : "cef4delphi_lazarus.lpk", | ||||
|       "Version" : "89.0.18.0" | ||||
|       "Version" : "90.5.4.0" | ||||
|     } | ||||
|   ], | ||||
|   "UpdatePackageData" : { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user