Jacek Caban : mshtml: Added IHTMLElement::get_outerHTML implementation.
Alexandre Julliard
julliard at winehq.org
Wed Aug 12 11:08:53 CDT 2009
Module: wine
Branch: master
Commit: fbe9845890fa67ddc2974a879120af416b264c30
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fbe9845890fa67ddc2974a879120af416b264c30
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Aug 11 19:17:19 2009 +0200
mshtml: Added IHTMLElement::get_outerHTML implementation.
---
dlls/mshtml/htmlelem.c | 22 ++++++++++++++++++++--
dlls/mshtml/mshtml_private.h | 2 +-
dlls/mshtml/nsembed.c | 26 ++++++++++++++------------
3 files changed, 35 insertions(+), 15 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 170d5a0..84f6309 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -931,8 +931,26 @@ static HRESULT WINAPI HTMLElement_put_outerHTML(IHTMLElement *iface, BSTR v)
static HRESULT WINAPI HTMLElement_get_outerHTML(IHTMLElement *iface, BSTR *p)
{
HTMLElement *This = HTMLELEM_THIS(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+ nsAString html_str;
+ HRESULT hres;
+
+ WARN("(%p)->(%p) semi-stub\n", This, p);
+
+ nsAString_Init(&html_str, NULL);
+ hres = nsnode_to_nsstring(This->node.nsnode, &html_str);
+ if(SUCCEEDED(hres)) {
+ const PRUnichar *html;
+
+ nsAString_GetData(&html_str, &html);
+ *p = SysAllocString(html);
+ if(!*p)
+ hres = E_OUTOFMEMORY;
+ }
+
+ nsAString_Finish(&html_str);
+
+ TRACE("ret %s\n", debugstr_w(*p));
+ return S_OK;
}
static HRESULT WINAPI HTMLElement_put_outerText(IHTMLElement *iface, BSTR v)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 6f72271..7d21f5e 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -562,7 +562,7 @@ void nsAString_Finish(nsAString*);
nsIInputStream *create_nsstream(const char*,PRInt32);
nsICommandParams *create_nscommand_params(void);
-void nsnode_to_nsstring(nsIDOMNode*,nsAString*);
+HRESULT nsnode_to_nsstring(nsIDOMNode*,nsAString*);
void get_editor_controller(NSContainer*);
void init_nsevents(NSContainer*);
void add_nsevent_listener(NSContainer*,LPCWSTR);
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index a708fde..d6e3206 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -633,7 +633,7 @@ nsresult get_nsinterface(nsISupports *iface, REFIID riid, void **ppv)
return nsres;
}
-static void nsnode_to_nsstring_rec(nsIContentSerializer *serializer, nsIDOMNode *nsnode, nsAString *str)
+static HRESULT nsnode_to_nsstring_rec(nsIContentSerializer *serializer, nsIDOMNode *nsnode, nsAString *str)
{
nsIDOMNodeList *node_list = NULL;
PRBool has_children = FALSE;
@@ -645,7 +645,7 @@ static void nsnode_to_nsstring_rec(nsIContentSerializer *serializer, nsIDOMNode
nsres = nsIDOMNode_GetNodeType(nsnode, &type);
if(NS_FAILED(nsres)) {
ERR("GetType failed: %08x\n", nsres);
- return;
+ return E_FAIL;
}
switch(type) {
@@ -711,35 +711,37 @@ static void nsnode_to_nsstring_rec(nsIContentSerializer *serializer, nsIDOMNode
nsIContentSerializer_AppendElementEnd(serializer, nselem, str);
nsIDOMElement_Release(nselem);
}
+
+ return S_OK;
}
-void nsnode_to_nsstring(nsIDOMNode *nsdoc, nsAString *str)
+HRESULT nsnode_to_nsstring(nsIDOMNode *nsnode, nsAString *str)
{
nsIContentSerializer *serializer;
- nsIDOMNode *nsnode;
nsresult nsres;
+ HRESULT hres;
nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr,
NS_HTMLSERIALIZER_CONTRACTID, NULL, &IID_nsIContentSerializer,
(void**)&serializer);
if(NS_FAILED(nsres)) {
ERR("Could not get nsIContentSerializer: %08x\n", nsres);
- return;
+ return E_FAIL;
}
nsres = nsIContentSerializer_Init(serializer, 0, 100, NULL, FALSE, FALSE /* FIXME */);
if(NS_FAILED(nsres))
ERR("Init failed: %08x\n", nsres);
- nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMNode, (void**)&nsnode);
- nsnode_to_nsstring_rec(serializer, nsnode, str);
- nsIDOMNode_Release(nsnode);
-
- nsres = nsIContentSerializer_Flush(serializer, str);
- if(NS_FAILED(nsres))
- ERR("Flush failed: %08x\n", nsres);
+ hres = nsnode_to_nsstring_rec(serializer, nsnode, str);
+ if(SUCCEEDED(hres)) {
+ nsres = nsIContentSerializer_Flush(serializer, str);
+ if(NS_FAILED(nsres))
+ ERR("Flush failed: %08x\n", nsres);
+ }
nsIContentSerializer_Release(serializer);
+ return hres;
}
void get_editor_controller(NSContainer *This)
More information about the wine-cvs
mailing list