Jacek Caban : urlmon: Use COM aggregation for urlmon protocols in BindProtocol::StartEx.

Alexandre Julliard julliard at winehq.org
Wed May 9 16:35:12 CDT 2018


Module: wine
Branch: master
Commit: 097811f2513e457ebf4afb1d2d21ab90b8684325
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=097811f2513e457ebf4afb1d2d21ab90b8684325

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed May  9 14:58:49 2018 +0200

urlmon: Use COM aggregation for urlmon protocols in BindProtocol::StartEx.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/urlmon/binding.c     |  2 +-
 dlls/urlmon/bindprot.c    | 30 ++++++++++--------------------
 dlls/urlmon/session.c     |  2 +-
 dlls/urlmon/tests/url.c   |  4 ++--
 dlls/urlmon/urlmon_main.h |  3 +--
 5 files changed, 15 insertions(+), 26 deletions(-)

diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c
index 051b23f..543c482 100644
--- a/dlls/urlmon/binding.c
+++ b/dlls/urlmon/binding.c
@@ -1510,7 +1510,7 @@ static HRESULT Binding_Create(IMoniker *mon, Binding *binding_ctx, IUri *uri, IB
         ret->protocol = binding_ctx->protocol;
         IInternetProtocolEx_AddRef(&ret->protocol->IInternetProtocolEx_iface);
     }else {
-        hres = create_binding_protocol(TRUE, &ret->protocol);
+        hres = create_binding_protocol(&ret->protocol);
         if(FAILED(hres)) {
             WARN("Could not get protocol handler\n");
             IBinding_Release(&ret->IBinding_iface);
diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c
index 38187e9..87ec23b 100644
--- a/dlls/urlmon/bindprot.c
+++ b/dlls/urlmon/bindprot.c
@@ -528,25 +528,16 @@ static HRESULT WINAPI BindProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUr
         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;
-            protocol_unk = (IUnknown*)protocol;
-            IUnknown_AddRef(protocol_unk);
-        }else {
-            hres = IClassFactory_CreateInstance(cf, (IUnknown*)&This->IInternetBindInfo_iface,
-                    &IID_IUnknown, (void**)&protocol_unk);
-            IClassFactory_Release(cf);
-            if(FAILED(hres))
-                return hres;
+        hres = IClassFactory_CreateInstance(cf, (IUnknown*)&This->IInternetBindInfo_iface,
+                &IID_IUnknown, (void**)&protocol_unk);
+        IClassFactory_Release(cf);
+        if(FAILED(hres))
+            return hres;
 
-            hres = IUnknown_QueryInterface(protocol_unk, &IID_IInternetProtocol, (void**)&protocol);
-            if(FAILED(hres)) {
-                IUnknown_Release(protocol_unk);
-                return hres;
-            }
+        hres = IUnknown_QueryInterface(protocol_unk, &IID_IInternetProtocol, (void**)&protocol);
+        if(FAILED(hres)) {
+            IUnknown_Release(protocol_unk);
+            return hres;
         }
     }
 
@@ -1508,7 +1499,7 @@ static const IServiceProviderVtbl ServiceProviderVtbl = {
     BPServiceProvider_QueryService
 };
 
-HRESULT create_binding_protocol(BOOL from_urlmon, BindProtocol **protocol)
+HRESULT create_binding_protocol(BindProtocol **protocol)
 {
     BindProtocol *ret = heap_alloc_zero(sizeof(BindProtocol));
 
@@ -1523,7 +1514,6 @@ HRESULT create_binding_protocol(BOOL from_urlmon, BindProtocol **protocol)
     ret->default_protocol_handler.IInternetProtocolSink_iface.lpVtbl = &InternetProtocolSinkHandlerVtbl;
 
     ret->ref = 1;
-    ret->from_urlmon = from_urlmon;
     ret->apartment_thread = GetCurrentThreadId();
     ret->notif_hwnd = get_notif_hwnd();
     ret->protocol_handler = &ret->default_protocol_handler.IInternetProtocol_iface;
diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index e053f8b..dea1c9f 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -439,7 +439,7 @@ static HRESULT WINAPI InternetSession_CreateBinding(IInternetSession *iface,
     if(pBC || pUnkOuter || ppUnk || dwOption)
         FIXME("Unsupported arguments\n");
 
-    hres = create_binding_protocol(FALSE, &protocol);
+    hres = create_binding_protocol(&protocol);
     if(FAILED(hres))
         return hres;
 
diff --git a/dlls/urlmon/tests/url.c b/dlls/urlmon/tests/url.c
index aa2f3e1..8da0fd8 100644
--- a/dlls/urlmon/tests/url.c
+++ b/dlls/urlmon/tests/url.c
@@ -2402,8 +2402,8 @@ static HRESULT WINAPI ProtocolCF_CreateInstance(IClassFactory *iface, IUnknown *
     if(IsEqualGUID(&IID_IInternetProtocolInfo, riid))
         return E_NOINTERFACE;
 
-    todo_wine ok(outer != NULL, "outer == NULL\n");
-    todo_wine ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
+    ok(outer != NULL, "outer == NULL\n");
+    ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
     *ppv = &Protocol;
     return S_OK;
 }
diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h
index 1d6faaa..57c74b3 100644
--- a/dlls/urlmon/urlmon_main.h
+++ b/dlls/urlmon/urlmon_main.h
@@ -195,7 +195,6 @@ typedef struct {
 
     BOOL reported_result;
     BOOL reported_mime;
-    BOOL from_urlmon;
     DWORD pi;
 
     DWORD bscf;
@@ -216,7 +215,7 @@ typedef struct {
     BSTR display_uri;
 }  BindProtocol;
 
-HRESULT create_binding_protocol(BOOL,BindProtocol**) DECLSPEC_HIDDEN;
+HRESULT create_binding_protocol(BindProtocol**) DECLSPEC_HIDDEN;
 void set_binding_sink(BindProtocol*,IInternetProtocolSink*,IInternetBindInfo*) DECLSPEC_HIDDEN;
 
 typedef struct {




More information about the wine-cvs mailing list