Jacek Caban : mshtml: Split IPersistMoniker::Load.

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 11 07:28:03 CDT 2007


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri May 11 13:16:15 2007 +0200

mshtml: Split IPersistMoniker::Load.

---

 dlls/mshtml/persist.c |  192 ++++++++++++++++++++++++++-----------------------
 1 files changed, 101 insertions(+), 91 deletions(-)

diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 6b9ef8d..a2b6f73 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -39,86 +39,6 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 
-static HRESULT get_doc_string(HTMLDocument *This, char **str, DWORD *len)
-{
-    nsIDOMDocument *nsdoc;
-    nsIDOMNode *nsnode;
-    LPCWSTR strw;
-    nsAString nsstr;
-    nsresult nsres;
-
-    if(!This->nscontainer) {
-        WARN("no nscontainer, returning NULL\n");
-        return S_OK;
-    }
-
-    nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
-    if(NS_FAILED(nsres)) {
-        ERR("GetDocument failed: %08x\n", nsres);
-        return E_FAIL;
-    }
-
-    nsres = nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMNode, (void**)&nsnode);
-    nsIDOMDocument_Release(nsdoc);
-    if(NS_FAILED(nsres)) {
-        ERR("Could not get nsIDOMNode failed: %08x\n", nsres);
-        return E_FAIL;
-    }
-
-    nsAString_Init(&nsstr, NULL);
-    nsnode_to_nsstring(nsnode, &nsstr);
-    nsIDOMNode_Release(nsnode);
-
-    nsAString_GetData(&nsstr, &strw, NULL);
-    TRACE("%s\n", debugstr_w(strw));
-
-    *len = WideCharToMultiByte(CP_ACP, 0, strw, -1, NULL, 0, NULL, NULL);
-    *str = mshtml_alloc(*len);
-    WideCharToMultiByte(CP_ACP, 0, strw, -1, *str, *len, NULL, NULL);
-
-    nsAString_Finish(&nsstr);
-
-    return S_OK;
-}
-
-/**********************************************************
- * IPersistMoniker implementation
- */
-
-#define PERSISTMON_THIS(iface) DEFINE_THIS(HTMLDocument, PersistMoniker, iface)
-
-static HRESULT WINAPI PersistMoniker_QueryInterface(IPersistMoniker *iface, REFIID riid,
-                                                            void **ppvObject)
-{
-    HTMLDocument *This = PERSISTMON_THIS(iface);
-    return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppvObject);
-}
-
-static ULONG WINAPI PersistMoniker_AddRef(IPersistMoniker *iface)
-{
-    HTMLDocument *This = PERSISTMON_THIS(iface);
-    return IHTMLDocument2_AddRef(HTMLDOC(This));
-}
-
-static ULONG WINAPI PersistMoniker_Release(IPersistMoniker *iface)
-{
-    HTMLDocument *This = PERSISTMON_THIS(iface);
-    return IHTMLDocument2_Release(HTMLDOC(This));
-}
-
-static HRESULT WINAPI PersistMoniker_GetClassID(IPersistMoniker *iface, CLSID *pClassID)
-{
-    HTMLDocument *This = PERSISTMON_THIS(iface);
-    return IPersist_GetClassID(PERSIST(This), pClassID);
-}
-
-static HRESULT WINAPI PersistMoniker_IsDirty(IPersistMoniker *iface)
-{
-    HTMLDocument *This = PERSISTMON_THIS(iface);
-    FIXME("(%p)\n", This);
-    return E_NOTIMPL;
-}
-
 static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
 {
     nsIInputStream *ret = NULL;
@@ -193,18 +113,14 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
     return ret;
 }
 
-static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAvailable,
-        IMoniker *pimkName, LPBC pibc, DWORD grfMode)
+static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc)
 {
-    HTMLDocument *This = PERSISTMON_THIS(iface);
     BSCallback *bscallback;
     LPOLESTR url = NULL;
     task_t *task;
     HRESULT hres;
     nsresult nsres;
 
-    TRACE("(%p)->(%x %p %p %08x)\n", This, fFullyAvailable, pimkName, pibc, grfMode);
-
     if(pibc) {
         IUnknown *unk = NULL;
 
@@ -240,7 +156,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
 
     HTMLDocument_LockContainer(This, TRUE);
     
-    hres = IMoniker_GetDisplayName(pimkName, pibc, NULL, &url);
+    hres = IMoniker_GetDisplayName(mon, pibc, NULL, &url);
     if(FAILED(hres)) {
         WARN("GetDiaplayName failed: %08x\n", hres);
         return hres;
@@ -285,7 +201,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
         }
     }
 
-    bscallback = create_bscallback(pimkName);
+    bscallback = create_bscallback(mon);
 
     if(This->frame) {
         task = mshtml_alloc(sizeof(task_t));
@@ -328,12 +244,106 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
     }
 
     set_document_bscallback(This, bscallback);
-    hres = start_binding(bscallback);
-
     IBindStatusCallback_Release(STATUSCLB(bscallback));
     CoTaskMemFree(url);
 
-    return hres;
+    return S_OK;
+}
+
+static HRESULT get_doc_string(HTMLDocument *This, char **str, DWORD *len)
+{
+    nsIDOMDocument *nsdoc;
+    nsIDOMNode *nsnode;
+    LPCWSTR strw;
+    nsAString nsstr;
+    nsresult nsres;
+
+    if(!This->nscontainer) {
+        WARN("no nscontainer, returning NULL\n");
+        return S_OK;
+    }
+
+    nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
+    if(NS_FAILED(nsres)) {
+        ERR("GetDocument failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    nsres = nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMNode, (void**)&nsnode);
+    nsIDOMDocument_Release(nsdoc);
+    if(NS_FAILED(nsres)) {
+        ERR("Could not get nsIDOMNode failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    nsAString_Init(&nsstr, NULL);
+    nsnode_to_nsstring(nsnode, &nsstr);
+    nsIDOMNode_Release(nsnode);
+
+    nsAString_GetData(&nsstr, &strw, NULL);
+    TRACE("%s\n", debugstr_w(strw));
+
+    *len = WideCharToMultiByte(CP_ACP, 0, strw, -1, NULL, 0, NULL, NULL);
+    *str = mshtml_alloc(*len);
+    WideCharToMultiByte(CP_ACP, 0, strw, -1, *str, *len, NULL, NULL);
+
+    nsAString_Finish(&nsstr);
+
+    return S_OK;
+}
+
+
+/**********************************************************
+ * IPersistMoniker implementation
+ */
+
+#define PERSISTMON_THIS(iface) DEFINE_THIS(HTMLDocument, PersistMoniker, iface)
+
+static HRESULT WINAPI PersistMoniker_QueryInterface(IPersistMoniker *iface, REFIID riid,
+                                                            void **ppvObject)
+{
+    HTMLDocument *This = PERSISTMON_THIS(iface);
+    return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppvObject);
+}
+
+static ULONG WINAPI PersistMoniker_AddRef(IPersistMoniker *iface)
+{
+    HTMLDocument *This = PERSISTMON_THIS(iface);
+    return IHTMLDocument2_AddRef(HTMLDOC(This));
+}
+
+static ULONG WINAPI PersistMoniker_Release(IPersistMoniker *iface)
+{
+    HTMLDocument *This = PERSISTMON_THIS(iface);
+    return IHTMLDocument2_Release(HTMLDOC(This));
+}
+
+static HRESULT WINAPI PersistMoniker_GetClassID(IPersistMoniker *iface, CLSID *pClassID)
+{
+    HTMLDocument *This = PERSISTMON_THIS(iface);
+    return IPersist_GetClassID(PERSIST(This), pClassID);
+}
+
+static HRESULT WINAPI PersistMoniker_IsDirty(IPersistMoniker *iface)
+{
+    HTMLDocument *This = PERSISTMON_THIS(iface);
+    FIXME("(%p)\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAvailable,
+        IMoniker *pimkName, LPBC pibc, DWORD grfMode)
+{
+    HTMLDocument *This = PERSISTMON_THIS(iface);
+    HRESULT hres;
+
+    TRACE("(%p)->(%x %p %p %08x)\n", This, fFullyAvailable, pimkName, pibc, grfMode);
+
+    hres = set_moniker(This, pimkName, pibc);
+    if(FAILED(hres))
+        return hres;
+
+    return start_binding(This->bscallback);
 }
 
 static HRESULT WINAPI PersistMoniker_Save(IPersistMoniker *iface, IMoniker *pimkName,
@@ -529,7 +539,7 @@ static ULONG WINAPI PersistStreamInit_AddRef(IPersistStreamInit *iface)
 static ULONG WINAPI PersistStreamInit_Release(IPersistStreamInit *iface)
 {
     HTMLDocument *This = PERSTRINIT_THIS(iface);
-    return IHTMLDocument2_AddRef(HTMLDOC(This));
+    return IHTMLDocument2_Release(HTMLDOC(This));
 }
 
 static HRESULT WINAPI PersistStreamInit_GetClassID(IPersistStreamInit *iface, CLSID *pClassID)




More information about the wine-cvs mailing list