Module: wine Branch: master Commit: bbaa307fdf9904aa90ff870079d508f0ebb1c564 URL: http://source.winehq.org/git/wine.git/?a=commit;h=bbaa307fdf9904aa90ff870079...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Jul 12 14:25:58 2012 +0200
mshtml: Use per-inner window task_magic for binding.
---
dlls/mshtml/htmlwindow.c | 3 +++ dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/navigate.c | 9 ++++----- 3 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 0ced93d..491a453 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -235,6 +235,7 @@ static void release_inner_window(HTMLInnerWindow *This)
TRACE("%p\n", This);
+ remove_target_tasks(This->task_magic); abort_window_bindings(This); release_script_hosts(This);
@@ -2622,6 +2623,8 @@ static HRESULT create_inner_window(HTMLOuterWindow *outer_window, HTMLInnerWindo
init_dispex(&window->dispex, (IUnknown*)&window->base.IHTMLWindow2_iface, &HTMLWindow_dispex);
+ window->task_magic = get_task_target_magic(); + *ret = window; return S_OK; } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index f0dde6c..430b744 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -361,6 +361,8 @@ struct HTMLInnerWindow { DWORD global_prop_cnt; DWORD global_prop_size;
+ LONG task_magic; + nsChannelBSC *bscallback; struct list bindings; }; diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index 1fe4f9d..bfc8671 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -1325,7 +1325,7 @@ static HRESULT async_stop_request(nsChannelBSC *This) IBindStatusCallback_AddRef(&This->bsc.IBindStatusCallback_iface); task->bsc = This;
- push_task(&task->header, stop_request_proc, stop_request_task_destr, This->window->doc_obj->basedoc.task_magic); + push_task(&task->header, stop_request_proc, stop_request_task_destr, This->bsc.window->task_magic); return S_OK; }
@@ -1679,7 +1679,7 @@ HRESULT async_start_doc_binding(HTMLOuterWindow *window, HTMLInnerWindow *pendin task->pending_window = pending_window; IHTMLWindow2_AddRef(&pending_window->base.IHTMLWindow2_iface);
- push_task(&task->header, start_doc_binding_proc, start_doc_binding_task_destr, window->task_magic); + push_task(&task->header, start_doc_binding_proc, start_doc_binding_task_destr, pending_window->task_magic); return S_OK; }
@@ -1687,6 +1687,8 @@ void abort_window_bindings(HTMLInnerWindow *window) { BSCallback *iter;
+ remove_target_tasks(window->task_magic); + while(!list_empty(&window->bindings)) { iter = LIST_ENTRY(window->bindings.next, BSCallback, entry);
@@ -1694,9 +1696,6 @@ void abort_window_bindings(HTMLInnerWindow *window)
IBindStatusCallback_AddRef(&iter->IBindStatusCallback_iface);
- if(iter->window && iter->window->doc) - remove_target_tasks(iter->window->doc->basedoc.task_magic); - if(iter->binding) IBinding_Abort(iter->binding); else