Hi Zhenbo,

On 11/27/15 15:49, Zhenbo Li wrote:
2015-11-14 17:33 GMT+08:00 Zhenbo Li <litimetal@gmail.com>:
>
> Also, I found that there was a hidden bug:
> As we will test these urls for responseXML:
>     static const char xml_url[] = "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.
Hi, sorry for my late reply.
I tested it on testbot, and found that Windows mshtml.dll would return
an empty xml object

It looks better now.

 
 static BOOL doc_complete;
 static IHTMLDocument2 *notif_doc;
+static BOOL ILLEGAL_XML;

Using this global variable makes things harder to follow. Please add a new argument to test_sync_xhr instead.

@@ -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);
+    }

ERR is not appropriate here. Please use WARN instead.

+
+    hres = IXMLDOMDocument_QueryInterface(xmldoc, &IID_IObjectSafety, (void**)&safety);
+    if(SUCCEEDED(hres)) {

Again, this error handling is more complicated than it needs to be. Please use assert(hres == S_OK) instead.

+        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)) {

Same here.

Thanks,
Jacek