Jacek Caban : mshtml: Added IInternetHostSecurity:: ProcessUrlAction implementation.

Alexandre Julliard julliard at winehq.org
Thu Oct 1 09:48:17 CDT 2009


Module: wine
Branch: master
Commit: a5923a6eea5a5c672544c41d0d0be92f72fe9946
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a5923a6eea5a5c672544c41d0d0be92f72fe9946

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Oct  1 00:05:36 2009 +0200

mshtml: Added IInternetHostSecurity::ProcessUrlAction implementation.

---

 dlls/mshtml/htmldoc.c        |   10 ++++++++++
 dlls/mshtml/mshtml_private.h |    2 ++
 dlls/mshtml/secmgr.c         |   12 ++++++++++--
 dlls/mshtml/tests/script.c   |    8 ++++++++
 4 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index bfde79d..d6baa8e 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -1772,6 +1772,9 @@ void HTMLDocumentNode_destructor(HTMLDOMNode *iface)
 {
     HTMLDocumentNode *This = HTMLDOCNODE_NODE_THIS(iface);
 
+    if(This->secmgr)
+        IInternetSecurityManager_Release(This->secmgr);
+
     detach_selection(This);
     detach_ranges(This);
     release_nodes(This);
@@ -1805,6 +1808,7 @@ static dispex_static_data_t HTMLDocumentNode_dispex = {
 HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument *nsdoc, HTMLDocumentObj *doc_obj, HTMLWindow *window, HTMLDocumentNode **ret)
 {
     HTMLDocumentNode *doc;
+    HRESULT hres;
 
     doc = heap_alloc_zero(sizeof(HTMLDocumentNode));
     if(!doc)
@@ -1829,6 +1833,12 @@ HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument *nsdoc, HTMLDocumentObj *doc_ob
     HTMLDOMNode_Init(doc, &doc->node, (nsIDOMNode*)nsdoc);
     doc->node.vtbl = &HTMLDocumentNodeImplVtbl;
 
+    hres = CoInternetCreateSecurityManager(NULL, &doc->secmgr, 0);
+    if(FAILED(hres)) {
+        htmldoc_release(&doc->basedoc);
+        return hres;
+    }
+
     *ret = doc;
     return S_OK;
 }
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 17fa971..82e1c60 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -471,6 +471,8 @@ struct HTMLDocumentNode {
 
     HTMLDOMNode *nodes;
 
+    IInternetSecurityManager *secmgr;
+
     struct list selection_list;
     struct list range_list;
 };
diff --git a/dlls/mshtml/secmgr.c b/dlls/mshtml/secmgr.c
index 617cb23..c9b1e46 100644
--- a/dlls/mshtml/secmgr.c
+++ b/dlls/mshtml/secmgr.c
@@ -34,6 +34,8 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 
+static const WCHAR about_blankW[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
+
 #define HOSTSECMGR_THIS(iface) DEFINE_THIS(HTMLDocumentNode, IInternetHostSecurityManager, iface)
 
 static HRESULT WINAPI InternetHostSecurityManager_QueryInterface(IInternetHostSecurityManager *iface, REFIID riid, void **ppv)
@@ -66,8 +68,14 @@ static HRESULT WINAPI InternetHostSecurityManager_ProcessUrlAction(IInternetHost
         BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved)
 {
     HTMLDocumentNode *This = HOSTSECMGR_THIS(iface);
-    FIXME("%p)->(%d %p %d %p %d %x %x)\n", This, dwAction, pPolicy, cbPolicy, pContext, cbContext, dwFlags, dwReserved);
-    return E_NOTIMPL;
+    const WCHAR *url;
+
+    TRACE("%p)->(%d %p %d %p %d %x %x)\n", This, dwAction, pPolicy, cbPolicy, pContext, cbContext, dwFlags, dwReserved);
+
+    url = This->basedoc.doc_obj->url ? This->basedoc.doc_obj->url : about_blankW;
+
+    return IInternetSecurityManager_ProcessUrlAction(This->secmgr, url, dwAction, pPolicy, cbPolicy,
+            pContext, cbContext, dwFlags, dwReserved);
 }
 
 static HRESULT WINAPI InternetHostSecurityManager_QueryCustomPolicy(IInternetHostSecurityManager *iface, REFGUID guidKey,
diff --git a/dlls/mshtml/tests/script.c b/dlls/mshtml/tests/script.c
index 92897a6..89b076c 100644
--- a/dlls/mshtml/tests/script.c
+++ b/dlls/mshtml/tests/script.c
@@ -117,6 +117,8 @@ DEFINE_EXPECT(script_testprop_i);
 
 static const GUID CLSID_TestScript =
     {0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x07,0x46}};
+static const GUID CLSID_TestActiveX =
+    {0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x46}};
 
 static IHTMLDocument2 *notif_doc;
 static IDispatchEx *window_dispex;
@@ -575,6 +577,7 @@ static void test_security(void)
 {
     IInternetHostSecurityManager *sec_mgr;
     IServiceProvider *sp;
+    DWORD policy;
     HRESULT hres;
 
     hres = IActiveScriptSite_QueryInterface(site, &IID_IServiceProvider, (void**)&sp);
@@ -585,6 +588,11 @@ static void test_security(void)
     IServiceProvider_Release(sp);
     ok(hres == S_OK, "QueryService failed: %08x\n", hres);
 
+    hres = IInternetHostSecurityManager_ProcessUrlAction(sec_mgr, URLACTION_ACTIVEX_RUN, (BYTE*)&policy, sizeof(policy),
+                                                         (BYTE*)&CLSID_TestActiveX, sizeof(CLSID), 0, 0);
+    ok(hres == S_OK, "ProcessUrlAction failed: %08x\n", hres);
+    ok(policy == URLPOLICY_ALLOW, "policy = %x\n", policy);
+
     IInternetHostSecurityManager_Release(sec_mgr);
 }
 




More information about the wine-cvs mailing list