@@ -527,11 +527,21 @@ typedef struct {
527527 IDocHostUIHandler ui ;
528528} _IDocHostUIHandlerEx ;
529529
530+ typedef struct {
531+ IInternetSecurityManager mgr ;
532+ } _IInternetSecurityManagerEx ;
533+
534+ typedef struct {
535+ IServiceProvider provider ;
536+ _IInternetSecurityManagerEx mgr ;
537+ } _IServiceProviderEx ;
538+
530539typedef struct {
531540 IOleClientSite client ;
532541 _IOleInPlaceSiteEx inplace ;
533542 _IDocHostUIHandlerEx ui ;
534543 IDispatch external ;
544+ _IServiceProviderEx provider ;
535545} _IOleClientSiteEx ;
536546
537547#ifdef __cplusplus
@@ -672,6 +682,8 @@ static HRESULT STDMETHODCALLTYPE Site_QueryInterface(IOleClientSite FAR *This,
672682 * ppvObject = & ((_IOleClientSiteEx * )This )-> inplace ;
673683 } else if (iid_eq (riid , & IID_IDocHostUIHandler )) {
674684 * ppvObject = & ((_IOleClientSiteEx * )This )-> ui ;
685+ } else if (iid_eq (riid , & IID_IServiceProvider )) {
686+ * ppvObject = & ((_IOleClientSiteEx * )This )-> provider ;
675687 } else {
676688 * ppvObject = 0 ;
677689 return (E_NOINTERFACE );
@@ -968,6 +980,57 @@ static IDocHostUIHandlerVtbl MyIDocHostUIHandlerTable = {
968980 UI_TranslateUrl ,
969981 UI_FilterDataObject };
970982
983+
984+
985+ static HRESULT STDMETHODCALLTYPE IS_QueryInterface (IInternetSecurityManager FAR * This , REFIID riid , void * * ppvObject ) {
986+ return E_NOTIMPL ;
987+ }
988+ static ULONG STDMETHODCALLTYPE IS_AddRef (IInternetSecurityManager FAR * This ) { return 1 ; }
989+ static ULONG STDMETHODCALLTYPE IS_Release (IInternetSecurityManager FAR * This ) { return 1 ; }
990+ static HRESULT STDMETHODCALLTYPE IS_SetSecuritySite (IInternetSecurityManager FAR * This , IInternetSecurityMgrSite * pSited ) {
991+ return INET_E_DEFAULT_ACTION ;
992+ }
993+ static HRESULT STDMETHODCALLTYPE IS_GetSecuritySite (IInternetSecurityManager FAR * This , IInternetSecurityMgrSite * * ppSite ) {
994+ return INET_E_DEFAULT_ACTION ;
995+ }
996+ static HRESULT STDMETHODCALLTYPE IS_MapUrlToZone (IInternetSecurityManager FAR * This , LPCWSTR pwszUrl , DWORD * pdwZone , DWORD dwFlags ) {
997+ * pdwZone = URLZONE_LOCAL_MACHINE ;
998+ return S_OK ;
999+ }
1000+ static HRESULT STDMETHODCALLTYPE IS_GetSecurityId (IInternetSecurityManager FAR * This , LPCWSTR pwszUrl , BYTE * pbSecurityId , DWORD * pcbSecurityId , DWORD_PTR dwReserved ) {
1001+ return INET_E_DEFAULT_ACTION ;
1002+ }
1003+ static HRESULT STDMETHODCALLTYPE IS_ProcessUrlAction (IInternetSecurityManager FAR * This , LPCWSTR pwszUrl , DWORD dwAction , BYTE * pPolicy , DWORD cbPolicy , BYTE * pContext , DWORD cbContext , DWORD dwFlags , DWORD dwReserved ) {
1004+ return INET_E_DEFAULT_ACTION ;
1005+ }
1006+ static HRESULT STDMETHODCALLTYPE IS_QueryCustomPolicy (IInternetSecurityManager FAR * This , LPCWSTR pwszUrl , REFGUID guidKey , BYTE * * ppPolicy , DWORD * pcbPolicy , BYTE * pContext , DWORD cbContext , DWORD dwReserved ) {
1007+ return INET_E_DEFAULT_ACTION ;
1008+ }
1009+ static HRESULT STDMETHODCALLTYPE IS_SetZoneMapping (IInternetSecurityManager FAR * This , DWORD dwZone , LPCWSTR lpszPattern , DWORD dwFlags ) {
1010+ return INET_E_DEFAULT_ACTION ;
1011+ }
1012+ static HRESULT STDMETHODCALLTYPE IS_GetZoneMappings (IInternetSecurityManager FAR * This , DWORD dwZone , IEnumString * * ppenumString , DWORD dwFlags ) {
1013+ return INET_E_DEFAULT_ACTION ;
1014+ }
1015+ static IInternetSecurityManagerVtbl MyInternetSecurityManagerTable = {IS_QueryInterface , IS_AddRef , IS_Release , IS_SetSecuritySite , IS_GetSecuritySite , IS_MapUrlToZone , IS_GetSecurityId , IS_ProcessUrlAction , IS_QueryCustomPolicy , IS_SetZoneMapping , IS_GetZoneMappings };
1016+
1017+ static HRESULT STDMETHODCALLTYPE SP_QueryInterface (IServiceProvider FAR * This , REFIID riid , void * * ppvObject ) {
1018+ return (Site_QueryInterface (
1019+ (IOleClientSite * )((char * )This - sizeof (IOleClientSite ) - sizeof (_IOleInPlaceSiteEx ) - sizeof (_IDocHostUIHandlerEx ) - sizeof (IDispatch )), riid , ppvObject ));
1020+ }
1021+ static ULONG STDMETHODCALLTYPE SP_AddRef (IServiceProvider FAR * This ) { return 1 ; }
1022+ static ULONG STDMETHODCALLTYPE SP_Release (IServiceProvider FAR * This ) { return 1 ; }
1023+ static HRESULT STDMETHODCALLTYPE SP_QueryService (IServiceProvider FAR * This , REFGUID siid , REFIID riid , void * * ppvObject ) {
1024+ if (iid_eq (siid , & IID_IInternetSecurityManager ) && iid_eq (riid , & IID_IInternetSecurityManager )) {
1025+ * ppvObject = & ((_IServiceProviderEx * )This )-> mgr ;
1026+ } else {
1027+ * ppvObject = 0 ;
1028+ return (E_NOINTERFACE );
1029+ }
1030+ return S_OK ;
1031+ }
1032+ static IServiceProviderVtbl MyServiceProviderTable = {SP_QueryInterface , SP_AddRef , SP_Release , SP_QueryService };
1033+
9711034static void UnEmbedBrowserObject (struct webview * w ) {
9721035 if (w -> priv .browser != NULL ) {
9731036 (* w -> priv .browser )-> lpVtbl -> Close (* w -> priv .browser , OLECLOSE_NOSAVE );
@@ -996,6 +1059,8 @@ static int EmbedBrowserObject(struct webview *w) {
9961059 _iOleClientSiteEx -> inplace .frame .window = w -> priv .hwnd ;
9971060 _iOleClientSiteEx -> ui .ui .lpVtbl = & MyIDocHostUIHandlerTable ;
9981061 _iOleClientSiteEx -> external .lpVtbl = & ExternalDispatchTable ;
1062+ _iOleClientSiteEx -> provider .provider .lpVtbl = & MyServiceProviderTable ;
1063+ _iOleClientSiteEx -> provider .mgr .mgr .lpVtbl = & MyInternetSecurityManagerTable ;
9991064
10001065 if (CoGetClassObject (iid_unref (& CLSID_WebBrowser ),
10011066 CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER , NULL ,
@@ -1607,7 +1672,12 @@ WEBVIEW_API void webview_dialog(struct webview *w,
16071672}
16081673
16091674WEBVIEW_API void webview_terminate (struct webview * w ) { PostQuitMessage (0 ); }
1610- WEBVIEW_API void webview_exit (struct webview * w ) { OleUninitialize (); }
1675+
1676+ WEBVIEW_API void webview_exit (struct webview * w ) {
1677+ DestroyWindow (w -> priv .hwnd );
1678+ OleUninitialize ();
1679+ }
1680+
16111681WEBVIEW_API void webview_print_log (const char * s ) { OutputDebugString (s ); }
16121682
16131683#endif /* WEBVIEW_WINAPI */
0 commit comments