Jacek Caban : urlmon: Added support for PI_APARTMENTTHREADED to BindProtocol::ReportProgress.

Alexandre Julliard julliard at winehq.org
Tue May 12 09:08:46 CDT 2009


Module: wine
Branch: master
Commit: 2dee8bb79d326d17ef5791112a4680e95f07eaa9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2dee8bb79d326d17ef5791112a4680e95f07eaa9

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon May 11 21:59:54 2009 +0200

urlmon: Added support for PI_APARTMENTTHREADED to BindProtocol::ReportProgress.

---

 dlls/urlmon/bindprot.c |   46 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c
index eaee9b6..de00e94 100644
--- a/dlls/urlmon/bindprot.c
+++ b/dlls/urlmon/bindprot.c
@@ -596,6 +596,39 @@ static HRESULT WINAPI BPInternetProtocolSink_Switch(IInternetProtocolSink *iface
     return IInternetProtocolSink_Switch(This->protocol_sink, pProtocolData);
 }
 
+typedef struct {
+    task_header_t header;
+
+    ULONG status_code;
+    LPWSTR status_text;
+} on_progress_task_t;
+
+static void on_progress_proc(BindProtocol *This, task_header_t *t)
+{
+    on_progress_task_t *task = (on_progress_task_t*)t;
+
+    IInternetProtocolSink_ReportProgress(This->protocol_sink, task->status_code, task->status_text);
+
+    heap_free(task->status_text);
+    heap_free(task);
+}
+
+static void report_progress(BindProtocol *This, ULONG status_code, LPCWSTR status_text)
+{
+    if(do_direct_notif(This)) {
+        IInternetProtocolSink_ReportProgress(This->protocol_sink, status_code, status_text);
+    }else {
+        on_progress_task_t *task;
+
+        task = heap_alloc(sizeof(on_progress_task_t));
+
+        task->status_code = status_code;
+        task->status_text = heap_strdupW(status_text);
+
+        push_task(This, &task->header, on_progress_proc);
+    }
+}
+
 static HRESULT WINAPI BPInternetProtocolSink_ReportProgress(IInternetProtocolSink *iface,
         ULONG ulStatusCode, LPCWSTR szStatusText)
 {
@@ -614,20 +647,23 @@ static HRESULT WINAPI BPInternetProtocolSink_ReportProgress(IInternetProtocolSin
     case BINDSTATUS_MIMETYPEAVAILABLE:
         if(!This->protocol_sink)
             return S_OK;
-        return IInternetProtocolSink_ReportProgress(This->protocol_sink,
-                ulStatusCode, szStatusText);
+        report_progress(This, ulStatusCode, szStatusText);
+        break;
 
     case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE:
         if(!This->protocol_sink)
             return S_OK;
-        return IInternetProtocolSink_ReportProgress(This->protocol_sink,
+        report_progress(This,
                 This->from_urlmon ? BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE : BINDSTATUS_MIMETYPEAVAILABLE,
-                                                    szStatusText);
+                szStatusText);
+        break;
+
     default:
         FIXME("unsupported ulStatusCode %u\n", ulStatusCode);
+        return E_NOTIMPL;
     }
 
-    return E_NOTIMPL;
+    return S_OK;
 }
 
 static HRESULT WINAPI BPInternetProtocolSink_ReportData(IInternetProtocolSink *iface,




More information about the wine-cvs mailing list