Commit 21621b28 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

urlmon: Return IClassFactory in get_protocol_handler and fix get_protocol.

parent 4ca7a064
...@@ -929,7 +929,6 @@ static HRESULT get_callback(IBindCtx *pbc, IBindStatusCallback **callback) ...@@ -929,7 +929,6 @@ static HRESULT get_callback(IBindCtx *pbc, IBindStatusCallback **callback)
static HRESULT get_protocol(Binding *This, LPCWSTR url) static HRESULT get_protocol(Binding *This, LPCWSTR url)
{ {
IUnknown *unk = NULL;
IClassFactory *cf = NULL; IClassFactory *cf = NULL;
HRESULT hres; HRESULT hres;
...@@ -945,12 +944,7 @@ static HRESULT get_protocol(Binding *This, LPCWSTR url) ...@@ -945,12 +944,7 @@ static HRESULT get_protocol(Binding *This, LPCWSTR url)
return S_OK; return S_OK;
} }
hres = get_protocol_handler(url, &unk); hres = get_protocol_handler(url, &cf);
if(FAILED(hres))
return hres;
hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)&cf);
IUnknown_Release(unk);
if(FAILED(hres)) if(FAILED(hres))
return hres; return hres;
......
...@@ -130,9 +130,10 @@ IInternetProtocolInfo *get_protocol_info(LPCWSTR url) ...@@ -130,9 +130,10 @@ IInternetProtocolInfo *get_protocol_info(LPCWSTR url)
return ret; return ret;
} }
HRESULT get_protocol_handler(LPCWSTR url, IUnknown **ret) HRESULT get_protocol_handler(LPCWSTR url, IClassFactory **ret)
{ {
IClassFactory *cf; IClassFactory *cf;
IUnknown *unk;
WCHAR schema[64]; WCHAR schema[64];
DWORD schema_len; DWORD schema_len;
HRESULT hres; HRESULT hres;
...@@ -144,12 +145,17 @@ HRESULT get_protocol_handler(LPCWSTR url, IUnknown **ret) ...@@ -144,12 +145,17 @@ HRESULT get_protocol_handler(LPCWSTR url, IUnknown **ret)
cf = find_name_space(schema); cf = find_name_space(schema);
if(cf) { if(cf) {
hres = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)ret); *ret = cf;
if(SUCCEEDED(hres)) return S_OK;
return hres;
} }
return get_protocol_iface(schema, schema_len, ret); hres = get_protocol_iface(schema, schema_len, &unk);
if(FAILED(hres))
return hres;
hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)ret);
IUnknown_Release(unk);
return hres;
} }
static HRESULT WINAPI InternetSession_QueryInterface(IInternetSession *iface, static HRESULT WINAPI InternetSession_QueryInterface(IInternetSession *iface,
......
...@@ -55,7 +55,7 @@ HRESULT UMCreateStreamOnCacheFile(LPCWSTR pszURL, DWORD dwSize, LPWSTR pszFileNa ...@@ -55,7 +55,7 @@ HRESULT UMCreateStreamOnCacheFile(LPCWSTR pszURL, DWORD dwSize, LPWSTR pszFileNa
void UMCloseCacheFileStream(IUMCacheStream *pstr); void UMCloseCacheFileStream(IUMCacheStream *pstr);
IInternetProtocolInfo *get_protocol_info(LPCWSTR url); IInternetProtocolInfo *get_protocol_info(LPCWSTR url);
HRESULT get_protocol_handler(LPCWSTR url, IUnknown **ret); HRESULT get_protocol_handler(LPCWSTR url, IClassFactory **ret);
HRESULT start_binding(LPCWSTR url, IBindCtx *pbc, REFIID riid, void **ppv); HRESULT start_binding(LPCWSTR url, IBindCtx *pbc, REFIID riid, void **ppv);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment