Module: wine Branch: master Commit: 0bccfa873db617254ad77b064ce66520f6f27170 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0bccfa873db617254ad77b064c...
Author: Jacek Caban jacek@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));