we would like update our code from DECF1 to DCEF3.
the prototype of the method OnBeforeResourceLoad change
in DECF1
procedure ChromeBrowserBeforeResourceLoad(
Sender: TObject; const browser: ICefBrowser;
const request: ICefRequest; var redirectUrl: ustring;
var resourceStream: ICefStreamReader; const response: ICefResponse;
loadFlags: Integer; out Result: Boolean);
in DCEF3
procedure ChromeBrowserBeforeResourceLoad(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame;
const request: ICefRequest; out Result: Boolean);
resourceStream and response parameters doesn't exist now in DCEF3
we have this code in DCEF1, so how to make it with DCEF3 ?
procedure TXFChromeViewer.ChromeBrowserBeforeResourceLoad(
Sender: TObject; const browser: ICefBrowser;
const request: ICefRequest; var redirectUrl: ustring;
var resourceStream: ICefStreamReader; const response: ICefResponse;
loadFlags: Integer; out Result: Boolean);
var
content : TContentData;
handled : Boolean;
begin
FixupThreadLangageID;
if StrEndsWith(request.Url, '/test.htm') then begin
content:=FHomePage; //HTML code
handled:=True;
end else content:=FChromeServer.ExecuteRequest(request, handled);
if handled then begin
response.Status:=200;
response.StatusText:='Ok';
response.MimeType:=StrBefore(content.MimeType, ';');
if content.Size=0 then
content.AsPlainText:='.';
resourceStream:=TCefStreamReaderRef.CreateForData(@content.Data[1], content.Size);
end;
end;
There's no great way to filter response contents with CEF3 currently. You can use CefResourceHandler via CefRequestHandler::GetResourceHandler and execute the request/return the response contents yourself using CefURLRequest.
Eventually when I shake out all the problems, I'm (hopefully) going to post something more cleaned up with a callback that lets you modify the response.