Bug 973905. setTimeout/setInterval with a string first arg but more than two arguments should still work (and ignore the extra arguments). r=smaug

This commit is contained in:
Boris Zbarsky 2014-02-19 10:13:38 -05:00
Родитель 7ee245a69d
Коммит 022c86a654
8 изменённых файлов: 34 добавлений и 10 удалений

Просмотреть файл

@ -11426,7 +11426,9 @@ nsGlobalWindow::SetTimeout(JSContext* aCx, Function& aFunction,
int32_t
nsGlobalWindow::SetTimeout(JSContext* aCx, const nsAString& aHandler,
int32_t aTimeout, ErrorResult& aError)
int32_t aTimeout,
const Sequence<JS::Value>& /* unused */,
ErrorResult& aError)
{
return SetTimeoutOrInterval(aCx, aHandler, aTimeout, false, aError);
}
@ -11460,6 +11462,7 @@ nsGlobalWindow::SetInterval(JSContext* aCx, Function& aFunction,
int32_t
nsGlobalWindow::SetInterval(JSContext* aCx, const nsAString& aHandler,
const Optional<int32_t>& aTimeout,
const Sequence<JS::Value>& /* unused */,
ErrorResult& aError)
{
int32_t timeout;

Просмотреть файл

@ -834,7 +834,9 @@ public:
const mozilla::dom::Sequence<JS::Value>& aArguments,
mozilla::ErrorResult& aError);
int32_t SetTimeout(JSContext* aCx, const nsAString& aHandler,
int32_t aTimeout, mozilla::ErrorResult& aError);
int32_t aTimeout,
const mozilla::dom::Sequence<JS::Value>& /* unused */,
mozilla::ErrorResult& aError);
void ClearTimeout(int32_t aHandle, mozilla::ErrorResult& aError);
int32_t SetInterval(JSContext* aCx, mozilla::dom::Function& aFunction,
const mozilla::dom::Optional<int32_t>& aTimeout,
@ -842,6 +844,7 @@ public:
mozilla::ErrorResult& aError);
int32_t SetInterval(JSContext* aCx, const nsAString& aHandler,
const mozilla::dom::Optional<int32_t>& aTimeout,
const mozilla::dom::Sequence<JS::Value>& /* unused */,
mozilla::ErrorResult& aError);
void ClearInterval(int32_t aHandle, mozilla::ErrorResult& aError);
void Atob(const nsAString& aAsciiBase64String, nsAString& aBinaryData,

Просмотреть файл

@ -36,6 +36,7 @@ support-files =
[test_openDialogChromeOnly.html]
[test_postMessage_solidus.html]
[test_screen_orientation.html]
[test_settimeout_extra_arguments.html]
[test_settimeout_inner.html]
[test_setting_opener.html]
[test_url.html]

Просмотреть файл

@ -0,0 +1,12 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>Test for setTimeout with a string argument and more than 2 arguments</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
t1 = async_test("setTimeout with more than 2 arguments, first argument a string, should work");
t2 = async_test("setInterval with more than 2 arguments, first argument a string, should work");
setTimeout("t1.done()", 0, {});
var interval = setInterval("clearInterval(interval); t2.done()", 0, {});
</script>

Просмотреть файл

@ -1523,7 +1523,6 @@ DOMInterfaces = {
# from ChromeWindow.
'hasXPConnectImpls': True,
'register': False,
'implicitJSContext': [ 'setInterval', 'setTimeout' ],
'binaryNames': {
'postMessage': 'postMessageMoz',
},

Просмотреть файл

@ -87,10 +87,10 @@ Window implements WindowEventHandlers;
[NoInterfaceObject]
interface WindowTimers {
[Throws] long setTimeout(Function handler, optional long timeout = 0, any... arguments);
[Throws] long setTimeout(DOMString handler, optional long timeout = 0);
[Throws] long setTimeout(DOMString handler, optional long timeout = 0, any... unused);
[Throws] void clearTimeout(long handle);
[Throws] long setInterval(Function handler, optional long timeout, any... arguments);
[Throws] long setInterval(DOMString handler, optional long timeout);
[Throws] long setInterval(DOMString handler, optional long timeout, any... unused);
[Throws] void clearInterval(long handle);
};
Window implements WindowTimers;

Просмотреть файл

@ -180,8 +180,10 @@ WorkerGlobalScope::SetTimeout(JSContext* aCx,
}
int32_t
WorkerGlobalScope::SetTimeout(const nsAString& aHandler,
WorkerGlobalScope::SetTimeout(JSContext* /* unused */,
const nsAString& aHandler,
const int32_t aTimeout,
const Sequence<JS::Value>& /* unused */,
ErrorResult& aRv)
{
mWorkerPrivate->AssertIsOnWorkerThread();
@ -213,8 +215,10 @@ WorkerGlobalScope::SetInterval(JSContext* aCx,
}
int32_t
WorkerGlobalScope::SetInterval(const nsAString& aHandler,
WorkerGlobalScope::SetInterval(JSContext* /* unused */,
const nsAString& aHandler,
const Optional<int32_t>& aTimeout,
const Sequence<JS::Value>& /* unused */,
ErrorResult& aRv)
{
mWorkerPrivate->AssertIsOnWorkerThread();

Просмотреть файл

@ -88,7 +88,8 @@ public:
SetTimeout(JSContext* aCx, Function& aHandler, const int32_t aTimeout,
const Sequence<JS::Value>& aArguments, ErrorResult& aRv);
int32_t
SetTimeout(const nsAString& aHandler, const int32_t aTimeout,
SetTimeout(JSContext* /* unused */, const nsAString& aHandler,
const int32_t aTimeout, const Sequence<JS::Value>& /* unused */,
ErrorResult& aRv);
void
ClearTimeout(int32_t aHandle, ErrorResult& aRv);
@ -97,8 +98,9 @@ public:
const Optional<int32_t>& aTimeout,
const Sequence<JS::Value>& aArguments, ErrorResult& aRv);
int32_t
SetInterval(const nsAString& aHandler, const Optional<int32_t>& aTimeout,
ErrorResult& aRv);
SetInterval(JSContext* /* unused */, const nsAString& aHandler,
const Optional<int32_t>& aTimeout,
const Sequence<JS::Value>& /* unused */, ErrorResult& aRv);
void
ClearInterval(int32_t aHandle, ErrorResult& aRv);