[PATCH 2/9] mshtml: Use ifaces instead of vtbl pointers in HTMLDocumentNode.

Michael Stefaniuc mstefani at redhat.de
Sun Jan 2 18:01:38 CST 2011


---
 dlls/mshtml/htmldoc.c        |    2 +-
 dlls/mshtml/mshtml_private.h |   12 ++-------
 dlls/mshtml/mutation.c       |   52 ++++++++++++++++++++++-------------------
 dlls/mshtml/npplugin.c       |    4 +-
 dlls/mshtml/pluginhost.c     |    4 +-
 dlls/mshtml/script.c         |    3 +-
 dlls/mshtml/secmgr.c         |   21 +++++++++--------
 7 files changed, 49 insertions(+), 49 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 45abc1f..72db71b 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -1886,7 +1886,7 @@ static HRESULT HTMLDocumentNode_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
 
     if(IsEqualGUID(&IID_IInternetHostSecurityManager, riid)) {
         TRACE("(%p)->(IID_IInternetHostSecurityManager %p)\n", This, ppv);
-        *ppv = HOSTSECMGR(This);
+        *ppv = &This->IInternetHostSecurityManager_iface;
     }else {
         return HTMLDOMNode_QI(&This->node, riid, ppv);
     }
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index bf6b3f5..219dd74 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -597,10 +597,10 @@ struct HTMLDocumentNode {
     HTMLDOMNode node;
     HTMLDocument basedoc;
 
-    const IInternetHostSecurityManagerVtbl *lpIInternetHostSecurityManagerVtbl;
+    IInternetHostSecurityManager IInternetHostSecurityManager_iface;
 
-    const nsIDocumentObserverVtbl  *lpIDocumentObserverVtbl;
-    const nsIRunnableVtbl  *lpIRunnableVtbl;
+    nsIDocumentObserver          nsIDocumentObserver_iface;
+    nsIRunnable                  nsIRunnable_iface;
 
     LONG ref;
 
@@ -629,10 +629,6 @@ struct HTMLDocumentNode {
 
 #define NSEVENTLIST(x)   ((nsIDOMEventListener*)          &(x)->lpDOMEventListenerVtbl)
 
-#define NSDOCOBS(x)      ((nsIDocumentObserver*)          &(x)->lpIDocumentObserverVtbl)
-
-#define NSRUNNABLE(x)    ((nsIRunnable*)  &(x)->lpIRunnableVtbl)
-
 #define HTTPNEG(x)       ((IHttpNegotiate2*)              &(x)->lpHttpNegotiate2Vtbl)
 #define STATUSCLB(x)     ((IBindStatusCallback*)          &(x)->lpBindStatusCallbackVtbl)
 #define BINDINFO(x)      ((IInternetBindInfo*)            &(x)->lpInternetBindInfoVtbl);
@@ -643,8 +639,6 @@ struct HTMLDocumentNode {
 #define HTMLIMGFACTORY(x)  ((IHTMLImageElementFactory*)   &(x)->lpHTMLImageElementFactoryVtbl)
 #define HTMLLOCATION(x)    ((IHTMLLocation*)              &(x)->lpHTMLLocationVtbl)
 
-#define HOSTSECMGR(x)    ((IInternetHostSecurityManager*)  &(x)->lpIInternetHostSecurityManagerVtbl)
-
 #define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl)))
 
 HRESULT HTMLDocument_Create(IUnknown*,REFIID,void**);
diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c
index ca614a5..3c88744 100644
--- a/dlls/mshtml/mutation.c
+++ b/dlls/mshtml/mutation.c
@@ -193,23 +193,26 @@ static void add_script_runner(HTMLDocumentNode *This)
         return;
     }
 
-    nsIDOMNSDocument_WineAddScriptRunner(nsdoc, NSRUNNABLE(This));
+    nsIDOMNSDocument_WineAddScriptRunner(nsdoc, &This->nsIRunnable_iface);
     nsIDOMNSDocument_Release(nsdoc);
 }
 
-#define NSRUNNABLE_THIS(iface) DEFINE_THIS(HTMLDocumentNode, IRunnable, iface)
+static inline HTMLDocumentNode *impl_from_nsIRunnable(nsIRunnable *iface)
+{
+    return CONTAINING_RECORD(iface, HTMLDocumentNode, nsIRunnable_iface);
+}
 
 static nsresult NSAPI nsRunnable_QueryInterface(nsIRunnable *iface,
         nsIIDRef riid, void **result)
 {
-    HTMLDocumentNode *This = NSRUNNABLE_THIS(iface);
+    HTMLDocumentNode *This = impl_from_nsIRunnable(iface);
 
     if(IsEqualGUID(riid, &IID_nsISupports)) {
         TRACE("(%p)->(IID_nsISupports %p)\n", This, result);
-        *result = NSRUNNABLE(This);
+        *result = &This->nsIRunnable_iface;
     }else if(IsEqualGUID(riid, &IID_nsIRunnable)) {
         TRACE("(%p)->(IID_nsIRunnable %p)\n", This, result);
-        *result = NSRUNNABLE(This);
+        *result = &This->nsIRunnable_iface;
     }else {
         *result = NULL;
         WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), result);
@@ -222,13 +225,13 @@ static nsresult NSAPI nsRunnable_QueryInterface(nsIRunnable *iface,
 
 static nsrefcnt NSAPI nsRunnable_AddRef(nsIRunnable *iface)
 {
-    HTMLDocumentNode *This = NSRUNNABLE_THIS(iface);
+    HTMLDocumentNode *This = impl_from_nsIRunnable(iface);
     return htmldoc_addref(&This->basedoc);
 }
 
 static nsrefcnt NSAPI nsRunnable_Release(nsIRunnable *iface)
 {
-    HTMLDocumentNode *This = NSRUNNABLE_THIS(iface);
+    HTMLDocumentNode *This = impl_from_nsIRunnable(iface);
     return htmldoc_release(&This->basedoc);
 }
 
@@ -349,7 +352,7 @@ static void handle_end_load(HTMLDocumentNode *This)
 
 static nsresult NSAPI nsRunnable_Run(nsIRunnable *iface)
 {
-    HTMLDocumentNode *This = NSRUNNABLE_THIS(iface);
+    HTMLDocumentNode *This = impl_from_nsIRunnable(iface);
     nsresult nsres;
 
     TRACE("(%p)\n", This);
@@ -436,8 +439,6 @@ static nsresult NSAPI nsRunnable_Run(nsIRunnable *iface)
     return S_OK;
 }
 
-#undef NSRUNNABLE_THIS
-
 static const nsIRunnableVtbl nsRunnableVtbl = {
     nsRunnable_QueryInterface,
     nsRunnable_AddRef,
@@ -445,22 +446,25 @@ static const nsIRunnableVtbl nsRunnableVtbl = {
     nsRunnable_Run
 };
 
-#define NSDOCOBS_THIS(iface) DEFINE_THIS(HTMLDocumentNode, IDocumentObserver, iface)
+static inline HTMLDocumentNode *impl_from_nsIDocumentObserver(nsIDocumentObserver *iface)
+{
+    return CONTAINING_RECORD(iface, HTMLDocumentNode, nsIDocumentObserver_iface);
+}
 
 static nsresult NSAPI nsDocumentObserver_QueryInterface(nsIDocumentObserver *iface,
         nsIIDRef riid, void **result)
 {
-    HTMLDocumentNode *This = NSDOCOBS_THIS(iface);
+    HTMLDocumentNode *This = impl_from_nsIDocumentObserver(iface);
 
     if(IsEqualGUID(&IID_nsISupports, riid)) {
         TRACE("(%p)->(IID_nsISupports, %p)\n", This, result);
-        *result = NSDOCOBS(This);
+        *result = &This->nsIDocumentObserver_iface;
     }else if(IsEqualGUID(&IID_nsIMutationObserver, riid)) {
         TRACE("(%p)->(IID_nsIMutationObserver %p)\n", This, result);
-        *result = NSDOCOBS(This);
+        *result = &This->nsIDocumentObserver_iface;
     }else if(IsEqualGUID(&IID_nsIDocumentObserver, riid)) {
         TRACE("(%p)->(IID_nsIDocumentObserver %p)\n", This, result);
-        *result = NSDOCOBS(This);
+        *result = &This->nsIDocumentObserver_iface;
     }else {
         *result = NULL;
         TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), result);
@@ -473,13 +477,13 @@ static nsresult NSAPI nsDocumentObserver_QueryInterface(nsIDocumentObserver *ifa
 
 static nsrefcnt NSAPI nsDocumentObserver_AddRef(nsIDocumentObserver *iface)
 {
-    HTMLDocumentNode *This = NSDOCOBS_THIS(iface);
+    HTMLDocumentNode *This = impl_from_nsIDocumentObserver(iface);
     return htmldoc_addref(&This->basedoc);
 }
 
 static nsrefcnt NSAPI nsDocumentObserver_Release(nsIDocumentObserver *iface)
 {
-    HTMLDocumentNode *This = NSDOCOBS_THIS(iface);
+    HTMLDocumentNode *This = impl_from_nsIDocumentObserver(iface);
     return htmldoc_release(&This->basedoc);
 }
 
@@ -543,7 +547,7 @@ static void NSAPI nsDocumentObserver_BeginLoad(nsIDocumentObserver *iface, nsIDo
 
 static void NSAPI nsDocumentObserver_EndLoad(nsIDocumentObserver *iface, nsIDocument *aDocument)
 {
-    HTMLDocumentNode *This = NSDOCOBS_THIS(iface);
+    HTMLDocumentNode *This = impl_from_nsIDocumentObserver(iface);
 
     TRACE("\n");
 
@@ -597,7 +601,7 @@ static void NSAPI nsDocumentObserver_StyleRuleRemoved(nsIDocumentObserver *iface
 static void NSAPI nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface, nsIDocument *aDocument,
         nsIContent *aContent)
 {
-    HTMLDocumentNode *This = NSDOCOBS_THIS(iface);
+    HTMLDocumentNode *This = impl_from_nsIDocumentObserver(iface);
     nsIDOMHTMLIFrameElement *nsiframe;
     nsIDOMHTMLFrameElement *nsframe;
     nsIDOMComment *nscomment;
@@ -640,7 +644,7 @@ static void NSAPI nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface,
 static void NSAPI nsDocumentObserver_DoneAddingChildren(nsIDocumentObserver *iface, nsIContent *aContent,
         PRBool aHaveNotified)
 {
-    HTMLDocumentNode *This = NSDOCOBS_THIS(iface);
+    HTMLDocumentNode *This = impl_from_nsIDocumentObserver(iface);
     nsIDOMHTMLScriptElement *nsscript;
     nsresult nsres;
 
@@ -691,8 +695,8 @@ void init_mutation(HTMLDocumentNode *doc)
     nsIDOMNSDocument *nsdoc;
     nsresult nsres;
 
-    doc->lpIDocumentObserverVtbl  = &nsDocumentObserverVtbl;
-    doc->lpIRunnableVtbl          = &nsRunnableVtbl;
+    doc->nsIDocumentObserver_iface.lpVtbl = &nsDocumentObserverVtbl;
+    doc->nsIRunnable_iface.lpVtbl = &nsRunnableVtbl;
 
     nsres = nsIDOMHTMLDocument_QueryInterface(doc->nsdoc, &IID_nsIDOMNSDocument, (void**)&nsdoc);
     if(NS_FAILED(nsres)) {
@@ -700,7 +704,7 @@ void init_mutation(HTMLDocumentNode *doc)
         return;
     }
 
-    nsIDOMNSDocument_WineAddObserver(nsdoc, NSDOCOBS(doc));
+    nsIDOMNSDocument_WineAddObserver(nsdoc, &doc->nsIDocumentObserver_iface);
     nsIDOMNSDocument_Release(nsdoc);
 }
 
@@ -715,6 +719,6 @@ void release_mutation(HTMLDocumentNode *doc)
         return;
     }
 
-    nsIDOMNSDocument_WineRemoveObserver(nsdoc, NSDOCOBS(doc));
+    nsIDOMNSDocument_WineRemoveObserver(nsdoc, &doc->nsIDocumentObserver_iface);
     nsIDOMNSDocument_Release(nsdoc);
 }
diff --git a/dlls/mshtml/npplugin.c b/dlls/mshtml/npplugin.c
index 20a30ab..01111a2 100644
--- a/dlls/mshtml/npplugin.c
+++ b/dlls/mshtml/npplugin.c
@@ -219,8 +219,8 @@ static IUnknown *create_activex_object(HTMLWindow *window, nsIDOMElement *nselem
     TRACE("clsid %s\n", debugstr_guid(clsid));
 
     policy = 0;
-    hres = IInternetHostSecurityManager_ProcessUrlAction(HOSTSECMGR(window->doc), URLACTION_ACTIVEX_RUN,
-            (BYTE*)&policy, sizeof(policy), (BYTE*)clsid, sizeof(GUID), 0, 0);
+    hres = IInternetHostSecurityManager_ProcessUrlAction(&window->doc->IInternetHostSecurityManager_iface,
+            URLACTION_ACTIVEX_RUN, (BYTE*)&policy, sizeof(policy), (BYTE*)clsid, sizeof(GUID), 0, 0);
     if(FAILED(hres) || policy != URLPOLICY_ALLOW) {
         WARN("ProcessUrlAction returned %08x %x\n", hres, policy);
         return NULL;
diff --git a/dlls/mshtml/pluginhost.c b/dlls/mshtml/pluginhost.c
index dc6cc40..5c8e953 100644
--- a/dlls/mshtml/pluginhost.c
+++ b/dlls/mshtml/pluginhost.c
@@ -51,7 +51,7 @@ static BOOL check_load_safety(PluginHost *host)
     cs.pUnk = host->plugin_unk;
     cs.dwFlags = CONFIRMSAFETYACTION_LOADOBJECT;
 
-    hres = IInternetHostSecurityManager_QueryCustomPolicy(HOSTSECMGR(host->doc),
+    hres = IInternetHostSecurityManager_QueryCustomPolicy(&host->doc->IInternetHostSecurityManager_iface,
             &GUID_CUSTOM_CONFIRMOBJECTSAFETY, &ppolicy, &policy_size, (BYTE*)&cs, sizeof(cs), 0);
     if(FAILED(hres))
         return FALSE;
@@ -75,7 +75,7 @@ static BOOL check_script_safety(PluginHost *host)
     cs.pUnk = host->plugin_unk;
     cs.dwFlags = 0;
 
-    hres = IInternetHostSecurityManager_QueryCustomPolicy(HOSTSECMGR(host->doc),
+    hres = IInternetHostSecurityManager_QueryCustomPolicy(&host->doc->IInternetHostSecurityManager_iface,
             &GUID_CUSTOM_CONFIRMOBJECTSAFETY, &ppolicy, &policy_size, (BYTE*)&cs, sizeof(cs), 0);
     if(FAILED(hres))
         return FALSE;
diff --git a/dlls/mshtml/script.c b/dlls/mshtml/script.c
index d785878..4733aa6 100644
--- a/dlls/mshtml/script.c
+++ b/dlls/mshtml/script.c
@@ -576,7 +576,8 @@ static HRESULT WINAPI ASServiceProvider_QueryService(IServiceProvider *iface, RE
         if(!This->window || !This->window->doc)
             return E_NOINTERFACE;
 
-        return IInternetHostSecurityManager_QueryInterface(HOSTSECMGR(This->window->doc), riid, ppv);
+        return IInternetHostSecurityManager_QueryInterface(&This->window->doc->IInternetHostSecurityManager_iface,
+                riid, ppv);
     }
 
     FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
diff --git a/dlls/mshtml/secmgr.c b/dlls/mshtml/secmgr.c
index c4f2e59..8225d59 100644
--- a/dlls/mshtml/secmgr.c
+++ b/dlls/mshtml/secmgr.c
@@ -42,30 +42,33 @@ static const WCHAR about_blankW[] = {'a','b','o','u','t',':','b','l','a','n','k'
 const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY =
     {0x10200490,0xfa38,0x11d0,{0xac,0x0e,0x00,0xa0,0xc9,0xf,0xff,0xc0}};
 
-#define HOSTSECMGR_THIS(iface) DEFINE_THIS(HTMLDocumentNode, IInternetHostSecurityManager, iface)
+static inline HTMLDocumentNode *impl_from_IInternetHostSecurityManager(IInternetHostSecurityManager *iface)
+{
+    return CONTAINING_RECORD(iface, HTMLDocumentNode, IInternetHostSecurityManager_iface);
+}
 
 static HRESULT WINAPI InternetHostSecurityManager_QueryInterface(IInternetHostSecurityManager *iface, REFIID riid, void **ppv)
 {
-    HTMLDocumentNode *This = HOSTSECMGR_THIS(iface);
+    HTMLDocumentNode *This = impl_from_IInternetHostSecurityManager(iface);
     return IHTMLDOMNode_QueryInterface(&This->node.IHTMLDOMNode_iface, riid, ppv);
 }
 
 static ULONG WINAPI InternetHostSecurityManager_AddRef(IInternetHostSecurityManager *iface)
 {
-    HTMLDocumentNode *This = HOSTSECMGR_THIS(iface);
+    HTMLDocumentNode *This = impl_from_IInternetHostSecurityManager(iface);
     return IHTMLDOMNode_AddRef(&This->node.IHTMLDOMNode_iface);
 }
 
 static ULONG WINAPI InternetHostSecurityManager_Release(IInternetHostSecurityManager *iface)
 {
-    HTMLDocumentNode *This = HOSTSECMGR_THIS(iface);
+    HTMLDocumentNode *This = impl_from_IInternetHostSecurityManager(iface);
     return IHTMLDOMNode_Release(&This->node.IHTMLDOMNode_iface);
 }
 
 static HRESULT WINAPI InternetHostSecurityManager_GetSecurityId(IInternetHostSecurityManager *iface,  BYTE *pbSecurityId,
         DWORD *pcbSecurityId, DWORD_PTR dwReserved)
 {
-    HTMLDocumentNode *This = HOSTSECMGR_THIS(iface);
+    HTMLDocumentNode *This = impl_from_IInternetHostSecurityManager(iface);
     FIXME("(%p)->(%p %p %lx)\n", This, pbSecurityId, pcbSecurityId, dwReserved);
     return E_NOTIMPL;
 }
@@ -73,7 +76,7 @@ static HRESULT WINAPI InternetHostSecurityManager_GetSecurityId(IInternetHostSec
 static HRESULT WINAPI InternetHostSecurityManager_ProcessUrlAction(IInternetHostSecurityManager *iface, DWORD dwAction,
         BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved)
 {
-    HTMLDocumentNode *This = HOSTSECMGR_THIS(iface);
+    HTMLDocumentNode *This = impl_from_IInternetHostSecurityManager(iface);
     const WCHAR *url;
 
     TRACE("(%p)->(%d %p %d %p %d %x %x)\n", This, dwAction, pPolicy, cbPolicy, pContext, cbContext, dwFlags, dwReserved);
@@ -176,7 +179,7 @@ static HRESULT confirm_safety(HTMLDocumentNode *This, const WCHAR *url, struct C
 static HRESULT WINAPI InternetHostSecurityManager_QueryCustomPolicy(IInternetHostSecurityManager *iface, REFGUID guidKey,
         BYTE **ppPolicy, DWORD *pcbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwReserved)
 {
-    HTMLDocumentNode *This = HOSTSECMGR_THIS(iface);
+    HTMLDocumentNode *This = impl_from_IInternetHostSecurityManager(iface);
     const WCHAR *url;
     HRESULT hres;
 
@@ -227,8 +230,6 @@ static HRESULT WINAPI InternetHostSecurityManager_QueryCustomPolicy(IInternetHos
     return hres;
 }
 
-#undef HOSTSECMGR_THIS
-
 static const IInternetHostSecurityManagerVtbl InternetHostSecurityManagerVtbl = {
     InternetHostSecurityManager_QueryInterface,
     InternetHostSecurityManager_AddRef,
@@ -240,5 +241,5 @@ static const IInternetHostSecurityManagerVtbl InternetHostSecurityManagerVtbl =
 
 void HTMLDocumentNode_SecMgr_Init(HTMLDocumentNode *This)
 {
-    This->lpIInternetHostSecurityManagerVtbl = &InternetHostSecurityManagerVtbl;
+    This->IInternetHostSecurityManager_iface.lpVtbl = &InternetHostSecurityManagerVtbl;
 }
-- 
1.7.3.4



More information about the wine-patches mailing list