Jacek Caban : urlmon: Don' t forward StartEx call to protocol handler in BindProtocol.

Alexandre Julliard julliard at winehq.org
Mon Nov 15 13:28:54 CST 2010


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Nov 15 12:36:20 2010 +0100

urlmon: Don't forward StartEx call to protocol handler in BindProtocol.

---

 dlls/urlmon/bindprot.c |  192 +++++++++++++++++++++++-------------------------
 1 files changed, 92 insertions(+), 100 deletions(-)

diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c
index 956b6a5..cdc6ea4 100644
--- a/dlls/urlmon/bindprot.c
+++ b/dlls/urlmon/bindprot.c
@@ -510,15 +510,101 @@ static HRESULT WINAPI BindProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUr
         DWORD grfPI, HANDLE *dwReserved)
 {
     BindProtocol *This = PROTOCOL_THIS(iface);
+    IInternetProtocol *protocol = NULL;
+    IInternetProtocolEx *protocolex;
+    IInternetPriority *priority;
+    IServiceProvider *service_provider;
+    BOOL urlmon_protocol = FALSE;
+    CLSID clsid = IID_NULL;
+    LPOLESTR clsid_str;
+    HRESULT hres;
 
     TRACE("(%p)->(%p %p %p %08x %p)\n", This, pUri, pOIProtSink, pOIBindInfo, grfPI, dwReserved);
 
-    if(This->protocol_handler != (IInternetProtocol*)PROTOCOLHANDLER(This)) {
-        FIXME("This->protocol_handler != PROTOCOLHANDLER(This)\n");
-        return E_FAIL;
+    if(!pUri || !pOIProtSink || !pOIBindInfo)
+        return E_INVALIDARG;
+
+    This->pi = grfPI;
+
+    IUri_AddRef(pUri);
+    This->uri = pUri;
+
+    hres = IInternetProtocolSink_QueryInterface(pOIProtSink, &IID_IServiceProvider,
+                                                (void**)&service_provider);
+    if(SUCCEEDED(hres)) {
+        /* FIXME: What's protocol CLSID here? */
+        IServiceProvider_QueryService(service_provider, &IID_IInternetProtocol,
+                &IID_IInternetProtocol, (void**)&protocol);
+        IServiceProvider_Release(service_provider);
     }
 
-    return IInternetProtocolEx_StartEx(PROTOCOLHANDLER(This), pUri, pOIProtSink, pOIBindInfo, grfPI, dwReserved);
+    if(!protocol) {
+        IClassFactory *cf;
+        IUnknown *unk;
+        BSTR raw_uri;
+
+        /* FIXME: Avoid GetRawUri here */
+        hres = IUri_GetRawUri(pUri, &raw_uri);
+        if(FAILED(hres))
+            return hres;
+
+        hres = get_protocol_handler(raw_uri, &clsid, &urlmon_protocol, &cf);
+        SysFreeString(raw_uri);
+        if(FAILED(hres))
+            return hres;
+
+        if(This->from_urlmon) {
+            hres = IClassFactory_CreateInstance(cf, NULL, &IID_IInternetProtocol, (void**)&protocol);
+            IClassFactory_Release(cf);
+            if(FAILED(hres))
+                return hres;
+        }else {
+            hres = IClassFactory_CreateInstance(cf, (IUnknown*)BINDINFO(This),
+                    &IID_IUnknown, (void**)&unk);
+            IClassFactory_Release(cf);
+            if(FAILED(hres))
+                return hres;
+
+            hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocol, (void**)&protocol);
+            IUnknown_Release(unk);
+            if(FAILED(hres))
+                return hres;
+        }
+    }
+
+    StringFromCLSID(&clsid, &clsid_str);
+    IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_PROTOCOLCLASSID, clsid_str);
+    CoTaskMemFree(clsid_str);
+
+    This->protocol = protocol;
+
+    if(urlmon_protocol)
+        IInternetProtocol_QueryInterface(protocol, &IID_IWinInetInfo, (void**)&This->wininet_info);
+
+    set_binding_sink((IInternetProtocol*)PROTOCOLEX(This), pOIProtSink, pOIBindInfo);
+
+    hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetPriority, (void**)&priority);
+    if(SUCCEEDED(hres)) {
+        IInternetPriority_SetPriority(priority, This->priority);
+        IInternetPriority_Release(priority);
+    }
+
+    hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetProtocolEx, (void**)&protocolex);
+    if(SUCCEEDED(hres)) {
+        hres = IInternetProtocolEx_StartEx(protocolex, pUri, PROTSINK(This), BINDINFO(This), 0, NULL);
+        IInternetProtocolEx_Release(protocolex);
+    }else {
+        BSTR display_uri;
+
+        hres = IUri_GetDisplayUri(pUri, &display_uri);
+        if(FAILED(hres))
+            return hres;
+
+        hres = IInternetProtocol_Start(protocol, display_uri, PROTSINK(This), BINDINFO(This), 0, 0);
+        SysFreeString(display_uri);
+    }
+
+    return hres;
 }
 
 void set_binding_sink(IInternetProtocol *bind_protocol, IInternetProtocolSink *sink, IInternetBindInfo *bind_info)
@@ -730,102 +816,8 @@ static HRESULT WINAPI ProtocolHandler_StartEx(IInternetProtocolEx *iface, IUri *
         IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo,
         DWORD grfPI, HANDLE *dwReserved)
 {
-    BindProtocol *This = PROTOCOLHANDLER_THIS(iface);
-    IInternetProtocol *protocol = NULL;
-    IInternetProtocolEx *protocolex;
-    IInternetPriority *priority;
-    IServiceProvider *service_provider;
-    BOOL urlmon_protocol = FALSE;
-    CLSID clsid = IID_NULL;
-    LPOLESTR clsid_str;
-    HRESULT hres;
-
-    TRACE("(%p)->(%p %p %p %08x %p)\n", This, pUri, pOIProtSink, pOIBindInfo, grfPI, dwReserved);
-
-    if(!pUri || !pOIProtSink || !pOIBindInfo)
-        return E_INVALIDARG;
-
-    This->pi = grfPI;
-
-    IUri_AddRef(pUri);
-    This->uri = pUri;
-
-    hres = IInternetProtocolSink_QueryInterface(pOIProtSink, &IID_IServiceProvider,
-                                                (void**)&service_provider);
-    if(SUCCEEDED(hres)) {
-        /* FIXME: What's protocol CLSID here? */
-        IServiceProvider_QueryService(service_provider, &IID_IInternetProtocol,
-                &IID_IInternetProtocol, (void**)&protocol);
-        IServiceProvider_Release(service_provider);
-    }
-
-    if(!protocol) {
-        IClassFactory *cf;
-        IUnknown *unk;
-        BSTR raw_uri;
-
-        /* FIXME: Avoid GetRawUri here */
-        hres = IUri_GetRawUri(pUri, &raw_uri);
-        if(FAILED(hres))
-            return hres;
-
-        hres = get_protocol_handler(raw_uri, &clsid, &urlmon_protocol, &cf);
-        SysFreeString(raw_uri);
-        if(FAILED(hres))
-            return hres;
-
-        if(This->from_urlmon) {
-            hres = IClassFactory_CreateInstance(cf, NULL, &IID_IInternetProtocol, (void**)&protocol);
-            IClassFactory_Release(cf);
-            if(FAILED(hres))
-                return hres;
-        }else {
-            hres = IClassFactory_CreateInstance(cf, (IUnknown*)BINDINFO(This),
-                    &IID_IUnknown, (void**)&unk);
-            IClassFactory_Release(cf);
-            if(FAILED(hres))
-                return hres;
-
-            hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocol, (void**)&protocol);
-            IUnknown_Release(unk);
-            if(FAILED(hres))
-                return hres;
-        }
-    }
-
-    StringFromCLSID(&clsid, &clsid_str);
-    IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_PROTOCOLCLASSID, clsid_str);
-    CoTaskMemFree(clsid_str);
-
-    This->protocol = protocol;
-
-    if(urlmon_protocol)
-        IInternetProtocol_QueryInterface(protocol, &IID_IWinInetInfo, (void**)&This->wininet_info);
-
-    set_binding_sink((IInternetProtocol*)PROTOCOLEX(This), pOIProtSink, pOIBindInfo);
-
-    hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetPriority, (void**)&priority);
-    if(SUCCEEDED(hres)) {
-        IInternetPriority_SetPriority(priority, This->priority);
-        IInternetPriority_Release(priority);
-    }
-
-    hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetProtocolEx, (void**)&protocolex);
-    if(SUCCEEDED(hres)) {
-        hres = IInternetProtocolEx_StartEx(protocolex, pUri, PROTSINK(This), BINDINFO(This), 0, NULL);
-        IInternetProtocolEx_Release(protocolex);
-    }else {
-        BSTR display_uri;
-
-        hres = IUri_GetDisplayUri(pUri, &display_uri);
-        if(FAILED(hres))
-            return hres;
-
-        hres = IInternetProtocol_Start(protocol, display_uri, PROTSINK(This), BINDINFO(This), 0, 0);
-        SysFreeString(display_uri);
-    }
-
-    return hres;
+    ERR("Should not be called\n");
+    return E_NOTIMPL;
 }
 
 #undef PROTOCOL_THIS




More information about the wine-cvs mailing list