mirror of
https://github.com/roytam1/UXP.git
synced 2026-05-26 13:58:49 +00:00
Issue #2321 - Fall back to 0 if setInterval interval not supplied
This commit is contained in:
@@ -12691,41 +12691,22 @@ nsGlobalWindow::SetTimeout(JSContext* aCx, const nsAString& aHandler,
|
||||
return SetTimeoutOrInterval(aCx, aHandler, aTimeout, false, aError);
|
||||
}
|
||||
|
||||
static bool
|
||||
IsInterval(const Optional<int32_t>& aTimeout, int32_t& aResultTimeout)
|
||||
{
|
||||
if (aTimeout.WasPassed()) {
|
||||
aResultTimeout = aTimeout.Value();
|
||||
return true;
|
||||
}
|
||||
|
||||
// If no interval was specified, treat this like a timeout, to avoid setting
|
||||
// an interval of 0 milliseconds.
|
||||
aResultTimeout = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
int32_t
|
||||
nsGlobalWindow::SetInterval(JSContext* aCx, Function& aFunction,
|
||||
const Optional<int32_t>& aTimeout,
|
||||
const int32_t aTimeout,
|
||||
const Sequence<JS::Value>& aArguments,
|
||||
ErrorResult& aError)
|
||||
{
|
||||
int32_t timeout;
|
||||
bool isInterval = IsInterval(aTimeout, timeout);
|
||||
return SetTimeoutOrInterval(aCx, aFunction, timeout, aArguments, isInterval,
|
||||
aError);
|
||||
return SetTimeoutOrInterval(aCx, aFunction, aTimeout, aArguments, true, aError);
|
||||
}
|
||||
|
||||
int32_t
|
||||
nsGlobalWindow::SetInterval(JSContext* aCx, const nsAString& aHandler,
|
||||
const Optional<int32_t>& aTimeout,
|
||||
const int32_t aTimeout,
|
||||
const Sequence<JS::Value>& /* unused */,
|
||||
ErrorResult& aError)
|
||||
{
|
||||
int32_t timeout;
|
||||
bool isInterval = IsInterval(aTimeout, timeout);
|
||||
return SetTimeoutOrInterval(aCx, aHandler, timeout, isInterval, aError);
|
||||
return SetTimeoutOrInterval(aCx, aHandler, aTimeout, true, aError);
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
||||
@@ -953,11 +953,11 @@ public:
|
||||
mozilla::ErrorResult& aError);
|
||||
void ClearTimeout(int32_t aHandle);
|
||||
int32_t SetInterval(JSContext* aCx, mozilla::dom::Function& aFunction,
|
||||
const mozilla::dom::Optional<int32_t>& aTimeout,
|
||||
const int32_t aTimeout,
|
||||
const mozilla::dom::Sequence<JS::Value>& aArguments,
|
||||
mozilla::ErrorResult& aError);
|
||||
int32_t SetInterval(JSContext* aCx, const nsAString& aHandler,
|
||||
const mozilla::dom::Optional<int32_t>& aTimeout,
|
||||
const int32_t aTimeout,
|
||||
const mozilla::dom::Sequence<JS::Value>& /* unused */,
|
||||
mozilla::ErrorResult& aError);
|
||||
void ClearInterval(int32_t aHandle);
|
||||
|
||||
@@ -31,9 +31,9 @@ interface WindowOrWorkerGlobalScope {
|
||||
long setTimeout(DOMString handler, optional long timeout = 0, any... unused);
|
||||
void clearTimeout(optional long handle = 0);
|
||||
[Throws]
|
||||
long setInterval(Function handler, optional long timeout, any... arguments);
|
||||
long setInterval(Function handler, optional long timeout = 0, any... arguments);
|
||||
[Throws]
|
||||
long setInterval(DOMString handler, optional long timeout, any... unused);
|
||||
long setInterval(DOMString handler, optional long timeout = 0, any... unused);
|
||||
void clearInterval(optional long handle = 0);
|
||||
|
||||
// microtask queuing
|
||||
|
||||
@@ -299,28 +299,25 @@ WorkerGlobalScope::ClearTimeout(int32_t aHandle)
|
||||
int32_t
|
||||
WorkerGlobalScope::SetInterval(JSContext* aCx,
|
||||
Function& aHandler,
|
||||
const Optional<int32_t>& aTimeout,
|
||||
const int32_t aTimeout,
|
||||
const Sequence<JS::Value>& aArguments,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
mWorkerPrivate->AssertIsOnWorkerThread();
|
||||
|
||||
bool isInterval = aTimeout.WasPassed();
|
||||
int32_t timeout = aTimeout.WasPassed() ? aTimeout.Value() : 0;
|
||||
|
||||
nsCOMPtr<nsIScriptTimeoutHandler> handler =
|
||||
NS_CreateJSTimeoutHandler(aCx, mWorkerPrivate, aHandler, aArguments, aRv);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return mWorkerPrivate->SetTimeout(aCx, handler, timeout, isInterval, aRv);
|
||||
return mWorkerPrivate->SetTimeout(aCx, handler, aTimeout, true, aRv);
|
||||
}
|
||||
|
||||
int32_t
|
||||
WorkerGlobalScope::SetInterval(JSContext* aCx,
|
||||
const nsAString& aHandler,
|
||||
const Optional<int32_t>& aTimeout,
|
||||
const int32_t aTimeout,
|
||||
const Sequence<JS::Value>& /* unused */,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
@@ -328,12 +325,9 @@ WorkerGlobalScope::SetInterval(JSContext* aCx,
|
||||
|
||||
Sequence<JS::Value> dummy;
|
||||
|
||||
bool isInterval = aTimeout.WasPassed();
|
||||
int32_t timeout = aTimeout.WasPassed() ? aTimeout.Value() : 0;
|
||||
|
||||
nsCOMPtr<nsIScriptTimeoutHandler> handler =
|
||||
NS_CreateJSTimeoutHandler(aCx, mWorkerPrivate, aHandler);
|
||||
return mWorkerPrivate->SetTimeout(aCx, handler, timeout, isInterval, aRv);
|
||||
return mWorkerPrivate->SetTimeout(aCx, handler, aTimeout, true, aRv);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -132,11 +132,11 @@ public:
|
||||
ClearTimeout(int32_t aHandle);
|
||||
int32_t
|
||||
SetInterval(JSContext* aCx, Function& aHandler,
|
||||
const Optional<int32_t>& aTimeout,
|
||||
const int32_t aTimeout,
|
||||
const Sequence<JS::Value>& aArguments, ErrorResult& aRv);
|
||||
int32_t
|
||||
SetInterval(JSContext* aCx, const nsAString& aHandler,
|
||||
const Optional<int32_t>& aTimeout,
|
||||
const int32_t aTimeout,
|
||||
const Sequence<JS::Value>& /* unused */, ErrorResult& aRv);
|
||||
void
|
||||
ClearInterval(int32_t aHandle);
|
||||
|
||||
Reference in New Issue
Block a user