Commit 0bccfa87 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

mshtml: Moved asynchronous document binding to separated function.

parent 6938378b
......@@ -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*);
......
......@@ -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;
......
......@@ -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));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment