Module: wine Branch: refs/heads/master Commit: 6744b9b4682b2f499f52242ce3cec627736e175d URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=6744b9b4682b2f499f52242c...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Jan 5 13:42:32 2006 +0100
urlmon: Query service provider for IInternetProtocol.
---
dlls/urlmon/binding.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c index c590717..46ced83 100644 --- a/dlls/urlmon/binding.c +++ b/dlls/urlmon/binding.c @@ -44,6 +44,7 @@ typedef struct {
IBindStatusCallback *callback; IInternetProtocol *protocol; + IServiceProvider *service_provider; IStream *stream;
BINDINFO bindinfo; @@ -112,6 +113,8 @@ static ULONG WINAPI Binding_Release(IBin IBindStatusCallback_Release(This->callback); if(This->protocol) IInternetProtocol_Release(This->protocol); + if(This->service_provider) + IServiceProvider_Release(This->service_provider); if(This->stream) IStream_Release(This->stream);
@@ -459,6 +462,13 @@ static HRESULT get_protocol(Binding *Thi if(SUCCEEDED(hres)) return S_OK;
+ if(This->service_provider) { + hres = IServiceProvider_QueryService(This->service_provider, &IID_IInternetProtocol, + &IID_IInternetProtocol, (void**)&This->protocol); + if(SUCCEEDED(hres)) + return S_OK; + } + hres = get_protocol_iface(url, &unk); if(FAILED(hres)) return hres; @@ -498,6 +508,7 @@ static HRESULT Binding_Create(LPCWSTR ur
ret->callback = NULL; ret->protocol = NULL; + ret->service_provider = NULL; ret->stream = NULL; ret->mime = NULL; ret->url = NULL; @@ -513,6 +524,9 @@ static HRESULT Binding_Create(LPCWSTR ur return hres; }
+ IBindStatusCallback_QueryInterface(ret->callback, &IID_IServiceProvider, + (void**)&ret->service_provider); + hres = get_protocol(ret, url); if(FAILED(hres)) { WARN("Could not get protocol handler\n");