Module: wine Branch: master Commit: 097811f2513e457ebf4afb1d2d21ab90b8684325 URL: https://source.winehq.org/git/wine.git/?a=commit;h=097811f2513e457ebf4afb1d2...
Author: Jacek Caban jacek@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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 {