1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-06-12 22:07:39 +02:00

Update to CEF 3.3029.1613.g22354a9

- Update to CEF 3.3029.1613.g22354a9
- Bug fix #28
- Added missing functions in uCEFMiscFunctions.pas
- Fixed MDIBrowser app close issue.
- Changed the CustomExceptionHandler to reraise exceptions with full
trace.
This commit is contained in:
Salvador Diaz Fau
2017-05-07 18:04:05 +02:00
parent 6b84d78cfe
commit 18a9de0a94
23 changed files with 1271 additions and 271 deletions

View File

@ -73,8 +73,8 @@ function CefInt64Set(int32_low, int32_high: Integer): Int64;
function CefInt64GetLow(const int64_val: Int64): Integer;
function CefInt64GetHigh(const int64_val: Int64): Integer;
function CefGetObject(ptr: Pointer): TObject;
function CefGetData(const i: ICefBaseRefCounted): Pointer;
function CefGetObject(ptr: Pointer): TObject; {$IFDEF SUPPORTS_INLINE} inline; {$ENDIF}
function CefGetData(const i: ICefBaseRefCounted): Pointer; {$IFDEF SUPPORTS_INLINE} inline; {$ENDIF}
function CefStringAlloc(const str: ustring): TCefString;
function CefStringClearAndGet(var str: TCefString): ustring;
@ -120,7 +120,7 @@ procedure CefSetCrashKeyValue(const aKey, aValue : ustring);
procedure CefLog(const aFile : string; aLine, aSeverity : integer; const aMessage : string);
procedure OutputDebugMessage(const aMessage : string);
procedure CustomExceptionHandler(const aMessage : string);
function CustomExceptionHandler(const aFunctionName : string; const aException : exception) : boolean;
function CefRegisterSchemeHandlerFactory(const SchemeName, HostName: ustring; const handler: TCefResourceHandlerClass): Boolean;
function CefClearSchemeHandlerFactories : boolean;
@ -138,12 +138,36 @@ function CheckResources(const aResourcesDirPath : string) : boolean;
function CheckDLLs(const aFrameworkDirPath : string) : boolean;
function CheckDLLVersion(const aDLLFile : string; aMajor, aMinor, aRelease, aBuild : uint16) : boolean;
function CefParseUrl(const url: ustring; var parts: TUrlParts): Boolean;
function CefParseUrl(const url: ustring; var parts: TUrlParts): Boolean;
function CefCreateUrl(var parts: TUrlParts): ustring;
function CefFormatUrlForSecurityDisplay(const originUrl: string): string;
function CefGetMimeType(const extension: ustring): ustring;
procedure CefGetExtensionsForMimeType(const mimeType: ustring; extensions: TStringList);
function CefBase64Encode(const data: Pointer; dataSize: NativeUInt): ustring;
function CefBase64Decode(const data: ustring): ICefBinaryValue;
function CefUriEncode(const text: ustring; usePlus: Boolean): ustring;
function CefUriDecode(const text: ustring; convertToUtf8: Boolean; unescapeRule: TCefUriUnescapeRule): ustring;
function CefParseJson(const jsonString: ustring; options: TCefJsonParserOptions): ICefValue;
function CefParseJsonAndReturnError(const jsonString : ustring;
options : TCefJsonParserOptions;
out errorCodeOut : TCefJsonParserError;
out errorMsgOut : ustring): ICefValue;
function CefWriteJson(const node: ICefValue; options: TCefJsonWriterOptions): ustring;
function CefCreateDirectory(const fullPath: ustring): Boolean;
function CefGetTempDirectory(out tempDir: ustring): Boolean;
function CefCreateNewTempDirectory(const prefix: ustring; out newTempPath: ustring): Boolean;
function CefCreateTempDirectoryInDirectory(const baseDir, prefix: ustring; out newDir: ustring): Boolean;
function CefDirectoryExists(const path: ustring): Boolean;
function CefDeleteFile(const path: ustring; recursive: Boolean): Boolean;
function CefZipDirectory(const srcDir, destFile: ustring; includeHiddenFiles: Boolean): Boolean;
implementation
uses
uCEFConstants, uCEFApplication, uCEFSchemeHandlerFactory;
uCEFConstants, uCEFApplication, uCEFSchemeHandlerFactory, uCEFValue, uCEFBinaryValue;
function CefColorGetA(color: TCefColor): Byte;
begin
@ -469,12 +493,11 @@ begin
{$ENDIF}
end;
procedure CustomExceptionHandler(const aMessage : string);
function CustomExceptionHandler(const aFunctionName : string; const aException : exception) : boolean;
begin
OutputDebugMessage(aMessage);
OutputDebugMessage(aFunctionName + ' error : ' + aException.message);
if (GlobalCEFApp <> nil) and GlobalCEFApp.ReRaiseExceptions then
raise Exception.Create(aMessage);
Result := (GlobalCEFApp <> nil) and GlobalCEFApp.ReRaiseExceptions;
end;
function CefRegisterSchemeHandlerFactory(const SchemeName : ustring;
@ -604,7 +627,7 @@ begin
end;
except
on e : exception do
CustomExceptionHandler('CheckLocales error: ' + e.Message);
if CustomExceptionHandler('CheckLocales', e) then raise;
end;
end;
@ -638,7 +661,7 @@ begin
FileExists(TempDir + 'devtools_resources.pak');
except
on e : exception do
CustomExceptionHandler('CheckResources error: ' + e.Message);
if CustomExceptionHandler('CheckResources', e) then raise;
end;
end;
@ -671,7 +694,7 @@ begin
FileExists(TempDir + 'widevinecdmadapter.dll');
except
on e : exception do
CustomExceptionHandler('CheckDLLs error: ' + e.Message);
if CustomExceptionHandler('CheckDLLs', e) then raise;
end;
end;
@ -712,7 +735,7 @@ begin
end;
except
on e : exception do
CustomExceptionHandler('GetExtendedFileVersion error: ' + e.Message);
if CustomExceptionHandler('GetExtendedFileVersion', e) then raise;
end;
finally
if (TempBuffer <> nil) then FreeMem(TempBuffer);
@ -734,7 +757,7 @@ begin
end;
except
on e : exception do
CustomExceptionHandler('GetDLLVersion error: ' + e.Message);
if CustomExceptionHandler('GetDLLVersion', e) then raise;
end;
end;
@ -780,4 +803,182 @@ begin
end;
end;
function CefCreateUrl(var parts: TUrlParts): ustring;
var
p: TCefUrlParts;
u: TCefString;
begin
FillChar(p, sizeof(p), 0);
p.spec := CefString(parts.spec);
p.scheme := CefString(parts.scheme);
p.username := CefString(parts.username);
p.password := CefString(parts.password);
p.host := CefString(parts.host);
p.port := CefString(parts.port);
p.origin := CefString(parts.origin);
p.path := CefString(parts.path);
p.query := CefString(parts.query);
FillChar(u, SizeOf(u), 0);
if cef_create_url(@p, @u) <> 0 then
Result := CefString(@u) else
Result := '';
end;
function CefFormatUrlForSecurityDisplay(const originUrl: string): string;
var
o: TCefString;
begin
o := CefString(originUrl);
Result := CefStringFreeAndGet(cef_format_url_for_security_display(@o));
end;
function CefGetMimeType(const extension: ustring): ustring;
var
s: TCefString;
begin
s := CefString(extension);
Result := CefStringFreeAndGet(cef_get_mime_type(@s));
end;
procedure CefGetExtensionsForMimeType(const mimeType: ustring; extensions: TStringList);
var
list: TCefStringList;
s, str: TCefString;
i: Integer;
begin
list := cef_string_list_alloc();
try
s := CefString(mimeType);
cef_get_extensions_for_mime_type(@s, list);
for i := 0 to cef_string_list_size(list) - 1 do
begin
FillChar(str, SizeOf(str), 0);
cef_string_list_value(list, i, @str);
extensions.Add(CefStringClearAndGet(str));
end;
finally
cef_string_list_free(list);
end;
end;
function CefBase64Encode(const data: Pointer; dataSize: NativeUInt): ustring;
begin
Result:= CefStringFreeAndGet(cef_base64encode(data, dataSize));
end;
function CefBase64Decode(const data: ustring): ICefBinaryValue;
var
s: TCefString;
begin
s := CefString(data);
Result := TCefBinaryValueRef.UnWrap(cef_base64decode(@s));
end;
function CefUriEncode(const text: ustring; usePlus: Boolean): ustring;
var
s: TCefString;
begin
s := CefString(text);
Result := CefStringFreeAndGet(cef_uriencode(@s, Ord(usePlus)));
end;
function CefUriDecode(const text: ustring; convertToUtf8: Boolean;
unescapeRule: TCefUriUnescapeRule): ustring;
var
s: TCefString;
begin
s := CefString(text);
Result := CefStringFreeAndGet(cef_uridecode(@s, Ord(convertToUtf8), unescapeRule));
end;
function CefParseJson(const jsonString: ustring; options: TCefJsonParserOptions): ICefValue;
var
s: TCefString;
begin
s := CefString(jsonString);
Result := TCefValueRef.UnWrap(cef_parse_json(@s, options));
end;
function CefParseJsonAndReturnError(const jsonString : ustring;
options : TCefJsonParserOptions;
out errorCodeOut : TCefJsonParserError;
out errorMsgOut : ustring): ICefValue;
var
s, e: TCefString;
begin
s := CefString(jsonString);
FillChar(e, SizeOf(e), 0);
Result := TCefValueRef.UnWrap(cef_parse_jsonand_return_error(@s, options, @errorCodeOut, @e));
errorMsgOut := CefString(@e);
end;
function CefWriteJson(const node: ICefValue; options: TCefJsonWriterOptions): ustring;
begin
Result := CefStringFreeAndGet(cef_write_json(CefGetData(node), options));
end;
function CefCreateDirectory(const fullPath: ustring): Boolean;
var
path: TCefString;
begin
path := CefString(fullPath);
Result := cef_create_directory(@path) <> 0;
end;
function CefGetTempDirectory(out tempDir: ustring): Boolean;
var
path: TCefString;
begin
FillChar(path, SizeOf(path), 0);
Result := cef_get_temp_directory(@path) <> 0;
tempDir := CefString(@path);
end;
function CefCreateNewTempDirectory(const prefix: ustring; out newTempPath: ustring): Boolean;
var
path, pref: TCefString;
begin
FillChar(path, SizeOf(path), 0);
pref := CefString(prefix);
Result := cef_create_new_temp_directory(@pref, @path) <> 0;
newTempPath := CefString(@path);
end;
function CefCreateTempDirectoryInDirectory(const baseDir, prefix: ustring;
out newDir: ustring): Boolean;
var
base, path, pref: TCefString;
begin
FillChar(path, SizeOf(path), 0);
pref := CefString(prefix);
base := CefString(baseDir);
Result := cef_create_temp_directory_in_directory(@base, @pref, @path) <> 0;
newDir := CefString(@path);
end;
function CefDirectoryExists(const path: ustring): Boolean;
var
str: TCefString;
begin
str := CefString(path);
Result := cef_directory_exists(@str) <> 0;
end;
function CefDeleteFile(const path: ustring; recursive: Boolean): Boolean;
var
str: TCefString;
begin
str := CefString(path);
Result := cef_delete_file(@str, Ord(recursive)) <> 0;
end;
function CefZipDirectory(const srcDir, destFile: ustring; includeHiddenFiles: Boolean): Boolean;
var
src, dst: TCefString;
begin
src := CefString(srcDir);
dst := CefString(destFile);
Result := cef_zip_directory(@src, @dst, Ord(includeHiddenFiles)) <> 0;
end;
end.