1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-04-17 06:57:13 +02:00

Update to CEF 83.3.9

This commit is contained in:
Salvador Díaz Fau 2020-05-23 15:00:44 +02:00
parent 58d988487b
commit c44023cb21
24 changed files with 660 additions and 283 deletions

View File

@ -3,10 +3,10 @@ CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chro
CEF4Delphi is based on DCEF3, made by Henri Gourvest. The original license of DCEF3 still applies to CEF4Delphi. Read the license terms in the first lines of any *.pas file. CEF4Delphi is based on DCEF3, made by Henri Gourvest. The original license of DCEF3 still applies to CEF4Delphi. Read the license terms in the first lines of any *.pas file.
CEF4Delphi uses CEF 81.3.10 which includes Chromium 81.0.4044.138. CEF4Delphi uses CEF 83.3.9 which includes Chromium 83.0.4103.61.
The CEF binaries used by CEF4Delphi are available for download at spotify : The CEF binaries used by CEF4Delphi are available for download at spotify :
* [32 bits](http://opensource.spotify.com/cefbuilds/cef_binary_81.3.10%2Bgb223419%2Bchromium-81.0.4044.138_windows32.tar.bz2) * [32 bits](http://opensource.spotify.com/cefbuilds/cef_binary_83.3.9%2Bged43e55%2Bchromium-83.0.4103.61_windows32.tar.bz2)
* [64 bits](http://opensource.spotify.com/cefbuilds/cef_binary_81.3.10%2Bgb223419%2Bchromium-81.0.4044.138_windows64.tar.bz2) * [64 bits](http://opensource.spotify.com/cefbuilds/cef_binary_83.3.9%2Bged43e55%2Bchromium-83.0.4103.61_windows64.tar.bz2)
CEF4Delphi was developed and tested on Delphi 10.3.3 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2 and Lazarus 2.0.8/FPC 3.0.4. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components. CEF4Delphi was developed and tested on Delphi 10.3.3 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2 and Lazarus 2.0.8/FPC 3.0.4. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components.

View File

@ -100,10 +100,6 @@ type
var aAction : TCefCloseBrowserAction); var aAction : TCefCloseBrowserAction);
procedure Chromium1BeforeClose(Sender: TObject; procedure Chromium1BeforeClose(Sender: TObject;
const browser: ICefBrowser); const browser: ICefBrowser);
procedure Chromium1CookiesVisited(Sender: TObject; const name_, value,
domain, path: ustring; secure, httponly, hasExpires: Boolean;
const creation, lastAccess, expires: TDateTime; count,
total, aID : Integer; var aDeleteCookie, aResult: Boolean);
procedure Chromium1CookieSet(Sender: TObject; aSuccess: Boolean; procedure Chromium1CookieSet(Sender: TObject; aSuccess: Boolean;
aID: Integer); aID: Integer);
procedure Chromium1CookieVisitorDestroyed(Sender: TObject; procedure Chromium1CookieVisitorDestroyed(Sender: TObject;
@ -112,6 +108,11 @@ type
const browser: ICefBrowser; const frame: ICefFrame; const browser: ICefBrowser; const frame: ICefFrame;
const request: ICefRequest; const response: ICefResponse; const request: ICefRequest; const response: ICefResponse;
const cookie: PCefCookie; var aResult: Boolean); const cookie: PCefCookie; var aResult: Boolean);
procedure Chromium1CookiesVisited(Sender: TObject; const name_, value,
domain, path: ustring; secure, httponly, hasExpires: Boolean;
const creation, lastAccess, expires: TDateTime; count, total,
aID: Integer; same_site: TCefCookieSameSite; priority: Integer;
var aDeleteCookie, aResult: Boolean);
private private
procedure WMMove(var aMessage : TWMMove); message WM_MOVE; procedure WMMove(var aMessage : TWMMove); message WM_MOVE;
@ -323,6 +324,8 @@ begin
now, now,
now, now,
now + 1, now + 1,
CEF_COOKIE_SAME_SITE_UNSPECIFIED,
CEF_COOKIE_PRIORITY_MEDIUM,
False); False);
end; end;
end; end;
@ -340,8 +343,9 @@ end;
procedure TCookieVisitorFrm.Chromium1CookiesVisited(Sender: TObject; procedure TCookieVisitorFrm.Chromium1CookiesVisited(Sender: TObject;
const name_, value, domain, path: ustring; secure, httponly, const name_, value, domain, path: ustring; secure, httponly,
hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count,
count, total, aID: Integer; var aDeleteCookie, aResult: Boolean); total, aID: Integer; same_site: TCefCookieSameSite; priority: Integer;
var aDeleteCookie, aResult: Boolean);
var var
TempCookie : TCookie; TempCookie : TCookie;
begin begin
@ -357,6 +361,8 @@ begin
TempCookie.last_access := lastAccess; TempCookie.last_access := lastAccess;
TempCookie.has_expires := hasExpires; TempCookie.has_expires := hasExpires;
TempCookie.expires := expires; TempCookie.expires := expires;
TempCookie.same_site := same_site;
TempCookie.priority := priority;
AddCookieInfo(TempCookie); AddCookieInfo(TempCookie);

View File

@ -22,11 +22,11 @@
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/> <IsVisibleTab Value="True"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<TopLine Value="145"/> <TopLine Value="338"/>
<CursorPos X="41" Y="166"/> <CursorPos X="38" Y="357"/>
<UsageCount Value="24"/> <UsageCount Value="24"/>
<Bookmarks Count="1"> <Bookmarks Count="1">
<Item0 X="66" Y="256" ID="3"/> <Item0 X="66" Y="257" ID="3"/>
</Bookmarks> </Bookmarks>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/> <LoadedDesigner Value="True"/>
@ -91,7 +91,7 @@
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit8> </Unit8>
</Units> </Units>
<JumpHistory Count="24" HistoryIndex="23"> <JumpHistory Count="28" HistoryIndex="27">
<Position1> <Position1>
<Filename Value="uCookieVisitor.pas"/> <Filename Value="uCookieVisitor.pas"/>
<Caret Line="191" Column="62" TopLine="176"/> <Caret Line="191" Column="62" TopLine="176"/>
@ -186,8 +186,24 @@
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="uCookieVisitor.pas"/> <Filename Value="uCookieVisitor.pas"/>
<Caret Line="166" Column="41" TopLine="145"/> <Caret Line="166" Column="41" TopLine="181"/>
</Position24> </Position24>
<Position25>
<Filename Value="uCookieVisitor.pas"/>
<Caret Line="263" Column="3" TopLine="253"/>
</Position25>
<Position26>
<Filename Value="uCookieVisitor.pas"/>
<Caret Line="88" Column="56" TopLine="85"/>
</Position26>
<Position27>
<Filename Value="uCookieVisitor.pas"/>
<Caret Line="62" Column="29" TopLine="50"/>
</Position27>
<Position28>
<Filename Value="uCookieVisitor.pas"/>
<Caret Line="309" Column="50" TopLine="283"/>
</Position28>
</JumpHistory> </JumpHistory>
<RunParams> <RunParams>
<FormatVersion Value="2"/> <FormatVersion Value="2"/>

View File

@ -15,7 +15,7 @@ object CookieVisitorFrm: TCookieVisitorFrm
OnDestroy = FormDestroy OnDestroy = FormDestroy
OnShow = FormShow OnShow = FormShow
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '2.0.6.0' LCLVersion = '2.0.8.0'
object AddressBarPnl: TPanel object AddressBarPnl: TPanel
Left = 0 Left = 0
Height = 21 Height = 21

View File

@ -85,6 +85,7 @@ type
procedure Chromium1CookiesVisited(Sender: TObject; const name_, value, procedure Chromium1CookiesVisited(Sender: TObject; const name_, value,
domain, path: ustring; secure, httponly, hasExpires: Boolean; domain, path: ustring; secure, httponly, hasExpires: Boolean;
const creation, lastAccess, expires: TDateTime; count, total, aID: Integer; const creation, lastAccess, expires: TDateTime; count, total, aID: Integer;
same_site: TCefCookieSameSite; priority: Integer;
var aDeleteCookie, aResult: Boolean); var aDeleteCookie, aResult: Boolean);
procedure Chromium1CookieVisitorDestroyed(Sender: TObject; aID: integer); procedure Chromium1CookieVisitorDestroyed(Sender: TObject; aID: integer);
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
@ -259,7 +260,8 @@ end;
procedure TCookieVisitorFrm.Chromium1CookiesVisited(Sender: TObject; procedure TCookieVisitorFrm.Chromium1CookiesVisited(Sender: TObject;
const name_, value, domain, path: ustring; secure, httponly, const name_, value, domain, path: ustring; secure, httponly,
hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count,
total, aID: Integer; var aDeleteCookie, aResult: Boolean); total, aID: Integer; same_site: TCefCookieSameSite; priority: Integer;
var aDeleteCookie, aResult: Boolean);
var var
TempCookie : TCookie; TempCookie : TCookie;
begin begin
@ -275,6 +277,8 @@ begin
TempCookie.last_access := lastAccess; TempCookie.last_access := lastAccess;
TempCookie.has_expires := hasExpires; TempCookie.has_expires := hasExpires;
TempCookie.expires := expires; TempCookie.expires := expires;
TempCookie.same_site := same_site;
TempCookie.priority := priority;
AddCookieInfo(TempCookie); AddCookieInfo(TempCookie);
@ -362,6 +366,8 @@ begin
now, now,
now, now,
now, now,
CEF_COOKIE_SAME_SITE_UNSPECIFIED,
CEF_COOKIE_PRIORITY_MEDIUM,
False); False);
end; end;
end; end;

View File

@ -1,232 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectSession>
<PathDelim Value="\"/>
<Version Value="11"/>
<BuildModes Active="Default"/>
<Units Count="22">
<Unit0>
<Filename Value="MiniBrowser.lpr"/>
<IsPartOfProject Value="True"/>
<TopLine Value="46"/>
<CursorPos Y="65"/>
<UsageCount Value="22"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit0>
<Unit1>
<Filename Value="uMiniBrowser.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MiniBrowserFrm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
<TopLine Value="509"/>
<CursorPos X="48" Y="543"/>
<UsageCount Value="22"/>
<Bookmarks Count="3">
<Item0 Y="842" ID="1"/>
<Item1 X="49" Y="61" ID="2"/>
<Item2 X="65" Y="1073" ID="3"/>
</Bookmarks>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit1>
<Unit2>
<Filename Value="uPreferences.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="PreferencesFrm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<EditorIndex Value="-1"/>
<TopLine Value="69"/>
<CursorPos X="86" Y="70"/>
<UsageCount Value="22"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit2>
<Unit3>
<Filename Value="uSimpleTextViewer.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="SimpleTextViewerFrm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<EditorIndex Value="-1"/>
<UsageCount Value="22"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit3>
<Unit4>
<Filename Value="..\..\..\source\uCEFChromium.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="2356"/>
<CursorPos X="53" Y="2379"/>
<UsageCount Value="10"/>
</Unit4>
<Unit5>
<Filename Value="C:\lazarus\lcl\interfaces\win32\win32object.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="396"/>
<CursorPos X="77" Y="404"/>
<UsageCount Value="10"/>
</Unit5>
<Unit6>
<Filename Value="C:\lazarus\lcl\stdctrls.pp"/>
<UnitName Value="StdCtrls"/>
<EditorIndex Value="-1"/>
<TopLine Value="962"/>
<CursorPos X="41" Y="979"/>
<UsageCount Value="10"/>
</Unit6>
<Unit7>
<Filename Value="..\..\..\source\uCEFApplication.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="43"/>
<UsageCount Value="10"/>
</Unit7>
<Unit8>
<Filename Value="..\..\..\source\uCEFTypes.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="280"/>
<CursorPos X="51" Y="290"/>
<UsageCount Value="10"/>
</Unit8>
<Unit9>
<Filename Value="..\..\..\source\uCEFInterfaces.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="2698"/>
<CursorPos X="39" Y="2713"/>
<UsageCount Value="10"/>
</Unit9>
<Unit10>
<Filename Value="..\..\..\source\uCEFButton.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="93"/>
<CursorPos X="74" Y="95"/>
<UsageCount Value="10"/>
</Unit10>
<Unit11>
<Filename Value="..\..\..\source\uCEFLabelButton.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="134"/>
<CursorPos X="74" Y="142"/>
<UsageCount Value="10"/>
</Unit11>
<Unit12>
<Filename Value="..\..\..\source\uCEFWindow.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="119"/>
<CursorPos X="62" Y="124"/>
<UsageCount Value="10"/>
</Unit12>
<Unit13>
<Filename Value="..\..\..\source\uCEFBrowserViewComponent.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="238"/>
<CursorPos X="23" Y="257"/>
<UsageCount Value="10"/>
</Unit13>
<Unit14>
<Filename Value="..\..\..\source\uCEFButtonComponent.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="177"/>
<CursorPos X="55" Y="202"/>
<UsageCount Value="10"/>
</Unit14>
<Unit15>
<Filename Value="..\..\..\source\uCEFWindowComponent.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="528"/>
<CursorPos X="47" Y="547"/>
<UsageCount Value="10"/>
</Unit15>
<Unit16>
<Filename Value="..\..\..\source\uCEFTextfieldComponent.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="424"/>
<CursorPos X="47" Y="442"/>
<UsageCount Value="10"/>
</Unit16>
<Unit17>
<Filename Value="..\..\..\source\uCEFViewComponent.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="685"/>
<UsageCount Value="10"/>
</Unit17>
<Unit18>
<Filename Value="..\..\..\source\uCEFScrollViewComponent.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="219"/>
<CursorPos X="47" Y="238"/>
<UsageCount Value="10"/>
</Unit18>
<Unit19>
<Filename Value="..\..\..\source\uCEFPanelComponent.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="241"/>
<CursorPos X="53" Y="251"/>
<UsageCount Value="10"/>
</Unit19>
<Unit20>
<Filename Value="..\..\..\source\uCEFLabelButtonComponent.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="244"/>
<CursorPos X="47" Y="263"/>
<UsageCount Value="10"/>
</Unit20>
<Unit21>
<Filename Value="..\..\..\source\uCEFMenuButtonComponent.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="200"/>
<CursorPos X="47" Y="219"/>
<UsageCount Value="10"/>
</Unit21>
</Units>
<JumpHistory Count="10" HistoryIndex="9">
<Position1>
<Filename Value="MiniBrowser.lpr"/>
<Caret Line="65" TopLine="46"/>
</Position1>
<Position2>
<Filename Value="uMiniBrowser.pas"/>
<Caret Line="66" Column="75" TopLine="46"/>
</Position2>
<Position3>
<Filename Value="uMiniBrowser.pas"/>
<Caret Line="67" Column="39" TopLine="46"/>
</Position3>
<Position4>
<Filename Value="uMiniBrowser.pas"/>
<Caret Line="461" TopLine="448"/>
</Position4>
<Position5>
<Filename Value="uMiniBrowser.pas"/>
<Caret Line="48" Column="37" TopLine="22"/>
</Position5>
<Position6>
<Filename Value="uMiniBrowser.pas"/>
<Caret Line="310" Column="52" TopLine="295"/>
</Position6>
<Position7>
<Filename Value="uMiniBrowser.pas"/>
<Caret Line="1005" Column="88" TopLine="979"/>
</Position7>
<Position8>
<Filename Value="uMiniBrowser.pas"/>
<Caret Line="1037" Column="50" TopLine="996"/>
</Position8>
<Position9>
<Filename Value="uMiniBrowser.pas"/>
<Caret Line="1157" Column="62" TopLine="1129"/>
</Position9>
<Position10>
<Filename Value="uMiniBrowser.pas"/>
<Caret Line="214" Column="29" TopLine="191"/>
</Position10>
</JumpHistory>
<RunParams>
<FormatVersion Value="2"/>
<Modes Count="0" ActiveMode=""/>
</RunParams>
</ProjectSession>
</CONFIG>

View File

@ -213,7 +213,8 @@ contains
uCEFBrowserViewComponent in '..\source\uCEFBrowserViewComponent.pas', uCEFBrowserViewComponent in '..\source\uCEFBrowserViewComponent.pas',
uCEFButtonComponent in '..\source\uCEFButtonComponent.pas', uCEFButtonComponent in '..\source\uCEFButtonComponent.pas',
uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas', uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas',
uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas'; uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas',
uCEFAudioHandler in '..\source\uCEFAudioHandler.pas';
end. end.

View File

@ -298,6 +298,17 @@
<DCCReference Include="..\source\uCEFMenuButtonDelegate.pas"/> <DCCReference Include="..\source\uCEFMenuButtonDelegate.pas"/>
<DCCReference Include="..\source\uCEFWindow.pas"/> <DCCReference Include="..\source\uCEFWindow.pas"/>
<DCCReference Include="..\source\uCEFWindowDelegate.pas"/> <DCCReference Include="..\source\uCEFWindowDelegate.pas"/>
<DCCReference Include="..\source\uCEFViewsFrameworkEvents.pas"/>
<DCCReference Include="..\source\uCEFViewComponent.pas"/>
<DCCReference Include="..\source\uCEFTextfieldComponent.pas"/>
<DCCReference Include="..\source\uCEFScrollViewComponent.pas"/>
<DCCReference Include="..\source\uCEFPanelComponent.pas"/>
<DCCReference Include="..\source\uCEFWindowComponent.pas"/>
<DCCReference Include="..\source\uCEFBrowserViewComponent.pas"/>
<DCCReference Include="..\source\uCEFButtonComponent.pas"/>
<DCCReference Include="..\source\uCEFLabelButtonComponent.pas"/>
<DCCReference Include="..\source\uCEFMenuButtonComponent.pas"/>
<DCCReference Include="..\source\uCEFAudioHandler.pas"/>
<BuildConfiguration Include="Base"> <BuildConfiguration Include="Base">
<Key>Base</Key> <Key>Base</Key>
</BuildConfiguration> </BuildConfiguration>

View File

@ -210,6 +210,7 @@ contains
uCEFBrowserViewComponent in '..\source\uCEFBrowserViewComponent.pas', uCEFBrowserViewComponent in '..\source\uCEFBrowserViewComponent.pas',
uCEFButtonComponent in '..\source\uCEFButtonComponent.pas', uCEFButtonComponent in '..\source\uCEFButtonComponent.pas',
uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas', uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas',
uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas'; uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas',
uCEFAudioHandler in '..\source\uCEFAudioHandler.pas';
end. end.

View File

@ -218,7 +218,8 @@ contains
uCEFBrowserViewComponent in '..\source\uCEFBrowserViewComponent.pas', uCEFBrowserViewComponent in '..\source\uCEFBrowserViewComponent.pas',
uCEFButtonComponent in '..\source\uCEFButtonComponent.pas', uCEFButtonComponent in '..\source\uCEFButtonComponent.pas',
uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas', uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas',
uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas'; uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas',
uCEFAudioHandler in '..\source\uCEFAudioHandler.pas';
end. end.

View File

@ -334,6 +334,7 @@
<DCCReference Include="..\source\uCEFButtonComponent.pas"/> <DCCReference Include="..\source\uCEFButtonComponent.pas"/>
<DCCReference Include="..\source\uCEFLabelButtonComponent.pas"/> <DCCReference Include="..\source\uCEFLabelButtonComponent.pas"/>
<DCCReference Include="..\source\uCEFMenuButtonComponent.pas"/> <DCCReference Include="..\source\uCEFMenuButtonComponent.pas"/>
<DCCReference Include="..\source\uCEFAudioHandler.pas"/>
<BuildConfiguration Include="Base"> <BuildConfiguration Include="Base">
<Key>Base</Key> <Key>Base</Key>
</BuildConfiguration> </BuildConfiguration>

View File

@ -21,8 +21,8 @@
</CompilerOptions> </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."/> <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"/> <License Value="MPL 1.1"/>
<Version Major="81" Minor="3" Release="10"/> <Version Major="83" Minor="3" Release="9"/>
<Files Count="185"> <Files Count="186">
<Item1> <Item1>
<Filename Value="..\source\uCEFAccessibilityHandler.pas"/> <Filename Value="..\source\uCEFAccessibilityHandler.pas"/>
<UnitName Value="uCEFAccessibilityHandler"/> <UnitName Value="uCEFAccessibilityHandler"/>
@ -779,6 +779,10 @@
<Filename Value="..\source\uCEFViewsFrameworkEvents.pas"/> <Filename Value="..\source\uCEFViewsFrameworkEvents.pas"/>
<UnitName Value="uCEFViewsFrameworkEvents"/> <UnitName Value="uCEFViewsFrameworkEvents"/>
</Item185> </Item185>
<Item186>
<Filename Value="..\source\uCEFAudioHandler.pas"/>
<UnitName Value="uCEFAudioHandler"/>
</Item186>
</Files> </Files>
<RequiredPkgs Count="4"> <RequiredPkgs Count="4">
<Item1> <Item1>

View File

@ -61,7 +61,7 @@ uses
uCEFMenuButtonComponent, uCEFLabelButtonComponent, uCEFButtonComponent, uCEFMenuButtonComponent, uCEFLabelButtonComponent, uCEFButtonComponent,
uCEFBrowserViewComponent, uCEFWindowComponent, uCEFPanelComponent, uCEFBrowserViewComponent, uCEFWindowComponent, uCEFPanelComponent,
uCEFScrollViewComponent, uCEFTextfieldComponent, uCEFViewComponent, uCEFScrollViewComponent, uCEFTextfieldComponent, uCEFViewComponent,
uCEFViewsFrameworkEvents, LazarusPackageIntf; uCEFViewsFrameworkEvents, uCEFAudioHandler, LazarusPackageIntf;
implementation implementation

View File

@ -60,15 +60,15 @@ uses
uCEFTypes, uCEFInterfaces, uCEFBaseRefCounted, uCEFSchemeRegistrar; uCEFTypes, uCEFInterfaces, uCEFBaseRefCounted, uCEFSchemeRegistrar;
const const
CEF_SUPPORTED_VERSION_MAJOR = 81; CEF_SUPPORTED_VERSION_MAJOR = 83;
CEF_SUPPORTED_VERSION_MINOR = 3; CEF_SUPPORTED_VERSION_MINOR = 3;
CEF_SUPPORTED_VERSION_RELEASE = 10; CEF_SUPPORTED_VERSION_RELEASE = 9;
CEF_SUPPORTED_VERSION_BUILD = 0; CEF_SUPPORTED_VERSION_BUILD = 0;
CEF_CHROMEELF_VERSION_MAJOR = 81; CEF_CHROMEELF_VERSION_MAJOR = 83;
CEF_CHROMEELF_VERSION_MINOR = 0; CEF_CHROMEELF_VERSION_MINOR = 0;
CEF_CHROMEELF_VERSION_RELEASE = 4044; CEF_CHROMEELF_VERSION_RELEASE = 4103;
CEF_CHROMEELF_VERSION_BUILD = 138; CEF_CHROMEELF_VERSION_BUILD = 61;
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
LIBCEF_DLL = 'libcef.dll'; LIBCEF_DLL = 'libcef.dll';

293
source/uCEFAudioHandler.pas Normal file
View File

@ -0,0 +1,293 @@
// ************************************************************************
// ***************************** 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 © 2020 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 uCEFAudioHandler;
{$IFDEF FPC}
{$MODE OBJFPC}{$H+}
{$ENDIF}
{$IFNDEF CPUX64}{$ALIGN ON}{$ENDIF}
{$MINENUMSIZE 4}
{$I cef.inc}
interface
uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
type
TCefAudioHandlerOwn = class(TCefBaseRefCountedOwn, ICefAudioHandler)
protected
procedure OnGetAudioParameters(const browser: ICefBrowser; var params: TCefAudioParameters; var aResult: boolean); virtual;
procedure OnAudioStreamStarted(const browser: ICefBrowser; const params: TCefAudioParameters; channels: integer); virtual;
procedure OnAudioStreamPacket(const browser: ICefBrowser; const data : PPSingle; frames: integer; pts: int64); virtual;
procedure OnAudioStreamStopped(const browser: ICefBrowser); virtual;
procedure OnAudioStreamError(const browser: ICefBrowser; const message_: ustring); virtual;
procedure RemoveReferences; virtual;
public
constructor Create; virtual;
end;
TCustomAudioHandler = class(TCefAudioHandlerOwn)
protected
FEvents : Pointer;
procedure OnGetAudioParameters(const browser: ICefBrowser; var params: TCefAudioParameters; var aResult: boolean); override;
procedure OnAudioStreamStarted(const browser: ICefBrowser; const params: TCefAudioParameters; channels: integer); override;
procedure OnAudioStreamPacket(const browser: ICefBrowser; const data : PPSingle; frames: integer; pts: int64); override;
procedure OnAudioStreamStopped(const browser: ICefBrowser); override;
procedure OnAudioStreamError(const browser: ICefBrowser; const message_: ustring); override;
procedure RemoveReferences; override;
public
constructor Create(const events : IChromiumEvents); reintroduce; virtual;
destructor Destroy; override;
end;
implementation
uses
{$IFDEF DELPHI16_UP}
System.SysUtils,
{$ELSE}
SysUtils,
{$ENDIF}
uCEFMiscFunctions, uCEFLibFunctions, uCEFBrowser;
function cef_audio_handler_get_audio_parameters(self : PCefAudioHandler;
browser : PCefBrowser;
params : PCefAudioParameters): Integer; stdcall;
var
TempObject : TObject;
TempParams : TCefAudioParameters;
TempResult : boolean;
begin
TempObject := CefGetObject(self);
TempResult := False;
if (TempObject <> nil) and (TempObject is TCefAudioHandlerOwn) then
begin
TempParams := params^;
TCefAudioHandlerOwn(TempObject).OnGetAudioParameters(TCefBrowserRef.UnWrap(browser),
TempParams,
TempResult);
if TempResult then
params^ := TempParams;
end;
Result := ord(TempResult);
end;
procedure cef_audio_handler_on_audio_stream_started( self : PCefAudioHandler;
browser : PCefBrowser;
const params : PCefAudioParameters;
channels : integer); stdcall;
var
TempObject : TObject;
begin
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefAudioHandlerOwn) then
TCefAudioHandlerOwn(TempObject).OnAudioStreamStarted(TCefBrowserRef.UnWrap(browser),
params^,
channels);
end;
procedure cef_audio_handler_on_audio_stream_packet( self : PCefAudioHandler;
browser : PCefBrowser;
const data : PPSingle;
frames : integer;
pts : int64); stdcall;
var
TempObject : TObject;
begin
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefAudioHandlerOwn) then
TCefAudioHandlerOwn(TempObject).OnAudioStreamPacket(TCefBrowserRef.UnWrap(browser),
data,
frames,
pts);
end;
procedure cef_audio_handler_on_audio_stream_stopped(self: PCefAudioHandler; browser: PCefBrowser); stdcall;
var
TempObject : TObject;
begin
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefAudioHandlerOwn) then
TCefAudioHandlerOwn(TempObject).OnAudioStreamStopped(TCefBrowserRef.UnWrap(browser));
end;
procedure cef_audio_handler_on_audio_stream_error(self: PCefAudioHandler; browser: PCefBrowser; const message_: PCefString); stdcall;
var
TempObject : TObject;
begin
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefAudioHandlerOwn) then
TCefAudioHandlerOwn(TempObject).OnAudioStreamError(TCefBrowserRef.UnWrap(browser),
CefString(message_));
end;
constructor TCefAudioHandlerOwn.Create;
begin
inherited CreateData(SizeOf(TCefAudioHandler));
with PCefAudioHandler(FData)^ do
begin
get_audio_parameters := {$IFDEF FPC}@{$ENDIF}cef_audio_handler_get_audio_parameters;
on_audio_stream_started := {$IFDEF FPC}@{$ENDIF}cef_audio_handler_on_audio_stream_started;
on_audio_stream_packet := {$IFDEF FPC}@{$ENDIF}cef_audio_handler_on_audio_stream_packet;
on_audio_stream_stopped := {$IFDEF FPC}@{$ENDIF}cef_audio_handler_on_audio_stream_stopped;
on_audio_stream_error := {$IFDEF FPC}@{$ENDIF}cef_audio_handler_on_audio_stream_error;
end;
end;
procedure TCefAudioHandlerOwn.OnGetAudioParameters(const browser : ICefBrowser;
var params : TCefAudioParameters;
var aResult : boolean);
begin
//
end;
procedure TCefAudioHandlerOwn.OnAudioStreamStarted(const browser : ICefBrowser;
const params : TCefAudioParameters;
channels : integer);
begin
//
end;
procedure TCefAudioHandlerOwn.OnAudioStreamPacket(const browser : ICefBrowser;
const data : PPSingle;
frames : integer;
pts : int64);
begin
//
end;
procedure TCefAudioHandlerOwn.OnAudioStreamStopped(const browser : ICefBrowser);
begin
//
end;
procedure TCefAudioHandlerOwn.OnAudioStreamError(const browser : ICefBrowser;
const message_ : ustring);
begin
//
end;
procedure TCefAudioHandlerOwn.RemoveReferences;
begin
//
end;
// TCustomAudioHandler
constructor TCustomAudioHandler.Create(const events : IChromiumEvents);
begin
inherited Create;
FEvents := Pointer(events);
end;
destructor TCustomAudioHandler.Destroy;
begin
RemoveReferences;
inherited Destroy;
end;
procedure TCustomAudioHandler.RemoveReferences;
begin
FEvents := nil;
end;
procedure TCustomAudioHandler.OnGetAudioParameters(const browser : ICefBrowser;
var params : TCefAudioParameters;
var aResult : boolean);
begin
if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnGetAudioParameters(browser,
params,
aResult);
end;
procedure TCustomAudioHandler.OnAudioStreamStarted(const browser : ICefBrowser;
const params : TCefAudioParameters;
channels : integer);
begin
if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnAudioStreamStarted(browser,
params,
channels);
end;
procedure TCustomAudioHandler.OnAudioStreamPacket(const browser : ICefBrowser;
const data : PPSingle;
frames : integer;
pts : int64);
begin
if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnAudioStreamPacket(browser,
data,
frames,
pts);
end;
procedure TCustomAudioHandler.OnAudioStreamStopped(const browser : ICefBrowser);
begin
if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnAudioStreamStopped(browser);
end;
procedure TCustomAudioHandler.OnAudioStreamError(const browser : ICefBrowser;
const message_ : ustring);
begin
if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnAudioStreamError(browser,
message_);
end;
end.

View File

@ -262,6 +262,13 @@ type
FOnRouteStateChanged : TOnRouteStateChangedEvent; FOnRouteStateChanged : TOnRouteStateChangedEvent;
FOnRouteMessageReceived : TOnRouteMessageReceivedEvent; FOnRouteMessageReceived : TOnRouteMessageReceivedEvent;
// ICefAudioHandler
FOnGetAudioParameters : TOnGetAudioParametersEvent;
FOnAudioStreamStarted : TOnAudioStreamStartedEvent;
FOnAudioStreamPacket : TOnAudioStreamPacketEvent;
FOnAudioStreamStopped : TOnAudioStreamStoppedEvent;
FOnAudioStreamError : TOnAudioStreamErrorEvent;
// Custom // Custom
FOnTextResultAvailable : TOnTextResultAvailableEvent; FOnTextResultAvailable : TOnTextResultAvailableEvent;
FOnPdfPrintFinished : TOnPdfPrintFinishedEvent; FOnPdfPrintFinished : TOnPdfPrintFinishedEvent;
@ -548,6 +555,13 @@ type
procedure doOnRouteStateChanged(const route: ICefMediaRoute; state: TCefMediaRouteConnectionState); procedure doOnRouteStateChanged(const route: ICefMediaRoute; state: TCefMediaRouteConnectionState);
procedure doOnRouteMessageReceived(const route: ICefMediaRoute; const message_: ustring); procedure doOnRouteMessageReceived(const route: ICefMediaRoute; const message_: ustring);
// ICefAudioHandler
procedure doOnGetAudioParameters(const browser: ICefBrowser; var params: TCefAudioParameters; var aResult: boolean);
procedure doOnAudioStreamStarted(const browser: ICefBrowser; const params: TCefAudioParameters; channels: integer);
procedure doOnAudioStreamPacket(const browser: ICefBrowser; const data : PPSingle; frames: integer; pts: int64);
procedure doOnAudioStreamStopped(const browser: ICefBrowser);
procedure doOnAudioStreamError(const browser: ICefBrowser; const message_: ustring);
// Custom // Custom
procedure doCookiesDeleted(numDeleted : integer); virtual; procedure doCookiesDeleted(numDeleted : integer); virtual;
procedure doPdfPrintFinished(aResultOK : boolean); virtual; procedure doPdfPrintFinished(aResultOK : boolean); virtual;
@ -563,7 +577,7 @@ type
procedure doHttpAuthCredentialsCleared; virtual; procedure doHttpAuthCredentialsCleared; virtual;
procedure doAllConnectionsClosed; virtual; procedure doAllConnectionsClosed; virtual;
procedure doOnExecuteTaskOnCefThread(aTaskID : cardinal); virtual; procedure doOnExecuteTaskOnCefThread(aTaskID : cardinal); virtual;
procedure doOnCookiesVisited(const name_, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total, aID : Integer; var aDeleteCookie, aResult : Boolean); virtual; procedure doOnCookiesVisited(const name_, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total, aID : Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; var aDeleteCookie, aResult : Boolean); virtual;
procedure doOnCookieVisitorDestroyed(aID : integer); virtual; procedure doOnCookieVisitorDestroyed(aID : integer); virtual;
procedure doOnCookieSet(aSuccess : boolean; aID : integer); virtual; procedure doOnCookieSet(aSuccess : boolean; aID : integer); virtual;
procedure doUpdateZoomStep(aInc : boolean); virtual; procedure doUpdateZoomStep(aInc : boolean); virtual;
@ -573,6 +587,7 @@ type
procedure doSetZoomPct(const aValue : double); virtual; procedure doSetZoomPct(const aValue : double); virtual;
procedure doSetZoomStep(aValue : byte); virtual; procedure doSetZoomStep(aValue : byte); virtual;
procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute); virtual; procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute); virtual;
function MustCreateAudioHandler : boolean; virtual;
function MustCreateLoadHandler : boolean; virtual; function MustCreateLoadHandler : boolean; virtual;
function MustCreateFocusHandler : boolean; virtual; function MustCreateFocusHandler : boolean; virtual;
function MustCreateContextMenuHandler : boolean; virtual; function MustCreateContextMenuHandler : boolean; virtual;
@ -659,7 +674,7 @@ type
function DeleteCookies(const url : ustring = ''; const cookieName : ustring = ''; aDeleteImmediately : boolean = False) : boolean; function DeleteCookies(const url : ustring = ''; const cookieName : ustring = ''; aDeleteImmediately : boolean = False) : boolean;
function VisitAllCookies(aID : integer = 0) : boolean; function VisitAllCookies(aID : integer = 0) : boolean;
function VisitURLCookies(const url : ustring; includeHttpOnly : boolean = False; aID : integer = 0) : boolean; 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; aSetImmediately : boolean = True; 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; function FlushCookieStore(aFlushImmediately : boolean = True) : boolean;
procedure UpdateSupportedSchemes(const aSchemes : TStrings; aIncludeDefaults : boolean = True); procedure UpdateSupportedSchemes(const aSchemes : TStrings; aIncludeDefaults : boolean = True);
@ -951,6 +966,13 @@ type
property OnRoutes : TOnRoutesEvent read FOnRoutes write FOnRoutes; property OnRoutes : TOnRoutesEvent read FOnRoutes write FOnRoutes;
property OnRouteStateChanged : TOnRouteStateChangedEvent read FOnRouteStateChanged write FOnRouteStateChanged; property OnRouteStateChanged : TOnRouteStateChangedEvent read FOnRouteStateChanged write FOnRouteStateChanged;
property OnRouteMessageReceived : TOnRouteMessageReceivedEvent read FOnRouteMessageReceived write FOnRouteMessageReceived; property OnRouteMessageReceived : TOnRouteMessageReceivedEvent read FOnRouteMessageReceived write FOnRouteMessageReceived;
// ICefAudioHandler
property OnGetAudioParameters : TOnGetAudioParametersEvent read FOnGetAudioParameters write FOnGetAudioParameters;
property OnAudioStreamStarted : TOnAudioStreamStartedEvent read FOnAudioStreamStarted write FOnAudioStreamStarted;
property OnAudioStreamPacket : TOnAudioStreamPacketEvent read FOnAudioStreamPacket write FOnAudioStreamPacket;
property OnAudioStreamStopped : TOnAudioStreamStoppedEvent read FOnAudioStreamStopped write FOnAudioStreamStopped;
property OnAudioStreamError : TOnAudioStreamErrorEvent read FOnAudioStreamError write FOnAudioStreamError;
end; end;
TBrowserInfo = class TBrowserInfo = class
@ -1541,6 +1563,13 @@ begin
FOnRouteStateChanged := nil; FOnRouteStateChanged := nil;
FOnRouteMessageReceived := nil; FOnRouteMessageReceived := nil;
// ICefAudioHandler
FOnGetAudioParameters := nil;
FOnAudioStreamStarted := nil;
FOnAudioStreamPacket := nil;
FOnAudioStreamStopped := nil;
FOnAudioStreamError := nil;
// Custom // Custom
FOnTextResultAvailable := nil; FOnTextResultAvailable := nil;
FOnPdfPrintFinished := nil; FOnPdfPrintFinished := nil;
@ -3100,6 +3129,8 @@ end;
function TChromiumCore.SetCookie(const url, name_, value, domain, path: ustring; function TChromiumCore.SetCookie(const url, name_, value, domain, path: ustring;
secure, httponly, hasExpires: Boolean; secure, httponly, hasExpires: Boolean;
const creation, lastAccess, expires: TDateTime; const creation, lastAccess, expires: TDateTime;
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
aSetImmediately : boolean; aSetImmediately : boolean;
aID : integer): Boolean; aID : integer): Boolean;
var var
@ -3127,6 +3158,7 @@ begin
Result := TempManager.SetCookie(url, name_, value, domain, path, Result := TempManager.SetCookie(url, name_, value, domain, path,
secure, httponly, hasExpires, secure, httponly, hasExpires,
creation, lastAccess, expires, creation, lastAccess, expires,
same_site, priority,
TempCallback); TempCallback);
finally finally
TempCallback := nil; TempCallback := nil;
@ -4173,6 +4205,8 @@ procedure TChromiumCore.doOnCookiesVisited(const name_, value, domain, path: ust
secure, httponly, hasExpires: Boolean; secure, httponly, hasExpires: Boolean;
const creation, lastAccess, expires: TDateTime; const creation, lastAccess, expires: TDateTime;
count, total, aID : Integer; count, total, aID : Integer;
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
var aDeleteCookie, aResult : Boolean); var aDeleteCookie, aResult : Boolean);
begin begin
if assigned(FOnCookiesVisited) then if assigned(FOnCookiesVisited) then
@ -4180,6 +4214,7 @@ begin
secure, httponly, hasExpires, secure, httponly, hasExpires,
creation, lastAccess, expires, creation, lastAccess, expires,
count, total, aID, count, total, aID,
same_site, priority,
aDeleteCookie, aResult); aDeleteCookie, aResult);
end; end;
@ -4502,6 +4537,15 @@ begin
assigned(FOnRouteMessageReceived); assigned(FOnRouteMessageReceived);
end; end;
function TChromiumCore.MustCreateAudioHandler : boolean;
begin
Result := assigned(FOnGetAudioParameters) or
assigned(FOnAudioStreamStarted) or
assigned(FOnAudioStreamPacket) or
assigned(FOnAudioStreamStopped) or
assigned(FOnAudioStreamError);
end;
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
procedure TChromiumCore.PrefsAvailableMsg(aResultOK : boolean); procedure TChromiumCore.PrefsAvailableMsg(aResultOK : boolean);
begin begin
@ -5138,6 +5182,44 @@ begin
FOnRouteMessageReceived(self, route, message_); FOnRouteMessageReceived(self, route, message_);
end; end;
procedure TChromiumCore.doOnGetAudioParameters(const browser : ICefBrowser;
var params : TCefAudioParameters;
var aResult : boolean);
begin
if assigned(FOnGetAudioParameters) then
FOnGetAudioParameters(self, browser, params, aResult);
end;
procedure TChromiumCore.doOnAudioStreamStarted(const browser : ICefBrowser;
const params : TCefAudioParameters;
channels : integer);
begin
if assigned(FOnAudioStreamStarted) then
FOnAudioStreamStarted(self, browser, params, channels);
end;
procedure TChromiumCore.doOnAudioStreamPacket(const browser : ICefBrowser;
const data : PPSingle;
frames : integer;
pts : int64);
begin
if assigned(FOnAudioStreamPacket) then
FOnAudioStreamPacket(self, browser, data, frames, pts);
end;
procedure TChromiumCore.doOnAudioStreamStopped(const browser: ICefBrowser);
begin
if assigned(FOnAudioStreamStopped) then
FOnAudioStreamStopped(self, browser);
end;
procedure TChromiumCore.doOnAudioStreamError(const browser : ICefBrowser;
const message_ : ustring);
begin
if assigned(FOnAudioStreamError) then
FOnAudioStreamError(self, browser, message_);
end;
procedure TChromiumCore.doOnFullScreenModeChange(const browser : ICefBrowser; procedure TChromiumCore.doOnFullScreenModeChange(const browser : ICefBrowser;
fullscreen : Boolean); fullscreen : Boolean);
begin begin

View File

@ -172,6 +172,13 @@ type
TOnRouteStateChangedEvent = procedure(Sender: TObject; const route: ICefMediaRoute; state: TCefMediaRouteConnectionState) of object; TOnRouteStateChangedEvent = procedure(Sender: TObject; const route: ICefMediaRoute; state: TCefMediaRouteConnectionState) of object;
TOnRouteMessageReceivedEvent = procedure(Sender: TObject; const route: ICefMediaRoute; const message_: ustring) of object; TOnRouteMessageReceivedEvent = procedure(Sender: TObject; const route: ICefMediaRoute; const message_: ustring) of object;
// ICefAudioHandler
TOnGetAudioParametersEvent = procedure(Sender: TObject; const browser: ICefBrowser; var params: TCefAudioParameters; var aResult: boolean) of object;
TOnAudioStreamStartedEvent = procedure(Sender: TObject; const browser: ICefBrowser; const params: TCefAudioParameters; channels: integer) of object;
TOnAudioStreamPacketEvent = procedure(Sender: TObject; const browser: ICefBrowser; const data : PPSingle; frames: integer; pts: int64) of object;
TOnAudioStreamStoppedEvent = procedure(Sender: TObject; const browser: ICefBrowser) of object;
TOnAudioStreamErrorEvent = procedure(Sender: TObject; const browser: ICefBrowser; const message_: ustring) of object;
// Custom // Custom
TOnTextResultAvailableEvent = procedure(Sender: TObject; const aText : ustring) of object; TOnTextResultAvailableEvent = procedure(Sender: TObject; const aText : ustring) of object;
TOnPdfPrintFinishedEvent = procedure(Sender: TObject; aResultOK : boolean) of object; TOnPdfPrintFinishedEvent = procedure(Sender: TObject; aResultOK : boolean) of object;
@ -181,7 +188,7 @@ type
TOnNavigationVisitorResultAvailableEvent = procedure(const entry: ICefNavigationEntry; current: Boolean; index, total: Integer; var aResult : boolean) of object; TOnNavigationVisitorResultAvailableEvent = procedure(const entry: ICefNavigationEntry; current: Boolean; index, total: Integer; var aResult : boolean) of object;
TOnDownloadImageFinishedEvent = procedure(Sender: TObject; const imageUrl: ustring; httpStatusCode: Integer; const image: ICefImage) of object; TOnDownloadImageFinishedEvent = procedure(Sender: TObject; const imageUrl: ustring; httpStatusCode: Integer; const image: ICefImage) of object;
TOnExecuteTaskOnCefThread = procedure(Sender: TObject; aTaskID : cardinal) of object; TOnExecuteTaskOnCefThread = procedure(Sender: TObject; aTaskID : cardinal) of object;
TOnCookiesVisited = procedure(Sender: TObject; const name_, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total, aID : Integer; var aDeleteCookie, aResult : Boolean) of object; TOnCookiesVisited = procedure(Sender: TObject; const name_, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total, aID : Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; var aDeleteCookie, aResult : Boolean) of object;
TOnCookieVisitorDestroyed = procedure(Sender: TObject; aID : integer) of object; TOnCookieVisitorDestroyed = procedure(Sender: TObject; aID : integer) of object;
TOnCookieSet = procedure(Sender: TObject; aSuccess : boolean; aID : integer) of object; TOnCookieSet = procedure(Sender: TObject; aSuccess : boolean; aID : integer) of object;
TOnZoomPctAvailable = procedure(Sender: TObject; const aZoomPct : double) of object; TOnZoomPctAvailable = procedure(Sender: TObject; const aZoomPct : double) of object;

View File

@ -54,6 +54,7 @@ uses
type type
TCefClientRef = class(TCefBaseRefCountedRef, ICefClient) TCefClientRef = class(TCefBaseRefCountedRef, ICefClient)
protected protected
procedure GetAudioHandler(var aHandler : ICefAudioHandler); virtual;
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); virtual; procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); virtual;
procedure GetDialogHandler(var aHandler : ICefDialogHandler); virtual; procedure GetDialogHandler(var aHandler : ICefDialogHandler); virtual;
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); virtual; procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); virtual;
@ -77,6 +78,7 @@ type
TCefClientOwn = class(TCefBaseRefCountedOwn, ICefClient) TCefClientOwn = class(TCefBaseRefCountedOwn, ICefClient)
protected protected
procedure GetAudioHandler(var aHandler : ICefAudioHandler); virtual;
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); virtual; procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); virtual;
procedure GetDialogHandler(var aHandler : ICefDialogHandler); virtual; procedure GetDialogHandler(var aHandler : ICefDialogHandler); virtual;
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); virtual; procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); virtual;
@ -101,6 +103,7 @@ type
TCustomClientHandler = class(TCefClientOwn) TCustomClientHandler = class(TCefClientOwn)
protected protected
FEvents : Pointer; FEvents : Pointer;
FAudioHandler : ICefAudioHandler;
FLoadHandler : ICefLoadHandler; FLoadHandler : ICefLoadHandler;
FFocusHandler : ICefFocusHandler; FFocusHandler : ICefFocusHandler;
FContextMenuHandler : ICefContextMenuHandler; FContextMenuHandler : ICefContextMenuHandler;
@ -115,6 +118,7 @@ type
FDragHandler : ICefDragHandler; FDragHandler : ICefDragHandler;
FFindHandler : ICefFindHandler; FFindHandler : ICefFindHandler;
procedure GetAudioHandler(var aHandler : ICefAudioHandler); override;
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); override; procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); override;
procedure GetDialogHandler(var aHandler : ICefDialogHandler); override; procedure GetDialogHandler(var aHandler : ICefDialogHandler); override;
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); override; procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); override;
@ -150,7 +154,7 @@ uses
uCEFFocusHandler, uCEFContextMenuHandler, uCEFDialogHandler, uCEFKeyboardHandler, uCEFFocusHandler, uCEFContextMenuHandler, uCEFDialogHandler, uCEFKeyboardHandler,
uCEFDisplayHandler, uCEFDownloadHandler, uCEFJsDialogHandler, uCEFDisplayHandler, uCEFDownloadHandler, uCEFJsDialogHandler,
uCEFLifeSpanHandler, uCEFRequestHandler, uCEFRenderHandler, uCEFDragHandler, uCEFLifeSpanHandler, uCEFRequestHandler, uCEFRenderHandler, uCEFDragHandler,
uCEFFindHandler, uCEFConstants, uCEFApplicationCore, uCEFFrame; uCEFFindHandler, uCEFConstants, uCEFApplicationCore, uCEFFrame, uCEFAudioHandler;
// ****************************************************** // ******************************************************
@ -165,6 +169,11 @@ begin
Result := nil; Result := nil;
end; end;
procedure TCefClientRef.GetAudioHandler(var aHandler : ICefAudioHandler);
begin
aHandler := nil;
end;
procedure TCefClientRef.GetContextMenuHandler(var aHandler : ICefContextMenuHandler); procedure TCefClientRef.GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
begin begin
aHandler := nil; aHandler := nil;
@ -246,6 +255,23 @@ end;
// ****************************************************** // ******************************************************
function cef_client_own_get_audio_handler(self: PCefClient): PCefAudioHandler; stdcall;
var
TempObject : TObject;
TempHandler : ICefAudioHandler;
begin
Result := nil;
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
try
TCefClientOwn(TempObject).GetAudioHandler(TempHandler);
if (TempHandler <> nil) then Result := TempHandler.Wrap;
finally
TempHandler := nil;
end;
end;
function cef_client_own_get_context_menu_handler(self: PCefClient): PCefContextMenuHandler; stdcall; function cef_client_own_get_context_menu_handler(self: PCefClient): PCefContextMenuHandler; stdcall;
var var
TempObject : TObject; TempObject : TObject;
@ -491,6 +517,7 @@ begin
with PCefClient(FData)^ do with PCefClient(FData)^ do
begin begin
get_audio_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_audio_handler;
get_context_menu_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_context_menu_handler; get_context_menu_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_context_menu_handler;
get_dialog_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_dialog_handler; get_dialog_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_dialog_handler;
get_display_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_display_handler; get_display_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_display_handler;
@ -508,6 +535,11 @@ begin
end; end;
end; end;
procedure TCefClientOwn.GetAudioHandler(var aHandler : ICefAudioHandler);
begin
aHandler := nil;
end;
procedure TCefClientOwn.GetContextMenuHandler(var aHandler : ICefContextMenuHandler); procedure TCefClientOwn.GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
begin begin
aHandler := nil; aHandler := nil;
@ -608,6 +640,7 @@ begin
end end
else else
begin begin
if events.MustCreateAudioHandler then FAudioHandler := TCustomAudioHandler.Create(events);
if events.MustCreateLoadHandler then FLoadHandler := TCustomLoadHandler.Create(events); if events.MustCreateLoadHandler then FLoadHandler := TCustomLoadHandler.Create(events);
if events.MustCreateFocusHandler then FFocusHandler := TCustomFocusHandler.Create(events); if events.MustCreateFocusHandler then FFocusHandler := TCustomFocusHandler.Create(events);
if events.MustCreateContextMenuHandler then FContextMenuHandler := TCustomContextMenuHandler.Create(events); if events.MustCreateContextMenuHandler then FContextMenuHandler := TCustomContextMenuHandler.Create(events);
@ -636,6 +669,7 @@ procedure TCustomClientHandler.RemoveReferences;
begin begin
FEvents := nil; FEvents := nil;
if (FAudioHandler <> nil) then FAudioHandler.RemoveReferences;
if (FLoadHandler <> nil) then FLoadHandler.RemoveReferences; if (FLoadHandler <> nil) then FLoadHandler.RemoveReferences;
if (FFocusHandler <> nil) then FFocusHandler.RemoveReferences; if (FFocusHandler <> nil) then FFocusHandler.RemoveReferences;
if (FContextMenuHandler <> nil) then FContextMenuHandler.RemoveReferences; if (FContextMenuHandler <> nil) then FContextMenuHandler.RemoveReferences;
@ -653,6 +687,7 @@ end;
procedure TCustomClientHandler.InitializeVars; procedure TCustomClientHandler.InitializeVars;
begin begin
FAudioHandler := nil;
FLoadHandler := nil; FLoadHandler := nil;
FFocusHandler := nil; FFocusHandler := nil;
FContextMenuHandler := nil; FContextMenuHandler := nil;
@ -669,6 +704,14 @@ begin
FEvents := nil; FEvents := nil;
end; end;
procedure TCustomClientHandler.GetAudioHandler(var aHandler : ICefAudioHandler);
begin
if (FAudioHandler <> nil) then
aHandler := FAudioHandler
else
aHandler := nil;
end;
procedure TCustomClientHandler.GetContextMenuHandler(var aHandler : ICefContextMenuHandler); procedure TCustomClientHandler.GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
begin begin
if (FContextMenuHandler <> nil) then if (FContextMenuHandler <> nil) then

View File

@ -538,6 +538,11 @@ const
CEF_MRCR_ROUTE_ALREADY_EXISTS = 9; CEF_MRCR_ROUTE_ALREADY_EXISTS = 9;
CEF_MRCR_TOTAL_COUNT = 11; CEF_MRCR_TOTAL_COUNT = 11;
// /include/internal/cef_types.h (cef_cookie_priority_t)
CEF_COOKIE_PRIORITY_LOW = -1;
CEF_COOKIE_PRIORITY_MEDIUM = 0;
CEF_COOKIE_PRIORITY_HIGH = 1;
//****************************************************** //******************************************************
//****************** OTHER CONSTANTS ******************* //****************** OTHER CONSTANTS *******************

View File

@ -65,8 +65,8 @@ type
function VisitAllCookiesProc(const visitor: TCefCookieVisitorProc): Boolean; function VisitAllCookiesProc(const visitor: TCefCookieVisitorProc): Boolean;
function VisitUrlCookies(const url: ustring; includeHttpOnly: Boolean; const visitor: ICefCookieVisitor): Boolean; function VisitUrlCookies(const url: ustring; includeHttpOnly: Boolean; const visitor: ICefCookieVisitor): Boolean;
function VisitUrlCookiesProc(const url: ustring; includeHttpOnly: Boolean; const visitor: TCefCookieVisitorProc): Boolean; function VisitUrlCookiesProc(const url: ustring; includeHttpOnly: Boolean; const visitor: TCefCookieVisitorProc): Boolean;
function SetCookie(const url, name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; const callback: ICefSetCookieCallback): Boolean; function SetCookie(const url, name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; same_site : TCefCookieSameSite; priority : TCefCookiePriority; const callback: ICefSetCookieCallback): Boolean;
function SetCookieProc(const url: ustring; const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; const callback: TCefSetCookieCallbackProc): Boolean; function SetCookieProc(const url: ustring; const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; same_site : TCefCookieSameSite; priority : TCefCookiePriority; const callback: TCefSetCookieCallbackProc): Boolean;
function DeleteCookies(const url, cookieName: ustring; const callback: ICefDeleteCookiesCallback): Boolean; function DeleteCookies(const url, cookieName: ustring; const callback: ICefDeleteCookiesCallback): Boolean;
function DeleteCookiesProc(const url, cookieName: ustring; const callback: TCefDeleteCookiesCallbackProc): Boolean; function DeleteCookiesProc(const url, cookieName: ustring; const callback: TCefDeleteCookiesCallbackProc): Boolean;
function FlushStore(const callback: ICefCompletionCallback): Boolean; function FlushStore(const callback: ICefCompletionCallback): Boolean;
@ -131,6 +131,8 @@ end;
function TCefCookieManagerRef.SetCookie(const url, name, value, domain, path: ustring; function TCefCookieManagerRef.SetCookie(const url, name, value, domain, path: ustring;
secure, httponly, hasExpires: Boolean; secure, httponly, hasExpires: Boolean;
const creation, lastAccess, expires: TDateTime; const creation, lastAccess, expires: TDateTime;
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
const callback: ICefSetCookieCallback): Boolean; const callback: ICefSetCookieCallback): Boolean;
var var
TempURL : TCefString; TempURL : TCefString;
@ -146,6 +148,8 @@ begin
TempCookie.creation := DateTimeToCefTime(creation); TempCookie.creation := DateTimeToCefTime(creation);
TempCookie.last_access := DateTimeToCefTime(lastAccess); TempCookie.last_access := DateTimeToCefTime(lastAccess);
TempCookie.has_expires := Ord(hasExpires); TempCookie.has_expires := Ord(hasExpires);
TempCookie.same_site := same_site;
TempCookie.priority := priority;
if hasExpires then if hasExpires then
TempCookie.expires := DateTimeToCefTime(expires) TempCookie.expires := DateTimeToCefTime(expires)
@ -158,11 +162,14 @@ end;
function TCefCookieManagerRef.SetCookieProc(const url, name, value, domain, path: ustring; function TCefCookieManagerRef.SetCookieProc(const url, name, value, domain, path: ustring;
secure, httponly, hasExpires: Boolean; secure, httponly, hasExpires: Boolean;
const creation, lastAccess, expires: TDateTime; const creation, lastAccess, expires: TDateTime;
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
const callback: TCefSetCookieCallbackProc): Boolean; const callback: TCefSetCookieCallbackProc): Boolean;
begin begin
Result := SetCookie(url, name, value, domain, path, Result := SetCookie(url, name, value, domain, path,
secure, httponly, hasExpires, secure, httponly, hasExpires,
creation, lastAccess, expires, creation, lastAccess, expires,
same_site, priority,
TCefFastSetCookieCallback.Create(callback)); TCefFastSetCookieCallback.Create(callback));
end; end;

View File

@ -54,7 +54,7 @@ uses
type type
TCefCookieVisitorOwn = class(TCefBaseRefCountedOwn, ICefCookieVisitor) TCefCookieVisitorOwn = class(TCefBaseRefCountedOwn, ICefCookieVisitor)
protected protected
function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; out deleteCookie: Boolean): Boolean; virtual; function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; out deleteCookie: Boolean): Boolean; virtual;
public public
constructor Create; virtual; constructor Create; virtual;
@ -64,7 +64,7 @@ type
protected protected
FVisitor: TCefCookieVisitorProc; FVisitor: TCefCookieVisitorProc;
function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; out deleteCookie: Boolean): Boolean; override; function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; out deleteCookie: Boolean): Boolean; override;
public public
constructor Create(const visitor: TCefCookieVisitorProc); reintroduce; constructor Create(const visitor: TCefCookieVisitorProc); reintroduce;
@ -75,7 +75,7 @@ type
FEvents : Pointer; FEvents : Pointer;
FID : integer; FID : integer;
function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; out deleteCookie: Boolean): Boolean; override; function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; out deleteCookie: Boolean): Boolean; override;
public public
constructor Create(const aEvents : IChromiumEvents; aID : integer); reintroduce; constructor Create(const aEvents : IChromiumEvents; aID : integer); reintroduce;
@ -92,10 +92,11 @@ uses
{$ENDIF} {$ENDIF}
uCEFMiscFunctions, uCEFLibFunctions; uCEFMiscFunctions, uCEFLibFunctions;
function cef_cookie_visitor_visit(self: PCefCookieVisitor; function cef_cookie_visitor_visit( self : PCefCookieVisitor;
const cookie: PCefCookie; const cookie : PCefCookie;
count, total: Integer; count : Integer;
deleteCookie: PInteger): Integer; stdcall; total : Integer;
deleteCookie : PInteger): Integer; stdcall;
var var
delete : Boolean; delete : Boolean;
exp : TDateTime; exp : TDateTime;
@ -123,6 +124,8 @@ begin
exp, exp,
count, count,
total, total,
cookie^.same_site,
cookie^.priority,
delete)); delete));
deleteCookie^ := Ord(delete); deleteCookie^ := Ord(delete);
@ -141,6 +144,8 @@ function TCefCookieVisitorOwn.visit(const name, value, domain, path: ustring;
secure, httponly, hasExpires: Boolean; secure, httponly, hasExpires: Boolean;
const creation, lastAccess, expires: TDateTime; const creation, lastAccess, expires: TDateTime;
count, total: Integer; count, total: Integer;
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
out deleteCookie: Boolean): Boolean; out deleteCookie: Boolean): Boolean;
begin begin
Result := True; Result := True;
@ -159,10 +164,13 @@ function TCefFastCookieVisitor.visit(const name, value, domain, path: ustring;
secure, httponly, hasExpires: Boolean; secure, httponly, hasExpires: Boolean;
const creation, lastAccess, expires: TDateTime; const creation, lastAccess, expires: TDateTime;
count, total: Integer; count, total: Integer;
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
out deleteCookie: Boolean): Boolean; out deleteCookie: Boolean): Boolean;
begin begin
Result := FVisitor(name, value, domain, path, secure, httponly, hasExpires, Result := FVisitor(name, value, domain, path, secure, httponly, hasExpires,
creation, lastAccess, expires, count, total, deleteCookie); creation, lastAccess, expires, count, total, same_site,
priority, deleteCookie);
end; end;
@ -196,6 +204,8 @@ function TCefCustomCookieVisitor.visit(const name, value, domain, path: ustring;
secure, httponly, hasExpires: Boolean; secure, httponly, hasExpires: Boolean;
const creation, lastAccess, expires: TDateTime; const creation, lastAccess, expires: TDateTime;
count, total: Integer; count, total: Integer;
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
out deleteCookie: Boolean): Boolean; out deleteCookie: Boolean): Boolean;
var var
TempDelete : boolean; TempDelete : boolean;
@ -207,7 +217,8 @@ begin
try try
if (FEvents <> nil) then if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnCookiesVisited(name, value, domain, path, secure, httponly, hasExpires, IChromiumEvents(FEvents).doOnCookiesVisited(name, value, domain, path, secure, httponly, hasExpires,
creation, lastAccess, expires, count, total, FID, TempDelete, Result); creation, lastAccess, expires, count, total, FID,
same_site, priority, TempDelete, Result);
except except
on e : exception do on e : exception do
if CustomExceptionHandler('TCefCustomCookieVisitor.visit', e) then raise; if CustomExceptionHandler('TCefCustomCookieVisitor.visit', e) then raise;

View File

@ -150,6 +150,7 @@ type
ICefMediaRouteCreateCallback = interface; ICefMediaRouteCreateCallback = interface;
ICefMediaSink = interface; ICefMediaSink = interface;
ICefMediaSource = interface; ICefMediaSource = interface;
ICefAudioHandler = interface;
TCefv8ValueArray = array of ICefv8Value; TCefv8ValueArray = array of ICefv8Value;
TCefX509CertificateArray = array of ICefX509Certificate; TCefX509CertificateArray = array of ICefX509Certificate;
@ -242,7 +243,7 @@ type
TCefDeleteCookiesCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(numDeleted: Integer); TCefDeleteCookiesCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(numDeleted: Integer);
TCefNavigationEntryVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const entry: ICefNavigationEntry; current: Boolean; index, total: Integer): Boolean; TCefNavigationEntryVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const entry: ICefNavigationEntry; current: Boolean; index, total: Integer): Boolean;
TOnDownloadImageFinishedProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const imageUrl: ustring; httpStatusCode: Integer; const image: ICefImage); TOnDownloadImageFinishedProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const imageUrl: ustring; httpStatusCode: Integer; const image: ICefImage);
TCefCookieVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; out deleteCookie: Boolean): Boolean; TCefCookieVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; out deleteCookie: Boolean): Boolean;
TCefMediaRouteCreateCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute); TCefMediaRouteCreateCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute);
@ -420,6 +421,13 @@ type
procedure doOnRouteStateChanged(const route: ICefMediaRoute; state: TCefMediaRouteConnectionState); procedure doOnRouteStateChanged(const route: ICefMediaRoute; state: TCefMediaRouteConnectionState);
procedure doOnRouteMessageReceived(const route: ICefMediaRoute; const message_: ustring); procedure doOnRouteMessageReceived(const route: ICefMediaRoute; const message_: ustring);
// ICefAudioHandler
procedure doOnGetAudioParameters(const browser: ICefBrowser; var params: TCefAudioParameters; var aResult: boolean);
procedure doOnAudioStreamStarted(const browser: ICefBrowser; const params: TCefAudioParameters; channels: integer);
procedure doOnAudioStreamPacket(const browser: ICefBrowser; const data : PPSingle; frames: integer; pts: int64);
procedure doOnAudioStreamStopped(const browser: ICefBrowser);
procedure doOnAudioStreamError(const browser: ICefBrowser; const message_: ustring);
// Custom // Custom
procedure doCookiesDeleted(numDeleted : integer); procedure doCookiesDeleted(numDeleted : integer);
procedure doPdfPrintFinished(aResultOK : boolean); procedure doPdfPrintFinished(aResultOK : boolean);
@ -435,7 +443,7 @@ type
procedure doHttpAuthCredentialsCleared; procedure doHttpAuthCredentialsCleared;
procedure doAllConnectionsClosed; procedure doAllConnectionsClosed;
procedure doOnExecuteTaskOnCefThread(aTaskID : cardinal); procedure doOnExecuteTaskOnCefThread(aTaskID : cardinal);
procedure doOnCookiesVisited(const name_, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total, aID : Integer; var aDeleteCookie, aResult : Boolean); procedure doOnCookiesVisited(const name_, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total, aID : Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; var aDeleteCookie, aResult : Boolean);
procedure doOnCookieVisitorDestroyed(aID : integer); procedure doOnCookieVisitorDestroyed(aID : integer);
procedure doOnCookieSet(aSuccess : boolean; aID : integer); procedure doOnCookieSet(aSuccess : boolean; aID : integer);
procedure doUpdateZoomStep(aInc : boolean); procedure doUpdateZoomStep(aInc : boolean);
@ -445,6 +453,7 @@ type
procedure doSetZoomStep(aValue : byte); procedure doSetZoomStep(aValue : byte);
procedure doReadZoom; procedure doReadZoom;
procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute); procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute);
function MustCreateAudioHandler : boolean;
function MustCreateLoadHandler : boolean; function MustCreateLoadHandler : boolean;
function MustCreateFocusHandler : boolean; function MustCreateFocusHandler : boolean;
function MustCreateContextMenuHandler : boolean; function MustCreateContextMenuHandler : boolean;
@ -1244,7 +1253,7 @@ type
// /include/capi/cef_cookie_capi.h (cef_cookie_visitor_t) // /include/capi/cef_cookie_capi.h (cef_cookie_visitor_t)
ICefCookieVisitor = interface(ICefBaseRefCounted) ICefCookieVisitor = interface(ICefBaseRefCounted)
['{8378CF1B-84AB-4FDB-9B86-34DDABCCC402}'] ['{8378CF1B-84AB-4FDB-9B86-34DDABCCC402}']
function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; out deleteCookie: Boolean): Boolean; function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; out deleteCookie: Boolean): Boolean;
end; end;
// TCefCommandLine // TCefCommandLine
@ -1442,8 +1451,8 @@ type
function VisitAllCookiesProc(const visitor: TCefCookieVisitorProc): Boolean; function VisitAllCookiesProc(const visitor: TCefCookieVisitorProc): Boolean;
function VisitUrlCookies(const url: ustring; includeHttpOnly: Boolean; const visitor: ICefCookieVisitor): Boolean; function VisitUrlCookies(const url: ustring; includeHttpOnly: Boolean; const visitor: ICefCookieVisitor): Boolean;
function VisitUrlCookiesProc(const url: ustring; includeHttpOnly: Boolean; const visitor: TCefCookieVisitorProc): Boolean; function VisitUrlCookiesProc(const url: ustring; includeHttpOnly: Boolean; const visitor: TCefCookieVisitorProc): Boolean;
function SetCookie(const url, name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; const callback: ICefSetCookieCallback): Boolean; function SetCookie(const url, name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; same_site : TCefCookieSameSite; priority : TCefCookiePriority; const callback: ICefSetCookieCallback): Boolean;
function SetCookieProc(const url: ustring; const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; const callback: TCefSetCookieCallbackProc): Boolean; function SetCookieProc(const url: ustring; const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; same_site : TCefCookieSameSite; priority : TCefCookiePriority; const callback: TCefSetCookieCallbackProc): Boolean;
function DeleteCookies(const url, cookieName: ustring; const callback: ICefDeleteCookiesCallback): Boolean; function DeleteCookies(const url, cookieName: ustring; const callback: ICefDeleteCookiesCallback): Boolean;
function DeleteCookiesProc(const url, cookieName: ustring; const callback: TCefDeleteCookiesCallbackProc): Boolean; function DeleteCookiesProc(const url, cookieName: ustring; const callback: TCefDeleteCookiesCallbackProc): Boolean;
function FlushStore(const callback: ICefCompletionCallback): Boolean; function FlushStore(const callback: ICefCompletionCallback): Boolean;
@ -1915,6 +1924,19 @@ type
procedure RemoveReferences; // custom procedure to clear all references procedure RemoveReferences; // custom procedure to clear all references
end; end;
// TCefAudioHandler
// /include/capi/cef_audio_handler_capi.h (cef_audio_handler_t)
ICefAudioHandler = interface(ICefBaseRefCounted)
['{8963271A-0B94-4279-82C8-FB2EA7B3CDEC}']
procedure OnGetAudioParameters(const browser: ICefBrowser; var params: TCefAudioParameters; var aResult: boolean);
procedure OnAudioStreamStarted(const browser: ICefBrowser; const params: TCefAudioParameters; channels: integer);
procedure OnAudioStreamPacket(const browser: ICefBrowser; const data : PPSingle; frames: integer; pts: int64);
procedure OnAudioStreamStopped(const browser: ICefBrowser);
procedure OnAudioStreamError(const browser: ICefBrowser; const message_: ustring);
procedure RemoveReferences; // custom procedure to clear all references
end;
// TCefRunContextMenuCallback // TCefRunContextMenuCallback
// /include/capi/cef_context_menu_handler_capi.h (cef_run_context_menu_callback_t) // /include/capi/cef_context_menu_handler_capi.h (cef_run_context_menu_callback_t)
ICefRunContextMenuCallback = interface(ICefBaseRefCounted) ICefRunContextMenuCallback = interface(ICefBaseRefCounted)
@ -1980,6 +2002,7 @@ type
// /include/capi/cef_client_capi.h (cef_client_t) // /include/capi/cef_client_capi.h (cef_client_t)
ICefClient = interface(ICefBaseRefCounted) ICefClient = interface(ICefBaseRefCounted)
['{1D502075-2FF0-4E13-A112-9E541CD811F4}'] ['{1D502075-2FF0-4E13-A112-9E541CD811F4}']
procedure GetAudioHandler(var aHandler : ICefAudioHandler);
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
procedure GetDialogHandler(var aHandler : ICefDialogHandler); procedure GetDialogHandler(var aHandler : ICefDialogHandler);
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); procedure GetDisplayHandler(var aHandler : ICefDisplayHandler);

View File

@ -138,6 +138,8 @@ type
PCefLifeSpanHandler = ^TCefLifeSpanHandler; PCefLifeSpanHandler = ^TCefLifeSpanHandler;
PCefGetExtensionResourceCallback = ^TCefGetExtensionResourceCallback; PCefGetExtensionResourceCallback = ^TCefGetExtensionResourceCallback;
PCefExtensionHandler = ^TCefExtensionHandler; PCefExtensionHandler = ^TCefExtensionHandler;
PCefAudioHandler = ^TCefAudioHandler;
PCefAudioParameters = ^TCefAudioParameters;
PCefExtension = ^TCefExtension; PCefExtension = ^TCefExtension;
PCefPopupFeatures = ^TCefPopupFeatures; PCefPopupFeatures = ^TCefPopupFeatures;
PCefBrowserSettings = ^TCefBrowserSettings; PCefBrowserSettings = ^TCefBrowserSettings;
@ -269,6 +271,18 @@ type
{$ENDIF} {$ENDIF}
// All these types are declared as constants in uCEFConstants.pas.
// Search the type name between the parentheses in uCEFConstants.pas.
//
// Open the original header file for more details :
// https://github.com/chromiumembedded/cef/blob/master/include/internal/cef_types.h
// https://github.com/chromiumembedded/cef/blob/master/include/internal/cef_thread_internal.h
// https://github.com/chromiumembedded/cef/blob/master/include/internal/cef_string_list.h
// https://github.com/chromiumembedded/cef/blob/master/include/internal/cef_string_map.h
// https://github.com/chromiumembedded/cef/blob/master/include/internal/cef_string_multimap.h
TCefPlatformThreadId = DWORD; // /include/internal/cef_thread_internal.h (cef_platform_thread_id_t) TCefPlatformThreadId = DWORD; // /include/internal/cef_thread_internal.h (cef_platform_thread_id_t)
TCefPlatformThreadHandle = DWORD; // /include/internal/cef_thread_internal.h (cef_platform_thread_handle_t) TCefPlatformThreadHandle = DWORD; // /include/internal/cef_thread_internal.h (cef_platform_thread_handle_t)
TCefTransitionType = Cardinal; // /include/internal/cef_types.h (cef_transition_type_t) TCefTransitionType = Cardinal; // /include/internal/cef_types.h (cef_transition_type_t)
@ -297,6 +311,10 @@ type
TCefDuplexMode = Integer; // /include/internal/cef_types.h (cef_duplex_mode_t) TCefDuplexMode = Integer; // /include/internal/cef_types.h (cef_duplex_mode_t)
TCefSchemeOptions = Integer; // /include/internal/cef_types.h (cef_scheme_options_t) TCefSchemeOptions = Integer; // /include/internal/cef_types.h (cef_scheme_options_t)
TCefMediaRouterCreateResult = Integer; // /include/internal/cef_types.h (cef_media_route_create_result_t) TCefMediaRouterCreateResult = Integer; // /include/internal/cef_types.h (cef_media_route_create_result_t)
TCefCookiePriority = Integer; // /include/internal/cef_types.h (cef_cookie_priority_t)
{$IFDEF FPC} {$IFDEF FPC}
@ -727,6 +745,51 @@ type
CEF_POINTER_TYPE_UNKNOWN CEF_POINTER_TYPE_UNKNOWN
); );
// /include/internal/cef_types.h (cef_channel_layout_t)
TCefChannelLayout = (
CEF_CHANNEL_LAYOUT_NONE = 0,
CEF_CHANNEL_LAYOUT_UNSUPPORTED,
CEF_CHANNEL_LAYOUT_MONO,
CEF_CHANNEL_LAYOUT_STEREO,
CEF_CHANNEL_LAYOUT_2_1,
CEF_CHANNEL_LAYOUT_SURROUND,
CEF_CHANNEL_LAYOUT_4_0,
CEF_CHANNEL_LAYOUT_2_2,
CEF_CHANNEL_LAYOUT_QUAD,
CEF_CHANNEL_LAYOUT_5_0,
CEF_CHANNEL_LAYOUT_5_1,
CEF_CHANNEL_LAYOUT_5_0_BACK,
CEF_CHANNEL_LAYOUT_5_1_BACK,
CEF_CHANNEL_LAYOUT_7_0,
CEF_CHANNEL_LAYOUT_7_1,
CEF_CHANNEL_LAYOUT_7_1_WIDE,
CEF_CHANNEL_LAYOUT_STEREO_DOWNMIX,
CEF_CHANNEL_LAYOUT_2POINT1,
CEF_CHANNEL_LAYOUT_3_1,
CEF_CHANNEL_LAYOUT_4_1,
CEF_CHANNEL_LAYOUT_6_0,
CEF_CHANNEL_LAYOUT_6_0_FRONT,
CEF_CHANNEL_LAYOUT_HEXAGONAL,
CEF_CHANNEL_LAYOUT_6_1,
CEF_CHANNEL_LAYOUT_6_1_BACK,
CEF_CHANNEL_LAYOUT_6_1_FRONT,
CEF_CHANNEL_LAYOUT_7_0_FRONT,
CEF_CHANNEL_LAYOUT_7_1_WIDE_BACK,
CEF_CHANNEL_LAYOUT_OCTAGONAL,
CEF_CHANNEL_LAYOUT_DISCRETE,
CEF_CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC,
CEF_CHANNEL_LAYOUT_4_1_QUAD_SIDE,
CEF_CHANNEL_LAYOUT_BITSTREAM // CEF_CHANNEL_LAYOUT_MAX = CEF_CHANNEL_LAYOUT_BITSTREAM
);
// /include/internal/cef_types.h (cef_cookie_same_site_t)
TCefCookieSameSite = (
CEF_COOKIE_SAME_SITE_UNSPECIFIED,
CEF_COOKIE_SAME_SITE_NO_RESTRICTION,
CEF_COOKIE_SAME_SITE_LAX_MODE,
CEF_COOKIE_SAME_SITE_STRICT_MODE
);
// /include/internal/cef_types.h (cef_paint_element_type_t) // /include/internal/cef_types.h (cef_paint_element_type_t)
TCefPaintElementType = ( TCefPaintElementType = (
PET_VIEW, PET_VIEW,
@ -778,7 +841,13 @@ type
CT_ZOOMOUT, CT_ZOOMOUT,
CT_GRAB, CT_GRAB,
CT_GRABBING, CT_GRABBING,
CT_CUSTOM CT_MIDDLE_PANNING_VERTICAL,
CT_MIDDLE_PANNING_HORIZONTAL,
CT_CUSTOM,
CT_DND_NONE,
CT_DND_MOVE,
CT_DND_COPY,
CT_DND_LIN
); );
// /include/internal/cef_types.h (cef_navigation_type_t) // /include/internal/cef_types.h (cef_navigation_type_t)
@ -1275,6 +1344,8 @@ type
last_access : TCefTime; last_access : TCefTime;
has_expires : Integer; has_expires : Integer;
expires : TCefTime; expires : TCefTime;
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
end; end;
TCookie = record TCookie = record
@ -1288,6 +1359,8 @@ type
secure : boolean; secure : boolean;
httponly : boolean; httponly : boolean;
has_expires : boolean; has_expires : boolean;
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
end; end;
// /include/internal/cef_types.h (cef_pdf_print_settings_t) // /include/internal/cef_types.h (cef_pdf_print_settings_t)
@ -1329,6 +1402,13 @@ type
pointer_type : TCefPointerType; pointer_type : TCefPointerType;
end; end;
// /include/internal/cef_types.h (cef_audio_parameters_t)
TCefAudioParameters = record
channel_layout : TCefChannelLayout;
sample_rate : integer;
frames_per_buffer : integer;
end;
// /include/capi/cef_base_capi.h (cef_base_ref_counted_t) // /include/capi/cef_base_capi.h (cef_base_ref_counted_t)
TCefBaseRefCounted = record TCefBaseRefCounted = record
size : NativeUInt; size : NativeUInt;
@ -1581,6 +1661,16 @@ type
get_extension_resource : function(self: PCefExtensionHandler; extension: PCefExtension; browser: PCefBrowser; const file_: PCefString; callback: PCefGetExtensionResourceCallback): Integer; stdcall; get_extension_resource : function(self: PCefExtensionHandler; extension: PCefExtension; browser: PCefBrowser; const file_: PCefString; callback: PCefGetExtensionResourceCallback): Integer; stdcall;
end; end;
// /include/capi/cef_audio_handler_capi.h (cef_audio_handler_t)
TCefAudioHandler = record
base : TCefBaseRefCounted;
get_audio_parameters : function(self: PCefAudioHandler; browser: PCefBrowser; params: PCefAudioParameters): Integer; stdcall;
on_audio_stream_started : procedure(self: PCefAudioHandler; browser: PCefBrowser; const params: PCefAudioParameters; channels: integer); stdcall;
on_audio_stream_packet : procedure(self: PCefAudioHandler; browser: PCefBrowser; const data : PPSingle; frames: integer; pts: int64); stdcall;
on_audio_stream_stopped : procedure(self: PCefAudioHandler; browser: PCefBrowser); stdcall;
on_audio_stream_error : procedure(self: PCefAudioHandler; browser: PCefBrowser; const message_: PCefString); stdcall;
end;
// /include/capi/cef_extension_capi.h (cef_extension_t) // /include/capi/cef_extension_capi.h (cef_extension_t)
TCefExtension = record TCefExtension = record
base : TCefBaseRefCounted; base : TCefBaseRefCounted;
@ -2725,6 +2815,7 @@ type
// /include/capi/cef_client_capi.h (cef_client_t) // /include/capi/cef_client_capi.h (cef_client_t)
TCefClient = record TCefClient = record
base : TCefBaseRefCounted; base : TCefBaseRefCounted;
get_audio_handler : function(self: PCefClient): PCefAudioHandler; stdcall;
get_context_menu_handler : function(self: PCefClient): PCefContextMenuHandler; stdcall; get_context_menu_handler : function(self: PCefClient): PCefContextMenuHandler; stdcall;
get_dialog_handler : function(self: PCefClient): PCefDialogHandler; stdcall; get_dialog_handler : function(self: PCefClient): PCefDialogHandler; stdcall;
get_display_handler : function(self: PCefClient): PCefDisplayHandler; stdcall; get_display_handler : function(self: PCefClient): PCefDisplayHandler; stdcall;

View File

@ -2,9 +2,9 @@
"UpdateLazPackages" : [ "UpdateLazPackages" : [
{ {
"ForceNotify" : true, "ForceNotify" : true,
"InternalVersion" : 138, "InternalVersion" : 139,
"Name" : "cef4delphi_lazarus.lpk", "Name" : "cef4delphi_lazarus.lpk",
"Version" : "81.3.10.0" "Version" : "83.3.9.0"
} }
], ],
"UpdatePackageData" : { "UpdatePackageData" : {