Jacek Caban : mshtml: Use task destructor for navigate_javascript task.

Alexandre Julliard julliard at winehq.org
Wed Aug 3 12:48:12 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Aug  3 12:35:27 2011 +0200

mshtml: Use task destructor for navigate_javascript task.

---

 dlls/mshtml/htmlwindow.c |   41 ++++++++++++++++++++---------------------
 1 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index 6e04612..7581337 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -1679,17 +1679,33 @@ static ULONG WINAPI HTMLPrivateWindow_Release(IHTMLPrivateWindow *iface)
     return IHTMLWindow2_Release(&This->IHTMLWindow2_iface);
 }
 
-static void handle_javascript(HTMLWindow *window, const WCHAR *code)
+typedef struct {
+    task_t header;
+    HTMLWindow *window;
+    IUri *uri;
+} navigate_javascript_task_t;
+
+static void navigate_javascript_proc(task_t *_task)
 {
+    navigate_javascript_task_t *task = (navigate_javascript_task_t*)_task;
+    HTMLWindow *window = task->window;
     VARIANT v;
+    BSTR code;
     HRESULT hres;
 
     static const WCHAR jscriptW[] = {'j','s','c','r','i','p','t',0};
 
+    task->window->readystate = READYSTATE_COMPLETE;
+
+    hres = IUri_GetPath(task->uri, &code);
+    if(FAILED(hres))
+        return;
+
     set_download_state(window->doc_obj, 1);
 
     V_VT(&v) = VT_EMPTY;
     hres = exec_script(window, code, jscriptW, &v);
+    SysFreeString(code);
     if(SUCCEEDED(hres) && V_VT(&v) != VT_EMPTY) {
         FIXME("javascirpt URL returned %s\n", debugstr_variant(&v));
         VariantClear(&v);
@@ -1701,28 +1717,12 @@ static void handle_javascript(HTMLWindow *window, const WCHAR *code)
     set_download_state(window->doc_obj, 0);
 }
 
-typedef struct {
-    task_t header;
-    HTMLWindow *window;
-    IUri *uri;
-} navigate_javascript_task_t;
-
-static void navigate_javascript_proc(task_t *_task)
+static void navigate_javascript_task_destr(task_t *_task)
 {
     navigate_javascript_task_t *task = (navigate_javascript_task_t*)_task;
-    BSTR code;
-    HRESULT hres;
-
-    task->window->readystate = READYSTATE_COMPLETE;
 
-    hres = IUri_GetPath(task->uri, &code);
-    if(SUCCEEDED(hres)) {
-        handle_javascript(task->window, code);
-        SysFreeString(code);
-    }
-
-    IHTMLWindow2_Release(&task->window->IHTMLWindow2_iface);
     IUri_Release(task->uri);
+    heap_free(task);
 }
 
 typedef struct {
@@ -1868,10 +1868,9 @@ static HRESULT WINAPI HTMLPrivateWindow_SuperNavigate(IHTMLPrivateWindow *iface,
             return E_OUTOFMEMORY;
         }
 
-        IHTMLWindow2_AddRef(&This->IHTMLWindow2_iface);
         task->window = This;
         task->uri = uri;
-        push_task(&task->header, navigate_javascript_proc, NULL, This->task_magic);
+        push_task(&task->header, navigate_javascript_proc, navigate_javascript_task_destr, This->task_magic);
 
         /* Why silently? */
         This->readystate = READYSTATE_COMPLETE;




More information about the wine-cvs mailing list