2015-11-14 17:33 GMT+08:00 Zhenbo Li <litimetal@gmail.com>:"http://test.winehq.org/tests/xmltest.xml"; static const char large_page_url[] = "http://test.winehq.org/tests/data.php"; char large_page_url is not a valid xml file, but native mshtml.dll can handle it properly. It shows we can't just past the responseText to msxml3.dll. I'll check it more carefully it later.Also, I found that there was a hidden bug: As we will test these urls for responseXML: static const char xml_url[] =Hi, sorry for my late reply. I tested it on testbot, and found that Windows mshtml.dll would return an empty xml object
static BOOL doc_complete; static IHTMLDocument2 *notif_doc; +static BOOL ILLEGAL_XML;
@@ -334,8 +337,52 @@ static HRESULT WINAPI HTMLXMLHttpRequest_get_responseText(IHTMLXMLHttpRequest *i static HRESULT WINAPI HTMLXMLHttpRequest_get_responseXML(IHTMLXMLHttpRequest *iface, IDispatch **p) { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + IXMLDOMDocument *xmldoc = NULL; + BSTR str; + HRESULT hres; + VARIANT_BOOL vbool; + IObjectSafety *safety; + + TRACE("(%p)->(%p)\n", This, p); + + hres = CoCreateInstance(&CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (void**)&xmldoc); + if(FAILED(hres)) { + ERR("CoCreateInstance failed: %08x\n", hres); + return hres; + } + + hres = IHTMLXMLHttpRequest_get_responseText(iface, &str); + if(FAILED(hres)) { + IXMLDOMDocument_Release(xmldoc); + ERR("get_responseText failed: %08x\n", hres); + return hres; + } + + hres = IXMLDOMDocument_loadXML(xmldoc, str, &vbool); + SysFreeString(str); + if(hres != S_OK || vbool != VARIANT_TRUE) { + ERR("loadXML failed: %08x, returning an cmpty xmldoc\n", hres); + }
+ + hres = IXMLDOMDocument_QueryInterface(xmldoc, &IID_IObjectSafety, (void**)&safety); + if(SUCCEEDED(hres)) {
+ hres = IObjectSafety_SetInterfaceSafetyOptions(safety, NULL, + INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER, + INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER); + IObjectSafety_Release(safety); + if(FAILED(hres)) {