From ab710a894a3a312842627a413ade3c68c311e209 Mon Sep 17 00:00:00 2001 From: salvadordf Date: Tue, 6 Jun 2023 16:06:50 +0200 Subject: [PATCH] Update to WebView2 NuGet 1.0.1823.32 --- README.md | 2 +- bin32/WebView2Loader.dll | Bin 115624 -> 115672 bytes bin64/WebView2Loader.dll | Bin 160184 -> 160232 bytes packages/webview4delphi.lpk | 2 +- source/uWVBrowser.pas | 1 + source/uWVBrowserBase.pas | 112 +++++++++++++++++++++++++++ source/uWVCoreWebView2.pas | 55 ++++++++++++- source/uWVCoreWebView2Args.pas | 115 ++++++++++++++++++++++++++++ source/uWVCoreWebView2Delegates.pas | 38 +++++++++ source/uWVCoreWebView2Profile.pas | 43 ++++++++++- source/uWVEvents.pas | 1 + source/uWVFMXBrowser.pas | 1 + source/uWVInterfaces.pas | 3 + source/uWVTypeLibrary.pas | 83 +++++++++++++++++++- source/uWVTypes.pas | 1 + source/uWVVersion.inc | 6 +- update_WebView4Delphi.json | 4 +- 17 files changed, 453 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index bff3c0f..5291886 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ WebView4Delphi is an open source project created by Salvador Díaz Fau to embed WebView4Delphi only supports Windows. If you need to embed a web browser in Linux, Windows or MacOS consider using [CEF4Delphi](https://github.com/salvadordf/CEF4Delphi) instead. -WebView4Delphi uses the [Microsoft Edge WebView2 Runtime](https://docs.microsoft.com/en-us/microsoft-edge/webview2/) and [Microsoft.Web.WebView2 NuGet package version 1.0.1774.30](https://www.nuget.org/packages/Microsoft.Web.WebView2) to embed a web browser. +WebView4Delphi uses the [Microsoft Edge WebView2 Runtime](https://docs.microsoft.com/en-us/microsoft-edge/webview2/) and [Microsoft.Web.WebView2 NuGet package version 1.0.1823.32](https://www.nuget.org/packages/Microsoft.Web.WebView2) to embed a web browser. WebView4Delphi was developed and tested on Delphi 11.3, Delphi XE2, Delphi 7 and Lazarus 2.2.6/FPC 3.2.2. diff --git a/bin32/WebView2Loader.dll b/bin32/WebView2Loader.dll index 08f2bf678363b9214a2c3c2559fb6da9e431b22a..518bd47f01028a964bb4ec50ec4bd51c9b5b640a 100644 GIT binary patch delta 3238 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 UWQA&jCfNKk31PUE*0BNlCx?YoI{*Lx delta 3195 zcmb_dc{J4P8~?sDW5&M3*b0L(OqTCp43bb>qHC+Hm0i+Y43fHIGDOI=RK|31?OBRa zl6932K#oO{pj&-*>+{l3rh`8@A?o^zh}^E?Bwn4(xr@)hKe zv~^0Z z;f@b0L@;@(x9Oq2@PO-ih~V)HS9 zy67be?X{qmY%&9LaW3;P6ThLLWe_K{cqxZ=idCkD-LJU0fT3`Aj%TbvowO;`8{2jI zTyzr625IYfN%5LZ<9t-qN1^UyrB-yf^tlhF66wFQj`m?TuqT746FE62*4XLvfi@Oz#EA|04`1ufi0Tvdl7kr0gCguj8F_y>R^xz87XxFE&;1mcsRoGOmtygCaw$+6pzCU3_r|3EoCDS0D%zI;z*-o z?f$Iq=V^a4j!HNllTrq5$PkIJHc<~IYLT5K1T?i_PJ-Xve<>F{bFLi7)2p9lMkrfH z?LFBX-ti>4Bsiq`k(0LTWFfXW&%VER%H220FG9RRAku|-(}mE zWhg@1G#ZilI4tIJ@I_G*rkg(G6n@>(Ds0Uk3dt%A(o3p%;+;b;qWg`Bq~uNMSS z-}Aqk9`MhydsXCg#qBvBk9}lSHz?(!vNYi7pLpB;ne$-FY~xsgle{~KuO{88Me&yQ z+nZZIa`45>r=@W*Y~X}6#~yOs!^yYNJC@s?*5{=3G<@%;!;PvUcKvG2uj@9yP#WHy zm~uvs_+Hp-REPjPbbaHt8I*NVk^?)yu#6Dr%gR$dzd6#kQcjTVb#=5n*khftpAh|M zL(|Xg`JT4g72At9ZiMD-`-DB73jSm$k*N|Mr6!~{y)ELnI2>?E>Z#j)U)t_Z>7BOy zjZ#AjJC0cH^^W$FI|-;l;D6vXc4U5Q{-p2cV*HZ0A6>3SAAD5X16<~)h`YmQ3iXY}hb8`gD#f3p~ zf0O5TH3B{^2+2SIsHLB3*KxR|SQ#H-?D2EV=Zk3@I%Xym$+ZrVTx*9d8nN8A!NjGS z98L(U#S(G@EL~Lgkd~ykV&{7uf8C{0?=Jb0)V%td!Bz5_K3h#=2v+9eem0P!*VH{w zN(`55GZk4l+o`N>GxnA?DN{+y&&cx>yuCWm>Mb(Ev;85n{uZ)Fy|7h9@+}FyeP=4) zh{nA5bS5@MnD@x68+RdA7hj{sGO%lXA{~S(3mypX%p7@%A9zyGoEAd3`Vx7I+#!LZ zi9B~0BQ|D_k?Pp*uq|@qhb~0Z2d>HXj~Hn63!oz|&*d$o3taM@(0MrNs5p0iU%LAd zA!&=4j552$&jp7j^2$Y`kC>tYk}vNR zZf>@6qp$<9ieIie66)uc&rPKiBvcT{8+Ng_{^WAK?OS~(KHf$BK&UuC;l+rt@7B-? zt|doa9|}z;7470e?AioFXHu|N_+I2HJm_{kmc!gS#I=sw-7~o&>HX8M-EJbN`X_b0 z;jbkR$xF29j5W=mL-^0hr>Vy0X&dJW9@M99e^ge^v6p*yv*eD1j*%LwFZ@#QMstjr zW>MSpOr6Z|T6;;=g-UP{BlZktAhiECFIRK^&7O*9zN!ZzV(+^}ZEByAw0Z52ry!5& zM#lXtM3VDgfF}GW0EfW(-^Wq36E6x7Rbc|mi{OI3 zUBG$EFoyF(AYj?=#x9pX+4at^%+&_)BV9bUd=*j8zO-bo@hk~3oa!W9qIb#ixA`ck z@eBtE=Ha;j2ZEM&@23kd-#5JR(OfG-&g~CW6ZdF2V>Zb4M2QbbMzoGdhfKsYNm?H) z7bbU}|HaHFN=G&^A#X@*>nimpl*V#%{(~J!A@rB3k_O=vv;JX|H2RC=MBEzlYdf%E zK4pVcp?{7O-$r1B<53Gq^<7*ncFs7jx*xx=^(Ghs_?iz{?+5anV~jXDSPu6&wSvq@tkS6=(J!x?`BA2h4B4F z<&qc+TG%`virOE>bpe}sL{3z)s_2oaB(1fC`u2c)YvAdq7vTAxUD~;JU zqYHwk#Afd`Se)${lsGEHUf(p@=yv;Xnr`hNkRAWC8Y diff --git a/bin64/WebView2Loader.dll b/bin64/WebView2Loader.dll index 866fc5cd4a321a40c5ea91fb39fc3dcc4738da74..f924d920e9ff8cb20ba9d9dd4a4b0f13dfad361f 100644 GIT binary patch delta 3141 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 sS8chWrn)S6k delta 3215 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 - + diff --git a/source/uWVBrowser.pas b/source/uWVBrowser.pas index f1bc805..d946045 100644 --- a/source/uWVBrowser.pas +++ b/source/uWVBrowser.pas @@ -121,6 +121,7 @@ TWVBrowser = class(TWVBrowserBase) property OnGetCustomSchemes; property OnGetNonDefaultPermissionSettingsCompleted; property OnSetPermissionStateCompleted; + property OnLaunchingExternalUriScheme; end; {$IFDEF FPC} diff --git a/source/uWVBrowserBase.pas b/source/uWVBrowserBase.pas index 80ba5dd..e2b9b73 100644 --- a/source/uWVBrowserBase.pas +++ b/source/uWVBrowserBase.pas @@ -154,6 +154,7 @@ TWVBrowserBase = class(TComponent, IWVBrowserEvents) FOnGetCustomSchemes : TOnGetCustomSchemesEvent; FOnGetNonDefaultPermissionSettingsCompleted : TOnGetNonDefaultPermissionSettingsCompletedEvent; FOnSetPermissionStateCompleted : TOnSetPermissionStateCompletedEvent; + FOnLaunchingExternalUriScheme : TOnLaunchingExternalUriSchemeEvent; function GetBrowserProcessID : cardinal; function GetBrowserVersionInfo : wvstring; @@ -214,6 +215,9 @@ TWVBrowserBase = class(TComponent, IWVBrowserEvents) function GetPreferredColorScheme : TWVPreferredColorScheme; function GetPreferredTrackingPreventionLevel : TWVTrackingPreventionLevel; function GetProfileCookieManager : ICoreWebView2CookieManager; + function GetProfileIsPasswordAutosaveEnabled : boolean; + function GetProfileIsGeneralAutofillEnabled : boolean; + function GetMemoryUsageTargetLevel : TWVMemoryUsageTargetLevel; procedure SetBuiltInErrorPageEnabled(aValue: boolean); procedure SetDefaultContextMenusEnabled(aValue: boolean); @@ -253,6 +257,9 @@ TWVBrowserBase = class(TComponent, IWVBrowserEvents) procedure SetDefaultDownloadFolderPath(const aValue : wvstring); procedure SetPreferredColorScheme(const aValue : TWVPreferredColorScheme); procedure SetPreferredTrackingPreventionLevel(const aValue : TWVTrackingPreventionLevel); + procedure SetProfileIsPasswordAutosaveEnabled(aValue : boolean); + procedure SetProfileIsGeneralAutofillEnabled(aValue : boolean); + procedure SetMemoryUsageTargetLevel(aValue : TWVMemoryUsageTargetLevel); function CreateEnvironment : boolean; function CreateCompositionController: boolean; @@ -353,6 +360,7 @@ TWVBrowserBase = class(TComponent, IWVBrowserEvents) function PrintToPdfStreamCompletedHandler_Invoke(errorCode: HResult; const pdfStream: IStream): HRESULT; function GetNonDefaultPermissionSettingsCompletedHandler_Invoke(errorCode: HResult; const collectionView: ICoreWebView2PermissionSettingCollectionView): HRESULT; function SetPermissionStateCompletedHandler_Invoke(errorCode: HResult): HRESULT; + function LaunchingExternalUriSchemeEventHandler_Invoke(const sender: ICoreWebView2; const args: ICoreWebView2LaunchingExternalUriSchemeEventArgs): HRESULT; procedure doOnInitializationError(aErrorCode: HRESULT; const aErrorMessage: wvstring); virtual; procedure doOnEnvironmentCompleted; virtual; @@ -435,6 +443,7 @@ TWVBrowserBase = class(TComponent, IWVBrowserEvents) procedure doOnGetCustomSchemes(var aSchemeRegistrations : TWVCustomSchemeRegistrationArray); virtual; procedure doOnGetNonDefaultPermissionSettingsCompleted(errorCode: HResult; const collectionView: ICoreWebView2PermissionSettingCollectionView); virtual; procedure doOnSetPermissionStateCompleted(errorCode: HResult); virtual; + procedure doOnLaunchingExternalUriSchemeEvent(const sender: ICoreWebView2; const args: ICoreWebView2LaunchingExternalUriSchemeEventArgs); virtual; public constructor Create(AOwner: TComponent); override; @@ -618,6 +627,9 @@ TWVBrowserBase = class(TComponent, IWVBrowserEvents) // ICoreWebView2_15 property FaviconURI : wvstring read GetFaviconURI; + // ICoreWebView2_19 + property MemoryUsageTargetLevel : TWVMemoryUsageTargetLevel read GetMemoryUsageTargetLevel write SetMemoryUsageTargetLevel; // ICoreWebView2_19.Get_MemoryUsageTargetLevel + // ICoreWebView2Controller properties property Bounds : TRect read GetBounds write SetBounds; // ICoreWebView2Controller.get_Bounds property IsVisible : boolean read GetIsVisible write SetIsVisible; // ICoreWebView2Controller.get_IsVisible @@ -695,6 +707,10 @@ TWVBrowserBase = class(TComponent, IWVBrowserEvents) // ICoreWebView2Profile5 properties property ProfileCookieManager : ICoreWebView2CookieManager read GetProfileCookieManager; // ICoreWebView2Profile5.get_CookieManager + // ICoreWebView2Profile6 properties + property ProfileIsPasswordAutosaveEnabled : boolean read GetProfileIsPasswordAutosaveEnabled write SetProfileIsPasswordAutosaveEnabled; // ICoreWebView2Profile6.Get_IsPasswordAutosaveEnabled + property ProfileIsGeneralAutofillEnabled : boolean read GetProfileIsGeneralAutofillEnabled write SetProfileIsGeneralAutofillEnabled; // ICoreWebView2Profile6.Get_IsGeneralAutofillEnabled + // ICoreWebView2Environment5 events property OnBrowserProcessExited : TOnBrowserProcessExitedEvent read FOnBrowserProcessExited write FOnBrowserProcessExited; @@ -829,6 +845,7 @@ TWVBrowserBase = class(TComponent, IWVBrowserEvents) property OnGetCustomSchemes : TOnGetCustomSchemesEvent read FOnGetCustomSchemes write FOnGetCustomSchemes; property OnGetNonDefaultPermissionSettingsCompleted : TOnGetNonDefaultPermissionSettingsCompletedEvent read FOnGetNonDefaultPermissionSettingsCompleted write FOnGetNonDefaultPermissionSettingsCompleted; property OnSetPermissionStateCompleted : TOnSetPermissionStateCompletedEvent read FOnSetPermissionStateCompleted write FOnSetPermissionStateCompleted; + property OnLaunchingExternalUriScheme : TOnLaunchingExternalUriSchemeEvent read FOnLaunchingExternalUriScheme write FOnLaunchingExternalUriScheme; end; implementation @@ -964,6 +981,9 @@ constructor TWVBrowserBase.Create(AOwner: TComponent); FOnGetFaviconCompleted := nil; FOnPrintToPdfStreamCompleted := nil; FOnGetCustomSchemes := nil; + FOnGetNonDefaultPermissionSettingsCompleted := nil; + FOnSetPermissionStateCompleted := nil; + FOnLaunchingExternalUriScheme := nil; end; destructor TWVBrowserBase.Destroy; @@ -1996,6 +2016,12 @@ procedure TWVBrowserBase.doOnSetPermissionStateCompleted(errorCode: HResult); FOnSetPermissionStateCompleted(self, errorCode); end; +procedure TWVBrowserBase.doOnLaunchingExternalUriSchemeEvent(const sender: ICoreWebView2; const args: ICoreWebView2LaunchingExternalUriSchemeEventArgs); +begin + if assigned(FOnLaunchingExternalUriScheme) then + FOnLaunchingExternalUriScheme(self, sender, args); +end; + procedure TWVBrowserBase.doOnRetrieveMHTMLCompleted( aErrorCode : HRESULT; const aReturnObjectAsJson : wvstring); var @@ -2290,6 +2316,12 @@ function TWVBrowserBase.SetPermissionStateCompletedHandler_Invoke(errorCode: HRe doOnSetPermissionStateCompleted(errorCode); end; +function TWVBrowserBase.LaunchingExternalUriSchemeEventHandler_Invoke(const sender: ICoreWebView2; const args: ICoreWebView2LaunchingExternalUriSchemeEventArgs): HRESULT; +begin + Result := S_OK; + doOnLaunchingExternalUriSchemeEvent(sender, args); +end; + function TWVBrowserBase.ExecuteScriptCompletedHandler_Invoke(errorCode: HRESULT; resultObjectAsJson: PWideChar; aExecutionID : integer): HRESULT; begin Result := S_OK; @@ -2857,6 +2889,14 @@ function TWVBrowserBase.GetFaviconURI : wvstring; Result := ''; end; +function TWVBrowserBase.GetMemoryUsageTargetLevel : TWVMemoryUsageTargetLevel; +begin + if Initialized then + Result := FCoreWebView2.MemoryUsageTargetLevel + else + Result := COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_NORMAL; +end; + function TWVBrowserBase.GetScreenScale : single; begin if (GlobalWebView2Loader <> nil) then @@ -4495,6 +4535,40 @@ function TWVBrowserBase.GetProfileCookieManager : ICoreWebView2CookieManager; end; end; +function TWVBrowserBase.GetProfileIsPasswordAutosaveEnabled : boolean; +var + TempProfile : TCoreWebView2Profile; +begin + Result := False; + TempProfile := nil; + + if Initialized then + try + TempProfile := TCoreWebView2Profile.Create(FCoreWebView2.Profile); + Result := TempProfile.IsPasswordAutosaveEnabled; + finally + if assigned(TempProfile) then + FreeAndNil(TempProfile); + end; +end; + +function TWVBrowserBase.GetProfileIsGeneralAutofillEnabled : boolean; +var + TempProfile : TCoreWebView2Profile; +begin + Result := False; + TempProfile := nil; + + if Initialized then + try + TempProfile := TCoreWebView2Profile.Create(FCoreWebView2.Profile); + Result := TempProfile.IsGeneralAutofillEnabled; + finally + if assigned(TempProfile) then + FreeAndNil(TempProfile); + end; +end; + procedure TWVBrowserBase.SetPreferredTrackingPreventionLevel(const aValue : TWVTrackingPreventionLevel); var TempProfile : TCoreWebView2Profile; @@ -4511,6 +4585,44 @@ procedure TWVBrowserBase.SetPreferredTrackingPreventionLevel(const aValue : TWVT end; end; +procedure TWVBrowserBase.SetProfileIsPasswordAutosaveEnabled(aValue : boolean); +var + TempProfile : TCoreWebView2Profile; +begin + TempProfile := nil; + + if Initialized then + try + TempProfile := TCoreWebView2Profile.Create(FCoreWebView2.Profile); + TempProfile.IsPasswordAutosaveEnabled := aValue; + finally + if assigned(TempProfile) then + FreeAndNil(TempProfile); + end; +end; + +procedure TWVBrowserBase.SetProfileIsGeneralAutofillEnabled(aValue : boolean); +var + TempProfile : TCoreWebView2Profile; +begin + TempProfile := nil; + + if Initialized then + try + TempProfile := TCoreWebView2Profile.Create(FCoreWebView2.Profile); + TempProfile.IsGeneralAutofillEnabled := aValue; + finally + if assigned(TempProfile) then + FreeAndNil(TempProfile); + end; +end; + +procedure TWVBrowserBase.SetMemoryUsageTargetLevel(aValue : TWVMemoryUsageTargetLevel); +begin + if Initialized then + FCoreWebView2.MemoryUsageTargetLevel := aValue; +end; + function TWVBrowserBase.CreateSharedBuffer(aSize : Largeuint; var aSharedBuffer : ICoreWebView2SharedBuffer) : boolean; begin Result := Initialized and diff --git a/source/uWVCoreWebView2.pas b/source/uWVCoreWebView2.pas index f163e13..dbc910e 100644 --- a/source/uWVCoreWebView2.pas +++ b/source/uWVCoreWebView2.pas @@ -34,6 +34,8 @@ TCoreWebView2 = class FBaseIntf15 : ICoreWebView2_15; FBaseIntf16 : ICoreWebView2_16; FBaseIntf17 : ICoreWebView2_17; + FBaseIntf18 : ICoreWebView2_18; + FBaseIntf19 : ICoreWebView2_19; FContainsFullScreenElementChangedToken : EventRegistrationToken; FContentLoadingToken : EventRegistrationToken; FDocumentTitleChangedToken : EventRegistrationToken; @@ -63,6 +65,7 @@ TCoreWebView2 = class FStatusBarTextChangedToken : EventRegistrationToken; FServerCertificateErrorDetectedToken : EventRegistrationToken; FFaviconChangedToken : EventRegistrationToken; + FLaunchingExternalUriSchemeToken : EventRegistrationToken; FDevToolsEventNames : TStringList; FDevToolsEventTokens : array of EventRegistrationToken; @@ -86,10 +89,12 @@ TCoreWebView2 = class function GetStatusBarText : wvstring; function GetProfile : ICoreWebView2Profile; function GetFaviconURI : wvstring; + function GetMemoryUsageTargetLevel : TWVMemoryUsageTargetLevel; procedure SetIsMuted(aValue : boolean); procedure SetDefaultDownloadDialogCornerAlignment(aValue : TWVDefaultDownloadDialogCornerAlignment); procedure SetDefaultDownloadDialogMargin(aValue : TPoint); + procedure SetMemoryUsageTargetLevel(aValue : TWVMemoryUsageTargetLevel); procedure InitializeFields; procedure InitializeTokens; @@ -125,6 +130,7 @@ TCoreWebView2 = class function AddStatusBarTextChangedEvent(const aBrowserComponent : TComponent) : boolean; function AddServerCertificateErrorDetectedEvent(const aBrowserComponent : TComponent) : boolean; function AddFaviconChanged(const aBrowserComponent : TComponent) : boolean; + function AddLaunchingExternalUriScheme(const aBrowserComponent : TComponent) : boolean; public constructor Create(const aBaseIntf : ICoreWebView2); reintroduce; @@ -187,6 +193,7 @@ TCoreWebView2 = class property StatusBarText : wvstring read GetStatusBarText; property Profile : ICoreWebView2Profile read GetProfile; property FaviconURI : wvstring read GetFaviconURI; + property MemoryUsageTargetLevel : TWVMemoryUsageTargetLevel read GetMemoryUsageTargetLevel write SetMemoryUsageTargetLevel; end; implementation @@ -217,8 +224,10 @@ constructor TCoreWebView2.Create(const aBaseIntf : ICoreWebView2); LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2_13, FBaseIntf13) and LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2_14, FBaseIntf14) and LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2_15, FBaseIntf15) and - LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2_16, FBaseIntf16) then - LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2_17, FBaseIntf17); + LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2_16, FBaseIntf16) and + LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2_17, FBaseIntf17) and + LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2_18, FBaseIntf18) then + LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2_19, FBaseIntf19); end; destructor TCoreWebView2.Destroy; @@ -267,6 +276,8 @@ procedure TCoreWebView2.InitializeFields; FBaseIntf15 := nil; FBaseIntf16 := nil; FBaseIntf17 := nil; + FBaseIntf18 := nil; + FBaseIntf19 := nil; FDevToolsEventTokens := nil; FDevToolsEventNames := nil; @@ -304,6 +315,7 @@ procedure TCoreWebView2.InitializeTokens; FStatusBarTextChangedToken.value := 0; FServerCertificateErrorDetectedToken.value := 0; FFaviconChangedToken.value := 0; + FLaunchingExternalUriSchemeToken.value := 0; end; function TCoreWebView2.GetInitialized : boolean; @@ -422,6 +434,10 @@ procedure TCoreWebView2.RemoveAllEvents; (FFaviconChangedToken.Value <> 0) then FBaseIntf15.remove_FaviconChanged(FFaviconChangedToken); + if assigned(FBaseIntf18) and + (FLaunchingExternalUriSchemeToken.Value <> 0) then + FBaseIntf18.remove_LaunchingExternalUriScheme(FLaunchingExternalUriSchemeToken); + UnsubscribeAllDevToolsProtocolEvents; end; except @@ -868,6 +884,21 @@ function TCoreWebView2.AddFaviconChanged(const aBrowserComponent : TComponent) : end; end; +function TCoreWebView2.AddLaunchingExternalUriScheme(const aBrowserComponent : TComponent) : boolean; +var + TempHandler : ICoreWebView2LaunchingExternalUriSchemeEventHandler; +begin + Result := False; + + if assigned(FBaseIntf18) and (FLaunchingExternalUriSchemeToken.value = 0) then + try + TempHandler := TCoreWebView2LaunchingExternalUriSchemeEventHandler.Create(TWVBrowserBase(aBrowserComponent)); + Result := succeeded(FBaseIntf18.add_LaunchingExternalUriScheme(TempHandler, FLaunchingExternalUriSchemeToken)); + finally + TempHandler := nil; + end; +end; + function TCoreWebView2.AddAllBrowserEvents(const aBrowserComponent : TComponent) : boolean; begin Result := AddNavigationStartingEvent(aBrowserComponent) and @@ -898,7 +929,8 @@ function TCoreWebView2.AddAllBrowserEvents(const aBrowserComponent : TComponent) AddContextMenuRequestedEvent(aBrowserComponent) and AddStatusBarTextChangedEvent(aBrowserComponent) and AddServerCertificateErrorDetectedEvent(aBrowserComponent) and - AddFaviconChanged(aBrowserComponent); + AddFaviconChanged(aBrowserComponent) and + AddLaunchingExternalUriScheme(aBrowserComponent); end; function TCoreWebView2.AddWebResourceRequestedFilter(const URI : wvstring; @@ -1464,6 +1496,17 @@ function TCoreWebView2.GetFaviconURI : wvstring; end; end; +function TCoreWebView2.GetMemoryUsageTargetLevel : TWVMemoryUsageTargetLevel; +var + TempResult : COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL; +begin + if assigned(FBaseIntf19) and + succeeded(FBaseIntf19.Get_MemoryUsageTargetLevel(TempResult)) then + Result := TempResult + else + Result := COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_NORMAL; +end; + procedure TCoreWebView2.SetIsMuted(aValue : boolean); begin if assigned(FBaseIntf8) then @@ -1482,4 +1525,10 @@ procedure TCoreWebView2.SetDefaultDownloadDialogMargin(aValue : TPoint); FBaseIntf9.Set_DefaultDownloadDialogMargin(tagPOINT(aValue)); end; +procedure TCoreWebView2.SetMemoryUsageTargetLevel(aValue : TWVMemoryUsageTargetLevel); +begin + if assigned(FBaseIntf19) then + FBaseIntf19.Set_MemoryUsageTargetLevel(aValue); +end; + end. diff --git a/source/uWVCoreWebView2Args.pas b/source/uWVCoreWebView2Args.pas index 4936e8b..6b807c6 100644 --- a/source/uWVCoreWebView2Args.pas +++ b/source/uWVCoreWebView2Args.pas @@ -572,6 +572,32 @@ TCoreWebView2ServerCertificateErrorDetectedEventArgs = class property Deferral : ICoreWebView2Deferral read GetDeferral; end; + TCoreWebView2LaunchingExternalUriSchemeEventArgs = class + protected + FBaseIntf : ICoreWebView2LaunchingExternalUriSchemeEventArgs; + + function GetInitialized : boolean; + function GetUri : wvstring; + function GetInitiatingOrigin : wvstring; + function GetIsUserInitiated : boolean; + function GetCancel : boolean; + function GetDeferral : ICoreWebView2Deferral; + + procedure SetCancel(aValue : boolean); + + public + constructor Create(const aArgs: ICoreWebView2LaunchingExternalUriSchemeEventArgs); reintroduce; + destructor Destroy; override; + + property Initialized : boolean read GetInitialized; + property BaseIntf : ICoreWebView2LaunchingExternalUriSchemeEventArgs read FBaseIntf; + property Uri : wvstring read GetUri; + property InitiatingOrigin : wvstring read GetInitiatingOrigin; + property IsUserInitiated : boolean read GetIsUserInitiated; + property Cancel : boolean read GetCancel write SetCancel; + property Deferral : ICoreWebView2Deferral read GetDeferral; + end; + implementation @@ -2431,4 +2457,93 @@ procedure TCoreWebView2ServerCertificateErrorDetectedEventArgs.SetAction(aValue: FBaseIntf.Set_Action(aValue); end; + +// TCoreWebView2LaunchingExternalUriSchemeEventArgs + +constructor TCoreWebView2LaunchingExternalUriSchemeEventArgs.Create(const aArgs: ICoreWebView2LaunchingExternalUriSchemeEventArgs); +begin + inherited Create; + + FBaseIntf := aArgs; +end; + +destructor TCoreWebView2LaunchingExternalUriSchemeEventArgs.Destroy; +begin + FBaseIntf := nil; + + inherited Destroy; +end; + +function TCoreWebView2LaunchingExternalUriSchemeEventArgs.GetInitialized : boolean; +begin + Result := assigned(FBaseIntf); +end; + +function TCoreWebView2LaunchingExternalUriSchemeEventArgs.GetUri : wvstring; +var + TempString : PWideChar; +begin + Result := ''; + TempString := nil; + + if Initialized and + succeeded(FBaseIntf.Get_Uri(TempString)) then + begin + Result := TempString; + CoTaskMemFree(TempString); + end; +end; + +function TCoreWebView2LaunchingExternalUriSchemeEventArgs.GetInitiatingOrigin : wvstring; +var + TempString : PWideChar; +begin + Result := ''; + TempString := nil; + + if Initialized and + succeeded(FBaseIntf.Get_InitiatingOrigin(TempString)) then + begin + Result := TempString; + CoTaskMemFree(TempString); + end; +end; + +function TCoreWebView2LaunchingExternalUriSchemeEventArgs.GetIsUserInitiated: boolean; +var + TempInt : integer; +begin + Result := Initialized and + succeeded(FBaseIntf.Get_IsUserInitiated(TempInt)) and + (TempInt <> 0); +end; + +function TCoreWebView2LaunchingExternalUriSchemeEventArgs.GetCancel: boolean; +var + TempInt : integer; +begin + Result := Initialized and + succeeded(FBaseIntf.Get_Cancel(TempInt)) and + (TempInt <> 0); +end; + +function TCoreWebView2LaunchingExternalUriSchemeEventArgs.GetDeferral: ICoreWebView2Deferral; +var + TempResult : ICoreWebView2Deferral; +begin + Result := nil; + TempResult := nil; + + if Initialized and + succeeded(FBaseIntf.GetDeferral(TempResult)) and + (TempResult <> nil) then + Result := TempResult; +end; + +procedure TCoreWebView2LaunchingExternalUriSchemeEventArgs.SetCancel(aValue: boolean); +begin + if Initialized then + FBaseIntf.Set_Cancel(ord(aValue)); +end; + end. diff --git a/source/uWVCoreWebView2Delegates.pas b/source/uWVCoreWebView2Delegates.pas index 22e25c8..a12f8ae 100644 --- a/source/uWVCoreWebView2Delegates.pas +++ b/source/uWVCoreWebView2Delegates.pas @@ -814,6 +814,17 @@ TCoreWebView2SetPermissionStateCompletedHandler = class(TInterfacedObject, ICo destructor Destroy; override; end; + TCoreWebView2LaunchingExternalUriSchemeEventHandler = class(TInterfacedObject, ICoreWebView2LaunchingExternalUriSchemeEventHandler) + protected + FEvents : Pointer; + + function Invoke(const sender: ICoreWebView2; const args: ICoreWebView2LaunchingExternalUriSchemeEventArgs): HResult; stdcall; + + public + constructor Create(const aEvents: IWVBrowserEvents); reintroduce; + destructor Destroy; override; + end; + implementation @@ -2640,4 +2651,31 @@ function TCoreWebView2SetPermissionStateCompletedHandler.Invoke(errorCode: HResu Result := E_FAIL; end; + +// TCoreWebView2LaunchingExternalUriSchemeEventHandler + +constructor TCoreWebView2LaunchingExternalUriSchemeEventHandler.Create(const aEvents: IWVBrowserEvents); +begin + inherited Create; + + FEvents := Pointer(aEvents); +end; + +destructor TCoreWebView2LaunchingExternalUriSchemeEventHandler.Destroy; +begin + FEvents := nil; + + inherited Destroy; +end; + +function TCoreWebView2LaunchingExternalUriSchemeEventHandler.Invoke(const sender: ICoreWebView2; + const args: ICoreWebView2LaunchingExternalUriSchemeEventArgs): HResult; stdcall; +begin + if (FEvents <> nil) then + Result := IWVBrowserEvents(FEvents).LaunchingExternalUriSchemeEventHandler_Invoke(sender, args) + else + Result := E_FAIL; +end; + + end. diff --git a/source/uWVCoreWebView2Profile.pas b/source/uWVCoreWebView2Profile.pas index 59318dd..37a6388 100644 --- a/source/uWVCoreWebView2Profile.pas +++ b/source/uWVCoreWebView2Profile.pas @@ -17,6 +17,7 @@ TCoreWebView2Profile = class FBaseIntf3 : ICoreWebView2Profile3; FBaseIntf4 : ICoreWebView2Profile4; FBaseIntf5 : ICoreWebView2Profile5; + FBaseIntf6 : ICoreWebView2Profile6; function GetInitialized : boolean; function GetProfileName : wvstring; @@ -26,10 +27,14 @@ TCoreWebView2Profile = class function GetPreferredColorScheme : TWVPreferredColorScheme; function GetPreferredTrackingPreventionLevel : TWVTrackingPreventionLevel; function GetCookieManager : ICoreWebView2CookieManager; + function GetIsPasswordAutosaveEnabled : boolean; + function GetIsGeneralAutofillEnabled : boolean; procedure SetDefaultDownloadFolderPath(const aValue : wvstring); procedure SetPreferredColorScheme(aValue : TWVPreferredColorScheme); procedure SetPreferredTrackingPreventionLevel(aValue : TWVTrackingPreventionLevel); + procedure SetIsPasswordAutosaveEnabled(aValue : boolean); + procedure SetIsGeneralAutofillEnabled(aValue : boolean); procedure InitializeFields; @@ -51,6 +56,8 @@ TCoreWebView2Profile = class property PreferredColorScheme : TWVPreferredColorScheme read GetPreferredColorScheme write SetPreferredColorScheme; property PreferredTrackingPreventionLevel : TWVTrackingPreventionLevel read GetPreferredTrackingPreventionLevel write SetPreferredTrackingPreventionLevel; property CookieManager : ICoreWebView2CookieManager read GetCookieManager; + property IsPasswordAutosaveEnabled : boolean read GetIsPasswordAutosaveEnabled write SetIsPasswordAutosaveEnabled; + property IsGeneralAutofillEnabled : boolean read GetIsGeneralAutofillEnabled write SetIsGeneralAutofillEnabled; end; implementation @@ -74,8 +81,9 @@ constructor TCoreWebView2Profile.Create(const aBaseIntf: ICoreWebView2Profile); if Initialized and LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2Profile2, FBaseIntf2) and LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2Profile3, FBaseIntf3) and - LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2Profile4, FBaseIntf4) then - LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2Profile5, FBaseIntf5); + LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2Profile4, FBaseIntf4) and + LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2Profile5, FBaseIntf5) then + LoggedQueryInterface(FBaseIntf, IID_ICoreWebView2Profile6, FBaseIntf6); end; destructor TCoreWebView2Profile.Destroy; @@ -92,6 +100,7 @@ procedure TCoreWebView2Profile.InitializeFields; FBaseIntf3 := nil; FBaseIntf4 := nil; FBaseIntf5 := nil; + FBaseIntf6 := nil; end; function TCoreWebView2Profile.GetInitialized : boolean; @@ -192,6 +201,24 @@ function TCoreWebView2Profile.GetCookieManager : ICoreWebView2CookieManager; Result := TempResult; end; +function TCoreWebView2Profile.GetIsPasswordAutosaveEnabled : boolean; +var + TempResult : integer; +begin + Result := assigned(FBaseIntf6) and + succeeded(FBaseIntf6.Get_IsPasswordAutosaveEnabled(TempResult)) and + (TempResult <> 0); +end; + +function TCoreWebView2Profile.GetIsGeneralAutofillEnabled : boolean; +var + TempResult : integer; +begin + Result := assigned(FBaseIntf6) and + succeeded(FBaseIntf6.Get_IsGeneralAutofillEnabled(TempResult)) and + (TempResult <> 0); +end; + procedure TCoreWebView2Profile.SetDefaultDownloadFolderPath(const aValue : wvstring); begin if Initialized then @@ -210,6 +237,18 @@ procedure TCoreWebView2Profile.SetPreferredTrackingPreventionLevel(aValue : TWVT FBaseIntf3.Set_PreferredTrackingPreventionLevel(aValue); end; +procedure TCoreWebView2Profile.SetIsPasswordAutosaveEnabled(aValue: boolean); +begin + if assigned(FBaseIntf6) then + FBaseIntf6.Set_IsPasswordAutosaveEnabled(ord(aValue)); +end; + +procedure TCoreWebView2Profile.SetIsGeneralAutofillEnabled(aValue: boolean); +begin + if assigned(FBaseIntf6) then + FBaseIntf6.Set_IsGeneralAutofillEnabled(ord(aValue)); +end; + function TCoreWebView2Profile.ClearBrowsingData( dataKinds : TWVBrowsingDataKinds; const handler : ICoreWebView2ClearBrowsingDataCompletedHandler): boolean; begin diff --git a/source/uWVEvents.pas b/source/uWVEvents.pas index d3fd040..5f1f88a 100644 --- a/source/uWVEvents.pas +++ b/source/uWVEvents.pas @@ -89,6 +89,7 @@ interface TOnGetCustomSchemesEvent = procedure(Sender: TObject; var aCustomSchemes: TWVCustomSchemeInfoArray) of object; TOnGetNonDefaultPermissionSettingsCompletedEvent = procedure(Sender: TObject; aErrorCode: HRESULT; const aCollectionView: ICoreWebView2PermissionSettingCollectionView) of object; TOnSetPermissionStateCompletedEvent = procedure(Sender: TObject; aErrorCode: HRESULT) of object; + TOnLaunchingExternalUriSchemeEvent = procedure(Sender: TObject; const aWebView: ICoreWebView2; const aArgs: ICoreWebView2LaunchingExternalUriSchemeEventArgs) of object; // Custom events TOnCompMsgEvent = procedure(Sender: TObject; var aMessage: TMessage; var aHandled: Boolean) of object; diff --git a/source/uWVFMXBrowser.pas b/source/uWVFMXBrowser.pas index 4b9ba63..9107310 100644 --- a/source/uWVFMXBrowser.pas +++ b/source/uWVFMXBrowser.pas @@ -121,6 +121,7 @@ TWVFMXBrowser = class(TWVBrowserBase) property OnGetCustomSchemes; property OnGetNonDefaultPermissionSettingsCompleted; property OnSetPermissionStateCompleted; + property OnLaunchingExternalUriScheme; end; implementation diff --git a/source/uWVInterfaces.pas b/source/uWVInterfaces.pas index df5cb66..bc79a38 100644 --- a/source/uWVInterfaces.pas +++ b/source/uWVInterfaces.pas @@ -240,6 +240,9 @@ interface // ICoreWebView2SetPermissionStateCompletedHandler function SetPermissionStateCompletedHandler_Invoke(errorCode: HResult): HResult; + + // ICoreWebView2LaunchingExternalUriSchemeEventHandler + function LaunchingExternalUriSchemeEventHandler_Invoke(const sender: ICoreWebView2; const args: ICoreWebView2LaunchingExternalUriSchemeEventArgs): HResult; end; implementation diff --git a/source/uWVTypeLibrary.pas b/source/uWVTypeLibrary.pas index 000417b..a7f2406 100644 --- a/source/uWVTypeLibrary.pas +++ b/source/uWVTypeLibrary.pas @@ -30,10 +30,10 @@ // ************************************************************************ // // $Rev: 98336 $ -// File generated on 09/05/2023 15:22:18 from Type Library described below. +// File generated on 06/06/2023 11:23:24 from Type Library described below. // ************************************************************************ // -// Type Lib: R:\microsoft.web.webview2.1.0.1774.30.nupkg_FILES\WebView2.tlb (1) +// Type Lib: R:\microsoft.web.webview2.1.0.1823.32.nupkg_FILES\WebView2.tlb (1) // LIBID: {26D34152-879F-4065-BEA2-3DAA2CFADFB8} // LCID: 0 // Helpfile: @@ -197,6 +197,9 @@ interface IID_ICoreWebView2PrintToPdfStreamCompletedHandler: TGUID = '{4C9F8229-8F93-444F-A711-2C0DFD6359D5}'; IID_ICoreWebView2_17: TGUID = '{702E75D4-FD44-434D-9D70-1A68A6B1192A}'; IID_ICoreWebView2SharedBuffer: TGUID = '{B747A495-0C6F-449E-97B8-2F81E9D6AB43}'; + IID_ICoreWebView2_18: TGUID = '{7A626017-28BE-49B2-B865-3BA2B3522D90}'; + IID_ICoreWebView2LaunchingExternalUriSchemeEventHandler: TGUID = '{74F712E0-8165-43A9-A13F-0CCE597E75DF}'; + IID_ICoreWebView2LaunchingExternalUriSchemeEventArgs: TGUID = '{07D1A6C3-7175-4BA1-9306-E593CA07E46C}'; IID_ICoreWebView2BrowserProcessExitedEventArgs: TGUID = '{1F00663F-AF8C-4782-9CDD-DD01C52E34CB}'; IID_ICoreWebView2BrowserProcessExitedEventHandler: TGUID = '{FA504257-A216-4911-A860-FE8825712861}'; IID_ICoreWebView2CompositionController: TGUID = '{3DF9B733-B9AE-4A15-86B4-EB9EE9826469}'; @@ -261,6 +264,7 @@ interface IID_ICoreWebView2Profile4: TGUID = '{8F4AE680-192E-4EC8-833A-21CFADAEF628}'; IID_ICoreWebView2SetPermissionStateCompletedHandler: TGUID = '{FC77FB30-9C9E-4076-B8C7-7644A703CA1B}'; IID_ICoreWebView2Profile5: TGUID = '{2EE5B76E-6E80-4DF2-BCD3-D4EC3340A01B}'; + IID_ICoreWebView2Profile6: TGUID = '{BD82FA6A-1D65-4C33-B2B4-0393020CC61B}'; IID_ICoreWebView2Settings2: TGUID = '{EE9A0F68-F46C-4E32-AC23-EF8CAC224D2A}'; IID_ICoreWebView2Settings3: TGUID = '{FDB5AB74-AF33-4854-84F0-0A631DEB5EBA}'; IID_ICoreWebView2Settings4: TGUID = '{CB56846C-4168-4D53-B04F-03B6D6796FF2}'; @@ -268,6 +272,7 @@ interface IID_ICoreWebView2Settings6: TGUID = '{11CB3ACD-9BC8-43B8-83BF-F40753714F87}'; IID_ICoreWebView2Settings7: TGUID = '{488DC902-35EF-42D2-BC7D-94B65C4BC49C}'; IID_ICoreWebView2Settings8: TGUID = '{9E6B0E8F-86AD-4E81-8147-A9B5EDB68650}'; + IID_ICoreWebView2_19: TGUID = '{6921F954-79B0-437F-A997-C85811897C68}'; IID_ICoreWebView2File: TGUID = '{F2C19559-6BC1-4583-A757-90021BE9AFEC}'; IID_ICoreWebView2ObjectCollectionView: TGUID = '{0F36FD87-4F69-4415-98DA-888F89FB9A33}'; IID_ICoreWebView2WebMessageReceivedEventArgs2: TGUID = '{06FC7AB7-C90C-4297-9389-33CA01CF6D5E}'; @@ -706,6 +711,13 @@ interface COREWEBVIEW2_PDF_TOOLBAR_ITEMS_FULL_SCREEN = $00000800; COREWEBVIEW2_PDF_TOOLBAR_ITEMS_MORE_SETTINGS = $00001000; +// Constants for enum COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL +type + COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL = TOleEnum; +const + COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_NORMAL = $00000000; + COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_LOW = $00000001; + type // *********************************************************************// @@ -829,6 +841,9 @@ interface ICoreWebView2PrintToPdfStreamCompletedHandler = interface; ICoreWebView2_17 = interface; ICoreWebView2SharedBuffer = interface; + ICoreWebView2_18 = interface; + ICoreWebView2LaunchingExternalUriSchemeEventHandler = interface; + ICoreWebView2LaunchingExternalUriSchemeEventArgs = interface; ICoreWebView2BrowserProcessExitedEventArgs = interface; ICoreWebView2BrowserProcessExitedEventHandler = interface; ICoreWebView2CompositionController = interface; @@ -893,6 +908,7 @@ interface ICoreWebView2Profile4 = interface; ICoreWebView2SetPermissionStateCompletedHandler = interface; ICoreWebView2Profile5 = interface; + ICoreWebView2Profile6 = interface; ICoreWebView2Settings2 = interface; ICoreWebView2Settings3 = interface; ICoreWebView2Settings4 = interface; @@ -900,6 +916,7 @@ interface ICoreWebView2Settings6 = interface; ICoreWebView2Settings7 = interface; ICoreWebView2Settings8 = interface; + ICoreWebView2_19 = interface; ICoreWebView2File = interface; ICoreWebView2ObjectCollectionView = interface; ICoreWebView2WebMessageReceivedEventArgs2 = interface; @@ -2660,6 +2677,44 @@ COREWEBVIEW2_COLOR = record function Close: HResult; stdcall; end; +// *********************************************************************// +// Interface: ICoreWebView2_18 +// Flags: (0) +// GUID: {7A626017-28BE-49B2-B865-3BA2B3522D90} +// *********************************************************************// + ICoreWebView2_18 = interface(ICoreWebView2_17) + ['{7A626017-28BE-49B2-B865-3BA2B3522D90}'] + function add_LaunchingExternalUriScheme(const eventHandler: ICoreWebView2LaunchingExternalUriSchemeEventHandler; + out token: EventRegistrationToken): HResult; stdcall; + function remove_LaunchingExternalUriScheme(token: EventRegistrationToken): HResult; stdcall; + end; + +// *********************************************************************// +// Interface: ICoreWebView2LaunchingExternalUriSchemeEventHandler +// Flags: (0) +// GUID: {74F712E0-8165-43A9-A13F-0CCE597E75DF} +// *********************************************************************// + ICoreWebView2LaunchingExternalUriSchemeEventHandler = interface(IUnknown) + ['{74F712E0-8165-43A9-A13F-0CCE597E75DF}'] + function Invoke(const sender: ICoreWebView2; + const args: ICoreWebView2LaunchingExternalUriSchemeEventArgs): HResult; stdcall; + end; + +// *********************************************************************// +// Interface: ICoreWebView2LaunchingExternalUriSchemeEventArgs +// Flags: (0) +// GUID: {07D1A6C3-7175-4BA1-9306-E593CA07E46C} +// *********************************************************************// + ICoreWebView2LaunchingExternalUriSchemeEventArgs = interface(IUnknown) + ['{07D1A6C3-7175-4BA1-9306-E593CA07E46C}'] + function Get_uri(out value: PWideChar): HResult; stdcall; + function Get_InitiatingOrigin(out value: PWideChar): HResult; stdcall; + function Get_IsUserInitiated(out value: Integer): HResult; stdcall; + function Get_Cancel(out value: Integer): HResult; stdcall; + function Set_Cancel(value: Integer): HResult; stdcall; + function GetDeferral(out value: ICoreWebView2Deferral): HResult; stdcall; + end; + // *********************************************************************// // Interface: ICoreWebView2BrowserProcessExitedEventArgs // Flags: (0) @@ -3497,6 +3552,19 @@ COREWEBVIEW2_COLOR = record function Get_CookieManager(out CookieManager: ICoreWebView2CookieManager): HResult; stdcall; end; +// *********************************************************************// +// Interface: ICoreWebView2Profile6 +// Flags: (0) +// GUID: {BD82FA6A-1D65-4C33-B2B4-0393020CC61B} +// *********************************************************************// + ICoreWebView2Profile6 = interface(ICoreWebView2Profile5) + ['{BD82FA6A-1D65-4C33-B2B4-0393020CC61B}'] + function Get_IsPasswordAutosaveEnabled(out value: Integer): HResult; stdcall; + function Set_IsPasswordAutosaveEnabled(value: Integer): HResult; stdcall; + function Get_IsGeneralAutofillEnabled(out value: Integer): HResult; stdcall; + function Set_IsGeneralAutofillEnabled(value: Integer): HResult; stdcall; + end; + // *********************************************************************// // Interface: ICoreWebView2Settings2 // Flags: (0) @@ -3576,6 +3644,17 @@ COREWEBVIEW2_COLOR = record function Set_IsReputationCheckingRequired(value: Integer): HResult; stdcall; end; +// *********************************************************************// +// Interface: ICoreWebView2_19 +// Flags: (0) +// GUID: {6921F954-79B0-437F-A997-C85811897C68} +// *********************************************************************// + ICoreWebView2_19 = interface(ICoreWebView2_18) + ['{6921F954-79B0-437F-A997-C85811897C68}'] + function Get_MemoryUsageTargetLevel(out level: COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL): HResult; stdcall; + function Set_MemoryUsageTargetLevel(level: COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL): HResult; stdcall; + end; + // *********************************************************************// // Interface: ICoreWebView2File // Flags: (0) diff --git a/source/uWVTypes.pas b/source/uWVTypes.pas index 2c76843..a7049ac 100644 --- a/source/uWVTypes.pas +++ b/source/uWVTypes.pas @@ -64,6 +64,7 @@ interface TWVPrintDialogKind = type COREWEBVIEW2_PRINT_DIALOG_KIND; TWVSharedBufferAccess = type COREWEBVIEW2_SHARED_BUFFER_ACCESS; TWVTrackingPreventionLevel = type COREWEBVIEW2_TRACKING_PREVENTION_LEVEL; + TWVMemoryUsageTargetLevel = type COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL; TWV2LoaderStatus = (wvlsCreated, wvlsLoading, diff --git a/source/uWVVersion.inc b/source/uWVVersion.inc index eca75d4..d420920 100644 --- a/source/uWVVersion.inc +++ b/source/uWVVersion.inc @@ -1,12 +1,12 @@ WEBVIEW2LOADERLIB_VERSION_MAJOR = 1; WEBVIEW2LOADERLIB_VERSION_MINOR = 0; - WEBVIEW2LOADERLIB_VERSION_RELEASE = 1774; - WEBVIEW2LOADERLIB_VERSION_BUILD = 30; + WEBVIEW2LOADERLIB_VERSION_RELEASE = 1823; + WEBVIEW2LOADERLIB_VERSION_BUILD = 32; // For full API compatibility, WebView4Delphi requires the same // WebView2 Runtime version mentioned in the release notes : // https://docs.microsoft.com/en-us/microsoft-edge/webview2/release-notes - CHROMIUM_VERSION_MAJOR = 113; + CHROMIUM_VERSION_MAJOR = 114; CHROMIUM_VERSION_MINOR = 0; CHROMIUM_VERSION_RELEASE = WEBVIEW2LOADERLIB_VERSION_RELEASE; CHROMIUM_VERSION_BUILD = WEBVIEW2LOADERLIB_VERSION_BUILD; \ No newline at end of file diff --git a/update_WebView4Delphi.json b/update_WebView4Delphi.json index 93ba8d9..735bb45 100644 --- a/update_WebView4Delphi.json +++ b/update_WebView4Delphi.json @@ -2,9 +2,9 @@ "UpdateLazPackages" : [ { "ForceNotify" : true, - "InternalVersion" : 99, + "InternalVersion" : 100, "Name" : "webview4delphi.lpk", - "Version" : "1.0.1774.30" + "Version" : "1.0.1823.32" } ], "UpdatePackageData" : {