static HRESULT WINAPI HTMLXMLHttpRequest_setRequestHeader(IHTMLXMLHttpRequest *iface, BSTR bstrHeader, BSTR bstrValue) { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); char *header_u, *value_u; nsACString header, value; nsresult nsres; TRACE("(%p)->(%s %s)\n", This, debugstr_w(bstrHeader), debugstr_w(bstrValue)); header_u = heap_strdupWtoU(bstrHeader); if(bstrHeader && !header_u) return E_OUTOFMEMORY; value_u = heap_strdupWtoU(bstrValue); if(bstrValue && !value_u) { heap_free(header_u); return E_OUTOFMEMORY; } nsACString_InitDepend(&header, header_u); nsACString_InitDepend(&value, value_u); nsres = nsIXMLHttpRequest_SetRequestHeader(This->nsxhr, &header, &value); nsACString_Finish(&header); nsACString_Finish(&value); heap_free(header_u); heap_free(value_u); if(NS_FAILED(nsres)) { ERR("SetRequestHeader failed: %08x\n", nsres); return E_FAIL; } return S_OK; }
static HRESULT return_nscstr(nsresult nsres, nsACString *nscstr, BSTR *p) { const char *str; int len; if(NS_FAILED(nsres)) { ERR("failed: %08x\n", nsres); nsACString_Finish(nscstr); return E_FAIL; } nsACString_GetData(nscstr, &str); if(*str) { len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0); *p = SysAllocStringLen(NULL, len); if(!*p) { nsACString_Finish(nscstr); return E_OUTOFMEMORY; } MultiByteToWideChar(CP_UTF8, 0, str, -1, *p, len); }else { *p = NULL; } nsACString_Finish(nscstr); return S_OK; }
static HRESULT WINAPI HTMLXMLHttpRequest_getResponseHeader(IHTMLXMLHttpRequest *iface, BSTR bstrHeader, BSTR *p) { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); nsACString header, ret; char *cstr; nsresult nsres; HRESULT hres; LONG state; TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrHeader), p); if(!p) return E_POINTER; if(!bstrHeader) return E_INVALIDARG; hres = IHTMLXMLHttpRequest_get_readyState(iface, &state); if(FAILED(hres)) return hres; if(state < 2) { *p = NULL; return E_FAIL; } cstr = heap_strdupWtoU(bstrHeader); nsACString_InitDepend(&header, cstr); nsACString_Init(&ret, NULL); nsres = nsIXMLHttpRequest_GetResponseHeader(This->nsxhr, &header, &ret); nsACString_Finish(&header); heap_free(cstr); return return_nscstr(nsres, &ret, p); }
static nsresult NSAPI nsURIContentListener_OnStartURIOpen(nsIURIContentListener *iface, nsIURI *aURI, PRBool *_retval) { NSContainer *This = NSURICL_THIS(iface); nsIWineURI *wine_uri; nsACString spec_str; const char *spec; nsresult nsres; nsACString_Init(&spec_str, NULL); nsIURI_GetSpec(aURI, &spec_str); nsACString_GetData(&spec_str, &spec, NULL); TRACE("(%p)->(%p(%s) %p)\n", This, aURI, debugstr_a(spec), _retval); nsACString_Finish(&spec_str); nsres = nsIURI_QueryInterface(aURI, &IID_nsIWineURI, (void**)&wine_uri); if(NS_FAILED(nsres)) { WARN("Could not get nsIWineURI interface: %08lx\n", nsres); return NS_ERROR_NOT_IMPLEMENTED; } nsIWineURI_SetNSContainer(wine_uri, This); if(This->bscallback && This->bscallback->mon) { LPWSTR url; HRESULT hres; hres = IMoniker_GetDisplayName(This->bscallback->mon, NULL, 0, &url); if(SUCCEEDED(hres)) { IMoniker *mon = NULL; hres = CreateURLMoniker(NULL, url, &mon); if(SUCCEEDED(hres)) { nsIWineURI_SetMoniker(wine_uri, mon); IMoniker_Release(mon); }else { WARN("CreateURLMoniker failed: %08lx\n", hres); } }else { WARN("GetDisplayName failed: %08lx\n", hres); } } nsIWineURI_Release(wine_uri); return NS_ERROR_NOT_IMPLEMENTED; }
static HRESULT WINAPI HTMLXMLHttpRequest_open(IHTMLXMLHttpRequest *iface, BSTR bstrMethod, BSTR bstrUrl, VARIANT varAsync, VARIANT varUser, VARIANT varPassword) { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); nsACString method, url; nsAString user, password; nsresult nsres; HRESULT hres; TRACE("(%p)->(%s %s %s %s %s)\n", This, debugstr_w(bstrMethod), debugstr_w(bstrUrl), debugstr_variant(&varAsync), debugstr_variant(&varUser), debugstr_variant(&varPassword)); if(V_VT(&varAsync) != VT_BOOL) { FIXME("varAsync not supported: %s\n", debugstr_variant(&varAsync)); return E_FAIL; } /* Note: Starting with Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27), * synchronous requests on the main thread have been deprecated due to the negative * effects to the user experience. */ if(!V_BOOL(&varAsync)) { FIXME("Synchronous request is not supported yet\n"); return E_FAIL; } hres = variant_to_nsastr(varUser, &user); if(FAILED(hres)) return hres; hres = variant_to_nsastr(varPassword, &password); if(FAILED(hres)) { nsAString_Finish(&user); return hres; } hres = bstr_to_nsacstr(bstrMethod, &method); if(FAILED(hres)) { nsAString_Finish(&user); nsAString_Finish(&password); return hres; } hres = bstr_to_nsacstr(bstrUrl, &url); if(FAILED(hres)) { nsAString_Finish(&user); nsAString_Finish(&password); nsACString_Finish(&method); return hres; } nsres = nsIXMLHttpRequest_Open(This->nsxhr, &method, &url, TRUE, &user, &password, 0); nsACString_Finish(&method); nsACString_Finish(&url); nsAString_Finish(&user); nsAString_Finish(&password); if(NS_FAILED(nsres)) { ERR("nsIXMLHttpRequest_Open failed: %08x\n", nsres); return E_FAIL; } return S_OK; }