mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2025-06-02 21:57:37 +02:00
Fixed issue #547 : Render process crash in the JSRTTIExtension demo
This commit is contained in:
parent
7deeeac5aa
commit
0ce22061ae
@ -20,6 +20,7 @@ uses
|
|||||||
uCEFTypes, uCEFSchemeRegistrar;
|
uCEFTypes, uCEFSchemeRegistrar;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
ICefBaseRefCounted = interface;
|
||||||
ICefBrowser = interface;
|
ICefBrowser = interface;
|
||||||
ICefFrame = interface;
|
ICefFrame = interface;
|
||||||
ICefFrameHandler = interface;
|
ICefFrameHandler = interface;
|
||||||
@ -673,6 +674,7 @@ type
|
|||||||
procedure doOnGetLinuxWindowProperties(const window_: ICefWindow; var properties: TLinuxWindowProperties; var aResult: boolean);
|
procedure doOnGetLinuxWindowProperties(const window_: ICefWindow; var properties: TLinuxWindowProperties; var aResult: boolean);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{*
|
{*
|
||||||
*******************************************
|
*******************************************
|
||||||
************** CEF interfaces *************
|
************** CEF interfaces *************
|
||||||
@ -712,6 +714,15 @@ type
|
|||||||
procedure DestroyOtherRefs;
|
procedure DestroyOtherRefs;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
ICefCustomUserData = interface(ICefBaseRefCounted)
|
||||||
|
['{BEC09DE3-AB0A-4F5E-8461-5F9F4520FDEF}']
|
||||||
|
function GetUserDataType : Pointer;
|
||||||
|
function GetUserData : Pointer;
|
||||||
|
|
||||||
|
property UserDataType : Pointer read GetUserDataType;
|
||||||
|
property UserData : Pointer read GetUserData;
|
||||||
|
end;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Callback interface for ICefBrowserHost.RunFileDialog. The functions of
|
/// Callback interface for ICefBrowserHost.RunFileDialog. The functions of
|
||||||
/// this interface will be called on the browser process UI thread.
|
/// this interface will be called on the browser process UI thread.
|
||||||
@ -3458,11 +3469,11 @@ type
|
|||||||
/// Returns false (0) if this function is called incorrectly. This function
|
/// Returns false (0) if this function is called incorrectly. This function
|
||||||
/// can only be called on user created objects.
|
/// can only be called on user created objects.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
function SetUserData(const data: ICefv8Value): Boolean;
|
function SetUserData(const data: ICefCustomUserData): Boolean;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the user data, if any, assigned to this object.
|
/// Returns the user data, if any, assigned to this object.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
function GetUserData: ICefv8Value;
|
function GetUserData: ICefCustomUserData;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the amount of externally allocated memory registered for the
|
/// Returns the amount of externally allocated memory registered for the
|
||||||
/// object.
|
/// object.
|
||||||
|
@ -37,6 +37,20 @@ type
|
|||||||
constructor Create; virtual;
|
constructor Create; virtual;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
TCefCustomUserData = class(TCefBaseRefCountedOwn, ICefCustomUserData)
|
||||||
|
protected
|
||||||
|
FUserDataType : Pointer;
|
||||||
|
FUserData : Pointer;
|
||||||
|
|
||||||
|
function GetUserDataType : Pointer;
|
||||||
|
function GetUserData : Pointer;
|
||||||
|
|
||||||
|
public
|
||||||
|
constructor Create(aUserDataType, aUserData : Pointer);
|
||||||
|
destructor Destroy; override;
|
||||||
|
class function UnWrap(data: Pointer): ICefCustomUserData;
|
||||||
|
end;
|
||||||
|
|
||||||
{$IFDEF DELPHI14_UP}
|
{$IFDEF DELPHI14_UP}
|
||||||
TCefRTTIExtension = class(TCefv8HandlerOwn)
|
TCefRTTIExtension = class(TCefv8HandlerOwn)
|
||||||
protected
|
protected
|
||||||
@ -183,7 +197,62 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
// TCefCustomUserData
|
||||||
|
|
||||||
|
constructor TCefCustomUserData.Create(aUserDataType, aUserData : Pointer);
|
||||||
|
begin
|
||||||
|
inherited CreateData(SizeOf(TCefBaseRefCounted));
|
||||||
|
|
||||||
|
FUserDataType := aUserDataType;
|
||||||
|
FUserData := aUserData;
|
||||||
|
|
||||||
|
{$IFDEF INTFLOG}
|
||||||
|
CefDebugLog(ClassName + '.Create');
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TCefCustomUserData.Destroy;
|
||||||
|
begin
|
||||||
|
{$IFDEF INTFLOG}
|
||||||
|
CefDebugLog(ClassName + '.Destroy');
|
||||||
|
{$ENDIF}
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TCefCustomUserData.UnWrap(data: Pointer): ICefCustomUserData;
|
||||||
|
var
|
||||||
|
TempUserData : TCefCustomUserData;
|
||||||
|
begin
|
||||||
|
if (data <> nil) then
|
||||||
|
begin
|
||||||
|
// Get the original class instance from the data pointer.
|
||||||
|
TempUserData := TCefCustomUserData(CefGetObject(data));
|
||||||
|
|
||||||
|
// TempUserData already has an increased reference count.
|
||||||
|
// We need to decrease it before querying it with the "as" operator,
|
||||||
|
// which increases the count.
|
||||||
|
if not(TempUserData.HasOneRef) and TempUserData.HasAtLeastOneRef then
|
||||||
|
TempUserData._Release;
|
||||||
|
|
||||||
|
Result := TempUserData as ICefCustomUserData;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCefCustomUserData.GetUserDataType : Pointer;
|
||||||
|
begin
|
||||||
|
Result := FUserDataType;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCefCustomUserData.GetUserData : Pointer;
|
||||||
|
begin
|
||||||
|
Result := FUserData;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{$IFDEF DELPHI14_UP}
|
{$IFDEF DELPHI14_UP}
|
||||||
|
|
||||||
// TCefRTTIExtension
|
// TCefRTTIExtension
|
||||||
|
|
||||||
constructor TCefRTTIExtension.Create(const value: TValue; SyncMainThread: Boolean);
|
constructor TCefRTTIExtension.Create(const value: TValue; SyncMainThread: Boolean);
|
||||||
@ -375,7 +444,7 @@ function TCefRTTIExtension.GetValue(pi: PTypeInfo; const v: ICefv8Value; var ret
|
|||||||
|
|
||||||
function ProcessObject: Boolean;
|
function ProcessObject: Boolean;
|
||||||
var
|
var
|
||||||
ud: ICefv8Value;
|
ud: ICefCustomUserData;
|
||||||
i: Pointer;
|
i: Pointer;
|
||||||
td: PTypeData;
|
td: PTypeData;
|
||||||
rt: TRttiType;
|
rt: TRttiType;
|
||||||
@ -384,21 +453,12 @@ function TCefRTTIExtension.GetValue(pi: PTypeInfo; const v: ICefv8Value; var ret
|
|||||||
begin
|
begin
|
||||||
ud := v.GetUserData;
|
ud := v.GetUserData;
|
||||||
if (ud = nil) then Exit(False);
|
if (ud = nil) then Exit(False);
|
||||||
{$IFDEF TARGET_64BITS}
|
rt := ud.UserDataType;
|
||||||
rt := StrToPtr(ud.GetValueByIndex(0).GetStringValue);
|
|
||||||
{$ELSE}
|
|
||||||
rt := TRttiType(ud.GetValueByIndex(0).GetIntValue);
|
|
||||||
{$ENDIF}
|
|
||||||
td := GetTypeData(rt.Handle);
|
td := GetTypeData(rt.Handle);
|
||||||
|
|
||||||
if (rt.TypeKind = tkClass) and td.ClassType.InheritsFrom(GetTypeData(pi).ClassType) then
|
if (rt.TypeKind = tkClass) and td.ClassType.InheritsFrom(GetTypeData(pi).ClassType) then
|
||||||
begin
|
begin
|
||||||
{$IFDEF TARGET_64BITS}
|
i := ud.UserData;
|
||||||
i := StrToPtr(ud.GetValueByIndex(1).GetStringValue);
|
|
||||||
{$ELSE}
|
|
||||||
i := Pointer(ud.GetValueByIndex(1).GetIntValue);
|
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
TValue.Make(@i, pi, ret);
|
TValue.Make(@i, pi, ret);
|
||||||
end else
|
end else
|
||||||
Exit(False);
|
Exit(False);
|
||||||
@ -409,7 +469,7 @@ function TCefRTTIExtension.GetValue(pi: PTypeInfo; const v: ICefv8Value; var ret
|
|||||||
|
|
||||||
function ProcessClass: Boolean;
|
function ProcessClass: Boolean;
|
||||||
var
|
var
|
||||||
ud: ICefv8Value;
|
ud: ICefCustomUserData;
|
||||||
i: Pointer;
|
i: Pointer;
|
||||||
rt: TRttiType;
|
rt: TRttiType;
|
||||||
begin
|
begin
|
||||||
@ -417,19 +477,11 @@ function TCefRTTIExtension.GetValue(pi: PTypeInfo; const v: ICefv8Value; var ret
|
|||||||
begin
|
begin
|
||||||
ud := v.GetUserData;
|
ud := v.GetUserData;
|
||||||
if (ud = nil) then Exit(False);
|
if (ud = nil) then Exit(False);
|
||||||
{$IFDEF TARGET_64BITS}
|
rt := ud.UserDataType;
|
||||||
rt := StrToPtr(ud.GetValueByIndex(0).GetStringValue);
|
|
||||||
{$ELSE}
|
|
||||||
rt := TRttiType(ud.GetValueByIndex(0).GetIntValue);
|
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
if (rt.TypeKind = tkClassRef) then
|
if (rt.TypeKind = tkClassRef) then
|
||||||
begin
|
begin
|
||||||
{$IFDEF TARGET_64BITS}
|
i := ud.UserData;
|
||||||
i := StrToPtr(ud.GetValueByIndex(1).GetStringValue);
|
|
||||||
{$ELSE}
|
|
||||||
i := Pointer(ud.GetValueByIndex(1).GetIntValue);
|
|
||||||
{$ENDIF}
|
|
||||||
TValue.Make(@i, pi, ret);
|
TValue.Make(@i, pi, ret);
|
||||||
end else
|
end else
|
||||||
Exit(False);
|
Exit(False);
|
||||||
@ -497,19 +549,19 @@ function TCefRTTIExtension.SetValue(const v: TValue; var ret: ICefv8Value): Bool
|
|||||||
var
|
var
|
||||||
rf: TRttiField;
|
rf: TRttiField;
|
||||||
vl: TValue;
|
vl: TValue;
|
||||||
ud, v8: ICefv8Value;
|
ud: ICefCustomUserData;
|
||||||
|
v8: ICefv8Value;
|
||||||
rec: Pointer;
|
rec: Pointer;
|
||||||
rt: TRttiType;
|
rt: TRttiType;
|
||||||
begin
|
begin
|
||||||
ud := TCefv8ValueRef.NewArray(1);
|
|
||||||
rt := FCtx.GetType(v.TypeInfo);
|
rt := FCtx.GetType(v.TypeInfo);
|
||||||
{$IFDEF TARGET_64BITS}
|
try
|
||||||
ud.SetValueByIndex(0, TCefv8ValueRef.NewString(PtrToStr(rt)));
|
ud := TCefCustomUserData.Create(Pointer(rt), nil);
|
||||||
{$ELSE}
|
ret := TCefv8ValueRef.NewObject(nil, nil);
|
||||||
ud.SetValueByIndex(0, TCefv8ValueRef.NewInt(Integer(rt)));
|
ret.SetUserData(ud);
|
||||||
{$ENDIF}
|
finally
|
||||||
ret := TCefv8ValueRef.NewObject(nil, nil);
|
ud := nil;
|
||||||
ret.SetUserData(ud);
|
end;
|
||||||
|
|
||||||
{$IFDEF DELPHI15_UP}
|
{$IFDEF DELPHI15_UP}
|
||||||
rec := TValueData(v).FValueData.GetReferenceToRawData;
|
rec := TValueData(v).FValueData.GetReferenceToRawData;
|
||||||
@ -549,22 +601,19 @@ function TCefRTTIExtension.SetValue(const v: TValue; var ret: ICefv8Value): Bool
|
|||||||
p: TRttiProperty;
|
p: TRttiProperty;
|
||||||
fl: TRttiField;
|
fl: TRttiField;
|
||||||
f: ICefv8Value;
|
f: ICefv8Value;
|
||||||
_r, _g, _s, ud: ICefv8Value;
|
ud: ICefCustomUserData;
|
||||||
|
_r, _g, _s: ICefv8Value;
|
||||||
_a: TCefv8ValueArray;
|
_a: TCefv8ValueArray;
|
||||||
rt: TRttiType;
|
rt: TRttiType;
|
||||||
begin
|
begin
|
||||||
rt := FCtx.GetType(v.TypeInfo);
|
rt := FCtx.GetType(v.TypeInfo);
|
||||||
|
try
|
||||||
ud := TCefv8ValueRef.NewArray(2);
|
ud := TCefCustomUserData.Create(Pointer(rt), Pointer(v.AsObject));
|
||||||
{$IFDEF TARGET_64BITS}
|
ret := TCefv8ValueRef.NewObject(nil, nil); // todo
|
||||||
ud.SetValueByIndex(0, TCefv8ValueRef.NewString(PtrToStr(rt)));
|
ret.SetUserData(ud);
|
||||||
ud.SetValueByIndex(1, TCefv8ValueRef.NewString(PtrToStr(v.AsObject)));
|
finally
|
||||||
{$ELSE}
|
ud := nil;
|
||||||
ud.SetValueByIndex(0, TCefv8ValueRef.NewInt(Integer(rt)));
|
end;
|
||||||
ud.SetValueByIndex(1, TCefv8ValueRef.NewInt(Integer(v.AsObject)));
|
|
||||||
{$ENDIF}
|
|
||||||
ret := TCefv8ValueRef.NewObject(nil, nil); // todo
|
|
||||||
ret.SetUserData(ud);
|
|
||||||
|
|
||||||
for m in rt.GetMethods do
|
for m in rt.GetMethods do
|
||||||
if m.Visibility > mvProtected then
|
if m.Visibility > mvProtected then
|
||||||
@ -612,23 +661,20 @@ function TCefRTTIExtension.SetValue(const v: TValue; var ret: ICefv8Value): Bool
|
|||||||
function ProcessClass: Boolean;
|
function ProcessClass: Boolean;
|
||||||
var
|
var
|
||||||
m: TRttiMethod;
|
m: TRttiMethod;
|
||||||
f, ud: ICefv8Value;
|
f: ICefv8Value;
|
||||||
|
ud: ICefCustomUserData;
|
||||||
c: TClass;
|
c: TClass;
|
||||||
rt: TRttiType;
|
rt: TRttiType;
|
||||||
begin
|
begin
|
||||||
c := v.AsClass;
|
c := v.AsClass;
|
||||||
rt := FCtx.GetType(c);
|
rt := FCtx.GetType(c);
|
||||||
|
try
|
||||||
ud := TCefv8ValueRef.NewArray(2);
|
ud := TCefCustomUserData.Create(Pointer(rt), Pointer(c));
|
||||||
{$IFDEF TARGET_64BITS}
|
ret := TCefv8ValueRef.NewObject(nil, nil); // todo
|
||||||
ud.SetValueByIndex(0, TCefv8ValueRef.NewString(PtrToStr(rt)));
|
ret.SetUserData(ud);
|
||||||
ud.SetValueByIndex(1, TCefv8ValueRef.NewString(PtrToStr(c)));
|
finally
|
||||||
{$ELSE}
|
ud := nil;
|
||||||
ud.SetValueByIndex(0, TCefv8ValueRef.NewInt(Integer(rt)));
|
end;
|
||||||
ud.SetValueByIndex(1, TCefv8ValueRef.NewInt(Integer(c)));
|
|
||||||
{$ENDIF}
|
|
||||||
ret := TCefv8ValueRef.NewObject(nil, nil); // todo
|
|
||||||
ret.SetUserData(ud);
|
|
||||||
|
|
||||||
if c <> nil then
|
if c <> nil then
|
||||||
begin
|
begin
|
||||||
@ -674,7 +720,7 @@ function TCefRTTIExtension.SetValue(const v: TValue; var ret: ICefv8Value): Bool
|
|||||||
var
|
var
|
||||||
m: TRttiMethod;
|
m: TRttiMethod;
|
||||||
f: ICefv8Value;
|
f: ICefv8Value;
|
||||||
ud: ICefv8Value;
|
ud: ICefCustomUserData;
|
||||||
rt: TRttiType;
|
rt: TRttiType;
|
||||||
begin
|
begin
|
||||||
|
|
||||||
@ -685,18 +731,13 @@ function TCefRTTIExtension.SetValue(const v: TValue; var ret: ICefv8Value): Bool
|
|||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
rt := FCtx.GetType(v.TypeInfo);
|
rt := FCtx.GetType(v.TypeInfo);
|
||||||
|
try
|
||||||
|
ud := TCefCustomUserData.Create(Pointer(rt), Pointer(v.AsInterface));
|
||||||
ud := TCefv8ValueRef.NewArray(2);
|
ret := TCefv8ValueRef.NewObject(nil, nil);
|
||||||
{$IFDEF TARGET_64BITS}
|
ret.SetUserData(ud);
|
||||||
ud.SetValueByIndex(0, TCefv8ValueRef.NewString(PtrToStr(rt)));
|
finally
|
||||||
ud.SetValueByIndex(1, TCefv8ValueRef.NewString(PtrToStr(Pointer(v.AsInterface))));
|
ud := nil;
|
||||||
{$ELSE}
|
end;
|
||||||
ud.SetValueByIndex(0, TCefv8ValueRef.NewInt(Integer(rt)));
|
|
||||||
ud.SetValueByIndex(1, TCefv8ValueRef.NewInt(Integer(v.AsInterface)));
|
|
||||||
{$ENDIF}
|
|
||||||
ret := TCefv8ValueRef.NewObject(nil, nil);
|
|
||||||
ret.SetUserData(ud);
|
|
||||||
|
|
||||||
for m in rt.GetMethods do
|
for m in rt.GetMethods do
|
||||||
if m.Visibility > mvProtected then
|
if m.Visibility > mvProtected then
|
||||||
@ -789,7 +830,7 @@ function TCefRTTIExtension.Execute(const name : ustring;
|
|||||||
var exception : ustring): Boolean;
|
var exception : ustring): Boolean;
|
||||||
var
|
var
|
||||||
p: PChar;
|
p: PChar;
|
||||||
ud: ICefv8Value;
|
ud: ICefCustomUserData;
|
||||||
rt: TRttiType;
|
rt: TRttiType;
|
||||||
val: TObject;
|
val: TObject;
|
||||||
cls: TClass;
|
cls: TClass;
|
||||||
@ -812,19 +853,12 @@ begin
|
|||||||
ud := object_.GetUserData;
|
ud := object_.GetUserData;
|
||||||
if ud <> nil then
|
if ud <> nil then
|
||||||
begin
|
begin
|
||||||
{$IFDEF TARGET_64BITS}
|
rt := TRttiType(ud.UserDataType);
|
||||||
rt := StrToPtr(ud.GetValueByIndex(0).GetStringValue);
|
|
||||||
{$ELSE}
|
|
||||||
rt := TRttiType(ud.GetValueByIndex(0).GetIntValue);
|
|
||||||
{$ENDIF}
|
|
||||||
case rt.TypeKind of
|
case rt.TypeKind of
|
||||||
tkClass:
|
tkClass:
|
||||||
begin
|
begin
|
||||||
{$IFDEF TARGET_64BITS}
|
val := TObject(ud.UserData);
|
||||||
val := StrToPtr(ud.GetValueByIndex(1).GetStringValue);
|
|
||||||
{$ELSE}
|
|
||||||
val := TObject(ud.GetValueByIndex(1).GetIntValue);
|
|
||||||
{$ENDIF}
|
|
||||||
cls := GetTypeData(rt.Handle).ClassType;
|
cls := GetTypeData(rt.Handle).ClassType;
|
||||||
|
|
||||||
if p^ = '$' then
|
if p^ = '$' then
|
||||||
@ -904,11 +938,7 @@ begin
|
|||||||
tkClassRef:
|
tkClassRef:
|
||||||
begin
|
begin
|
||||||
val := nil;
|
val := nil;
|
||||||
{$IFDEF TARGET_64BITS}
|
cls := TClass(ud.UserData);
|
||||||
cls := StrToPtr(ud.GetValueByIndex(1).GetStringValue);
|
|
||||||
{$ELSE}
|
|
||||||
cls := TClass(ud.GetValueByIndex(1).GetIntValue);
|
|
||||||
{$ENDIF}
|
|
||||||
m := FCtx.GetType(cls).GetMethod(name);
|
m := FCtx.GetType(cls).GetMethod(name);
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
|
@ -59,8 +59,8 @@ type
|
|||||||
function SetValueByIndex(index: Integer; const value: ICefv8Value): Boolean;
|
function SetValueByIndex(index: Integer; const value: ICefv8Value): Boolean;
|
||||||
function SetValueByAccessor(const key: ustring; attribute: TCefV8PropertyAttributes): Boolean;
|
function SetValueByAccessor(const key: ustring; attribute: TCefV8PropertyAttributes): Boolean;
|
||||||
function GetKeys(const keys: TStrings): Integer;
|
function GetKeys(const keys: TStrings): Integer;
|
||||||
function SetUserData(const data: ICefv8Value): Boolean;
|
function SetUserData(const data: ICefCustomUserData): Boolean;
|
||||||
function GetUserData: ICefv8Value;
|
function GetUserData: ICefCustomUserData;
|
||||||
function GetExternallyAllocatedMemory: Integer;
|
function GetExternallyAllocatedMemory: Integer;
|
||||||
function AdjustExternallyAllocatedMemory(changeInBytes: Integer): Integer;
|
function AdjustExternallyAllocatedMemory(changeInBytes: Integer): Integer;
|
||||||
function GetArrayLength: Integer;
|
function GetArrayLength: Integer;
|
||||||
@ -473,7 +473,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCefv8ValueRef.SetUserData(const data: ICefv8Value): Boolean;
|
function TCefv8ValueRef.SetUserData(const data: ICefCustomUserData): Boolean;
|
||||||
begin
|
begin
|
||||||
Result := PCefV8Value(FData)^.set_user_data(PCefV8Value(FData), CefGetData(data)) <> 0;
|
Result := PCefV8Value(FData)^.set_user_data(PCefV8Value(FData), CefGetData(data)) <> 0;
|
||||||
end;
|
end;
|
||||||
@ -518,9 +518,9 @@ begin
|
|||||||
Result := PCefV8Value(FData)^.set_rethrow_exceptions(PCefV8Value(FData), Ord(rethrow)) <> 0;
|
Result := PCefV8Value(FData)^.set_rethrow_exceptions(PCefV8Value(FData), Ord(rethrow)) <> 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCefv8ValueRef.GetUserData: ICefv8Value;
|
function TCefv8ValueRef.GetUserData: ICefCustomUserData;
|
||||||
begin
|
begin
|
||||||
Result := TCefv8ValueRef.UnWrap(PCefV8Value(FData)^.get_user_data(PCefV8Value(FData)));
|
Result := TCefCustomUserData.UnWrap(PCefV8Value(FData)^.get_user_data(PCefV8Value(FData)));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCefv8ValueRef.GetValueByIndex(index: Integer): ICefv8Value;
|
function TCefv8ValueRef.GetValueByIndex(index: Integer): ICefv8Value;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"UpdateLazPackages" : [
|
"UpdateLazPackages" : [
|
||||||
{
|
{
|
||||||
"ForceNotify" : true,
|
"ForceNotify" : true,
|
||||||
"InternalVersion" : 701,
|
"InternalVersion" : 702,
|
||||||
"Name" : "cef4delphi_lazarus.lpk",
|
"Name" : "cef4delphi_lazarus.lpk",
|
||||||
"Version" : "133.4.6"
|
"Version" : "133.4.6"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user