1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-02-02 10:25:26 +02:00

Fixed issue #382 : scheme registration leak

Added a link to test Widevine in the MiniBrowser demo
This commit is contained in:
Salvador Díaz Fau 2021-09-10 18:30:54 +02:00
parent 83a75c985a
commit 0683539655
11 changed files with 53 additions and 36 deletions

View File

@ -123,7 +123,6 @@ object MiniBrowserFrm: TMiniBrowserFrm
Width = 978
Height = 21
Align = alClient
ItemIndex = 0
TabOrder = 0
Text = 'https://www.google.com'
Items.Strings = (
@ -147,6 +146,7 @@ object MiniBrowserFrm: TMiniBrowserFrm
't/'
'https://test.webrtc.org/'
'https://www.browserleaks.com/webrtc'
'https://shaka-player-demo.appspot.com/demo/'
'http://webglsamples.org/'
'https://get.webgl.org/'
'https://www.briskbard.com'

View File

@ -46,14 +46,16 @@ uses
{$ELSE}
Forms,
Windows,
{$ENDIF }
{$ENDIF}
uCEFApplication,
uSchemeRegistrationBrowser in 'uSchemeRegistrationBrowser.pas' {SchemeRegistrationBrowserFrm},
uHelloScheme in 'uHelloScheme.pas';
{$R *.res}
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
{$IFDEF WIN32}
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
{$ENDIF}
begin
// GlobalCEFApp creation and initialization moved to a different unit to fix the memory leak described in the bug #89

View File

@ -12,6 +12,7 @@ object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
OnClose = FormClose
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnShow = FormShow

View File

@ -68,34 +68,22 @@ type
Chromium1: TChromium;
AddressCbx: TComboBox;
Timer1: TTimer;
procedure Chromium1AfterCreated(Sender: TObject;
const browser: ICefBrowser);
procedure Chromium1BeforeContextMenu(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; const model: ICefMenuModel);
procedure Chromium1ContextMenuCommand(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; commandId: Integer;
eventFlags: Cardinal; out Result: Boolean);
procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
procedure Chromium1ContextMenuCommand(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer; eventFlags: Cardinal; out Result: Boolean);
procedure Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings; var extra_info: ICefDictionaryValue; var noJavascriptAccess: Boolean; var Result: Boolean);
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
procedure GoBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Chromium1BeforePopup(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame; const targetUrl,
targetFrameName: ustring;
targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean;
const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo;
var client: ICefClient; var settings: TCefBrowserSettings;
var extra_info: ICefDictionaryValue;
var noJavascriptAccess: Boolean; var Result: Boolean);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser;
var aAction : TCefCloseBrowserAction);
procedure Chromium1BeforeClose(Sender: TObject;
const browser: ICefBrowser);
private
{ Private declarations }
procedure FormClose(Sender: TObject; var Action: TCloseAction);
protected
// Variables to control when can we destroy the form safely
FCanClose : boolean; // Set to True in TChromium.OnBeforeClose
@ -151,8 +139,10 @@ begin
GlobalCEFApp.OnRegCustomSchemes := GlobalCEFApp_OnRegCustomSchemes;
GlobalCEFApp.DisableWebSecurity := True;
// GlobalCEFApp.LogFile := 'debug.log';
// GlobalCEFApp.LogSeverity := LOGSEVERITY_VERBOSE;
{$IFDEF DEBUG}
GlobalCEFApp.LogFile := 'debug.log';
GlobalCEFApp.LogSeverity := LOGSEVERITY_INFO;
{$ENDIF}
end;
procedure TSchemeRegistrationBrowserFrm.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
@ -236,6 +226,11 @@ begin
end;
end;
procedure TSchemeRegistrationBrowserFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CefClearSchemeHandlerFactories;
end;
procedure TSchemeRegistrationBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := FCanClose;
@ -244,6 +239,7 @@ begin
begin
FClosing := True;
Visible := False;
Chromium1.CloseBrowser(True);
end;
end;
@ -270,6 +266,7 @@ end;
procedure TSchemeRegistrationBrowserFrm.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
if not(Chromium1.CreateBrowser(CEFWindowParent1, '')) and not(Chromium1.Initialized) then
Timer1.Enabled := True;
end;

View File

@ -50,7 +50,7 @@ uses
Controls, Forms, Dialogs, StdCtrls, ExtCtrls,
{$ENDIF}
uCEFChromium, uCEFWindowParent, uCEFChromiumWindow, uCEFTypes, uCEFInterfaces,
uCEFWinControl, uCEFSentinel;
uCEFWinControl, uCEFSentinel, uCEFLinkedWinControlBase;
type
TForm1 = class(TForm)

View File

@ -136,6 +136,7 @@ object MiniBrowserFrm: TMiniBrowserFrm
'https://www.browserleaks.com/webrtc'
'http://webglsamples.org/'
'https://get.webgl.org/'
'https://shaka-player-demo.appspot.com/demo/'
'https://www.briskbard.com'
'https://www.youtube.com'
'https://html5demos.com/drag/'

View File

@ -10,11 +10,12 @@ object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
OnClose = FormClose
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnShow = FormShow
Position = poScreenCenter
LCLVersion = '2.0.6.0'
LCLVersion = '2.0.12.0'
object AddressBarPnl: TPanel
Left = 0
Height = 21
@ -69,14 +70,14 @@ object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm
OnAfterCreated = Chromium1AfterCreated
OnBeforeClose = Chromium1BeforeClose
OnClose = Chromium1Close
left = 16
top = 40
Left = 16
Top = 40
end
object Timer1: TTimer
Enabled = False
Interval = 300
OnTimer = Timer1Timer
left = 16
top = 96
Left = 16
Top = 96
end
end

View File

@ -80,6 +80,7 @@ type
const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; commandId: Integer;
eventFlags: Cardinal; out Result: Boolean);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure GoBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
@ -220,6 +221,12 @@ begin
end;
end;
procedure TSchemeRegistrationBrowserFrm.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
CefClearSchemeHandlerFactories;
end;
procedure TSchemeRegistrationBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := FCanClose;

View File

@ -10,6 +10,7 @@ object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
OnClose = FormClose
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnShow = FormShow

View File

@ -79,6 +79,7 @@ type
const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; commandId: Integer;
eventFlags: Cardinal; out Result: Boolean);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure GoBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
@ -140,7 +141,7 @@ procedure CreateGlobalCEFApp;
begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.OnRegCustomSchemes := GlobalCEFApp_OnRegCustomSchemes;
GlobalCEFApp.BrowserSubprocessPath := 'SchemeRegistrationBrowser_sp.exe';
GlobalCEFApp.BrowserSubprocessPath := 'SchemeRegistrationBrowser_sp.exe';
GlobalCEFApp.LogFile := 'debug.log';
GlobalCEFApp.LogSeverity := LOGSEVERITY_INFO;
end;
@ -217,6 +218,12 @@ begin
end;
end;
procedure TSchemeRegistrationBrowserFrm.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
CefClearSchemeHandlerFactories;
end;
procedure TSchemeRegistrationBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := FCanClose;

View File

@ -2,7 +2,7 @@
"UpdateLazPackages" : [
{
"ForceNotify" : true,
"InternalVersion" : 316,
"InternalVersion" : 317,
"Name" : "cef4delphi_lazarus.lpk",
"Version" : "93.1.11.0"
}