Jacek Caban : urlmon: Clean up default protocol handler pseudo-interface implementation.

Alexandre Julliard julliard at winehq.org
Tue Nov 30 11:01:11 CST 2010


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Nov 30 12:40:08 2010 +0100

urlmon: Clean up default protocol handler pseudo-interface implementation.

---

 dlls/urlmon/bindprot.c |   46 +++++++++++++++++++++++++---------------------
 1 files changed, 25 insertions(+), 21 deletions(-)

diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c
index 68e1dec..0549712 100644
--- a/dlls/urlmon/bindprot.c
+++ b/dlls/urlmon/bindprot.c
@@ -40,17 +40,19 @@ struct BindProtocol {
     const IInternetProtocolSinkVtbl  *lpIInternetProtocolSinkVtbl;
     const IWinInetHttpInfoVtbl       *lpIWinInetHttpInfoVtbl;
 
-    const IInternetProtocolVtbl *lpIInternetProtocolHandlerVtbl;
-
     LONG ref;
 
     IInternetProtocol *protocol;
-    IInternetProtocol *protocol_handler;
     IInternetBindInfo *bind_info;
     IInternetProtocolSink *protocol_sink;
     IServiceProvider *service_provider;
     IWinInetInfo *wininet_info;
 
+    struct {
+        IInternetProtocol IInternetProtocol_iface;
+    } default_protocol_handler;
+    IInternetProtocol *protocol_handler;
+
     LONG priority;
 
     BOOL reported_result;
@@ -233,7 +235,7 @@ static HRESULT handle_mime_filter(BindProtocol *This, IInternetProtocol *mime_fi
     if(FAILED(hres))
         return hres;
 
-    hres = create_protocol_proxy(PROTOCOLHANDLER(This), This->protocol_sink, &filter_proxy);
+    hres = create_protocol_proxy(&This->default_protocol_handler.IInternetProtocol_iface, This->protocol_sink, &filter_proxy);
     if(FAILED(hres)) {
         IInternetProtocolSink_Release(protocol_sink);
         return hres;
@@ -381,7 +383,7 @@ static ULONG WINAPI BindProtocol_Release(IInternetProtocolEx *iface)
             IInternetProtocol_Release(This->protocol);
         if(This->bind_info)
             IInternetBindInfo_Release(This->bind_info);
-        if(This->protocol_handler && This->protocol_handler != PROTOCOLHANDLER(This))
+        if(This->protocol_handler && This->protocol_handler != &This->default_protocol_handler.IInternetProtocol_iface)
             IInternetProtocol_Release(This->protocol_handler);
         if(This->filter_proxy)
             IInternetProtocol_Release(PROTOCOL(This->filter_proxy));
@@ -651,7 +653,10 @@ static const IInternetProtocolExVtbl BindProtocolVtbl = {
     BindProtocol_StartEx
 };
 
-#define PROTOCOLHANDLER_THIS(iface) DEFINE_THIS(BindProtocol, IInternetProtocolHandler, iface)
+static inline BindProtocol *impl_from_IInternetProtocol(IInternetProtocol *iface)
+{
+    return CONTAINING_RECORD(iface, BindProtocol, default_protocol_handler.IInternetProtocol_iface);
+}
 
 static HRESULT WINAPI ProtocolHandler_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
 {
@@ -661,13 +666,13 @@ static HRESULT WINAPI ProtocolHandler_QueryInterface(IInternetProtocol *iface, R
 
 static ULONG WINAPI ProtocolHandler_AddRef(IInternetProtocol *iface)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
     return IInternetProtocolEx_AddRef(PROTOCOLEX(This));
 }
 
 static ULONG WINAPI ProtocolHandler_Release(IInternetProtocol *iface)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
     return IInternetProtocolEx_Release(PROTOCOLEX(This));
 }
 
@@ -681,7 +686,7 @@ static HRESULT WINAPI ProtocolHandler_Start(IInternetProtocol *iface, LPCWSTR sz
 
 static HRESULT WINAPI ProtocolHandler_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
     HRESULT hres;
 
     TRACE("(%p)->(%p)\n", This, pProtocolData);
@@ -695,7 +700,7 @@ static HRESULT WINAPI ProtocolHandler_Continue(IInternetProtocol *iface, PROTOCO
 static HRESULT WINAPI ProtocolHandler_Abort(IInternetProtocol *iface, HRESULT hrReason,
         DWORD dwOptions)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
 
     TRACE("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
 
@@ -707,7 +712,7 @@ static HRESULT WINAPI ProtocolHandler_Abort(IInternetProtocol *iface, HRESULT hr
 
 static HRESULT WINAPI ProtocolHandler_Terminate(IInternetProtocol *iface, DWORD dwOptions)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
 
     TRACE("(%p)->(%08x)\n", This, dwOptions);
 
@@ -733,14 +738,14 @@ static HRESULT WINAPI ProtocolHandler_Terminate(IInternetProtocol *iface, DWORD
 
 static HRESULT WINAPI ProtocolHandler_Suspend(IInternetProtocol *iface)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
     FIXME("(%p)\n", This);
     return E_NOTIMPL;
 }
 
 static HRESULT WINAPI ProtocolHandler_Resume(IInternetProtocol *iface)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
     FIXME("(%p)\n", This);
     return E_NOTIMPL;
 }
@@ -748,7 +753,7 @@ static HRESULT WINAPI ProtocolHandler_Resume(IInternetProtocol *iface)
 static HRESULT WINAPI ProtocolHandler_Read(IInternetProtocol *iface, void *pv,
         ULONG cb, ULONG *pcbRead)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
     ULONG read = 0;
     HRESULT hres = S_OK;
 
@@ -782,14 +787,14 @@ static HRESULT WINAPI ProtocolHandler_Read(IInternetProtocol *iface, void *pv,
 static HRESULT WINAPI ProtocolHandler_Seek(IInternetProtocol *iface, LARGE_INTEGER dlibMove,
         DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
     FIXME("(%p)->(%d %d %p)\n", This, dlibMove.u.LowPart, dwOrigin, plibNewPosition);
     return E_NOTIMPL;
 }
 
 static HRESULT WINAPI ProtocolHandler_LockRequest(IInternetProtocol *iface, DWORD dwOptions)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
 
     TRACE("(%p)->(%08x)\n", This, dwOptions);
 
@@ -798,15 +803,13 @@ static HRESULT WINAPI ProtocolHandler_LockRequest(IInternetProtocol *iface, DWOR
 
 static HRESULT WINAPI ProtocolHandler_UnlockRequest(IInternetProtocol *iface)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
+    BindProtocol *This = impl_from_IInternetProtocol(iface);
 
     TRACE("(%p)\n", This);
 
     return IInternetProtocol_UnlockRequest(This->protocol);
 }
 
-#undef PROTOCOL_THIS
-
 static const IInternetProtocolVtbl InternetProtocolHandlerVtbl = {
     ProtocolHandler_QueryInterface,
     ProtocolHandler_AddRef,
@@ -1342,14 +1345,15 @@ HRESULT create_binding_protocol(BOOL from_urlmon, IInternetProtocolEx **protocol
     ret->lpInternetPriorityVtbl         = &InternetPriorityVtbl;
     ret->lpServiceProviderVtbl          = &ServiceProviderVtbl;
     ret->lpIInternetProtocolSinkVtbl    = &InternetProtocolSinkVtbl;
-    ret->lpIInternetProtocolHandlerVtbl = &InternetProtocolHandlerVtbl;
     ret->lpIWinInetHttpInfoVtbl         = &WinInetHttpInfoVtbl;
 
+    ret->default_protocol_handler.IInternetProtocol_iface.lpVtbl = &InternetProtocolHandlerVtbl;
+
     ret->ref = 1;
     ret->from_urlmon = from_urlmon;
     ret->apartment_thread = GetCurrentThreadId();
     ret->notif_hwnd = get_notif_hwnd();
-    ret->protocol_handler = PROTOCOLHANDLER(ret);
+    ret->protocol_handler = &ret->default_protocol_handler.IInternetProtocol_iface;
     InitializeCriticalSection(&ret->section);
 
     URLMON_LockModule();




More information about the wine-cvs mailing list