Jacek Caban : mshtml: Moved binding variables to HTMLDocumentObj.

Alexandre Julliard julliard at winehq.org
Thu Sep 17 13:52:32 CDT 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Sep 16 22:12:06 2009 +0200

mshtml: Moved binding variables to HTMLDocumentObj.

---

 dlls/mshtml/htmldoc.c        |   12 +++++-------
 dlls/mshtml/htmllocation.c   |    4 ++--
 dlls/mshtml/mshtml_private.h |   11 ++++++-----
 dlls/mshtml/navigate.c       |   18 +++++++++---------
 dlls/mshtml/olecmd.c         |    8 ++++----
 dlls/mshtml/persist.c        |   33 ++++++++++++++-------------------
 6 files changed, 40 insertions(+), 46 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 5261c97..2b0fe95 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -588,8 +588,8 @@ static HRESULT WINAPI HTMLDocument_get_URL(IHTMLDocument2 *iface, BSTR *p)
 
     TRACE("(%p)->(%p)\n", iface, p);
 
-    *p = SysAllocString(This->url ? This->url : about_blank_url);
-    return S_OK;
+    *p = SysAllocString(This->doc_obj->url ? This->doc_obj->url : about_blank_url);
+    return *p ? S_OK : E_OUTOFMEMORY;
 }
 
 static HRESULT WINAPI HTMLDocument_put_domain(IHTMLDocument2 *iface, BSTR v)
@@ -1739,8 +1739,6 @@ static void init_doc(HTMLDocument *doc, const htmldoc_vtbl_t *vtbl)
     doc->lpSupportErrorInfoVtbl = &SupportErrorInfoVtbl;
     doc->readystate = READYSTATE_UNINITIALIZED;
 
-    list_init(&doc->bindings);
-
     HTMLDocument_HTMLDocument3_Init(doc);
     HTMLDocument_HTMLDocument5_Init(doc);
     HTMLDocument_Persist_Init(doc);
@@ -1763,9 +1761,6 @@ static void destroy_htmldoc(HTMLDocument *This)
 {
     remove_doc_tasks(This);
 
-    set_document_bscallback(This, NULL);
-    set_current_mon(This, NULL);
-
     if(This->event_target)
         release_event_target(This->event_target);
 
@@ -1876,6 +1871,8 @@ static ULONG HTMLDocumentObj_Release(HTMLDocument *base)
     TRACE("(%p) ref = %u\n", This, ref);
 
     if(!ref) {
+        set_document_bscallback(&This->basedoc, NULL);
+        set_current_mon(&This->basedoc, NULL);
         if(This->basedoc.doc_node) {
             This->basedoc.doc_node->basedoc.doc_obj = NULL;
             IHTMLDocument2_Release(HTMLDOC(&This->basedoc.doc_node->basedoc));
@@ -1942,6 +1939,7 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject)
         return hres;
 
     doc->nscontainer = NSContainer_Create(doc, NULL);
+    list_init(&doc->bindings);
 
     if(doc->nscontainer) {
         nsresult nsres;
diff --git a/dlls/mshtml/htmllocation.c b/dlls/mshtml/htmllocation.c
index 7006a76..470d679 100644
--- a/dlls/mshtml/htmllocation.c
+++ b/dlls/mshtml/htmllocation.c
@@ -37,12 +37,12 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 
 static HRESULT get_url(HTMLLocation *This, const WCHAR **ret)
 {
-    if(!This->window || !This->window->doc_obj || !This->window->doc_obj->basedoc.url) {
+    if(!This->window || !This->window->doc_obj || !This->window->doc_obj->url) {
         FIXME("No current URL\n");
         return E_NOTIMPL;
     }
 
-    *ret = This->window->doc_obj->basedoc.url;
+    *ret = This->window->doc_obj->url;
     return S_OK;
 }
 
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 1c744ed..e07f580 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -284,11 +284,6 @@ struct HTMLDocument {
     HTMLWindow *window;
     nsIDOMHTMLDocument *nsdoc;
 
-    nsChannelBSC *bscallback;
-    IMoniker *mon;
-    LPOLESTR url;
-    struct list bindings;
-
     USERMODE usermode;
     READYSTATE readystate;
     LPWSTR mime;
@@ -354,6 +349,12 @@ struct HTMLDocumentObj {
     BOOL has_key_path;
     BOOL container_locked;
     BOOL focus;
+
+    /* FIXME: probably should be in document node object */
+    nsChannelBSC *bscallback;
+    IMoniker *mon;
+    LPOLESTR url;
+    struct list bindings;
 };
 
 typedef struct {
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index 3b0571c..267168f 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -313,7 +313,7 @@ static HRESULT WINAPI BindStatusCallback_OnStartBinding(IBindStatusCallback *ifa
     This->binding = pbind;
 
     if(This->doc)
-        list_add_head(&This->doc->bindings, &This->entry);
+        list_add_head(&This->doc->doc_obj->bindings, &This->entry);
 
     return This->vtbl->start_binding(This);
 }
@@ -949,7 +949,7 @@ static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream)
             on_start_nsrequest(This);
 
             /* events are reset when a new document URI is loaded, so re-initialise them here */
-            if(This->bsc.doc && This->bsc.doc->bscallback == This && This->bsc.doc->doc_obj->nscontainer) {
+            if(This->bsc.doc && This->bsc.doc->doc_obj->bscallback == This && This->bsc.doc->doc_obj->nscontainer) {
                 update_nsdocument(This->bsc.doc->doc_obj);
                 init_nsevents(This->bsc.doc->doc_obj->nscontainer);
             }
@@ -1109,19 +1109,19 @@ void set_document_bscallback(HTMLDocument *doc, nsChannelBSC *callback)
 {
     BSCallback *iter;
 
-    if(doc->bscallback) {
-        if(doc->bscallback->bsc.binding)
-            IBinding_Abort(doc->bscallback->bsc.binding);
-        doc->bscallback->bsc.doc = NULL;
-        IBindStatusCallback_Release(STATUSCLB(&doc->bscallback->bsc));
+    if(doc->doc_obj->bscallback) {
+        if(doc->doc_obj->bscallback->bsc.binding)
+            IBinding_Abort(doc->doc_obj->bscallback->bsc.binding);
+        doc->doc_obj->bscallback->bsc.doc = NULL;
+        IBindStatusCallback_Release(STATUSCLB(&doc->doc_obj->bscallback->bsc));
     }
 
-    LIST_FOR_EACH_ENTRY(iter, &doc->bindings, BSCallback, entry) {
+    LIST_FOR_EACH_ENTRY(iter, &doc->doc_obj->bindings, BSCallback, entry) {
         iter->doc = NULL;
         list_remove(&iter->entry);
     }
 
-    doc->bscallback = callback;
+    doc->doc_obj->bscallback = callback;
 
     if(callback) {
         IBindStatusCallback_AddRef(STATUSCLB(&callback->bsc));
diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c
index d8da015..bf5b7c1 100644
--- a/dlls/mshtml/olecmd.c
+++ b/dlls/mshtml/olecmd.c
@@ -543,9 +543,9 @@ static HRESULT exec_editmode(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in,
 
     This->usermode = EDITMODE;
 
-    if(This->mon) {
+    if(This->doc_obj->mon) {
         CLSID clsid = IID_NULL;
-        hres = IMoniker_GetClassID(This->mon, &clsid);
+        hres = IMoniker_GetClassID(This->doc_obj->mon, &clsid);
         if(SUCCEEDED(hres)) {
             /* We should use IMoniker::Save here */
             FIXME("Use CLSID %s\n", debugstr_guid(&clsid));
@@ -588,11 +588,11 @@ static HRESULT exec_editmode(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in,
 
     update_doc(This, UPDATE_UI);
 
-    if(This->mon) {
+    if(This->doc_obj->mon) {
         /* FIXME: We should find nicer way to do this */
         remove_doc_tasks(This);
 
-        mon = This->mon;
+        mon = This->doc_obj->mon;
         IMoniker_AddRef(mon);
     }else {
         static const WCHAR about_blankW[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 872ed1e..7ff3821 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -52,27 +52,27 @@ void set_current_mon(HTMLDocument *This, IMoniker *mon)
 {
     HRESULT hres;
 
-    if(This->mon) {
-        IMoniker_Release(This->mon);
-        This->mon = NULL;
+    if(This->doc_obj->mon) {
+        IMoniker_Release(This->doc_obj->mon);
+        This->doc_obj->mon = NULL;
     }
 
-    if(This->url) {
-        CoTaskMemFree(This->url);
-        This->url = NULL;
+    if(This->doc_obj->url) {
+        CoTaskMemFree(This->doc_obj->url);
+        This->doc_obj->url = NULL;
     }
 
     if(!mon)
         return;
 
     IMoniker_AddRef(mon);
-    This->mon = mon;
+    This->doc_obj->mon = mon;
 
-    hres = IMoniker_GetDisplayName(mon, NULL, NULL, &This->url);
+    hres = IMoniker_GetDisplayName(mon, NULL, NULL, &This->doc_obj->url);
     if(FAILED(hres))
         WARN("GetDisplayName failed: %08x\n", hres);
 
-    set_script_mode(This->window, use_gecko_script(This->url) ? SCRIPTMODE_GECKO : SCRIPTMODE_ACTIVESCRIPT);
+    set_script_mode(This->window, use_gecko_script(This->doc_obj->url) ? SCRIPTMODE_GECKO : SCRIPTMODE_ACTIVESCRIPT);
 }
 
 static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BOOL *bind_complete)
@@ -292,7 +292,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
         return hres;
 
     if(!bind_complete)
-        return start_binding(This, (BSCallback*)This->bscallback, pibc);
+        return start_binding(This, (BSCallback*)This->doc_obj->bscallback, pibc);
 
     return S_OK;
 }
@@ -318,11 +318,11 @@ static HRESULT WINAPI PersistMoniker_GetCurMoniker(IPersistMoniker *iface, IMoni
 
     TRACE("(%p)->(%p)\n", This, ppimkName);
 
-    if(!This->mon)
+    if(!This->doc_obj->mon)
         return E_UNEXPECTED;
 
-    IMoniker_AddRef(This->mon);
-    *ppimkName = This->mon;
+    IMoniker_AddRef(This->doc_obj->mon);
+    *ppimkName = This->doc_obj->mon;
     return S_OK;
 }
 
@@ -556,7 +556,7 @@ static HRESULT WINAPI PersistStreamInit_Load(IPersistStreamInit *iface, LPSTREAM
     if(FAILED(hres))
         return hres;
 
-    return channelbsc_load_stream(This->bscallback, pStm);
+    return channelbsc_load_stream(This->doc_obj->bscallback, pStm);
 }
 
 static HRESULT WINAPI PersistStreamInit_Save(IPersistStreamInit *iface, LPSTREAM pStm,
@@ -692,9 +692,4 @@ void HTMLDocument_Persist_Init(HTMLDocument *This)
     This->lpMonikerPropVtbl = &MonikerPropVtbl;
     This->lpPersistStreamInitVtbl = &PersistStreamInitVtbl;
     This->lpPersistHistoryVtbl = &PersistHistoryVtbl;
-
-    This->bscallback = NULL;
-    This->mon = NULL;
-    This->url = NULL;
-    This->mime = NULL;
 }




More information about the wine-cvs mailing list