Jacek Caban : mshtml: Make msec argument of setTimeout optional.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Nov 20 07:48:47 CST 2015
Module: wine
Branch: master
Commit: fa43b8cac91b1399fa3216348734bcf064c784b9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fa43b8cac91b1399fa3216348734bcf064c784b9
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Nov 20 13:15:56 2015 +0100
mshtml: Make msec argument of setTimeout optional.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/htmlwindow.c | 27 ++++++++++++++++++++++++++-
dlls/mshtml/tests/jstest.html | 5 +++--
2 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index 280a5d7..5ed22c0 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -2628,10 +2628,14 @@ static HRESULT WINAPI WindowDispEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID
TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
- if(id == DISPID_IHTMLWINDOW2_LOCATION && (wFlags & DISPATCH_PROPERTYPUT)) {
+ switch(id) {
+ case DISPID_IHTMLWINDOW2_LOCATION: {
HTMLLocation *location;
HRESULT hres;
+ if(!(wFlags & DISPATCH_PROPERTYPUT))
+ break;
+
TRACE("forwarding to location.href\n");
hres = get_location(window, &location);
@@ -2643,6 +2647,27 @@ static HRESULT WINAPI WindowDispEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID
IHTMLLocation_Release(&location->IHTMLLocation_iface);
return hres;
}
+ case DISPID_IHTMLWINDOW2_SETTIMEOUT:
+ case DISPID_IHTMLWINDOW3_SETTIMEOUT: {
+ VARIANT args[2];
+ DISPPARAMS dp = {args, NULL, 2, 0};
+
+ /*
+ * setTimeout calls shoud use default value 0 for the second argument if only one is provided,
+ * but IDL file does not reflect that. We fixup arguments here instead.
+ */
+ if(!(wFlags & DISPATCH_METHOD) || pdp->cArgs != 1 || pdp->cNamedArgs)
+ break;
+
+ TRACE("Fixing args\n");
+
+ V_VT(args) = VT_I4;
+ V_I4(args) = 0;
+ args[1] = *pdp->rgvarg;
+ return IDispatchEx_InvokeEx(&window->event_target.dispex.IDispatchEx_iface, id, lcid,
+ wFlags, &dp, pvarRes, pei, pspCaller);
+ }
+ }
return IDispatchEx_InvokeEx(&window->event_target.dispex.IDispatchEx_iface, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
}
diff --git a/dlls/mshtml/tests/jstest.html b/dlls/mshtml/tests/jstest.html
index 528c2e1..f0d3e3b 100644
--- a/dlls/mshtml/tests/jstest.html
+++ b/dlls/mshtml/tests/jstest.html
@@ -383,6 +383,9 @@ function runTests() {
var r = window.execScript("globalVar = true;");
ok(r === undefined, "execScript returned " + r);
ok(globalVar === true, "globalVar = " + globalVar);
+
+ /* Call setTimeout without specified time. */
+ window.setTimeout(function() { external.reportSuccess(); });
}
function runTest() {
@@ -391,8 +394,6 @@ function runTest() {
}catch(e) {
ok(false, "got exception " + e.message);
}
-
- external.reportSuccess();
}
</script>
<body onload="runTest();">
More information about the wine-cvs
mailing list