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:
parent
83a75c985a
commit
0683539655
@ -123,7 +123,6 @@ object MiniBrowserFrm: TMiniBrowserFrm
|
|||||||
Width = 978
|
Width = 978
|
||||||
Height = 21
|
Height = 21
|
||||||
Align = alClient
|
Align = alClient
|
||||||
ItemIndex = 0
|
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
Text = 'https://www.google.com'
|
Text = 'https://www.google.com'
|
||||||
Items.Strings = (
|
Items.Strings = (
|
||||||
@ -147,6 +146,7 @@ object MiniBrowserFrm: TMiniBrowserFrm
|
|||||||
't/'
|
't/'
|
||||||
'https://test.webrtc.org/'
|
'https://test.webrtc.org/'
|
||||||
'https://www.browserleaks.com/webrtc'
|
'https://www.browserleaks.com/webrtc'
|
||||||
|
'https://shaka-player-demo.appspot.com/demo/'
|
||||||
'http://webglsamples.org/'
|
'http://webglsamples.org/'
|
||||||
'https://get.webgl.org/'
|
'https://get.webgl.org/'
|
||||||
'https://www.briskbard.com'
|
'https://www.briskbard.com'
|
||||||
|
@ -53,7 +53,9 @@ uses
|
|||||||
|
|
||||||
{$R *.res}
|
{$R *.res}
|
||||||
|
|
||||||
|
{$IFDEF WIN32}
|
||||||
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
|
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
// GlobalCEFApp creation and initialization moved to a different unit to fix the memory leak described in the bug #89
|
// GlobalCEFApp creation and initialization moved to a different unit to fix the memory leak described in the bug #89
|
||||||
|
@ -12,6 +12,7 @@ object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm
|
|||||||
Font.Style = []
|
Font.Style = []
|
||||||
OldCreateOrder = False
|
OldCreateOrder = False
|
||||||
Position = poScreenCenter
|
Position = poScreenCenter
|
||||||
|
OnClose = FormClose
|
||||||
OnCloseQuery = FormCloseQuery
|
OnCloseQuery = FormCloseQuery
|
||||||
OnCreate = FormCreate
|
OnCreate = FormCreate
|
||||||
OnShow = FormShow
|
OnShow = FormShow
|
||||||
|
@ -68,34 +68,22 @@ type
|
|||||||
Chromium1: TChromium;
|
Chromium1: TChromium;
|
||||||
AddressCbx: TComboBox;
|
AddressCbx: TComboBox;
|
||||||
Timer1: TTimer;
|
Timer1: TTimer;
|
||||||
procedure Chromium1AfterCreated(Sender: TObject;
|
|
||||||
const browser: ICefBrowser);
|
procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
|
||||||
procedure Chromium1BeforeContextMenu(Sender: TObject;
|
procedure Chromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
|
||||||
const browser: ICefBrowser; const frame: ICefFrame;
|
procedure Chromium1ContextMenuCommand(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer; eventFlags: Cardinal; out Result: Boolean);
|
||||||
const params: ICefContextMenuParams; const model: ICefMenuModel);
|
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 Chromium1ContextMenuCommand(Sender: TObject;
|
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
|
||||||
const browser: ICefBrowser; const frame: ICefFrame;
|
procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
|
||||||
const params: ICefContextMenuParams; commandId: Integer;
|
|
||||||
eventFlags: Cardinal; out Result: Boolean);
|
|
||||||
procedure GoBtnClick(Sender: TObject);
|
procedure GoBtnClick(Sender: TObject);
|
||||||
procedure FormShow(Sender: TObject);
|
procedure FormShow(Sender: TObject);
|
||||||
procedure Timer1Timer(Sender: TObject);
|
procedure Timer1Timer(Sender: TObject);
|
||||||
|
|
||||||
procedure FormCreate(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 FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
||||||
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser;
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||||||
var aAction : TCefCloseBrowserAction);
|
|
||||||
procedure Chromium1BeforeClose(Sender: TObject;
|
|
||||||
const browser: ICefBrowser);
|
|
||||||
private
|
|
||||||
{ Private declarations }
|
|
||||||
protected
|
protected
|
||||||
// Variables to control when can we destroy the form safely
|
// Variables to control when can we destroy the form safely
|
||||||
FCanClose : boolean; // Set to True in TChromium.OnBeforeClose
|
FCanClose : boolean; // Set to True in TChromium.OnBeforeClose
|
||||||
@ -151,8 +139,10 @@ begin
|
|||||||
GlobalCEFApp.OnRegCustomSchemes := GlobalCEFApp_OnRegCustomSchemes;
|
GlobalCEFApp.OnRegCustomSchemes := GlobalCEFApp_OnRegCustomSchemes;
|
||||||
GlobalCEFApp.DisableWebSecurity := True;
|
GlobalCEFApp.DisableWebSecurity := True;
|
||||||
|
|
||||||
// GlobalCEFApp.LogFile := 'debug.log';
|
{$IFDEF DEBUG}
|
||||||
// GlobalCEFApp.LogSeverity := LOGSEVERITY_VERBOSE;
|
GlobalCEFApp.LogFile := 'debug.log';
|
||||||
|
GlobalCEFApp.LogSeverity := LOGSEVERITY_INFO;
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSchemeRegistrationBrowserFrm.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
|
procedure TSchemeRegistrationBrowserFrm.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
|
||||||
@ -236,6 +226,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSchemeRegistrationBrowserFrm.FormClose(Sender: TObject; var Action: TCloseAction);
|
||||||
|
begin
|
||||||
|
CefClearSchemeHandlerFactories;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSchemeRegistrationBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
procedure TSchemeRegistrationBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
||||||
begin
|
begin
|
||||||
CanClose := FCanClose;
|
CanClose := FCanClose;
|
||||||
@ -244,6 +239,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
FClosing := True;
|
FClosing := True;
|
||||||
Visible := False;
|
Visible := False;
|
||||||
|
|
||||||
Chromium1.CloseBrowser(True);
|
Chromium1.CloseBrowser(True);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -270,6 +266,7 @@ end;
|
|||||||
procedure TSchemeRegistrationBrowserFrm.Timer1Timer(Sender: TObject);
|
procedure TSchemeRegistrationBrowserFrm.Timer1Timer(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
Timer1.Enabled := False;
|
Timer1.Enabled := False;
|
||||||
|
|
||||||
if not(Chromium1.CreateBrowser(CEFWindowParent1, '')) and not(Chromium1.Initialized) then
|
if not(Chromium1.CreateBrowser(CEFWindowParent1, '')) and not(Chromium1.Initialized) then
|
||||||
Timer1.Enabled := True;
|
Timer1.Enabled := True;
|
||||||
end;
|
end;
|
||||||
|
@ -50,7 +50,7 @@ uses
|
|||||||
Controls, Forms, Dialogs, StdCtrls, ExtCtrls,
|
Controls, Forms, Dialogs, StdCtrls, ExtCtrls,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
uCEFChromium, uCEFWindowParent, uCEFChromiumWindow, uCEFTypes, uCEFInterfaces,
|
uCEFChromium, uCEFWindowParent, uCEFChromiumWindow, uCEFTypes, uCEFInterfaces,
|
||||||
uCEFWinControl, uCEFSentinel;
|
uCEFWinControl, uCEFSentinel, uCEFLinkedWinControlBase;
|
||||||
|
|
||||||
type
|
type
|
||||||
TForm1 = class(TForm)
|
TForm1 = class(TForm)
|
||||||
|
@ -136,6 +136,7 @@ object MiniBrowserFrm: TMiniBrowserFrm
|
|||||||
'https://www.browserleaks.com/webrtc'
|
'https://www.browserleaks.com/webrtc'
|
||||||
'http://webglsamples.org/'
|
'http://webglsamples.org/'
|
||||||
'https://get.webgl.org/'
|
'https://get.webgl.org/'
|
||||||
|
'https://shaka-player-demo.appspot.com/demo/'
|
||||||
'https://www.briskbard.com'
|
'https://www.briskbard.com'
|
||||||
'https://www.youtube.com'
|
'https://www.youtube.com'
|
||||||
'https://html5demos.com/drag/'
|
'https://html5demos.com/drag/'
|
||||||
|
@ -10,11 +10,12 @@ object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm
|
|||||||
Font.Color = clWindowText
|
Font.Color = clWindowText
|
||||||
Font.Height = -11
|
Font.Height = -11
|
||||||
Font.Name = 'Tahoma'
|
Font.Name = 'Tahoma'
|
||||||
|
OnClose = FormClose
|
||||||
OnCloseQuery = FormCloseQuery
|
OnCloseQuery = FormCloseQuery
|
||||||
OnCreate = FormCreate
|
OnCreate = FormCreate
|
||||||
OnShow = FormShow
|
OnShow = FormShow
|
||||||
Position = poScreenCenter
|
Position = poScreenCenter
|
||||||
LCLVersion = '2.0.6.0'
|
LCLVersion = '2.0.12.0'
|
||||||
object AddressBarPnl: TPanel
|
object AddressBarPnl: TPanel
|
||||||
Left = 0
|
Left = 0
|
||||||
Height = 21
|
Height = 21
|
||||||
@ -69,14 +70,14 @@ object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm
|
|||||||
OnAfterCreated = Chromium1AfterCreated
|
OnAfterCreated = Chromium1AfterCreated
|
||||||
OnBeforeClose = Chromium1BeforeClose
|
OnBeforeClose = Chromium1BeforeClose
|
||||||
OnClose = Chromium1Close
|
OnClose = Chromium1Close
|
||||||
left = 16
|
Left = 16
|
||||||
top = 40
|
Top = 40
|
||||||
end
|
end
|
||||||
object Timer1: TTimer
|
object Timer1: TTimer
|
||||||
Enabled = False
|
Enabled = False
|
||||||
Interval = 300
|
Interval = 300
|
||||||
OnTimer = Timer1Timer
|
OnTimer = Timer1Timer
|
||||||
left = 16
|
Left = 16
|
||||||
top = 96
|
Top = 96
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -80,6 +80,7 @@ type
|
|||||||
const browser: ICefBrowser; const frame: ICefFrame;
|
const browser: ICefBrowser; const frame: ICefFrame;
|
||||||
const params: ICefContextMenuParams; commandId: Integer;
|
const params: ICefContextMenuParams; commandId: Integer;
|
||||||
eventFlags: Cardinal; out Result: Boolean);
|
eventFlags: Cardinal; out Result: Boolean);
|
||||||
|
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||||
procedure GoBtnClick(Sender: TObject);
|
procedure GoBtnClick(Sender: TObject);
|
||||||
procedure FormShow(Sender: TObject);
|
procedure FormShow(Sender: TObject);
|
||||||
procedure Timer1Timer(Sender: TObject);
|
procedure Timer1Timer(Sender: TObject);
|
||||||
@ -220,6 +221,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSchemeRegistrationBrowserFrm.FormClose(Sender: TObject;
|
||||||
|
var CloseAction: TCloseAction);
|
||||||
|
begin
|
||||||
|
CefClearSchemeHandlerFactories;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSchemeRegistrationBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
procedure TSchemeRegistrationBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
||||||
begin
|
begin
|
||||||
CanClose := FCanClose;
|
CanClose := FCanClose;
|
||||||
|
@ -10,6 +10,7 @@ object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm
|
|||||||
Font.Color = clWindowText
|
Font.Color = clWindowText
|
||||||
Font.Height = -11
|
Font.Height = -11
|
||||||
Font.Name = 'Tahoma'
|
Font.Name = 'Tahoma'
|
||||||
|
OnClose = FormClose
|
||||||
OnCloseQuery = FormCloseQuery
|
OnCloseQuery = FormCloseQuery
|
||||||
OnCreate = FormCreate
|
OnCreate = FormCreate
|
||||||
OnShow = FormShow
|
OnShow = FormShow
|
||||||
|
@ -79,6 +79,7 @@ type
|
|||||||
const browser: ICefBrowser; const frame: ICefFrame;
|
const browser: ICefBrowser; const frame: ICefFrame;
|
||||||
const params: ICefContextMenuParams; commandId: Integer;
|
const params: ICefContextMenuParams; commandId: Integer;
|
||||||
eventFlags: Cardinal; out Result: Boolean);
|
eventFlags: Cardinal; out Result: Boolean);
|
||||||
|
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||||
procedure GoBtnClick(Sender: TObject);
|
procedure GoBtnClick(Sender: TObject);
|
||||||
procedure FormShow(Sender: TObject);
|
procedure FormShow(Sender: TObject);
|
||||||
procedure Timer1Timer(Sender: TObject);
|
procedure Timer1Timer(Sender: TObject);
|
||||||
@ -217,6 +218,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSchemeRegistrationBrowserFrm.FormClose(Sender: TObject;
|
||||||
|
var CloseAction: TCloseAction);
|
||||||
|
begin
|
||||||
|
CefClearSchemeHandlerFactories;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSchemeRegistrationBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
procedure TSchemeRegistrationBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
||||||
begin
|
begin
|
||||||
CanClose := FCanClose;
|
CanClose := FCanClose;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"UpdateLazPackages" : [
|
"UpdateLazPackages" : [
|
||||||
{
|
{
|
||||||
"ForceNotify" : true,
|
"ForceNotify" : true,
|
||||||
"InternalVersion" : 316,
|
"InternalVersion" : 317,
|
||||||
"Name" : "cef4delphi_lazarus.lpk",
|
"Name" : "cef4delphi_lazarus.lpk",
|
||||||
"Version" : "93.1.11.0"
|
"Version" : "93.1.11.0"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user