mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-06 15:58:39 +09:00
Issue #2321 - Fall back to 0 if setInterval interval not supplied
This commit is contained in:
parent
bb1974cebc
commit
e0e1542913
5 changed files with 14 additions and 39 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue