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

Update to CEF 90.6.4

Added try..except blocks to TCustomRequestContextHandler and TCustomResourceRequestHandler events.
This commit is contained in:
Salvador Díaz Fau 2021-05-05 14:41:13 +02:00
parent d24eec2794
commit ff05abbe1b
6 changed files with 139 additions and 103 deletions

View File

@ -3,15 +3,15 @@ CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chro
CEF4Delphi is based on DCEF3 and fpCEF3. The original license of those projects still applies to CEF4Delphi. Read the license terms in the first lines of any *.pas file. CEF4Delphi 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 90.6.3 which includes Chromium 90.0.4430.93. CEF4Delphi uses CEF 90.6.4 which includes Chromium 90.0.4430.93.
The CEF binaries used by CEF4Delphi are available for download at spotify : The CEF binaries used by CEF4Delphi are available for download at spotify :
* [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.3%2Bgc53c523%2Bchromium-90.0.4430.93_windows32.tar.bz2) * [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.4%2Bgf03d75a%2Bchromium-90.0.4430.93_windows32.tar.bz2)
* [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.3%2Bgc53c523%2Bchromium-90.0.4430.93_windows64.tar.bz2) * [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.4%2Bgf03d75a%2Bchromium-90.0.4430.93_windows64.tar.bz2)
* [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.3%2Bgc53c523%2Bchromium-90.0.4430.93_linux32.tar.bz2) * [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.4%2Bgf03d75a%2Bchromium-90.0.4430.93_linux32.tar.bz2)
* [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.3%2Bgc53c523%2Bchromium-90.0.4430.93_linux64.tar.bz2) * [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.4%2Bgf03d75a%2Bchromium-90.0.4430.93_linux64.tar.bz2)
* [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.3%2Bgc53c523%2Bchromium-90.0.4430.93_linuxarm.tar.bz2) * [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.4%2Bgf03d75a%2Bchromium-90.0.4430.93_linuxarm.tar.bz2)
* [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.3%2Bgc53c523%2Bchromium-90.0.4430.93_linuxarm64.tar.bz2) * [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.4%2Bgf03d75a%2Bchromium-90.0.4430.93_linuxarm64.tar.bz2)
* [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.3%2Bgc53c523%2Bchromium-90.0.4430.93_macosx64.tar.bz2) * [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_90.6.4%2Bgf03d75a%2Bchromium-90.0.4430.93_macosx64.tar.bz2)
CEF4Delphi was developed and tested on Delphi 10.4.2 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2, Delphi 10.3 and Lazarus 2.0.12/FPC 3.2.0. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components. CEF4Delphi was developed and tested on Delphi 10.4.2 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2, Delphi 10.3 and Lazarus 2.0.12/FPC 3.2.0. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components.

View File

@ -21,7 +21,7 @@
</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="90" Minor="6" Release="3"/> <Version Major="90" Minor="6" Release="4"/>
<Files Count="201"> <Files Count="201">
<Item1> <Item1>
<Filename Value="..\source\uCEFAccessibilityHandler.pas"/> <Filename Value="..\source\uCEFAccessibilityHandler.pas"/>

View File

@ -66,7 +66,7 @@ uses
const const
CEF_SUPPORTED_VERSION_MAJOR = 90; CEF_SUPPORTED_VERSION_MAJOR = 90;
CEF_SUPPORTED_VERSION_MINOR = 6; CEF_SUPPORTED_VERSION_MINOR = 6;
CEF_SUPPORTED_VERSION_RELEASE = 3; CEF_SUPPORTED_VERSION_RELEASE = 4;
CEF_SUPPORTED_VERSION_BUILD = 0; CEF_SUPPORTED_VERSION_BUILD = 0;
CEF_CHROMEELF_VERSION_MAJOR = 90; CEF_CHROMEELF_VERSION_MAJOR = 90;

View File

@ -36,8 +36,8 @@
*) *)
unit uCEFRequestContextHandler; unit uCEFRequestContextHandler;
{$IFDEF FPC} {$IFDEF FPC}
{$MODE OBJFPC}{$H+} {$MODE OBJFPC}{$H+}
{$ENDIF} {$ENDIF}
@ -49,6 +49,11 @@ unit uCEFRequestContextHandler;
interface interface
uses uses
{$IFDEF DELPHI16_UP}
System.SysUtils,
{$ELSE}
SysUtils,
{$ENDIF}
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes; uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
type type
@ -103,10 +108,10 @@ procedure cef_request_context_handler_on_request_context_initialized(self
var var
TempObject : TObject; TempObject : TObject;
begin begin
TempObject := CefGetObject(self); TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefRequestContextHandlerOwn) then if (TempObject <> nil) and (TempObject is TCefRequestContextHandlerOwn) then
TCefRequestContextHandlerOwn(TempObject).OnRequestContextInitialized(TCefRequestContextRef.UnWrap(request_context)); TCefRequestContextHandlerOwn(TempObject).OnRequestContextInitialized(TCefRequestContextRef.UnWrap(request_context));
end; end;
function cef_request_context_handler_on_before_plugin_load( self : PCefRequestContextHandler; function cef_request_context_handler_on_before_plugin_load( self : PCefRequestContextHandler;
@ -121,9 +126,9 @@ var
TempPolicy : TCefPluginPolicy; TempPolicy : TCefPluginPolicy;
begin begin
Result := Ord(False); Result := Ord(False);
TempObject := CefGetObject(self); TempObject := CefGetObject(self);
TempPolicy := plugin_policy^; TempPolicy := plugin_policy^;
if (TempObject <> nil) and (TempObject is TCefRequestContextHandlerOwn) then if (TempObject <> nil) and (TempObject is TCefRequestContextHandlerOwn) then
Result := Ord(TCefRequestContextHandlerOwn(TempObject).OnBeforePluginLoad(CefString(mime_type), Result := Ord(TCefRequestContextHandlerOwn(TempObject).OnBeforePluginLoad(CefString(mime_type),
CefString(plugin_url), CefString(plugin_url),
@ -149,9 +154,9 @@ var
begin begin
Result := nil; Result := nil;
TempResourceRequestHandler := nil; TempResourceRequestHandler := nil;
TempObject := CefGetObject(self); TempObject := CefGetObject(self);
TempDisableDefHandling := disable_default_handling^ <> 0; TempDisableDefHandling := disable_default_handling^ <> 0;
if (TempObject <> nil) and (TempObject is TCefRequestContextHandlerOwn) then if (TempObject <> nil) and (TempObject is TCefRequestContextHandlerOwn) then
try try
TCefRequestContextHandlerOwn(TempObject).GetResourceRequestHandler(TCefBrowserRef.UnWrap(browser), TCefRequestContextHandlerOwn(TempObject).GetResourceRequestHandler(TCefBrowserRef.UnWrap(browser),
@ -184,7 +189,7 @@ end;
procedure TCefRequestContextHandlerOwn.OnRequestContextInitialized(const request_context: ICefRequestContext); procedure TCefRequestContextHandlerOwn.OnRequestContextInitialized(const request_context: ICefRequestContext);
begin begin
// //
end; end;
function TCefRequestContextHandlerOwn.OnBeforePluginLoad(const mimeType : ustring; function TCefRequestContextHandlerOwn.OnBeforePluginLoad(const mimeType : ustring;
@ -206,12 +211,12 @@ procedure TCefRequestContextHandlerOwn.GetResourceRequestHandler(const browser
var disable_default_handling : boolean; var disable_default_handling : boolean;
var aResourceRequestHandler : ICefResourceRequestHandler); var aResourceRequestHandler : ICefResourceRequestHandler);
begin begin
aResourceRequestHandler := nil; aResourceRequestHandler := nil;
end; end;
procedure TCefRequestContextHandlerOwn.RemoveReferences; procedure TCefRequestContextHandlerOwn.RemoveReferences;
begin begin
// //
end; end;
@ -219,7 +224,8 @@ end;
procedure TCefRequestContextHandlerRef.OnRequestContextInitialized(const request_context: ICefRequestContext); procedure TCefRequestContextHandlerRef.OnRequestContextInitialized(const request_context: ICefRequestContext);
begin begin
PCefRequestContextHandler(FData)^.on_request_context_initialized(PCefRequestContextHandler(FData), CefGetData(request_context));
PCefRequestContextHandler(FData)^.on_request_context_initialized(PCefRequestContextHandler(FData), CefGetData(request_context));
end; end;
function TCefRequestContextHandlerRef.OnBeforePluginLoad(const mimeType : ustring; function TCefRequestContextHandlerRef.OnBeforePluginLoad(const mimeType : ustring;
@ -259,27 +265,28 @@ var
TempResourceRequestHandler : PCefResourceRequestHandler; TempResourceRequestHandler : PCefResourceRequestHandler;
begin begin
TempRequestInitiator := CefString(request_initiator); TempRequestInitiator := CefString(request_initiator);
TempDisableDefaultHandling := ord(disable_default_handling); TempDisableDefaultHandling := ord(disable_default_handling);
TempResourceRequestHandler := PCefRequestContextHandler(FData)^.get_resource_request_handler(PCefRequestContextHandler(FData), TempResourceRequestHandler := PCefRequestContextHandler(FData)^.get_resource_request_handler(PCefRequestContextHandler(FData),
CefGetData(browser),
CefGetData(frame), CefGetData(browser),
CefGetData(request), CefGetData(frame),
ord(is_navigation), CefGetData(request),
ord(is_download), ord(is_navigation),
@TempRequestInitiator, ord(is_download),
@TempRequestInitiator,
@TempDisableDefaultHandling); @TempDisableDefaultHandling);
disable_default_handling := TempDisableDefaultHandling <> 0; disable_default_handling := TempDisableDefaultHandling <> 0;
if (TempResourceRequestHandler <> nil) then if (TempResourceRequestHandler <> nil) then
aResourceRequestHandler := TCefResourceRequestHandlerRef.UnWrap(TempResourceRequestHandler) aResourceRequestHandler := TCefResourceRequestHandlerRef.UnWrap(TempResourceRequestHandler)
else else
aResourceRequestHandler := nil; aResourceRequestHandler := nil;
end; end;
procedure TCefRequestContextHandlerRef.RemoveReferences; procedure TCefRequestContextHandlerRef.RemoveReferences;
begin begin
// //
end; end;
class function TCefRequestContextHandlerRef.UnWrap(data: Pointer): ICefRequestContextHandler; class function TCefRequestContextHandlerRef.UnWrap(data: Pointer): ICefRequestContextHandler;
@ -314,10 +321,13 @@ end;
procedure TCustomRequestContextHandler.OnRequestContextInitialized(const request_context: ICefRequestContext); procedure TCustomRequestContextHandler.OnRequestContextInitialized(const request_context: ICefRequestContext);
begin begin
if (FEvents <> nil) then try
IChromiumEvents(FEvents).doOnRequestContextInitialized(request_context) if (FEvents <> nil) then
else IChromiumEvents(FEvents).doOnRequestContextInitialized(request_context);
inherited OnRequestContextInitialized(request_context); except
on e : exception do
if CustomExceptionHandler('TCustomRequestContextHandler.OnRequestContextInitialized', e) then raise;
end;
end; end;
function TCustomRequestContextHandler.OnBeforePluginLoad(const mimeType : ustring; function TCustomRequestContextHandler.OnBeforePluginLoad(const mimeType : ustring;
@ -327,20 +337,20 @@ function TCustomRequestContextHandler.OnBeforePluginLoad(const mimeType : us
const pluginInfo : ICefWebPluginInfo; const pluginInfo : ICefWebPluginInfo;
var pluginPolicy : TCefPluginPolicy): Boolean; var pluginPolicy : TCefPluginPolicy): Boolean;
begin begin
if (FEvents <> nil) then Result := False;
Result := IChromiumEvents(FEvents).doOnBeforePluginLoad(mimeType,
pluginUrl, try
isMainFrame, if (FEvents <> nil) then
topOriginUrl, Result := IChromiumEvents(FEvents).doOnBeforePluginLoad(mimeType,
pluginInfo, pluginUrl,
pluginPolicy) isMainFrame,
else topOriginUrl,
Result := inherited OnBeforePluginLoad(mimeType, pluginInfo,
pluginUrl, pluginPolicy);
isMainFrame, except
topOriginUrl, on e : exception do
pluginInfo, if CustomExceptionHandler('TCustomRequestContextHandler.OnBeforePluginLoad', e) then raise;
pluginPolicy); end;
end; end;
procedure TCustomRequestContextHandler.GetResourceRequestHandler(const browser : ICefBrowser; procedure TCustomRequestContextHandler.GetResourceRequestHandler(const browser : ICefBrowser;
@ -352,24 +362,20 @@ procedure TCustomRequestContextHandler.GetResourceRequestHandler(const browser
var disable_default_handling : boolean; var disable_default_handling : boolean;
var aResourceRequestHandler : ICefResourceRequestHandler); var aResourceRequestHandler : ICefResourceRequestHandler);
begin begin
if (FEvents <> nil) then try
IChromiumEvents(FEvents).doGetResourceRequestHandler_ReqCtxHdlr(browser, if (FEvents <> nil) then
frame, IChromiumEvents(FEvents).doGetResourceRequestHandler_ReqCtxHdlr(browser,
request, frame,
is_navigation, request,
is_download, is_navigation,
request_initiator, is_download,
disable_default_handling, request_initiator,
aResourceRequestHandler) disable_default_handling,
else aResourceRequestHandler);
inherited GetResourceRequestHandler(browser, except
frame, on e : exception do
request, if CustomExceptionHandler('TCustomRequestContextHandler.GetResourceRequestHandler', e) then raise;
is_navigation, end;
is_download,
request_initiator,
disable_default_handling,
aResourceRequestHandler);
end; end;

View File

@ -558,7 +558,8 @@ procedure TCustomResourceRequestHandler.RemoveReferences;
begin begin
FEvents := nil; FEvents := nil;
if (FCookieAccessFilter <> nil) then FCookieAccessFilter.RemoveReferences; if (FCookieAccessFilter <> nil) then
FCookieAccessFilter.RemoveReferences;
end; end;
procedure TCustomResourceRequestHandler.InitializeVars; procedure TCustomResourceRequestHandler.InitializeVars;
@ -583,10 +584,15 @@ function TCustomResourceRequestHandler.OnBeforeResourceLoad(const browser : ICe
const request : ICefRequest; const request : ICefRequest;
const callback : ICefRequestCallback): TCefReturnValue; const callback : ICefRequestCallback): TCefReturnValue;
begin begin
if (FEvents <> nil) then Result := RV_CONTINUE;
Result := IChromiumEvents(FEvents).doOnBeforeResourceLoad(browser, frame, request, callback)
else try
Result := inherited OnBeforeResourceLoad(browser, frame, request, callback); if (FEvents <> nil) then
Result := IChromiumEvents(FEvents).doOnBeforeResourceLoad(browser, frame, request, callback);
except
on e : exception do
if CustomExceptionHandler('TCustomResourceRequestHandler.OnBeforeResourceLoad', e) then raise;
end;
end; end;
procedure TCustomResourceRequestHandler.GetResourceHandler(const browser : ICefBrowser; procedure TCustomResourceRequestHandler.GetResourceHandler(const browser : ICefBrowser;
@ -594,10 +600,13 @@ procedure TCustomResourceRequestHandler.GetResourceHandler(const browser
const request : ICefRequest; const request : ICefRequest;
var aResourceHandler : ICefResourceHandler); var aResourceHandler : ICefResourceHandler);
begin begin
if (FEvents <> nil) then try
IChromiumEvents(FEvents).doOnGetResourceHandler(browser, frame, request, aResourceHandler) if (FEvents <> nil) then
else IChromiumEvents(FEvents).doOnGetResourceHandler(browser, frame, request, aResourceHandler);
inherited GetResourceHandler(browser, frame, request, aResourceHandler); except
on e : exception do
if CustomExceptionHandler('TCustomResourceRequestHandler.GetResourceHandler', e) then raise;
end;
end; end;
procedure TCustomResourceRequestHandler.OnResourceRedirect(const browser : ICefBrowser; procedure TCustomResourceRequestHandler.OnResourceRedirect(const browser : ICefBrowser;
@ -606,8 +615,13 @@ procedure TCustomResourceRequestHandler.OnResourceRedirect(const browser : ICef
const response : ICefResponse; const response : ICefResponse;
var newUrl : ustring); var newUrl : ustring);
begin begin
if (FEvents <> nil) then try
IChromiumEvents(FEvents).doOnResourceRedirect(browser, frame, request, response, newUrl); if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnResourceRedirect(browser, frame, request, response, newUrl);
except
on e : exception do
if CustomExceptionHandler('TCustomResourceRequestHandler.OnResourceRedirect', e) then raise;
end;
end; end;
function TCustomResourceRequestHandler.OnResourceResponse(const browser : ICefBrowser; function TCustomResourceRequestHandler.OnResourceResponse(const browser : ICefBrowser;
@ -615,10 +629,15 @@ function TCustomResourceRequestHandler.OnResourceResponse(const browser : ICefB
const request : ICefRequest; const request : ICefRequest;
const response : ICefResponse): Boolean; const response : ICefResponse): Boolean;
begin begin
if (FEvents <> nil) then Result := False;
Result := IChromiumEvents(FEvents).doOnResourceResponse(browser, frame, request, response)
else try
Result := inherited OnResourceResponse(browser, frame, request, response); if (FEvents <> nil) then
Result := IChromiumEvents(FEvents).doOnResourceResponse(browser, frame, request, response);
except
on e : exception do
if CustomExceptionHandler('TCustomResourceRequestHandler.OnResourceResponse', e) then raise;
end;
end; end;
procedure TCustomResourceRequestHandler.GetResourceResponseFilter(const browser : ICefBrowser; procedure TCustomResourceRequestHandler.GetResourceResponseFilter(const browser : ICefBrowser;
@ -627,10 +646,13 @@ procedure TCustomResourceRequestHandler.GetResourceResponseFilter(const browser
const response : ICefResponse; const response : ICefResponse;
var aResponseFilter : ICefResponseFilter); var aResponseFilter : ICefResponseFilter);
begin begin
if (FEvents <> nil) then try
IChromiumEvents(FEvents).doOnGetResourceResponseFilter(browser, frame, request, response, aResponseFilter) if (FEvents <> nil) then
else IChromiumEvents(FEvents).doOnGetResourceResponseFilter(browser, frame, request, response, aResponseFilter);
inherited GetResourceResponseFilter(browser, frame, request, response, aResponseFilter); except
on e : exception do
if CustomExceptionHandler('TCustomResourceRequestHandler.GetResourceResponseFilter', e) then raise;
end;
end; end;
procedure TCustomResourceRequestHandler.OnResourceLoadComplete(const browser : ICefBrowser; procedure TCustomResourceRequestHandler.OnResourceLoadComplete(const browser : ICefBrowser;
@ -640,8 +662,13 @@ procedure TCustomResourceRequestHandler.OnResourceLoadComplete(const browser
status : TCefUrlRequestStatus; status : TCefUrlRequestStatus;
receivedContentLength : Int64); receivedContentLength : Int64);
begin begin
if (FEvents <> nil) then try
IChromiumEvents(FEvents).doOnResourceLoadComplete(browser, frame, request, response, status, receivedContentLength); if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnResourceLoadComplete(browser, frame, request, response, status, receivedContentLength);
except
on e : exception do
if CustomExceptionHandler('TCustomResourceRequestHandler.OnResourceLoadComplete', e) then raise;
end;
end; end;
procedure TCustomResourceRequestHandler.OnProtocolExecution(const browser : ICefBrowser; procedure TCustomResourceRequestHandler.OnProtocolExecution(const browser : ICefBrowser;
@ -649,10 +676,13 @@ procedure TCustomResourceRequestHandler.OnProtocolExecution(const browser
const request : ICefRequest; const request : ICefRequest;
var allowOsExecution : Boolean); var allowOsExecution : Boolean);
begin begin
if (FEvents <> nil) then try
IChromiumEvents(FEvents).doOnProtocolExecution(browser, frame, request, allowOsExecution); if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnProtocolExecution(browser, frame, request, allowOsExecution);
except
on e : exception do
if CustomExceptionHandler('TCustomResourceRequestHandler.OnProtocolExecution', e) then raise;
end;
end; end;
end. end.

View File

@ -2,9 +2,9 @@
"UpdateLazPackages" : [ "UpdateLazPackages" : [
{ {
"ForceNotify" : true, "ForceNotify" : true,
"InternalVersion" : 286, "InternalVersion" : 287,
"Name" : "cef4delphi_lazarus.lpk", "Name" : "cef4delphi_lazarus.lpk",
"Version" : "90.6.3.0" "Version" : "90.6.4.0"
} }
], ],
"UpdatePackageData" : { "UpdatePackageData" : {