mshtml: Added IHTMLElement::get_outerHTML implementation.

This commit is contained in:
Jacek Caban 2009-08-11 19:17:19 +02:00 committed by Alexandre Julliard
parent 60db5edaf5
commit fbe9845890
3 changed files with 35 additions and 15 deletions

View File

@ -931,8 +931,26 @@ static HRESULT WINAPI HTMLElement_put_outerHTML(IHTMLElement *iface, BSTR v)
static HRESULT WINAPI HTMLElement_get_outerHTML(IHTMLElement *iface, BSTR *p) static HRESULT WINAPI HTMLElement_get_outerHTML(IHTMLElement *iface, BSTR *p)
{ {
HTMLElement *This = HTMLELEM_THIS(iface); HTMLElement *This = HTMLELEM_THIS(iface);
FIXME("(%p)->(%p)\n", This, p); nsAString html_str;
return E_NOTIMPL; 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) static HRESULT WINAPI HTMLElement_put_outerText(IHTMLElement *iface, BSTR v)

View File

@ -562,7 +562,7 @@ void nsAString_Finish(nsAString*);
nsIInputStream *create_nsstream(const char*,PRInt32); nsIInputStream *create_nsstream(const char*,PRInt32);
nsICommandParams *create_nscommand_params(void); nsICommandParams *create_nscommand_params(void);
void nsnode_to_nsstring(nsIDOMNode*,nsAString*); HRESULT nsnode_to_nsstring(nsIDOMNode*,nsAString*);
void get_editor_controller(NSContainer*); void get_editor_controller(NSContainer*);
void init_nsevents(NSContainer*); void init_nsevents(NSContainer*);
void add_nsevent_listener(NSContainer*,LPCWSTR); void add_nsevent_listener(NSContainer*,LPCWSTR);

View File

@ -633,7 +633,7 @@ nsresult get_nsinterface(nsISupports *iface, REFIID riid, void **ppv)
return nsres; 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; nsIDOMNodeList *node_list = NULL;
PRBool has_children = FALSE; PRBool has_children = FALSE;
@ -645,7 +645,7 @@ static void nsnode_to_nsstring_rec(nsIContentSerializer *serializer, nsIDOMNode
nsres = nsIDOMNode_GetNodeType(nsnode, &type); nsres = nsIDOMNode_GetNodeType(nsnode, &type);
if(NS_FAILED(nsres)) { if(NS_FAILED(nsres)) {
ERR("GetType failed: %08x\n", nsres); ERR("GetType failed: %08x\n", nsres);
return; return E_FAIL;
} }
switch(type) { switch(type) {
@ -711,35 +711,37 @@ static void nsnode_to_nsstring_rec(nsIContentSerializer *serializer, nsIDOMNode
nsIContentSerializer_AppendElementEnd(serializer, nselem, str); nsIContentSerializer_AppendElementEnd(serializer, nselem, str);
nsIDOMElement_Release(nselem); nsIDOMElement_Release(nselem);
} }
return S_OK;
} }
void nsnode_to_nsstring(nsIDOMNode *nsdoc, nsAString *str) HRESULT nsnode_to_nsstring(nsIDOMNode *nsnode, nsAString *str)
{ {
nsIContentSerializer *serializer; nsIContentSerializer *serializer;
nsIDOMNode *nsnode;
nsresult nsres; nsresult nsres;
HRESULT hres;
nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr, nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr,
NS_HTMLSERIALIZER_CONTRACTID, NULL, &IID_nsIContentSerializer, NS_HTMLSERIALIZER_CONTRACTID, NULL, &IID_nsIContentSerializer,
(void**)&serializer); (void**)&serializer);
if(NS_FAILED(nsres)) { if(NS_FAILED(nsres)) {
ERR("Could not get nsIContentSerializer: %08x\n", nsres); ERR("Could not get nsIContentSerializer: %08x\n", nsres);
return; return E_FAIL;
} }
nsres = nsIContentSerializer_Init(serializer, 0, 100, NULL, FALSE, FALSE /* FIXME */); nsres = nsIContentSerializer_Init(serializer, 0, 100, NULL, FALSE, FALSE /* FIXME */);
if(NS_FAILED(nsres)) if(NS_FAILED(nsres))
ERR("Init failed: %08x\n", nsres); ERR("Init failed: %08x\n", nsres);
nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMNode, (void**)&nsnode); hres = nsnode_to_nsstring_rec(serializer, nsnode, str);
nsnode_to_nsstring_rec(serializer, nsnode, str); if(SUCCEEDED(hres)) {
nsIDOMNode_Release(nsnode); nsres = nsIContentSerializer_Flush(serializer, str);
if(NS_FAILED(nsres))
nsres = nsIContentSerializer_Flush(serializer, str); ERR("Flush failed: %08x\n", nsres);
if(NS_FAILED(nsres)) }
ERR("Flush failed: %08x\n", nsres);
nsIContentSerializer_Release(serializer); nsIContentSerializer_Release(serializer);
return hres;
} }
void get_editor_controller(NSContainer *This) void get_editor_controller(NSContainer *This)