Jacek Caban : mshtml: Moved asynchronous document binding to separated function.

Alexandre Julliard julliard at winehq.org
Wed Mar 3 11:15:47 CST 2010


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Mar  3 14:53:32 2010 +0100

mshtml: Moved asynchronous document binding to separated function.

---

 dlls/mshtml/mshtml_private.h |    1 +
 dlls/mshtml/navigate.c       |   30 ++++++++++++++++++++++++++++++
 dlls/mshtml/nsio.c           |   21 ++-------------------
 3 files changed, 33 insertions(+), 19 deletions(-)

diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index f2ef1af..8f91d38 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -740,6 +740,7 @@ void add_nsevent_listener(HTMLDocumentNode*,LPCWSTR);
 void set_window_bscallback(HTMLWindow*,nsChannelBSC*);
 void set_current_mon(HTMLWindow*,IMoniker*);
 HRESULT start_binding(HTMLWindow*,HTMLDocumentNode*,BSCallback*,IBindCtx*);
+HRESULT async_start_doc_binding(HTMLWindow*,nsChannelBSC*);
 void abort_document_bindings(HTMLDocumentNode*);
 
 HRESULT bind_mon_to_buffer(HTMLDocumentNode*,IMoniker*,void**,DWORD*);
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index f660c98..b3ca1b0 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -1148,6 +1148,36 @@ void set_window_bscallback(HTMLWindow *window, nsChannelBSC *callback)
     }
 }
 
+typedef struct {
+    task_t header;
+    HTMLWindow *window;
+    nsChannelBSC *bscallback;
+} start_doc_binding_task_t;
+
+static void start_doc_binding_proc(task_t *_task)
+{
+    start_doc_binding_task_t *task = (start_doc_binding_task_t*)_task;
+
+    start_binding(task->window, NULL, (BSCallback*)task->bscallback, NULL);
+    IBindStatusCallback_Release(STATUSCLB(&task->bscallback->bsc));
+}
+
+HRESULT async_start_doc_binding(HTMLWindow *window, nsChannelBSC *bscallback)
+{
+    start_doc_binding_task_t *task;
+
+    task = heap_alloc(sizeof(start_doc_binding_task_t));
+    if(!task)
+        return E_OUTOFMEMORY;
+
+    task->window = window;
+    task->bscallback = bscallback;
+    IBindStatusCallback_AddRef(STATUSCLB(&bscallback->bsc));
+
+    push_task(&task->header, start_doc_binding_proc, window->task_magic);
+    return S_OK;
+}
+
 void abort_document_bindings(HTMLDocumentNode *doc)
 {
     BSCallback *iter;
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index fde132a..3a5c4fe 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -808,19 +808,7 @@ static void start_binding_proc(task_t *_task)
     start_binding_task_t *task = (start_binding_task_t*)_task;
 
     start_binding(NULL, task->doc, (BSCallback*)task->bscallback, NULL);
-}
-
-typedef struct {
-    task_t header;
-    HTMLWindow *window;
-    nsChannelBSC *bscallback;
-} start_doc_binding_task_t;
 
-static void start_doc_binding_proc(task_t *_task)
-{
-    start_doc_binding_task_t *task = (start_doc_binding_task_t*)_task;
-
-    start_binding(task->window, NULL, (BSCallback*)task->bscallback, NULL);
     IUnknown_Release((IUnknown*)task->bscallback);
 }
 
@@ -844,14 +832,9 @@ static nsresult async_open(nsChannel *This, HTMLWindow *window, BOOL is_doc_chan
     channelbsc_set_channel(bscallback, This, listener, context);
 
     if(is_doc_channel) {
-        start_doc_binding_task_t *task;
-
         set_window_bscallback(window, bscallback);
-
-        task = heap_alloc(sizeof(start_doc_binding_task_t));
-        task->window = window;
-        task->bscallback = bscallback;
-        push_task(&task->header, start_doc_binding_proc, window->task_magic);
+        async_start_doc_binding(window, bscallback);
+        IUnknown_Release((IUnknown*)bscallback);
     }else {
         start_binding_task_t *task = heap_alloc(sizeof(start_binding_task_t));
 




More information about the wine-cvs mailing list