From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/xmlhttprequest.c | 72 +++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 33 deletions(-)
diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index cb668f52686..db6cd0782eb 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -737,31 +737,8 @@ static HRESULT WINAPI HTMLXMLHttpRequest_abort(IHTMLXMLHttpRequest *iface) return xhr_abort(&This->xhr); }
-static HRESULT HTMLXMLHttpRequest_open_hook(DispatchEx *dispex, WORD flags, - DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) +static HRESULT WINAPI xhr_open(struct xhr *xhr, BSTR bstrMethod, BSTR bstrUrl, VARIANT varAsync, VARIANT varUser, VARIANT varPassword) { - /* If only two arguments were given, implicitly set async to false */ - if((flags & DISPATCH_METHOD) && dp->cArgs == 2 && !dp->cNamedArgs) { - VARIANT args[5]; - DISPPARAMS new_dp = {args, NULL, ARRAY_SIZE(args), 0}; - V_VT(args) = VT_EMPTY; - V_VT(args+1) = VT_EMPTY; - V_VT(args+2) = VT_BOOL; - V_BOOL(args+2) = VARIANT_TRUE; - args[3] = dp->rgvarg[0]; - args[4] = dp->rgvarg[1]; - - TRACE("implicit async\n"); - - return dispex_call_builtin(dispex, DISPID_IHTMLXMLHTTPREQUEST_OPEN, &new_dp, res, ei, caller); - } - - return S_FALSE; /* fallback to default */ -} - -static HRESULT WINAPI HTMLXMLHttpRequest_open(IHTMLXMLHttpRequest *iface, BSTR bstrMethod, BSTR bstrUrl, VARIANT varAsync, VARIANT varUser, VARIANT varPassword) -{ - HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); BOOLEAN prev_synchronous; nsAString user, password; nsACString method, url; @@ -770,8 +747,6 @@ static HRESULT WINAPI HTMLXMLHttpRequest_open(IHTMLXMLHttpRequest *iface, BSTR b 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) { LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); hres = VariantChangeTypeEx(&varAsync, &varAsync, lcid, 0, VT_BOOL); @@ -805,16 +780,16 @@ static HRESULT WINAPI HTMLXMLHttpRequest_open(IHTMLXMLHttpRequest *iface, BSTR b }
/* Set this here, Gecko dispatches nested sync XHR readyState changes for OPENED (see HandleEvent) */ - prev_magic = This->xhr.magic; - prev_synchronous = This->xhr.synchronous; - This->xhr.synchronous = !V_BOOL(&varAsync); - This->xhr.magic++; + prev_magic = xhr->magic; + prev_synchronous = xhr->synchronous; + xhr->synchronous = !V_BOOL(&varAsync); + xhr->magic++;
if(V_VT(&varPassword) != VT_EMPTY && V_VT(&varPassword) != VT_ERROR) opt_argc += 2; else if(V_VT(&varUser) != VT_EMPTY && V_VT(&varUser) != VT_ERROR) opt_argc += 1; - nsres = nsIXMLHttpRequest_Open(This->xhr.nsxhr, &method, &url, !!V_BOOL(&varAsync), &user, &password, opt_argc); + nsres = nsIXMLHttpRequest_Open(xhr->nsxhr, &method, &url, !!V_BOOL(&varAsync), &user, &password, opt_argc);
nsACString_Finish(&method); nsACString_Finish(&url); @@ -823,14 +798,45 @@ static HRESULT WINAPI HTMLXMLHttpRequest_open(IHTMLXMLHttpRequest *iface, BSTR b
if(NS_FAILED(nsres)) { ERR("nsIXMLHttpRequest_Open failed: %08lx\n", nsres); - This->xhr.magic = prev_magic; - This->xhr.synchronous = prev_synchronous; + xhr->magic = prev_magic; + xhr->synchronous = prev_synchronous; return E_FAIL; }
return S_OK; }
+static HRESULT HTMLXMLHttpRequest_open_hook(DispatchEx *dispex, WORD flags, + DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) +{ + /* If only two arguments were given, implicitly set async to false */ + if((flags & DISPATCH_METHOD) && dp->cArgs == 2 && !dp->cNamedArgs) { + VARIANT args[5]; + DISPPARAMS new_dp = {args, NULL, ARRAY_SIZE(args), 0}; + V_VT(args) = VT_EMPTY; + V_VT(args+1) = VT_EMPTY; + V_VT(args+2) = VT_BOOL; + V_BOOL(args+2) = VARIANT_TRUE; + args[3] = dp->rgvarg[0]; + args[4] = dp->rgvarg[1]; + + TRACE("implicit async\n"); + + return dispex_call_builtin(dispex, DISPID_IHTMLXMLHTTPREQUEST_OPEN, &new_dp, res, ei, caller); + } + + return S_FALSE; /* fallback to default */ +} + +static HRESULT WINAPI HTMLXMLHttpRequest_open(IHTMLXMLHttpRequest *iface, BSTR bstrMethod, BSTR bstrUrl, VARIANT varAsync, VARIANT varUser, VARIANT varPassword) +{ + HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); + + TRACE("(%p)->(%s %s %s %s %s)\n", This, debugstr_w(bstrMethod), debugstr_w(bstrUrl), debugstr_variant(&varAsync), debugstr_variant(&varUser), debugstr_variant(&varPassword)); + + return xhr_open(&This->xhr, bstrMethod, bstrUrl, varAsync, varUser, varPassword); +} + static HRESULT WINAPI HTMLXMLHttpRequest_send(IHTMLXMLHttpRequest *iface, VARIANT varBody) { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);