mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2024-11-15 15:55:56 +01:00
Update to CEF 101.0.15
This commit is contained in:
parent
455a75c849
commit
3bca41ef4a
16
README.md
16
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 100.0.24 which includes Chromium 100.0.4896.127.
|
||||
CEF4Delphi uses CEF 101.0.15 which includes Chromium 101.0.4951.54.
|
||||
|
||||
The CEF binaries used by CEF4Delphi are available for download at Spotify :
|
||||
* [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_100.0.24%2Bg0783cf8%2Bchromium-100.0.4896.127_windows32.tar.bz2)
|
||||
* [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_100.0.24%2Bg0783cf8%2Bchromium-100.0.4896.127_windows64.tar.bz2)
|
||||
* [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_100.0.24%2Bg0783cf8%2Bchromium-100.0.4896.127_linux32.tar.bz2)
|
||||
* [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_100.0.24%2Bg0783cf8%2Bchromium-100.0.4896.127_linux64.tar.bz2)
|
||||
* [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_100.0.24%2Bg0783cf8%2Bchromium-100.0.4896.127_linuxarm.tar.bz2)
|
||||
* [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_100.0.24%2Bg0783cf8%2Bchromium-100.0.4896.127_linuxarm64.tar.bz2)
|
||||
* [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_100.0.24%2Bg0783cf8%2Bchromium-100.0.4896.127_macosx64.tar.bz2)
|
||||
* [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_101.0.15%2Bgca159c5%2Bchromium-101.0.4951.54_windows32.tar.bz2)
|
||||
* [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_101.0.15%2Bgca159c5%2Bchromium-101.0.4951.54_windows64.tar.bz2)
|
||||
* [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_101.0.15%2Bgca159c5%2Bchromium-101.0.4951.54_linux32.tar.bz2)
|
||||
* [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_101.0.15%2Bgca159c5%2Bchromium-101.0.4951.54_linux64.tar.bz2)
|
||||
* [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_101.0.15%2Bgca159c5%2Bchromium-101.0.4951.54_linuxarm.tar.bz2)
|
||||
* [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_101.0.15%2Bgca159c5%2Bchromium-101.0.4951.54_linuxarm64.tar.bz2)
|
||||
* [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_101.0.15%2Bgca159c5%2Bchromium-101.0.4951.54_macosx64.tar.bz2)
|
||||
|
||||
CEF4Delphi was developed and tested on Delphi 11.1 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2, Delphi 10.3, Delphi 10.4 and Lazarus 2.2.0/FPC 3.2.2. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components.
|
||||
|
||||
|
@ -285,6 +285,7 @@ object MiniBrowserFrm: TMiniBrowserFrm
|
||||
OnStatusMessage = Chromium1StatusMessage
|
||||
OnLoadingProgressChange = Chromium1LoadingProgressChange
|
||||
OnCursorChange = Chromium1CursorChange
|
||||
OnCanDownload = Chromium1CanDownload
|
||||
OnBeforeDownload = Chromium1BeforeDownload
|
||||
OnDownloadUpdated = Chromium1DownloadUpdated
|
||||
OnAfterCreated = Chromium1AfterCreated
|
||||
@ -398,6 +399,10 @@ object MiniBrowserFrm: TMiniBrowserFrm
|
||||
Caption = 'User agent...'
|
||||
OnClick = Useragent1Click
|
||||
end
|
||||
object Allowdownloads1: TMenuItem
|
||||
Caption = 'Allow downloads'
|
||||
OnClick = Allowdownloads1Click
|
||||
end
|
||||
object N5: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
|
@ -145,6 +145,7 @@ type
|
||||
ClearallstorageforcurrentURL1: TMenuItem;
|
||||
CEFinfo1: TMenuItem;
|
||||
SaveasMHTML1: TMenuItem;
|
||||
Allowdownloads1: TMenuItem;
|
||||
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
@ -186,6 +187,7 @@ type
|
||||
procedure Chromium1FileDialog(Sender: TObject; const browser: ICefBrowser; mode: Cardinal; const title, defaultFilePath: ustring; const acceptFilters: TStrings; selectedAcceptFilter: Integer; const callback: ICefFileDialogCallback; out Result: Boolean);
|
||||
procedure Chromium1SelectClientCertificate(Sender: TObject; const browser: ICefBrowser; isProxy: Boolean; const host: ustring; port: Integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback; var aResult: Boolean);
|
||||
procedure Chromium1CursorChange(Sender: TObject; const browser: ICefBrowser; cursor_: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo; var aResult: Boolean);
|
||||
procedure Chromium1CanDownload(Sender: TObject; const browser: ICefBrowser; const url, request_method: ustring; var aResult: Boolean);
|
||||
|
||||
procedure BackBtnClick(Sender: TObject);
|
||||
procedure ForwardBtnClick(Sender: TObject);
|
||||
@ -217,6 +219,7 @@ type
|
||||
procedure ClearallstorageforcurrentURL1Click(Sender: TObject);
|
||||
procedure CEFinfo1Click(Sender: TObject);
|
||||
procedure SaveasMHTML1Click(Sender: TObject);
|
||||
procedure Allowdownloads1Click(Sender: TObject);
|
||||
|
||||
protected
|
||||
FPendingMsgID : integer;
|
||||
@ -225,6 +228,7 @@ type
|
||||
FHasShutdownReason : boolean;
|
||||
FSelectCertCallback : ICefSelectClientCertificateCallback;
|
||||
FCertificates : TCefX509CertificateArray;
|
||||
FAllowDownloads : boolean;
|
||||
|
||||
FResponse : TStringList;
|
||||
FRequest : TStringList;
|
||||
@ -482,6 +486,13 @@ begin
|
||||
InspectRequest(request);
|
||||
end;
|
||||
|
||||
procedure TMiniBrowserFrm.Chromium1CanDownload(Sender: TObject;
|
||||
const browser: ICefBrowser; const url, request_method: ustring;
|
||||
var aResult: Boolean);
|
||||
begin
|
||||
aResult := FAllowDownloads;
|
||||
end;
|
||||
|
||||
procedure TMiniBrowserFrm.Chromium1CertificateError(Sender: TObject;
|
||||
const browser: ICefBrowser; certError: Integer;
|
||||
const requestUrl: ustring; const sslInfo: ICefSslInfo;
|
||||
@ -872,6 +883,11 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMiniBrowserFrm.Allowdownloads1Click(Sender: TObject);
|
||||
begin
|
||||
FAllowDownloads := not(FAllowDownloads);
|
||||
end;
|
||||
|
||||
procedure TMiniBrowserFrm.ApplicationEvents1Message(var Msg: tagMSG;
|
||||
var Handled: Boolean);
|
||||
begin
|
||||
@ -1263,6 +1279,7 @@ begin
|
||||
FSelectCertCallback := nil;
|
||||
FCertificates := nil;
|
||||
FPendingMsgID := 0;
|
||||
FAllowDownloads := True;
|
||||
|
||||
// Windows may show this text message while shutting down the operating system
|
||||
FShutdownReason := 'MiniBrowser closing...';
|
||||
@ -1584,6 +1601,8 @@ begin
|
||||
DevTools1.Caption := 'Hide DevTools'
|
||||
else
|
||||
DevTools1.Caption := 'Show DevTools';
|
||||
|
||||
Allowdownloads1.Checked := FAllowDownloads;
|
||||
end;
|
||||
|
||||
procedure TMiniBrowserFrm.Preferences1Click(Sender: TObject);
|
||||
|
@ -258,6 +258,7 @@ object MiniBrowserFrm: TMiniBrowserFrm
|
||||
OnStatusMessage = Chromium1StatusMessage
|
||||
OnLoadingProgressChange = Chromium1LoadingProgressChange
|
||||
OnCursorChange = Chromium1CursorChange
|
||||
OnCanDownload = Chromium1CanDownload
|
||||
OnBeforeDownload = Chromium1BeforeDownload
|
||||
OnDownloadUpdated = Chromium1DownloadUpdated
|
||||
OnAfterCreated = Chromium1AfterCreated
|
||||
@ -349,6 +350,10 @@ object MiniBrowserFrm: TMiniBrowserFrm
|
||||
Caption = 'Flush cookies'
|
||||
OnClick = MenuItem3Click
|
||||
end
|
||||
object Allowdownloads1: TMenuItem
|
||||
Caption = 'Allow downloads'
|
||||
OnClick = Allowdownloads1Click
|
||||
end
|
||||
object N5: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
|
@ -94,6 +94,7 @@ type
|
||||
MenuItem4: TMenuItem;
|
||||
MenuItem5: TMenuItem;
|
||||
MenuItem6: TMenuItem;
|
||||
Allowdownloads1: TMenuItem;
|
||||
NavControlPnl: TPanel;
|
||||
NavButtonPnl: TPanel;
|
||||
StatusPnl: TPanel;
|
||||
@ -132,7 +133,10 @@ type
|
||||
OpenfilewithaDAT1: TMenuItem;
|
||||
N5: TMenuItem;
|
||||
Memoryinfo1: TMenuItem;
|
||||
procedure Allowdownloads1Click(Sender: TObject);
|
||||
procedure CEFWindowParent1DragDrop(Sender, Source: TObject; X, Y: Integer);
|
||||
procedure Chromium1CanDownload(Sender: TObject; const browser: ICefBrowser;
|
||||
const url, request_method: ustring; var aResult: boolean);
|
||||
procedure Chromium1CookiesFlushed(Sender: TObject);
|
||||
procedure Chromium1CursorChange(Sender: TObject;
|
||||
const browser: ICefBrowser; cursor_: TCefCursorHandle;
|
||||
@ -246,11 +250,12 @@ type
|
||||
var aResult: Boolean);
|
||||
|
||||
protected
|
||||
FResponse : TStringList;
|
||||
FRequest : TStringList;
|
||||
FNavigation : TStringList;
|
||||
FShutdownReason : string;
|
||||
FHasShutdownReason : boolean;
|
||||
FResponse : TStringList;
|
||||
FRequest : TStringList;
|
||||
FNavigation : TStringList;
|
||||
FShutdownReason : string;
|
||||
FHasShutdownReason : boolean;
|
||||
FAllowDownloads : boolean;
|
||||
|
||||
// Variables to control when can we destroy the form safely
|
||||
FCanClose : boolean; // Set to True in TChromium.OnBeforeClose
|
||||
@ -323,7 +328,8 @@ begin
|
||||
GlobalCEFApp.cache := 'cache';
|
||||
GlobalCEFApp.LogFile := 'debug.log';
|
||||
GlobalCEFApp.LogSeverity := LOGSEVERITY_INFO;
|
||||
GlobalCEFApp.EnablePrintPreview := True;
|
||||
GlobalCEFApp.EnablePrintPreview := True;
|
||||
GlobalCEFApp.EnableGPU := True;
|
||||
end;
|
||||
|
||||
procedure TMiniBrowserFrm.BackBtnClick(Sender: TObject);
|
||||
@ -1065,6 +1071,7 @@ begin
|
||||
FRequest := TStringList.Create;
|
||||
FNavigation := TStringList.Create;
|
||||
FPendingMsgID := 0;
|
||||
FAllowDownloads := True;
|
||||
|
||||
// Windows may show this text message while shutting down the operating system
|
||||
FShutdownReason := 'MiniBrowser closing...';
|
||||
@ -1183,6 +1190,18 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TMiniBrowserFrm.Chromium1CanDownload(Sender: TObject;
|
||||
const browser: ICefBrowser; const url, request_method: ustring;
|
||||
var aResult: boolean);
|
||||
begin
|
||||
aResult := FAllowDownloads;
|
||||
end;
|
||||
|
||||
procedure TMiniBrowserFrm.Allowdownloads1Click(Sender: TObject);
|
||||
begin
|
||||
FAllowDownloads := not(FAllowDownloads);
|
||||
end;
|
||||
|
||||
procedure TMiniBrowserFrm.CookiesFlushedMsg(var aMessage : TMessage);
|
||||
begin
|
||||
showmessage('The cookies were flushed successfully');
|
||||
@ -1410,7 +1429,9 @@ begin
|
||||
if DevTools.Visible then
|
||||
DevTools1.Caption := 'Hide DevTools'
|
||||
else
|
||||
DevTools1.Caption := 'Show DevTools';
|
||||
DevTools1.Caption := 'Show DevTools';
|
||||
|
||||
Allowdownloads1.Checked := FAllowDownloads;
|
||||
end;
|
||||
|
||||
procedure TMiniBrowserFrm.Preferences1Click(Sender: TObject);
|
||||
|
@ -222,7 +222,8 @@ contains
|
||||
uCEFTimerWorkScheduler in '..\source\uCEFTimerWorkScheduler.pas',
|
||||
uCEFFrameHandler in '..\source\uCEFFrameHandler.pas',
|
||||
uCEFOverlayController in '..\source\uCEFOverlayController.pas',
|
||||
uCEFFileDialogInfo in '..\source\uCEFFileDialogInfo.pas';
|
||||
uCEFFileDialogInfo in '..\source\uCEFFileDialogInfo.pas',
|
||||
uCEFCommandHandler in '..\source\uCEFCommandHandler.pas';
|
||||
|
||||
end.
|
||||
|
||||
|
@ -222,7 +222,8 @@ contains
|
||||
uCEFFrameHandler in '..\source\uCEFFrameHandler.pas',
|
||||
uCEFOverlayController in '..\source\uCEFOverlayController.pas',
|
||||
uCEFFileDialogInfo in '..\source\uCEFFileDialogInfo.pas',
|
||||
uCEFArgCopy in '..\source\uCEFArgCopy.pas';
|
||||
uCEFArgCopy in '..\source\uCEFArgCopy.pas',
|
||||
uCEFCommandHandler in '..\source\uCEFCommandHandler.pas';
|
||||
|
||||
end.
|
||||
|
||||
|
@ -304,6 +304,7 @@
|
||||
<DCCReference Include="..\source\uCEFOverlayController.pas"/>
|
||||
<DCCReference Include="..\source\uCEFFileDialogInfo.pas"/>
|
||||
<DCCReference Include="..\source\uCEFArgCopy.pas"/>
|
||||
<DCCReference Include="..\source\uCEFCommandHandler.pas"/>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
|
@ -21,8 +21,8 @@
|
||||
</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="100" Release="24"/>
|
||||
<Files Count="201">
|
||||
<Version Major="101" Release="15"/>
|
||||
<Files Count="202">
|
||||
<Item1>
|
||||
<Filename Value="..\source\uCEFAccessibilityHandler.pas"/>
|
||||
<UnitName Value="uCEFAccessibilityHandler"/>
|
||||
@ -845,6 +845,10 @@
|
||||
<Filename Value="..\source\uCEFArgCopy.pas"/>
|
||||
<UnitName Value="uCEFArgCopy"/>
|
||||
</Item201>
|
||||
<Item202>
|
||||
<Filename Value="..\source\uCEFCommandHandler.pas"/>
|
||||
<UnitName Value="uCEFCommandHandler"/>
|
||||
</Item202>
|
||||
</Files>
|
||||
<CompatibilityMode Value="True"/>
|
||||
<RequiredPkgs Count="5">
|
||||
|
@ -66,7 +66,7 @@ uses
|
||||
uCEFWorkSchedulerQueueThread, uCEFLinkedWinControlBase, uCEFLazarusCocoa,
|
||||
uCEFBrowserWindow, uCEFOsrBrowserWindow, uCEFTimerWorkScheduler,
|
||||
uCEFFrameHandler, uCEFOverlayController, uCEFFileDialogInfo, uCEFArgCopy,
|
||||
LazarusPackageIntf;
|
||||
uCEFCommandHandler, LazarusPackageIntf;
|
||||
|
||||
implementation
|
||||
|
||||
|
@ -66,15 +66,15 @@ uses
|
||||
uCEFTypes, uCEFInterfaces, uCEFBaseRefCounted, uCEFSchemeRegistrar;
|
||||
|
||||
const
|
||||
CEF_SUPPORTED_VERSION_MAJOR = 100;
|
||||
CEF_SUPPORTED_VERSION_MAJOR = 101;
|
||||
CEF_SUPPORTED_VERSION_MINOR = 0;
|
||||
CEF_SUPPORTED_VERSION_RELEASE = 24;
|
||||
CEF_SUPPORTED_VERSION_RELEASE = 15;
|
||||
CEF_SUPPORTED_VERSION_BUILD = 0;
|
||||
|
||||
CEF_CHROMEELF_VERSION_MAJOR = 100;
|
||||
CEF_CHROMEELF_VERSION_MAJOR = 101;
|
||||
CEF_CHROMEELF_VERSION_MINOR = 0;
|
||||
CEF_CHROMEELF_VERSION_RELEASE = 4896;
|
||||
CEF_CHROMEELF_VERSION_BUILD = 127;
|
||||
CEF_CHROMEELF_VERSION_RELEASE = 4951;
|
||||
CEF_CHROMEELF_VERSION_BUILD = 54;
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
LIBCEF_DLL = 'libcef.dll';
|
||||
@ -131,7 +131,6 @@ type
|
||||
FAcceptLanguageList : ustring;
|
||||
FCookieableSchemesList : ustring;
|
||||
FCookieableSchemesExcludeDefaults : boolean;
|
||||
FApplicationClientID : ustring;
|
||||
|
||||
// Fields used to set command line switches
|
||||
FSingleProcess : boolean;
|
||||
@ -446,7 +445,6 @@ type
|
||||
property AcceptLanguageList : ustring read FAcceptLanguageList write FAcceptLanguageList;
|
||||
property CookieableSchemesList : ustring read FCookieableSchemesList write FCookieableSchemesList;
|
||||
property CookieableSchemesExcludeDefaults : boolean read FCookieableSchemesExcludeDefaults write FCookieableSchemesExcludeDefaults;
|
||||
property ApplicationClientID : ustring read FApplicationClientID write FApplicationClientID;
|
||||
|
||||
// Properties used to set command line switches
|
||||
property SingleProcess : Boolean read FSingleProcess write FSingleProcess; // --single-process
|
||||
@ -694,7 +692,6 @@ begin
|
||||
FAcceptLanguageList := '';
|
||||
FCookieableSchemesList := '';
|
||||
FCookieableSchemesExcludeDefaults := False;
|
||||
FApplicationClientID := '';
|
||||
|
||||
// Fields used to set command line switches
|
||||
FSingleProcess := False;
|
||||
@ -1426,7 +1423,6 @@ begin
|
||||
aSettings.accept_language_list := CefString(FAcceptLanguageList);
|
||||
aSettings.cookieable_schemes_list := CefString(FCookieableSchemesList);
|
||||
aSettings.cookieable_schemes_exclude_defaults := Ord(FCookieableSchemesExcludeDefaults);
|
||||
aSettings.application_client_id_for_file_scanning := CefString(FApplicationClientID);
|
||||
end;
|
||||
|
||||
function TCefApplicationCore.InitializeLibrary(const aApp : ICefApp) : boolean;
|
||||
|
@ -198,6 +198,7 @@ type
|
||||
FOnCursorChange : TOnCursorChange;
|
||||
|
||||
// ICefDownloadHandler
|
||||
FOnCanDownload : TOnCanDownloadEvent;
|
||||
FOnBeforeDownload : TOnBeforeDownload;
|
||||
FOnDownloadUpdated : TOnDownloadUpdated;
|
||||
|
||||
@ -316,6 +317,9 @@ type
|
||||
FOnFrameDetached : TOnFrameDetached;
|
||||
FOnMainFrameChanged : TOnMainFrameChanged;
|
||||
|
||||
// ICefCommandHandler
|
||||
FOnChromeCommand : TOnChromeCommandEvent;
|
||||
|
||||
// Custom
|
||||
FOnTextResultAvailable : TOnTextResultAvailableEvent;
|
||||
FOnPdfPrintFinished : TOnPdfPrintFinishedEvent;
|
||||
@ -534,6 +538,7 @@ type
|
||||
procedure doOnCursorChange(const browser: ICefBrowser; cursor_: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo; var aResult : boolean); virtual;
|
||||
|
||||
// ICefDownloadHandler
|
||||
function doOnCanDownload(const browser: ICefBrowser; const url, request_method: ustring): boolean;
|
||||
procedure doOnBeforeDownload(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback); virtual;
|
||||
procedure doOnDownloadUpdated(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback); virtual;
|
||||
|
||||
@ -649,6 +654,9 @@ type
|
||||
procedure doOnFrameDetached(const browser: ICefBrowser; const frame: ICefFrame);
|
||||
procedure doOnMainFrameChanged(const browser: ICefBrowser; const old_frame, new_frame: ICefFrame);
|
||||
|
||||
// ICefCommandHandler
|
||||
function doOnChromeCommand(const browser: ICefBrowser; command_id: integer; disposition: TCefWindowOpenDisposition): boolean;
|
||||
|
||||
// Custom
|
||||
procedure GetSettings(var aSettings : TCefBrowserSettings);
|
||||
procedure doCookiesDeleted(numDeleted : integer); virtual;
|
||||
@ -678,6 +686,7 @@ type
|
||||
procedure doOnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring); virtual;
|
||||
procedure doBrowserNavigation(aTask : TCefBrowserNavigation); virtual;
|
||||
function MustCreateAudioHandler : boolean; virtual;
|
||||
function MustCreateCommandHandler : boolean; virtual;
|
||||
function MustCreateDevToolsMessageObserver : boolean; virtual;
|
||||
function MustCreateLoadHandler : boolean; virtual;
|
||||
function MustCreateFocusHandler : boolean; virtual;
|
||||
@ -1016,6 +1025,7 @@ type
|
||||
property OnCursorChange : TOnCursorChange read FOnCursorChange write FOnCursorChange;
|
||||
|
||||
// ICefDownloadHandler
|
||||
property OnCanDownload : TOnCanDownloadEvent read FOnCanDownload write FOnCanDownload;
|
||||
property OnBeforeDownload : TOnBeforeDownload read FOnBeforeDownload write FOnBeforeDownload;
|
||||
property OnDownloadUpdated : TOnDownloadUpdated read FOnDownloadUpdated write FOnDownloadUpdated;
|
||||
|
||||
@ -1135,6 +1145,9 @@ type
|
||||
property OnFrameAttached : TOnFrameAttached read FOnFrameAttached write FOnFrameAttached;
|
||||
property OnFrameDetached : TOnFrameDetached read FOnFrameDetached write FOnFrameDetached;
|
||||
property OnMainFrameChanged : TOnMainFrameChanged read FOnMainFrameChanged write FOnMainFrameChanged;
|
||||
|
||||
// ICefCommandHandler
|
||||
property OnChromeCommand : TOnChromeCommandEvent read FOnChromeCommand write FOnChromeCommand;
|
||||
end;
|
||||
|
||||
TBrowserInfo = class
|
||||
@ -1734,6 +1747,7 @@ begin
|
||||
FOnCursorChange := nil;
|
||||
|
||||
// ICefDownloadHandler
|
||||
FOnCanDownload := nil;
|
||||
FOnBeforeDownload := nil;
|
||||
FOnDownloadUpdated := nil;
|
||||
|
||||
@ -1852,6 +1866,9 @@ begin
|
||||
FOnFrameDetached := nil;
|
||||
FOnMainFrameChanged := nil;
|
||||
|
||||
// ICefCommandHandler
|
||||
FOnChromeCommand := nil;
|
||||
|
||||
// Custom
|
||||
FOnTextResultAvailable := nil;
|
||||
FOnPdfPrintFinished := nil;
|
||||
@ -2387,6 +2404,7 @@ begin
|
||||
aSettings.webgl := FOptions.Webgl;
|
||||
aSettings.background_color := FOptions.BackgroundColor;
|
||||
aSettings.accept_language_list := CefString(FOptions.AcceptLanguageList);
|
||||
aSettings.chrome_status_bubble := FOptions.ChromeStatusBubble;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -4724,7 +4742,8 @@ end;
|
||||
|
||||
function TChromiumCore.MustCreateDownloadHandler : boolean;
|
||||
begin
|
||||
Result := assigned(FOnBeforeDownload) or
|
||||
Result := assigned(FOnCanDownload) or
|
||||
assigned(FOnBeforeDownload) or
|
||||
assigned(FOnDownloadUpdated);
|
||||
end;
|
||||
|
||||
@ -4839,6 +4858,11 @@ begin
|
||||
assigned(FOnMainFrameChanged);
|
||||
end;
|
||||
|
||||
function TChromiumCore.MustCreateCommandHandler : boolean;
|
||||
begin
|
||||
Result := assigned(FOnChromeCommand);
|
||||
end;
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
procedure TChromiumCore.PrefsAvailableMsg(aResultOK : boolean);
|
||||
begin
|
||||
@ -5285,6 +5309,16 @@ begin
|
||||
FOnRunContextMenu(Self, browser, frame, params, model, callback, Result);
|
||||
end;
|
||||
|
||||
function TChromiumCore.doOnCanDownload(const browser : ICefBrowser;
|
||||
const url : ustring;
|
||||
const request_method : ustring): boolean;
|
||||
begin
|
||||
Result := True;
|
||||
|
||||
if assigned(FOnCanDownload) then
|
||||
FOnCanDownload(Self, browser, url, request_method, Result);
|
||||
end;
|
||||
|
||||
procedure TChromiumCore.doOnBeforeDownload(const browser : ICefBrowser;
|
||||
const downloadItem : ICefDownloadItem;
|
||||
const suggestedName : ustring;
|
||||
@ -5795,6 +5829,14 @@ begin
|
||||
FOnMainFrameChanged(self, browser, old_frame, new_frame);
|
||||
end;
|
||||
|
||||
function TChromiumCore.doOnChromeCommand(const browser: ICefBrowser; command_id: integer; disposition: TCefWindowOpenDisposition): boolean;
|
||||
begin
|
||||
Result := False;
|
||||
|
||||
if assigned(FOnChromeCommand) then
|
||||
FOnChromeCommand(self, browser, command_id, disposition, Result);
|
||||
end;
|
||||
|
||||
procedure TChromiumCore.doOnFullScreenModeChange(const browser : ICefBrowser;
|
||||
fullscreen : Boolean);
|
||||
begin
|
||||
|
@ -94,6 +94,7 @@ type
|
||||
TOnCursorChange = procedure(Sender: TObject; const browser: ICefBrowser; cursor_: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo; var aResult : boolean) of Object;
|
||||
|
||||
// ICefDownloadHandler
|
||||
TOnCanDownloadEvent = procedure(Sender: TObject; const browser: ICefBrowser; const url, request_method: ustring; var aResult: boolean) of object;
|
||||
TOnBeforeDownload = procedure(Sender: TObject; const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback) of object;
|
||||
TOnDownloadUpdated = procedure(Sender: TObject; const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback) of object;
|
||||
|
||||
@ -212,6 +213,9 @@ type
|
||||
TOnFrameDetached = procedure(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame) of object;
|
||||
TOnMainFrameChanged = procedure(Sender: TObject; const browser: ICefBrowser; const old_frame, new_frame: ICefFrame) of object;
|
||||
|
||||
// ICefCommandHandler
|
||||
TOnChromeCommandEvent = procedure(Sender: TObject; const browser: ICefBrowser; command_id: integer; disposition: TCefWindowOpenDisposition; var aResult: boolean) of object;
|
||||
|
||||
// Custom
|
||||
TOnTextResultAvailableEvent = procedure(Sender: TObject; const aText : ustring) of object;
|
||||
TOnPdfPrintFinishedEvent = procedure(Sender: TObject; aResultOK : boolean) of object;
|
||||
|
@ -73,6 +73,7 @@ type
|
||||
FWebgl : TCefState;
|
||||
FBackgroundColor : TCefColor;
|
||||
FAcceptLanguageList : ustring;
|
||||
FChromeStatusBubble : TCefState;
|
||||
|
||||
public
|
||||
constructor Create; virtual;
|
||||
@ -92,6 +93,7 @@ type
|
||||
property BackgroundColor : TCefColor read FBackgroundColor write FBackgroundColor default 0;
|
||||
property AcceptLanguageList : ustring read FAcceptLanguageList write FAcceptLanguageList;
|
||||
property WindowlessFrameRate : Integer read FWindowlessFrameRate write FWindowlessFrameRate default CEF_OSR_FRAMERATE_DEFAULT;
|
||||
property ChromeStatusBubble : TCefState read FChromeStatusBubble write FChromeStatusBubble default STATE_DEFAULT;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -111,6 +113,7 @@ begin
|
||||
FDatabases := STATE_DEFAULT;
|
||||
FWebgl := STATE_DEFAULT;
|
||||
FBackgroundColor := 0;
|
||||
FChromeStatusBubble := STATE_DEFAULT;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -55,6 +55,7 @@ type
|
||||
TCefClientRef = class(TCefBaseRefCountedRef, ICefClient)
|
||||
protected
|
||||
procedure GetAudioHandler(var aHandler : ICefAudioHandler); virtual;
|
||||
procedure GetCommandHandler(var aHandler : ICefCommandHandler); virtual;
|
||||
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); virtual;
|
||||
procedure GetDialogHandler(var aHandler : ICefDialogHandler); virtual;
|
||||
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); virtual;
|
||||
@ -81,6 +82,7 @@ type
|
||||
TCefClientOwn = class(TCefBaseRefCountedOwn, ICefClient)
|
||||
protected
|
||||
procedure GetAudioHandler(var aHandler : ICefAudioHandler); virtual;
|
||||
procedure GetCommandHandler(var aHandler : ICefCommandHandler); virtual;
|
||||
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); virtual;
|
||||
procedure GetDialogHandler(var aHandler : ICefDialogHandler); virtual;
|
||||
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); virtual;
|
||||
@ -108,6 +110,7 @@ type
|
||||
protected
|
||||
FEvents : Pointer;
|
||||
FAudioHandler : ICefAudioHandler;
|
||||
FCommandHandler : ICefCommandHandler;
|
||||
FLoadHandler : ICefLoadHandler;
|
||||
FFocusHandler : ICefFocusHandler;
|
||||
FContextMenuHandler : ICefContextMenuHandler;
|
||||
@ -125,6 +128,7 @@ type
|
||||
FFrameHandler : ICefFrameHandler;
|
||||
|
||||
procedure GetAudioHandler(var aHandler : ICefAudioHandler); override;
|
||||
procedure GetCommandHandler(var aHandler : ICefCommandHandler); override;
|
||||
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); override;
|
||||
procedure GetDialogHandler(var aHandler : ICefDialogHandler); override;
|
||||
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); override;
|
||||
@ -163,7 +167,7 @@ uses
|
||||
uCEFDisplayHandler, uCEFDownloadHandler, uCEFJsDialogHandler,
|
||||
uCEFLifeSpanHandler, uCEFRequestHandler, uCEFRenderHandler, uCEFDragHandler,
|
||||
uCEFFindHandler, uCEFConstants, uCEFApplicationCore, uCEFFrame, uCEFAudioHandler,
|
||||
uCEFPrintHandler, uCEFFrameHandler;
|
||||
uCEFPrintHandler, uCEFFrameHandler, uCEFCommandHandler;
|
||||
|
||||
|
||||
// ******************************************************
|
||||
@ -183,6 +187,11 @@ begin
|
||||
aHandler := nil;
|
||||
end;
|
||||
|
||||
procedure TCefClientRef.GetCommandHandler(var aHandler : ICefCommandHandler);
|
||||
begin
|
||||
aHandler := nil;
|
||||
end;
|
||||
|
||||
procedure TCefClientRef.GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
|
||||
begin
|
||||
aHandler := nil;
|
||||
@ -291,6 +300,23 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function cef_client_own_get_command_handler(self: PCefClient): PCefCommandHandler; stdcall;
|
||||
var
|
||||
TempObject : TObject;
|
||||
TempHandler : ICefCommandHandler;
|
||||
begin
|
||||
Result := nil;
|
||||
TempObject := CefGetObject(self);
|
||||
|
||||
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
||||
try
|
||||
TCefClientOwn(TempObject).GetCommandHandler(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;
|
||||
var
|
||||
TempObject : TObject;
|
||||
@ -572,6 +598,7 @@ begin
|
||||
with PCefClient(FData)^ do
|
||||
begin
|
||||
get_audio_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_audio_handler;
|
||||
get_command_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_command_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_display_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_display_handler;
|
||||
@ -596,6 +623,11 @@ begin
|
||||
aHandler := nil;
|
||||
end;
|
||||
|
||||
procedure TCefClientOwn.GetCommandHandler(var aHandler : ICefCommandHandler);
|
||||
begin
|
||||
aHandler := nil;
|
||||
end;
|
||||
|
||||
procedure TCefClientOwn.GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
|
||||
begin
|
||||
aHandler := nil;
|
||||
@ -707,6 +739,7 @@ begin
|
||||
else
|
||||
begin
|
||||
if events.MustCreateAudioHandler then FAudioHandler := TCustomAudioHandler.Create(events);
|
||||
if events.MustCreateCommandHandler then FCommandHandler := TCustomCommandHandler.Create(events);
|
||||
if events.MustCreateLoadHandler then FLoadHandler := TCustomLoadHandler.Create(events);
|
||||
if events.MustCreateFocusHandler then FFocusHandler := TCustomFocusHandler.Create(events);
|
||||
if events.MustCreateContextMenuHandler then FContextMenuHandler := TCustomContextMenuHandler.Create(events);
|
||||
@ -738,6 +771,7 @@ begin
|
||||
FEvents := nil;
|
||||
|
||||
if (FAudioHandler <> nil) then FAudioHandler.RemoveReferences;
|
||||
if (FCommandHandler <> nil) then FCommandHandler.RemoveReferences;
|
||||
if (FLoadHandler <> nil) then FLoadHandler.RemoveReferences;
|
||||
if (FFocusHandler <> nil) then FFocusHandler.RemoveReferences;
|
||||
if (FContextMenuHandler <> nil) then FContextMenuHandler.RemoveReferences;
|
||||
@ -758,6 +792,7 @@ end;
|
||||
procedure TCustomClientHandler.InitializeVars;
|
||||
begin
|
||||
FAudioHandler := nil;
|
||||
FCommandHandler := nil;
|
||||
FLoadHandler := nil;
|
||||
FFocusHandler := nil;
|
||||
FContextMenuHandler := nil;
|
||||
@ -784,6 +819,14 @@ begin
|
||||
aHandler := nil;
|
||||
end;
|
||||
|
||||
procedure TCustomClientHandler.GetCommandHandler(var aHandler : ICefCommandHandler);
|
||||
begin
|
||||
if (FCommandHandler <> nil) then
|
||||
aHandler := FCommandHandler
|
||||
else
|
||||
aHandler := nil;
|
||||
end;
|
||||
|
||||
procedure TCustomClientHandler.GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
|
||||
begin
|
||||
if (FContextMenuHandler <> nil) then
|
||||
|
151
source/uCEFCommandHandler.pas
Normal file
151
source/uCEFCommandHandler.pas
Normal file
@ -0,0 +1,151 @@
|
||||
// ************************************************************************
|
||||
// ***************************** 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 © 2022 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 uCEFCommandHandler;
|
||||
|
||||
{$IFDEF FPC}
|
||||
{$MODE OBJFPC}{$H+}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFNDEF TARGET_64BITS}{$ALIGN ON}{$ENDIF}
|
||||
{$MINENUMSIZE 4}
|
||||
|
||||
{$I cef.inc}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
|
||||
|
||||
type
|
||||
TCefCommandHandlerOwn = class(TCefBaseRefCountedOwn, ICefCommandHandler)
|
||||
protected
|
||||
function OnChromeCommand(const browser: ICefBrowser; command_id: integer; disposition: TCefWindowOpenDisposition): boolean; virtual;
|
||||
|
||||
procedure RemoveReferences; virtual;
|
||||
|
||||
public
|
||||
constructor Create; virtual;
|
||||
end;
|
||||
|
||||
TCustomCommandHandler = class(TCefCommandHandlerOwn)
|
||||
protected
|
||||
FEvents : Pointer;
|
||||
|
||||
function OnChromeCommand(const browser: ICefBrowser; command_id: integer; disposition: TCefWindowOpenDisposition): boolean; 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_command_handler_on_chrome_command(self : PCefCommandHandler;
|
||||
browser : PCefBrowser;
|
||||
command_id : integer;
|
||||
disposition : TCefWindowOpenDisposition): Integer; stdcall;
|
||||
var
|
||||
TempObject : TObject;
|
||||
begin
|
||||
Result := Ord(False);
|
||||
TempObject := CefGetObject(self);
|
||||
|
||||
if (TempObject <> nil) and (TempObject is TCefCommandHandlerOwn) then
|
||||
Result := Ord(TCefCommandHandlerOwn(TempObject).OnChromeCommand(TCefBrowserRef.UnWrap(browser),
|
||||
command_id,
|
||||
disposition));
|
||||
end;
|
||||
|
||||
constructor TCefCommandHandlerOwn.Create;
|
||||
begin
|
||||
inherited CreateData(SizeOf(TCefCommandHandler));
|
||||
|
||||
PCefCommandHandler(FData)^.on_chrome_command := {$IFDEF FPC}@{$ENDIF}cef_command_handler_on_chrome_command;
|
||||
end;
|
||||
|
||||
function TCefCommandHandlerOwn.OnChromeCommand(const browser: ICefBrowser; command_id: integer; disposition: TCefWindowOpenDisposition): boolean;
|
||||
begin
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
procedure TCefCommandHandlerOwn.RemoveReferences;
|
||||
begin
|
||||
//
|
||||
end;
|
||||
|
||||
|
||||
// TCustomCommandHandler
|
||||
|
||||
constructor TCustomCommandHandler.Create(const events : IChromiumEvents);
|
||||
begin
|
||||
inherited Create;
|
||||
|
||||
FEvents := Pointer(events);
|
||||
end;
|
||||
|
||||
destructor TCustomCommandHandler.Destroy;
|
||||
begin
|
||||
RemoveReferences;
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TCustomCommandHandler.RemoveReferences;
|
||||
begin
|
||||
FEvents := nil;
|
||||
end;
|
||||
|
||||
function TCustomCommandHandler.OnChromeCommand(const browser: ICefBrowser; command_id: integer; disposition: TCefWindowOpenDisposition): boolean;
|
||||
begin
|
||||
if (FEvents <> nil) then
|
||||
Result := IChromiumEvents(FEvents).doOnChromeCommand(browser, command_id, disposition)
|
||||
else
|
||||
Result := inherited OnChromeCommand(browser, command_id, disposition);
|
||||
end;
|
||||
|
||||
end.
|
@ -381,14 +381,21 @@ const
|
||||
// /include/internal/cef_types.h (cef_transition_type_t)
|
||||
TT_LINK = 0;
|
||||
TT_EXPLICIT = 1;
|
||||
TT_AUTO_BOOKMARK = 2;
|
||||
TT_AUTO_SUBFRAME = 3;
|
||||
TT_MANUAL_SUBFRAME = 4;
|
||||
TT_GENERATED = 5;
|
||||
TT_AUTO_TOPLEVEL = 6;
|
||||
TT_FORM_SUBMIT = 7;
|
||||
TT_RELOAD = 8;
|
||||
TT_KEYWORD = 9;
|
||||
TT_KEYWORD_GENERATED = 10;
|
||||
TT_SOURCE_MASK = $000000FF;
|
||||
TT_BLOCKED_FLAG = $00800000;
|
||||
TT_FORWARD_BACK_FLAG = $01000000;
|
||||
TT_DIRECT_LOAD_FLAG = $02000000;
|
||||
TT_HOME_PAGE_FLAG = $04000000;
|
||||
TT_FROM_API_FLAG = $08000000;
|
||||
TT_CHAIN_START_FLAG = $10000000;
|
||||
TT_CHAIN_END_FLAG = $20000000;
|
||||
TT_CLIENT_REDIRECT_FLAG = $40000000;
|
||||
@ -751,7 +758,8 @@ const
|
||||
{$IFDEF CEF4DELHI_ALLOC_DEBUG}
|
||||
CEF4DELPHI_ALLOC_PADDING = Pointer($44332211); // Some random value used as padding
|
||||
{$ENDIF}
|
||||
implementation
|
||||
|
||||
implementation
|
||||
|
||||
end.
|
||||
|
||||
|
@ -54,6 +54,7 @@ uses
|
||||
type
|
||||
TCefDownloadHandlerOwn = class(TCefBaseRefCountedOwn, ICefDownloadHandler)
|
||||
protected
|
||||
function CanDownload(const browser: ICefBrowser; const url, request_method: ustring): boolean; virtual;
|
||||
procedure OnBeforeDownload(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback); virtual;
|
||||
procedure OnDownloadUpdated(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback); virtual;
|
||||
|
||||
@ -67,6 +68,7 @@ type
|
||||
protected
|
||||
FEvents : Pointer;
|
||||
|
||||
function CanDownload(const browser: ICefBrowser; const url, request_method: ustring): boolean; override;
|
||||
procedure OnBeforeDownload(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback); override;
|
||||
procedure OnDownloadUpdated(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback); override;
|
||||
|
||||
@ -83,6 +85,22 @@ uses
|
||||
uCEFMiscFunctions, uCEFLibFunctions, uCEFBrowser, uCEFDownLoadItem, uCEFBeforeDownloadCallback,
|
||||
uCEFDownloadItemCallback;
|
||||
|
||||
function cef_download_handler_can_download( self : PCefDownloadHandler;
|
||||
browser : PCefBrowser;
|
||||
const url : PCefString;
|
||||
const request_method : PCefString): integer; stdcall;
|
||||
var
|
||||
TempObject : TObject;
|
||||
begin
|
||||
Result := Ord(True);
|
||||
TempObject := CefGetObject(self);
|
||||
|
||||
if (TempObject <> nil) and (TempObject is TCefDownloadHandlerOwn) then
|
||||
Result := Ord(TCefDownloadHandlerOwn(TempObject).CanDownload(TCefBrowserRef.UnWrap(browser),
|
||||
CefString(url),
|
||||
CefString(request_method)));
|
||||
end;
|
||||
|
||||
procedure cef_download_handler_on_before_download( self : PCefDownloadHandler;
|
||||
browser : PCefBrowser;
|
||||
download_item : PCefDownloadItem;
|
||||
@ -121,11 +139,17 @@ begin
|
||||
|
||||
with PCefDownloadHandler(FData)^ do
|
||||
begin
|
||||
can_download := {$IFDEF FPC}@{$ENDIF}cef_download_handler_can_download;
|
||||
on_before_download := {$IFDEF FPC}@{$ENDIF}cef_download_handler_on_before_download;
|
||||
on_download_updated := {$IFDEF FPC}@{$ENDIF}cef_download_handler_on_download_updated;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCefDownloadHandlerOwn.CanDownload(const browser: ICefBrowser; const url, request_method: ustring): boolean;
|
||||
begin
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
procedure TCefDownloadHandlerOwn.OnBeforeDownload(const browser : ICefBrowser;
|
||||
const downloadItem : ICefDownloadItem;
|
||||
const suggestedName : ustring;
|
||||
@ -167,19 +191,31 @@ begin
|
||||
FEvents := nil;
|
||||
end;
|
||||
|
||||
function TCustomDownloadHandler.CanDownload(const browser : ICefBrowser;
|
||||
const url : ustring;
|
||||
const request_method : ustring): boolean;
|
||||
begin
|
||||
Result := True;
|
||||
|
||||
if (FEvents <> nil) then
|
||||
Result := IChromiumEvents(FEvents).doOnCanDownload(browser, url, request_method);
|
||||
end;
|
||||
|
||||
procedure TCustomDownloadHandler.OnBeforeDownload(const browser : ICefBrowser;
|
||||
const downloadItem : ICefDownloadItem;
|
||||
const suggestedName : ustring;
|
||||
const callback : ICefBeforeDownloadCallback);
|
||||
begin
|
||||
if (FEvents <> nil) then IChromiumEvents(FEvents).doOnBeforeDownload(browser, downloadItem, suggestedName, callback);
|
||||
if (FEvents <> nil) then
|
||||
IChromiumEvents(FEvents).doOnBeforeDownload(browser, downloadItem, suggestedName, callback);
|
||||
end;
|
||||
|
||||
procedure TCustomDownloadHandler.OnDownloadUpdated(const browser : ICefBrowser;
|
||||
const downloadItem : ICefDownloadItem;
|
||||
const callback : ICefDownloadItemCallback);
|
||||
begin
|
||||
if (FEvents <> nil) then IChromiumEvents(FEvents).doOnDownloadUpdated(browser, downloadItem, callback);
|
||||
if (FEvents <> nil) then
|
||||
IChromiumEvents(FEvents).doOnDownloadUpdated(browser, downloadItem, callback);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -81,6 +81,7 @@ type
|
||||
procedure SetFragmentBaseUrl(const baseUrl: ustring);
|
||||
procedure ResetFileContents;
|
||||
procedure AddFile(const path, displayName: ustring);
|
||||
procedure ClearFilenames;
|
||||
function GetImage : ICefImage;
|
||||
function GetImageHotspot : TCefPoint;
|
||||
function HasImage : boolean;
|
||||
@ -103,6 +104,11 @@ begin
|
||||
PCefDragData(FData)^.add_file(FData, @TempPath, @TempName);
|
||||
end;
|
||||
|
||||
procedure TCefDragDataRef.ClearFilenames;
|
||||
begin
|
||||
PCefDragData(FData)^.clear_filenames(FData);
|
||||
end;
|
||||
|
||||
function TCefDragDataRef.GetImage : ICefImage;
|
||||
begin
|
||||
Result := TCefImageRef.UnWrap(PCefDragData(FData)^.get_image(FData));
|
||||
|
@ -102,6 +102,7 @@ type
|
||||
ICefRenderProcessHandler = interface;
|
||||
ICefProcessMessage = interface;
|
||||
ICefLifeSpanHandler = interface;
|
||||
ICefCommandHandler = interface;
|
||||
ICefGetExtensionResourceCallback = interface;
|
||||
ICefExtensionHandler = interface;
|
||||
ICefExtension = interface;
|
||||
@ -346,6 +347,7 @@ type
|
||||
procedure doOnCursorChange(const browser: ICefBrowser; cursor_: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo; var aResult : boolean);
|
||||
|
||||
// ICefDownloadHandler
|
||||
function doOnCanDownload(const browser: ICefBrowser; const url, request_method: ustring): boolean;
|
||||
procedure doOnBeforeDownload(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback);
|
||||
procedure doOnDownloadUpdated(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback);
|
||||
|
||||
@ -461,6 +463,9 @@ type
|
||||
procedure doOnFrameDetached(const browser: ICefBrowser; const frame: ICefFrame);
|
||||
procedure doOnMainFrameChanged(const browser: ICefBrowser; const old_frame, new_frame: ICefFrame);
|
||||
|
||||
// ICefCommandHandler
|
||||
function doOnChromeCommand(const browser: ICefBrowser; command_id: integer; disposition: TCefWindowOpenDisposition): boolean;
|
||||
|
||||
// Custom
|
||||
procedure doCookiesDeleted(numDeleted : integer);
|
||||
procedure doPdfPrintFinished(aResultOK : boolean);
|
||||
@ -489,6 +494,7 @@ type
|
||||
procedure doOnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring);
|
||||
procedure doBrowserNavigation(aTask : TCefBrowserNavigation);
|
||||
function MustCreateAudioHandler : boolean;
|
||||
function MustCreateCommandHandler : boolean;
|
||||
function MustCreateLoadHandler : boolean;
|
||||
function MustCreateFocusHandler : boolean;
|
||||
function MustCreateContextMenuHandler : boolean;
|
||||
@ -956,6 +962,7 @@ type
|
||||
// /include/capi/cef_download_handler_capi.h (cef_download_handler_t)
|
||||
ICefDownloadHandler = interface(ICefBaseRefCounted)
|
||||
['{3137F90A-5DC5-43C1-858D-A269F28EF4F1}']
|
||||
function CanDownload(const browser: ICefBrowser; const url, request_method: ustring): boolean;
|
||||
procedure OnBeforeDownload(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback);
|
||||
procedure OnDownloadUpdated(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback);
|
||||
|
||||
@ -1813,6 +1820,15 @@ type
|
||||
procedure RemoveReferences; // custom procedure to clear all references
|
||||
end;
|
||||
|
||||
// TCefCommandHandler
|
||||
// /include/capi/cef_command_handler_capi.h (cef_command_handler_t)
|
||||
ICefCommandHandler = interface(ICefBaseRefCounted)
|
||||
['{7C931B93-53DC-4607-AABB-2CB4AEF7FB96}']
|
||||
function OnChromeCommand(const browser: ICefBrowser; command_id: integer; disposition: TCefWindowOpenDisposition): boolean;
|
||||
|
||||
procedure RemoveReferences; // custom procedure to clear all references
|
||||
end;
|
||||
|
||||
// TCefGetExtensionResourceCallback
|
||||
// /include/capi/cef_extension_handler_capi.h (cef_get_extension_resource_callback_t)
|
||||
ICefGetExtensionResourceCallback = interface(ICefBaseRefCounted)
|
||||
@ -2067,6 +2083,7 @@ type
|
||||
ICefClient = interface(ICefBaseRefCounted)
|
||||
['{1D502075-2FF0-4E13-A112-9E541CD811F4}']
|
||||
procedure GetAudioHandler(var aHandler : ICefAudioHandler);
|
||||
procedure GetCommandHandler(var aHandler : ICefCommandHandler);
|
||||
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
|
||||
procedure GetDialogHandler(var aHandler : ICefDialogHandler);
|
||||
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler);
|
||||
@ -2159,6 +2176,7 @@ type
|
||||
procedure SetFragmentBaseUrl(const baseUrl: ustring);
|
||||
procedure ResetFileContents;
|
||||
procedure AddFile(const path, displayName: ustring);
|
||||
procedure ClearFilenames;
|
||||
function GetImage : ICefImage;
|
||||
function GetImageHotspot : TCefPoint;
|
||||
function HasImage : boolean;
|
||||
@ -2533,7 +2551,6 @@ type
|
||||
procedure SetVisible(visible: boolean);
|
||||
function IsVisible: boolean;
|
||||
function IsDrawn: boolean;
|
||||
|
||||
property ContentsView : ICefView read GetContentsView;
|
||||
property Window : ICefWindow read GetWindow;
|
||||
property DockingMode : TCefDockingMode read GetDockingMode;
|
||||
|
@ -70,6 +70,7 @@ type
|
||||
PCefBinaryValue = ^TCefBinaryValue;
|
||||
PCefSchemeRegistrar = ^TCefSchemeRegistrar;
|
||||
PCefCommandLine = ^TCefCommandLine;
|
||||
PCefCommandHandler = ^TCefCommandHandler;
|
||||
PCefBaseRefCounted = ^TCefBaseRefCounted;
|
||||
PCefBaseScoped = ^TCefBaseScoped;
|
||||
PCefWindowInfo = ^TCefWindowInfo;
|
||||
@ -751,7 +752,9 @@ type
|
||||
WOD_NEW_WINDOW,
|
||||
WOD_SAVE_TO_DISK,
|
||||
WOD_OFF_THE_RECORD,
|
||||
WOD_IGNORE_ACTION
|
||||
WOD_IGNORE_ACTION,
|
||||
WOD_SWITCH_TO_TAB,
|
||||
WOD_NEW_PICTURE_IN_PICTURE
|
||||
);
|
||||
|
||||
// /include/internal/cef_types.h (cef_text_input_mode_t)
|
||||
@ -1220,7 +1223,6 @@ type
|
||||
accept_language_list : TCefString;
|
||||
cookieable_schemes_list : TCefString;
|
||||
cookieable_schemes_exclude_defaults : integer;
|
||||
application_client_id_for_file_scanning : TCefString;
|
||||
end;
|
||||
|
||||
// /include/internal/cef_types_win.h (cef_window_info_t)
|
||||
@ -1323,6 +1325,7 @@ type
|
||||
webgl : TCefState;
|
||||
background_color : TCefColor;
|
||||
accept_language_list : TCefString;
|
||||
chrome_status_bubble : TCefState;
|
||||
end;
|
||||
|
||||
// /include/internal/cef_types.h (cef_screen_info_t)
|
||||
@ -1545,6 +1548,7 @@ type
|
||||
// /include/capi/cef_download_handler_capi.h (cef_download_handler_t)
|
||||
TCefDownloadHandler = record
|
||||
base : TCefBaseRefCounted;
|
||||
can_download : function(self: PCefDownloadHandler; browser: PCefBrowser; const url, request_method: PCefString): integer; stdcall;
|
||||
on_before_download : procedure(self: PCefDownloadHandler; browser: PCefBrowser; download_item: PCefDownloadItem; const suggested_name: PCefString; callback: PCefBeforeDownloadCallback); stdcall;
|
||||
on_download_updated : procedure(self: PCefDownloadHandler; browser: PCefBrowser; download_item: PCefDownloadItem; callback: PCefDownloadItemCallback); stdcall;
|
||||
end;
|
||||
@ -2270,6 +2274,7 @@ type
|
||||
set_fragment_base_url : procedure(self: PCefDragData; const base_url: PCefString); stdcall;
|
||||
reset_file_contents : procedure(self: PCefDragData); stdcall;
|
||||
add_file : procedure(self: PCefDragData; const path, display_name: PCefString); stdcall;
|
||||
clear_filenames : procedure(self: PCefDragData); stdcall;
|
||||
get_image : function(self: PCefDragData): PCefImage; stdcall;
|
||||
get_image_hotspot : function(self: PCefDragData): PCefPoint; stdcall;
|
||||
has_image : function(self: PCefDragData): Integer; stdcall;
|
||||
@ -2300,6 +2305,12 @@ type
|
||||
prepend_wrapper : procedure(self: PCefCommandLine; const wrapper: PCefString); stdcall;
|
||||
end;
|
||||
|
||||
// /include/capi/cef_command_handler_capi.h (cef_command_handler_t)
|
||||
TCefCommandHandler = record
|
||||
base : TCefBaseRefCounted;
|
||||
on_chrome_command : function(self: PCefCommandHandler; browser: PCefBrowser; command_id: integer; disposition: TCefWindowOpenDisposition): Integer; stdcall;
|
||||
end;
|
||||
|
||||
// /include/capi/cef_scheme_capi.h (cef_scheme_registrar_t)
|
||||
TCefSchemeRegistrar = record
|
||||
base : TCefBaseScoped;
|
||||
@ -2823,6 +2834,7 @@ type
|
||||
TCefClient = record
|
||||
base : TCefBaseRefCounted;
|
||||
get_audio_handler : function(self: PCefClient): PCefAudioHandler; stdcall;
|
||||
get_command_handler : function(self: PCefClient): PCefCommandHandler; stdcall;
|
||||
get_context_menu_handler : function(self: PCefClient): PCefContextMenuHandler; stdcall;
|
||||
get_dialog_handler : function(self: PCefClient): PCefDialogHandler; stdcall;
|
||||
get_display_handler : function(self: PCefClient): PCefDisplayHandler; stdcall;
|
||||
|
@ -2,9 +2,9 @@
|
||||
"UpdateLazPackages" : [
|
||||
{
|
||||
"ForceNotify" : true,
|
||||
"InternalVersion" : 392,
|
||||
"InternalVersion" : 393,
|
||||
"Name" : "cef4delphi_lazarus.lpk",
|
||||
"Version" : "100.0.24.0"
|
||||
"Version" : "101.0.15.0"
|
||||
}
|
||||
],
|
||||
"UpdatePackageData" : {
|
||||
|
Loading…
Reference in New Issue
Block a user