From 701406f0e8ee7c4bdcb3629f12f57975311ce719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salvador=20D=C3=ADaz=20Fau?= Date: Wed, 18 Aug 2021 15:55:54 +0200 Subject: [PATCH] Update to CEF 92.0.26 Added the SchemeRegistrationBrowser_subprocess demo for Lazarus in Windows Added a Google Maps example in the test.html file used by all the SchemeRegistrationBrowser demos. Removed obsolete Flash file. --- README.md | 16 +- bin/helloworld.swf | Bin 8033 -> 0 bytes bin/test.html | 23 +- .../00-Delete.bat | 2 + .../SchemeRegistrationBrowser.lpi | 95 ++++ .../SchemeRegistrationBrowser.lpr | 67 +++ .../SchemeRegistrationBrowser_sp.lpi | 88 ++++ .../SchemeRegistrationBrowser_sp.lpr | 67 +++ .../cef.inc | 468 ++++++++++++++++++ .../uHelloScheme.pas | 210 ++++++++ .../uSchemeRegistrationBrowser.lfm | 82 +++ .../uSchemeRegistrationBrowser.pas | 297 +++++++++++ packages/cef4delphi_lazarus.lpk | 2 +- source/uCEFApplicationCore.pas | 4 +- update_CEF4Delphi.json | 4 +- 15 files changed, 1406 insertions(+), 19 deletions(-) delete mode 100644 bin/helloworld.swf create mode 100644 demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/00-Delete.bat create mode 100644 demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser.lpi create mode 100644 demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser.lpr create mode 100644 demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser_sp.lpi create mode 100644 demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser_sp.lpr create mode 100644 demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/cef.inc create mode 100644 demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uHelloScheme.pas create mode 100644 demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uSchemeRegistrationBrowser.lfm create mode 100644 demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uSchemeRegistrationBrowser.pas diff --git a/README.md b/README.md index 439f7697..6eac0384 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,16 @@ 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 92.0.25 which includes Chromium 92.0.4515.131. +CEF4Delphi uses CEF 92.0.26 which includes Chromium 92.0.4515.159. The CEF binaries used by CEF4Delphi are available for download at Spotify : -* [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_windows32.tar.bz2) -* [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_windows64.tar.bz2) -* [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_linux32.tar.bz2) -* [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_linux64.tar.bz2) -* [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_linuxarm.tar.bz2) -* [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_linuxarm64.tar.bz2) -* [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_macosx64.tar.bz2) +* [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_windows32.tar.bz2) +* [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_windows64.tar.bz2) +* [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_linux32.tar.bz2) +* [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_linux64.tar.bz2) +* [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_linuxarm.tar.bz2) +* [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_linuxarm64.tar.bz2) +* [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_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. diff --git a/bin/helloworld.swf b/bin/helloworld.swf deleted file mode 100644 index f4e48dc5bc7d93dda7ce9c6400e4878c2643a28c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8033 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 TmgWGpA07&(zR^=Z0>FO&%NARm diff --git a/bin/test.html b/bin/test.html index 6705c327..f0838a28 100644 --- a/bin/test.html +++ b/bin/test.html @@ -6,16 +6,27 @@


Non existing local image

-


Remote image

- -


-Local SWF file.
-You need to install the Adobe Flash PPAPI plugin to view the SWF file.

- +


Remote image


Bigger image

+ +

This is the Google Maps example.
Edit this HTML file to insert your Google Maps API key.

+ +
+ + + + diff --git a/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/00-Delete.bat b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/00-Delete.bat new file mode 100644 index 00000000..0b5ba5c8 --- /dev/null +++ b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/00-Delete.bat @@ -0,0 +1,2 @@ +rmdir /S /Q lib +rmdir /S /Q backup diff --git a/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser.lpi b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser.lpi new file mode 100644 index 00000000..5c27335c --- /dev/null +++ b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser.lpi @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + <UseAppBundle Value="False"/> + <ResourceType Value="res"/> + </General> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + <Modes Count="0"/> + </RunParams> + <RequiredPackages Count="2"> + <Item1> + <PackageName Value="CEF4Delphi_Lazarus"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + </RequiredPackages> + <Units Count="3"> + <Unit0> + <Filename Value="SchemeRegistrationBrowser.lpr"/> + <IsPartOfProject Value="True"/> + </Unit0> + <Unit1> + <Filename Value="uSchemeRegistrationBrowser.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="SchemeRegistrationBrowserFrm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + </Unit1> + <Unit2> + <Filename Value="uHelloScheme.pas"/> + <IsPartOfProject Value="True"/> + </Unit2> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="..\..\..\bin\SchemeRegistrationBrowser"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <SyntaxMode Value="Delphi"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser.lpr b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser.lpr new file mode 100644 index 00000000..a9890d0d --- /dev/null +++ b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser.lpr @@ -0,0 +1,67 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest <hgourvest@gmail.com> + * Web site : http://www.progdigy.com + * Repository : http://code.google.com/p/delphichromiumembedded/ + * Group : http://groups.google.com/group/delphichromiumembedded + * + * Embarcadero Technologies, Inc is not permitted to use or redistribute + * this source code without explicit permission. + * + *) + +program SchemeRegistrationBrowser; + +{$I cef.inc} + +uses + Forms, Interfaces, + Windows, + uCEFApplication, + uSchemeRegistrationBrowser in 'uSchemeRegistrationBrowser.pas' {SchemeRegistrationBrowserFrm}, + uHelloScheme in 'uHelloScheme.pas'; + +//{$R *.res} + +{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} + +begin + // GlobalCEFApp creation and initialization moved to a different unit to fix the memory leak described in the bug #89 + // https://github.com/salvadordf/CEF4Delphi/issues/89 + CreateGlobalCEFApp; + + if GlobalCEFApp.StartMainProcess then + begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TSchemeRegistrationBrowserFrm, SchemeRegistrationBrowserFrm); + Application.Run; + end; + + DestroyGlobalCEFApp; +end. diff --git a/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser_sp.lpi b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser_sp.lpi new file mode 100644 index 00000000..e084a823 --- /dev/null +++ b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser_sp.lpi @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <General> + <Flags> + <MainUnitHasUsesSectionForAllUnits Value="False"/> + <MainUnitHasCreateFormStatements Value="False"/> + <MainUnitHasTitleStatement Value="False"/> + <MainUnitHasScaledStatement Value="False"/> + </Flags> + <SessionStorage Value="InProjectDir"/> + <MainUnit Value="0"/> + <Title Value="SchemeRegistrationBrowser_sp"/> + <UseAppBundle Value="False"/> + <ResourceType Value="res"/> + </General> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + <Modes Count="0"/> + </RunParams> + <RequiredPackages Count="2"> + <Item1> + <PackageName Value="CEF4Delphi_Lazarus"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + </RequiredPackages> + <Units Count="2"> + <Unit0> + <Filename Value="SchemeRegistrationBrowser_sp.lpr"/> + <IsPartOfProject Value="True"/> + </Unit0> + <Unit1> + <Filename Value="uCEFLoader.pas"/> + <IsPartOfProject Value="True"/> + </Unit1> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="..\..\..\bin\SchemeRegistrationBrowser_sp"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <SyntaxMode Value="Delphi"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser_sp.lpr b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser_sp.lpr new file mode 100644 index 00000000..587df569 --- /dev/null +++ b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/SchemeRegistrationBrowser_sp.lpr @@ -0,0 +1,67 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest <hgourvest@gmail.com> + * Web site : http://www.progdigy.com + * Repository : http://code.google.com/p/delphichromiumembedded/ + * Group : http://groups.google.com/group/delphichromiumembedded + * + * Embarcadero Technologies, Inc is not permitted to use or redistribute + * this source code without explicit permission. + * + *) + +program SchemeRegistrationBrowser_sp; + +{$MODE Delphi} + +{$I cef.inc} + +uses + LCLIntf, LCLType, LMessages, Forms, Interfaces, + uCEFApplicationCore, uCEFConstants, uCEFSchemeRegistrar; + +// CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes +// to use up to 3GB of RAM. +{$SetPEFlags $20} + +// It's necessary to register the custom scheme in all CEF subprocesses +procedure GlobalCEFApp_OnRegCustomSchemes(const registrar: TCefSchemeRegistrarRef); +begin + registrar.AddCustomScheme('hello', CEF_SCHEME_OPTION_STANDARD or CEF_SCHEME_OPTION_LOCAL); +end; + +begin + GlobalCEFApp := TCefApplicationCore.Create; + GlobalCEFApp.OnRegCustomSchemes := GlobalCEFApp_OnRegCustomSchemes; + GlobalCEFApp.LogFile := 'debug.log'; + GlobalCEFApp.LogSeverity := LOGSEVERITY_INFO; + GlobalCEFApp.StartSubProcess; + GlobalCEFApp.Free; + GlobalCEFApp := nil; +end. + diff --git a/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/cef.inc b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/cef.inc new file mode 100644 index 00000000..c8ce967e --- /dev/null +++ b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/cef.inc @@ -0,0 +1,468 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2017 Salvador Diaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest <hgourvest@gmail.com> + * Web site : http://www.progdigy.com + * Repository : http://code.google.com/p/delphichromiumembedded/ + * Group : http://groups.google.com/group/delphichromiumembedded + * + * Embarcadero Technologies, Inc is not permitted to use or redistribute + * this source code without explicit permission. + * + *) + + // The complete list of compiler versions is here : + // http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions + +{$DEFINE DELPHI_VERSION_UNKNOW} + +// Delphi 5 +{$IFDEF VER130} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} +{$ENDIF} + +// Delphi 6 +{$IFDEF VER140} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} +{$ENDIF} + +// Delphi 7 +{$IFDEF VER150} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} +{$ENDIF} + +// Delphi 8 +{$IFDEF VER160} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} +{$ENDIF} + +// Delphi 2005 +{$IFDEF VER170} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} +{$ENDIF} + +{$IFDEF VER180} + {$UNDEF DELPHI_VERSION_UNKNOW} + // Delphi 2007 + {$IFDEF VER185} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + // Delphi 2006 + {$ELSE} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$ENDIF} +{$ENDIF} + +// Delphi 2009 +{$IFDEF VER200} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} +{$ENDIF} + +//Delphi 2010 +{$IFDEF VER210} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} +{$ENDIF} + +// Delphi XE +{$IFDEF VER220} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} +{$ENDIF} + +// Delphi XE2 (First FireMonkey and 64bit compiler) +{$IFDEF VER230} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} +{$ENDIF} + +// Delphi XE3 +{$IFDEF VER240} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} +{$ENDIF} + +// Delphi XE4 +{$IFDEF VER250} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} +{$ENDIF} + +// Delphi XE5 +{$IFDEF VER260} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} +{$ENDIF} + +// Delphi XE6 +{$IFDEF VER270} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} +{$ENDIF} + +// Delphi XE7 +{$IFDEF VER280} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} +{$ENDIF} + +// Delphi XE8 +{$IFDEF VER290} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} +{$ENDIF VER290} + +// Rad Studio 10 - Delphi Seattle +{$IFDEF VER300} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} +{$ENDIF} + +// Rad Studio 10.1 - Delphi Berlin +{$IFDEF VER310} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} +{$ENDIF} + +// Rad Studio 10.2 - Delphi Tokyo +{$IFDEF VER320} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} +{$ENDIF} + +// Rad Studio 10.3 - Delphi Rio +{$IFDEF VER330} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} + {$DEFINE DELPHI26_UP} +{$ENDIF} + +// Rad Studio 10.4 - Delphi Sydney +{$IFDEF VER340} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} + {$DEFINE DELPHI26_UP} + {$DEFINE DELPHI27_UP} +{$ENDIF} + +{$IFDEF FPC} + {$DEFINE SUPPORTS_INLINE} + {$IF DEFINED(FPC_FULLVERSION) AND (FPC_FULLVERSION >= 30200)} + {$DEFINE FPC_VER_320} + {$IFEND} +{$ELSE} + {$IFDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} + {$DEFINE DELPHI26_UP} + {$DEFINE DELPHI27_UP} + {$ENDIF} +{$ENDIF} + +{$IFDEF DELPHI9_UP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + +{$IF DEFINED(CPUX32) OR + DEFINED(CPU386) OR + DEFINED(CPUi386) OR + DEFINED(CPUPOWERPC32) OR + DEFINED(CPUSPARC32) OR + DEFINED(CPU32BITS) OR + DEFINED(CPUARM32) OR + DEFINED(WIN32) OR + DEFINED(IOS32) OR + DEFINED(MACOS32) OR + DEFINED(LINUX32) OR + DEFINED(POSIX32) OR + DEFINED(ANDROID32)} + {$DEFINE TARGET_32BITS} +{$IFEND} + +// Delphi uses MACOS for the new MacOSX and DARWIN is not defined +// FPC uses DARWIN for the new MacOSX and MACOS is defined for the classic Macintosh OS (System 7) +// We define MACOSX to avoid conflicts in both situations +{$IFDEF FPC} + {$IFDEF DARWIN} + {$DEFINE MACOSX} + {$ENDIF} +{$ELSE} + {$IFDEF MACOS} + {$DEFINE MACOSX} + {$ENDIF} +{$ENDIF} diff --git a/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uHelloScheme.pas b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uHelloScheme.pas new file mode 100644 index 00000000..c756e76f --- /dev/null +++ b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uHelloScheme.pas @@ -0,0 +1,210 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2021 Salvador Diaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest <hgourvest@gmail.com> + * Web site : http://www.progdigy.com + * Repository : http://code.google.com/p/delphichromiumembedded/ + * Group : http://groups.google.com/group/delphichromiumembedded + * + * Embarcadero Technologies, Inc is not permitted to use or redistribute + * this source code without explicit permission. + * + *) + +unit uHelloScheme; + +{$I cef.inc} + +interface +uses + Classes, Windows, SysUtils, + uCEFInterfaces, uCEFTypes, uCEFResourceHandler, uCEFMiscFunctions; + +type + THelloScheme = class(TCefResourceHandlerOwn) + private + FStream : TMemoryStream; + FMimeType : string; + FStatusText : string; + FStatus : Integer; + + protected + function ProcessRequest(const request: ICefRequest; const callback: ICefCallback): Boolean; override; + procedure GetResponseHeaders(const response: ICefResponse; out responseLength: Int64; out redirectUrl: ustring); override; + function ReadResponse(const dataOut: Pointer; bytesToRead: Integer; var bytesRead: Integer; const callback: ICefCallback): Boolean; override; + + public + constructor Create(const browser: ICefBrowser; const frame: ICefFrame; const schemeName: ustring; const request: ICefRequest); override; + destructor Destroy; override; + procedure AfterConstruction; override; + end; + +implementation + +constructor THelloScheme.Create(const browser : ICefBrowser; + const frame : ICefFrame; + const schemeName : ustring; + const request : ICefRequest); +begin + inherited Create(browser, frame, schemeName, request); + + FStream := nil; + FStatus := 0; + FMimeType := ''; + FStatusText := ''; +end; + +destructor THelloScheme.Destroy; +begin + if (FStream <> nil) then FreeAndNil(FStream); + + inherited Destroy; +end; + +procedure THelloScheme.AfterConstruction; +begin + inherited AfterConstruction; + + FStream := TMemoryStream.Create; +end; + +procedure THelloScheme.GetResponseHeaders(const response : ICefResponse; + out responseLength : Int64; + out redirectUrl : ustring); +begin + if (response <> nil) then + begin + response.Status := FStatus; + response.StatusText := FStatusText; + response.MimeType := FMimeType; + end; + + if (FStream <> nil) then + responseLength := FStream.Size + else + responseLength := 0; +end; + +function THelloScheme.ProcessRequest(const request : ICefRequest; const callback : ICefCallback): Boolean; +var + TempFilename, TempExt : string; + TempParts : TUrlParts; + TempFile : TFileStream; +begin + Result := False; + FStatus := 404; + FStatusText := 'ERROR'; + FMimeType := ''; + TempFile := nil; + + try + try + if (FStream <> nil) and (request <> nil) then + begin + TempFilename := ''; + FStream.Clear; + + if CefParseUrl(Request.URL, TempParts) then + begin + if (length(TempParts.path) > 0) and + (TempParts.path <> '/') then + begin + TempFilename := TempParts.path; + + if (length(TempFilename) > 0) and (TempFilename[1] = '/') then + TempFilename := copy(TempFilename, 2, length(TempFilename)); + + if (length(TempFilename) > 0) and (TempFilename[length(TempFilename)] = '/') then + TempFilename := copy(TempFilename, 1, length(TempFilename) - 1); + + if (length(TempFilename) > 0) and not(FileExists(TempFilename)) then + TempFilename := ''; + end; + + if (length(TempFilename) = 0) and + (length(TempParts.host) > 0) and + (TempParts.host <> '/') then + begin + TempFilename := TempParts.host; + + if (length(TempFilename) > 0) and (TempFilename[1] = '/') then + TempFilename := copy(TempFilename, 2, length(TempFilename)); + + if (length(TempFilename) > 0) and (TempFilename[length(TempFilename)] = '/') then + TempFilename := copy(TempFilename, 1, length(TempFilename) - 1); + + if (length(TempFilename) > 0) and not(FileExists(TempFilename)) then + TempFilename := ''; + end; + end; + + if (length(TempFilename) > 0) then + begin + TempExt := ExtractFileExt(TempFilename); + + if (length(TempExt) > 0) and (TempExt[1] = '.') then + TempExt := copy(TempExt, 2, length(TempExt)); + + Result := True; + FStatus := 200; + FStatusText := 'OK'; + FMimeType := CefGetMimeType(TempExt); + TempFile := TFileStream.Create(TempFilename, fmOpenRead); + TempFile.Seek(0, soFromBeginning); + FStream.LoadFromStream(TStream(TempFile)); + end; + + FStream.Seek(0, soFromBeginning); + end; + except + on e : exception do + if CustomExceptionHandler('THelloScheme.ProcessRequest', e) then raise; + end; + finally + if (callback <> nil) then callback.Cont; + if (TempFile <> nil) then FreeAndNil(TempFile); + end; +end; + +function THelloScheme.ReadResponse(const dataOut : Pointer; + bytesToRead : Integer; + var bytesRead : Integer; + const callback : ICefCallback): Boolean; +begin + if (FStream <> nil) and (DataOut <> nil) then + begin + // This function will be called several times because the stream is bigger + // than bytesToRead. Each time we will copy a chunk of the stream to + // DataOut. + BytesRead := FStream.Read(DataOut^, BytesToRead); + Result := (BytesRead > 0); + end + else + Result := False; +end; + +end. diff --git a/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uSchemeRegistrationBrowser.lfm b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uSchemeRegistrationBrowser.lfm new file mode 100644 index 00000000..bff94441 --- /dev/null +++ b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uSchemeRegistrationBrowser.lfm @@ -0,0 +1,82 @@ +object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm + Left = 116 + Height = 652 + Top = 102 + Width = 980 + Caption = 'SchemeRegistrationBrowser' + ClientHeight = 652 + ClientWidth = 980 + Color = clBtnFace + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnShow = FormShow + Position = poScreenCenter + LCLVersion = '2.0.12.0' + object AddressBarPnl: TPanel + Left = 0 + Height = 21 + Top = 0 + Width = 980 + Align = alTop + BevelOuter = bvNone + ClientHeight = 21 + ClientWidth = 980 + DoubleBuffered = True + Enabled = False + ParentDoubleBuffered = False + TabOrder = 0 + object GoBtn: TButton + Left = 949 + Height = 21 + Top = 0 + Width = 31 + Align = alRight + Caption = 'Go' + OnClick = GoBtnClick + TabOrder = 0 + end + object AddressCbx: TComboBox + Left = 0 + Height = 21 + Top = 0 + Width = 949 + Align = alClient + ItemHeight = 13 + ItemIndex = 1 + Items.Strings = ( + 'https://www.google.com' + 'hello://test.html' + ) + TabOrder = 1 + Text = 'hello://test.html' + end + end + object CEFWindowParent1: TCEFWindowParent + Left = 0 + Height = 631 + Top = 21 + Width = 980 + Align = alClient + TabOrder = 1 + end + object Chromium1: TChromium + OnBeforeContextMenu = Chromium1BeforeContextMenu + OnContextMenuCommand = Chromium1ContextMenuCommand + OnBeforePopup = Chromium1BeforePopup + OnAfterCreated = Chromium1AfterCreated + OnBeforeClose = Chromium1BeforeClose + OnClose = Chromium1Close + Left = 16 + Top = 40 + end + object Timer1: TTimer + Enabled = False + Interval = 300 + OnTimer = Timer1Timer + Left = 16 + Top = 96 + end +end diff --git a/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uSchemeRegistrationBrowser.pas b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uSchemeRegistrationBrowser.pas new file mode 100644 index 00000000..7f0fc940 --- /dev/null +++ b/demos/Lazarus_Windows/SchemeRegistrationBrowser_subprocess/uSchemeRegistrationBrowser.pas @@ -0,0 +1,297 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2021 Salvador Diaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest <hgourvest@gmail.com> + * Web site : http://www.progdigy.com + * Repository : http://code.google.com/p/delphichromiumembedded/ + * Group : http://groups.google.com/group/delphichromiumembedded + * + * Embarcadero Technologies, Inc is not permitted to use or redistribute + * this source code without explicit permission. + * + *) +{$mode delphi} + + +unit uSchemeRegistrationBrowser; + +{$I cef.inc} + +interface + +uses + {$IFDEF DELPHI16_UP} + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Menus, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, System.Types, Vcl.ComCtrls, Vcl.ClipBrd, + System.UITypes, + {$ELSE} + Windows, Messages, SysUtils, Variants, Classes, Graphics, Menus, + Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Types, ComCtrls, ClipBrd, + {$ENDIF} + uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFApplication, uCEFSchemeRegistrar, + uCEFTypes, uCEFConstants, uCEFWinControl, uCEFSentinel, uCEFChromiumEvents; + +const + MINIBROWSER_CONTEXTMENU_REGSCHEME = MENU_ID_USER_FIRST + 1; + MINIBROWSER_CONTEXTMENU_CLEARFACT = MENU_ID_USER_FIRST + 2; + +type + + { TSchemeRegistrationBrowserFrm } + + TSchemeRegistrationBrowserFrm = class(TForm) + AddressBarPnl: TPanel; + GoBtn: TButton; + CEFWindowParent1: TCEFWindowParent; + Chromium1: TChromium; + AddressCbx: TComboBox; + Timer1: TTimer; + procedure Chromium1AfterCreated(Sender: TObject; + const browser: ICefBrowser); + procedure Chromium1BeforeContextMenu(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; const model: ICefMenuModel); + procedure Chromium1ContextMenuCommand(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; commandId: Integer; + eventFlags: Cardinal; out Result: Boolean); + procedure GoBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure Timer1Timer(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure Chromium1BeforePopup(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 FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; + var aAction : TCefCloseBrowserAction); + procedure Chromium1BeforeClose(Sender: TObject; + const browser: ICefBrowser); + private + { Private declarations } + protected + // Variables to control when can we destroy the form safely + FCanClose : boolean; // Set to True in TChromium.OnBeforeClose + FClosing : boolean; // Set to True in the CloseQuery event. + + procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED; + procedure BrowserDestroyMsg(var aMessage : TMessage); message CEF_DESTROY; + procedure WMMove(var aMessage : TWMMove); message WM_MOVE; + procedure WMMoving(var aMessage : TMessage); message WM_MOVING; + procedure WMEnterMenuLoop(var aMessage: TMessage); message WM_ENTERMENULOOP; + procedure WMExitMenuLoop(var aMessage: TMessage); message WM_EXITMENULOOP; + public + { Public declarations } + end; + +var + SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm; + +procedure CreateGlobalCEFApp; + +implementation + +{$R *.lfm} + +uses + uCEFSchemeHandlerFactory, uCEFMiscFunctions, uHelloScheme; + +// Destruction steps +// ================= +// 1. FormCloseQuery sets CanClose to FALSE calls TChromium.CloseBrowser which triggers the TChromium.OnClose event. +// 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_OnRegCustomSchemes(const registrar: TCefSchemeRegistrarRef); +begin + registrar.AddCustomScheme('hello', CEF_SCHEME_OPTION_STANDARD or CEF_SCHEME_OPTION_LOCAL); +end; + +procedure CreateGlobalCEFApp; +begin + GlobalCEFApp := TCefApplication.Create; + GlobalCEFApp.OnRegCustomSchemes := GlobalCEFApp_OnRegCustomSchemes; + GlobalCEFApp.BrowserSubprocessPath := 'SchemeRegistrationBrowser_sp.exe'; + GlobalCEFApp.LogFile := 'debug.log'; + GlobalCEFApp.LogSeverity := LOGSEVERITY_INFO; +end; + +procedure TSchemeRegistrationBrowserFrm.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser); +begin + PostMessage(Handle, CEF_AFTERCREATED, 0, 0); +end; + +procedure TSchemeRegistrationBrowserFrm.Chromium1BeforeClose( + Sender: TObject; const browser: ICefBrowser); +begin + FCanClose := True; + PostMessage(Handle, WM_CLOSE, 0, 0); +end; + +procedure TSchemeRegistrationBrowserFrm.Chromium1BeforeContextMenu( + Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; const model: ICefMenuModel); +begin + model.AddItem(MINIBROWSER_CONTEXTMENU_REGSCHEME, 'Register scheme'); + model.AddItem(MINIBROWSER_CONTEXTMENU_CLEARFACT, 'Clear schemes'); +end; + +procedure TSchemeRegistrationBrowserFrm.Chromium1BeforePopup( + 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); +begin + // For simplicity, this demo blocks all popup windows and new tabs + Result := (targetDisposition in [WOD_NEW_FOREGROUND_TAB, WOD_NEW_BACKGROUND_TAB, WOD_NEW_POPUP, WOD_NEW_WINDOW]); +end; + +procedure TSchemeRegistrationBrowserFrm.Chromium1Close(Sender: TObject; + const browser: ICefBrowser; var aAction : TCefCloseBrowserAction); +begin + PostMessage(Handle, CEF_DESTROY, 0, 0); + aAction := cbaDelay; +end; + +procedure TSchemeRegistrationBrowserFrm.Chromium1ContextMenuCommand( + Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; commandId: Integer; + eventFlags: Cardinal; out Result: Boolean); +var + TempFactory: ICefSchemeHandlerFactory; +begin + Result := False; + + case commandId of + MINIBROWSER_CONTEXTMENU_REGSCHEME : + if (browser <> nil) and + (browser.host <> nil) and + (browser.host.RequestContext <> nil) then + begin + // You can register the Scheme Handler Factory in the DPR file or later, for example in a context menu command. + TempFactory := TCefSchemeHandlerFactoryOwn.Create(THelloScheme); + if not(browser.host.RequestContext.RegisterSchemeHandlerFactory('hello', '', TempFactory)) then + MessageDlg('RegisterSchemeHandlerFactory error !', mtError, [mbOk], 0); + end; + + MINIBROWSER_CONTEXTMENU_CLEARFACT : + if (browser <> nil) and + (browser.host <> nil) and + (browser.host.RequestContext <> nil) then + begin + if not(browser.host.RequestContext.ClearSchemeHandlerFactories) then + MessageDlg('ClearSchemeHandlerFactories error !', mtError, [mbOk], 0); + end; + end; +end; + +procedure TSchemeRegistrationBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + CanClose := FCanClose; + + if not(FClosing) then + begin + FClosing := True; + Visible := False; + Chromium1.CloseBrowser(True); + end; +end; + +procedure TSchemeRegistrationBrowserFrm.FormCreate(Sender: TObject); +begin + // You can register the Scheme Handler Factory here or later, for example in a context menu command. + CefRegisterSchemeHandlerFactory('hello', '', THelloScheme); +end; + +procedure TSchemeRegistrationBrowserFrm.FormShow(Sender: TObject); +begin + // GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser + // If it's not initialized yet, we use a simple timer to create the browser later. + if not(Chromium1.CreateBrowser(CEFWindowParent1, '')) then Timer1.Enabled := True; +end; + +procedure TSchemeRegistrationBrowserFrm.GoBtnClick(Sender: TObject); +begin + Chromium1.LoadURL(AddressCbx.Text); +end; + +procedure TSchemeRegistrationBrowserFrm.Timer1Timer(Sender: TObject); +begin + Timer1.Enabled := False; + if not(Chromium1.CreateBrowser(CEFWindowParent1, '')) and not(Chromium1.Initialized) then + Timer1.Enabled := True; +end; + +procedure TSchemeRegistrationBrowserFrm.BrowserCreatedMsg(var aMessage : TMessage); +begin + CEFWindowParent1.UpdateSize; + AddressBarPnl.Enabled := True; + GoBtn.Click; +end; + +procedure TSchemeRegistrationBrowserFrm.BrowserDestroyMsg(var aMessage : TMessage); +begin + CEFWindowParent1.Free; +end; + +procedure TSchemeRegistrationBrowserFrm.WMMove(var aMessage : TWMMove); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TSchemeRegistrationBrowserFrm.WMMoving(var aMessage : TMessage); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TSchemeRegistrationBrowserFrm.WMEnterMenuLoop(var aMessage: TMessage); +begin + inherited; + + if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := True; +end; + +procedure TSchemeRegistrationBrowserFrm.WMExitMenuLoop(var aMessage: TMessage); +begin + inherited; + + if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := False; +end; + +end. diff --git a/packages/cef4delphi_lazarus.lpk b/packages/cef4delphi_lazarus.lpk index 94f9780d..3f735df1 100644 --- a/packages/cef4delphi_lazarus.lpk +++ b/packages/cef4delphi_lazarus.lpk @@ -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="92" Release="25"/> + <Version Major="92" Release="26"/> <Files Count="203"> <Item1> <Filename Value="..\source\uCEFAccessibilityHandler.pas"/> diff --git a/source/uCEFApplicationCore.pas b/source/uCEFApplicationCore.pas index 6e1dd97b..9970390a 100644 --- a/source/uCEFApplicationCore.pas +++ b/source/uCEFApplicationCore.pas @@ -66,13 +66,13 @@ uses const CEF_SUPPORTED_VERSION_MAJOR = 92; CEF_SUPPORTED_VERSION_MINOR = 0; - CEF_SUPPORTED_VERSION_RELEASE = 25; + CEF_SUPPORTED_VERSION_RELEASE = 26; CEF_SUPPORTED_VERSION_BUILD = 0; CEF_CHROMEELF_VERSION_MAJOR = 92; CEF_CHROMEELF_VERSION_MINOR = 0; CEF_CHROMEELF_VERSION_RELEASE = 4515; - CEF_CHROMEELF_VERSION_BUILD = 131; + CEF_CHROMEELF_VERSION_BUILD = 159; {$IFDEF MSWINDOWS} LIBCEF_DLL = 'libcef.dll'; diff --git a/update_CEF4Delphi.json b/update_CEF4Delphi.json index 5ae8a83e..f23d3e31 100644 --- a/update_CEF4Delphi.json +++ b/update_CEF4Delphi.json @@ -2,9 +2,9 @@ "UpdateLazPackages" : [ { "ForceNotify" : true, - "InternalVersion" : 313, + "InternalVersion" : 314, "Name" : "cef4delphi_lazarus.lpk", - "Version" : "92.0.25.0" + "Version" : "92.0.26.0" } ], "UpdatePackageData" : {