diff options
author | Martok <martok@martoks-place.de> | 2023-10-01 02:21:53 +0200 |
---|---|---|
committer | Martok <martok@martoks-place.de> | 2023-10-01 02:21:53 +0200 |
commit | eaf9a3cc571b01643c8b1da2d3fda5c4117b5821 (patch) | |
tree | 442fd476b7fe2311db86cabe99c144e5386561f8 | |
parent | 1b588e0d73bfb83bae46689a59134b5bd1e31bea (diff) | |
download | uxp-eaf9a3cc571b01643c8b1da2d3fda5c4117b5821.tar.gz |
Issue #2321 - Fall back to 0 if setInterval interval not supplied
-rw-r--r-- | dom/base/nsGlobalWindow.cpp | 27 | ||||
-rw-r--r-- | dom/base/nsGlobalWindow.h | 4 | ||||
-rw-r--r-- | dom/webidl/WindowOrWorkerGlobalScope.webidl | 4 | ||||
-rw-r--r-- | dom/workers/WorkerScope.cpp | 14 | ||||
-rw-r--r-- | dom/workers/WorkerScope.h | 4 |
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); |