Jacek Caban : urlmon: Query service provider for IInternetProtocol.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jan 5 10:53:56 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 6744b9b4682b2f499f52242ce3cec627736e175d
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=6744b9b4682b2f499f52242ce3cec627736e175d

Author: Jacek Caban <jacek at 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");




More information about the wine-cvs mailing list