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