static void test_responseXML(const char *expect_text) { IDispatch *disp; IXMLDOMDocument *xmldom; IObjectSafety *safety; DWORD enabled = 0, supported = 0; HRESULT hres; disp = NULL; hres = IHTMLXMLHttpRequest_get_responseXML(xhr, &disp); ok(hres == S_OK, "get_responseXML failed: %08x\n", hres); ok(disp != NULL, "disp == NULL\n"); xmldom = NULL; hres = IDispatch_QueryInterface(disp, &IID_IXMLDOMDocument, (void**)&xmldom); ok(hres == S_OK, "QueryInterface(IXMLDOMDocument) failed: %08x\n", hres); ok(xmldom != NULL, "xmldom == NULL\n"); hres = IXMLDOMDocument_QueryInterface(xmldom, &IID_IObjectSafety, (void**)&safety); ok(hres == S_OK, "QueryInterface IObjectSafety failed: %08x\n", hres); hres = IObjectSafety_GetInterfaceSafetyOptions(safety, NULL, &supported, &enabled); ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08x\n", hres); ok(broken(supported == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA)) || supported == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER) /* msxml3 SP8+ */, "Expected supported: (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER), got %08x\n", supported); ok(enabled == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER), "Expected enabled: (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER), got 0x%08x\n", enabled); IObjectSafety_Release(safety); if(!expect_text) test_illegal_xml(xmldom); IXMLDOMDocument_Release(xmldom); IDispatch_Release(disp); }
static HRESULT WINAPI HTMLXMLHttpRequest_get_responseXML(IHTMLXMLHttpRequest *iface, IDispatch **p) { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); 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) WARN("loadXML failed: %08x, returning an empty xmldoc\n", hres); hres = IXMLDOMDocument_QueryInterface(xmldoc, &IID_IObjectSafety, (void**)&safety); assert(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); assert(SUCCEEDED(hres)); IObjectSafety_Release(safety); *p = (IDispatch*)xmldoc; return S_OK; }
static HRESULT WINAPI xslprocessor_put_input( IXSLProcessor *iface, VARIANT input ) { xslprocessor *This = impl_from_IXSLProcessor( iface ); IXMLDOMNode *input_node; HRESULT hr; TRACE("(%p)->(%s)\n", This, debugstr_variant(&input)); /* try IXMLDOMNode directly first */ if (V_VT(&input) == VT_UNKNOWN) hr = IUnknown_QueryInterface(V_UNKNOWN(&input), &IID_IXMLDOMNode, (void**)&input_node); else if (V_VT(&input) == VT_DISPATCH) hr = IDispatch_QueryInterface(V_DISPATCH(&input), &IID_IXMLDOMNode, (void**)&input_node); else { IXMLDOMDocument *doc; hr = DOMDocument_create(MSXML_DEFAULT, (void**)&doc); if (hr == S_OK) { VARIANT_BOOL b; hr = IXMLDOMDocument_load(doc, input, &b); if (hr == S_OK) hr = IXMLDOMDocument_QueryInterface(doc, &IID_IXMLDOMNode, (void**)&input_node); IXMLDOMDocument_Release(doc); } } if (hr == S_OK) { if (This->input) IXMLDOMNode_Release(This->input); This->input = input_node; } return hr; }
static HRESULT WINAPI domattr_get_nodeTypedValue( IXMLDOMAttribute *iface, VARIANT* value) { domattr *This = impl_from_IXMLDOMAttribute( iface ); IXMLDOMDocument *doc; HRESULT hr; TRACE("(%p)->(%p)\n", This, value); hr = IXMLDOMAttribute_get_ownerDocument(iface, &doc); if (hr == S_OK) { IXMLDOMDocument3 *doc3; hr = IXMLDOMDocument_QueryInterface(doc, &IID_IXMLDOMDocument3, (void**)&doc3); IXMLDOMDocument_Release(doc); if (hr == S_OK) { VARIANT schemas; hr = IXMLDOMDocument3_get_schemas(doc3, &schemas); IXMLDOMDocument3_Release(doc3); if (hr != S_OK) return IXMLDOMAttribute_get_value(iface, value); else { FIXME("need to query schema for attribute type\n"); VariantClear(&schemas); } } } return return_null_var(value); }