summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartok <martok@martoks-place.de>2023-10-01 02:21:53 +0200
committerMartok <martok@martoks-place.de>2023-10-01 02:21:53 +0200
commiteaf9a3cc571b01643c8b1da2d3fda5c4117b5821 (patch)
tree442fd476b7fe2311db86cabe99c144e5386561f8
parent1b588e0d73bfb83bae46689a59134b5bd1e31bea (diff)
downloaduxp-eaf9a3cc571b01643c8b1da2d3fda5c4117b5821.tar.gz
Issue #2321 - Fall back to 0 if setInterval interval not supplied
-rw-r--r--dom/base/nsGlobalWindow.cpp27
-rw-r--r--dom/base/nsGlobalWindow.h4
-rw-r--r--dom/webidl/WindowOrWorkerGlobalScope.webidl4
-rw-r--r--dom/workers/WorkerScope.cpp14
-rw-r--r--dom/workers/WorkerScope.h4
5 files changed, 14 insertions, 39 deletions
diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp
index dd6d190591..ae84de3a19 100644
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -12685,41 +12685,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
diff --git a/dom/base/nsGlobalWindow.h b/dom/base/nsGlobalWindow.h
index 63bb574dd4..c59baee648 100644
--- a/dom/base/nsGlobalWindow.h
+++ b/dom/base/nsGlobalWindow.h
@@ -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);
diff --git a/dom/webidl/WindowOrWorkerGlobalScope.webidl b/dom/webidl/WindowOrWorkerGlobalScope.webidl
index 9e639db5f4..d378ba49ec 100644
--- a/dom/webidl/WindowOrWorkerGlobalScope.webidl
+++ b/dom/webidl/WindowOrWorkerGlobalScope.webidl
@@ -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
diff --git a/dom/workers/WorkerScope.cpp b/dom/workers/WorkerScope.cpp
index 637e441732..df75ff887a 100644
--- a/dom/workers/WorkerScope.cpp
+++ b/dom/workers/WorkerScope.cpp
@@ -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
diff --git a/dom/workers/WorkerScope.h b/dom/workers/WorkerScope.h
index 01bae5cc11..81d2733efe 100644
--- a/dom/workers/WorkerScope.h
+++ b/dom/workers/WorkerScope.h
@@ -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);