Jacek Caban : mshtml: Moved IHTMLElement:: put_outerHTML implementation to separated, HTMLElement object independent, function.

Alexandre Julliard julliard at winehq.org
Fri Jun 17 13:13:48 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jun 17 16:17:45 2011 +0200

mshtml: Moved IHTMLElement::put_outerHTML implementation to separated, HTMLElement object independent, function.

---

 dlls/mshtml/htmlelem.c |  119 +++++++++++++++++++++++++-----------------------
 1 files changed, 62 insertions(+), 57 deletions(-)

diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index a47f288..1d0e6c0 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -35,6 +35,8 @@
 #include "htmlevent.h"
 #include "htmlstyle.h"
 
+WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
+
 static const WCHAR aW[]        = {'A',0};
 static const WCHAR bodyW[]     = {'B','O','D','Y',0};
 static const WCHAR embedW[]    = {'E','M','B','E','D',0};
@@ -96,6 +98,65 @@ static const tag_desc_t *get_tag_desc(const WCHAR *tag_name)
     return NULL;
 }
 
+static HRESULT replace_node_by_html(nsIDOMHTMLDocument *nsdoc, nsIDOMNode *nsnode, const WCHAR *html)
+{
+    nsIDOMDocumentFragment *nsfragment;
+    nsIDOMDocumentRange *nsdocrange;
+    nsIDOMNSRange *nsrange;
+    nsIDOMNode *nsparent;
+    nsIDOMRange *range;
+    nsAString html_str;
+    nsresult nsres;
+    HRESULT hres = S_OK;
+
+    nsres = nsIDOMHTMLDocument_QueryInterface(nsdoc, &IID_nsIDOMDocumentRange, (void**)&nsdocrange);
+    if(NS_FAILED(nsres))
+        return E_FAIL;
+
+    nsres = nsIDOMDocumentRange_CreateRange(nsdocrange, &range);
+    nsIDOMDocumentRange_Release(nsdocrange);
+    if(NS_FAILED(nsres)) {
+        ERR("CreateRange failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    nsres = nsIDOMRange_QueryInterface(range, &IID_nsIDOMNSRange, (void**)&nsrange);
+    nsIDOMRange_Release(range);
+    if(NS_FAILED(nsres)) {
+        ERR("Could not get nsIDOMNSRange: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    nsAString_InitDepend(&html_str, html);
+    nsIDOMNSRange_CreateContextualFragment(nsrange, &html_str, &nsfragment);
+    nsIDOMNSRange_Release(nsrange);
+    nsAString_Finish(&html_str);
+    if(NS_FAILED(nsres)) {
+        ERR("CreateContextualFragment failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    nsres = nsIDOMNode_GetParentNode(nsnode, &nsparent);
+    if(NS_SUCCEEDED(nsres) && nsparent) {
+        nsIDOMNode *nstmp;
+
+        nsres = nsIDOMNode_ReplaceChild(nsparent, (nsIDOMNode*)nsfragment, nsnode, &nstmp);
+        nsIDOMNode_Release(nsparent);
+        if(NS_FAILED(nsres)) {
+            ERR("ReplaceChild failed: %08x\n", nsres);
+            hres = E_FAIL;
+        }else if(nstmp) {
+            nsIDOMNode_Release(nstmp);
+        }
+    }else {
+        ERR("GetParentNode failed: %08x\n", nsres);
+        hres = E_FAIL;
+    }
+
+    nsIDOMDocumentFragment_Release(nsfragment);
+    return hres;
+}
+
 typedef struct
 {
     DispatchEx dispex;
@@ -111,9 +172,6 @@ static inline HTMLFiltersCollection *impl_from_IHTMLFiltersCollection(IHTMLFilte
 
 static IHTMLFiltersCollection *HTMLFiltersCollection_Create(void);
 
-
-WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
-
 static inline HTMLElement *impl_from_IHTMLElement(IHTMLElement *iface)
 {
     return CONTAINING_RECORD(iface, HTMLElement, IHTMLElement_iface);
@@ -1086,63 +1144,10 @@ static HRESULT WINAPI HTMLElement_get_innerText(IHTMLElement *iface, BSTR *p)
 static HRESULT WINAPI HTMLElement_put_outerHTML(IHTMLElement *iface, BSTR v)
 {
     HTMLElement *This = impl_from_IHTMLElement(iface);
-    nsIDOMDocumentFragment *nsfragment;
-    nsIDOMDocumentRange *nsdocrange;
-    nsIDOMNSRange *nsrange;
-    nsIDOMNode *nsparent;
-    nsIDOMRange *range;
-    nsAString html_str;
-    nsresult nsres;
-    HRESULT hres = S_OK;
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsres = nsIDOMHTMLDocument_QueryInterface(This->node.doc->nsdoc, &IID_nsIDOMDocumentRange, (void**)&nsdocrange);
-    if(NS_FAILED(nsres))
-        return E_FAIL;
-
-    nsres = nsIDOMDocumentRange_CreateRange(nsdocrange, &range);
-    nsIDOMDocumentRange_Release(nsdocrange);
-    if(NS_FAILED(nsres)) {
-        ERR("CreateRange failed: %08x\n", nsres);
-        return E_FAIL;
-    }
-
-    nsres = nsIDOMRange_QueryInterface(range, &IID_nsIDOMNSRange, (void**)&nsrange);
-    nsIDOMRange_Release(range);
-    if(NS_FAILED(nsres)) {
-        ERR("Could not get nsIDOMNSRange: %08x\n", nsres);
-        return E_FAIL;
-    }
-
-    nsAString_InitDepend(&html_str, v);
-    nsIDOMNSRange_CreateContextualFragment(nsrange, &html_str, &nsfragment);
-    nsIDOMNSRange_Release(nsrange);
-    nsAString_Finish(&html_str);
-    if(NS_FAILED(nsres)) {
-        ERR("CreateContextualFragment failed: %08x\n", nsres);
-        return E_FAIL;
-    }
-
-    nsres = nsIDOMNode_GetParentNode(This->node.nsnode, &nsparent);
-    if(NS_SUCCEEDED(nsres) && nsparent) {
-        nsIDOMNode *nstmp;
-
-        nsres = nsIDOMNode_ReplaceChild(nsparent, (nsIDOMNode*)nsfragment, This->node.nsnode, &nstmp);
-        nsIDOMNode_Release(nsparent);
-        if(NS_FAILED(nsres)) {
-            ERR("ReplaceChild failed: %08x\n", nsres);
-            hres = E_FAIL;
-        }else if(nstmp) {
-            nsIDOMNode_Release(nstmp);
-        }
-    }else {
-        ERR("GetParentNode failed: %08x\n", nsres);
-        hres = E_FAIL;
-    }
-
-    nsIDOMDocumentFragment_Release(nsfragment);
-    return hres;
+    return replace_node_by_html(This->node.doc->nsdoc, This->node.nsnode, v);
 }
 
 static HRESULT WINAPI HTMLElement_get_outerHTML(IHTMLElement *iface, BSTR *p)




More information about the wine-cvs mailing list