From b26c5279a283ff391d0d68b8617c2d52d0d9a9a0 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 6 Apr 2022 17:11:41 +0000 Subject: [PATCH 1/9] Add WorkerOptions to [Shared]Worker constructors --- api-reports/2_12.txt | 6 ++++++ api-reports/2_13.txt | 6 ++++++ dom/src/main/scala/org/scalajs/dom/SharedWorker.scala | 10 ++++++---- dom/src/main/scala/org/scalajs/dom/Worker.scala | 7 ++++++- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 9be38550d..12de4c157 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -25351,6 +25351,12 @@ WorkerNavigator[JT] def onLine: Boolean WorkerNavigator[JT] def platform: String WorkerNavigator[JT] def sendBeacon(url: String, data: BodyInit?): Boolean (@deprecated in 2.0.0) WorkerNavigator[JT] def userAgent: String +WorkerOptions[JT] var credentials: js.UndefOr[RequestCredentials] +WorkerOptions[JT] var name: js.UndefOr[String] +WorkerOptions[JT] var `type`: js.UndefOr[WorkerType] +WorkerType[JT] +WorkerType[SO] val classic: WorkerType +WorkerType[SO] val module: WorkerType WriteableState[JT] WriteableState[SO] val closed: WriteableState WriteableState[SO] val closing: WriteableState diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 9be38550d..12de4c157 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -25351,6 +25351,12 @@ WorkerNavigator[JT] def onLine: Boolean WorkerNavigator[JT] def platform: String WorkerNavigator[JT] def sendBeacon(url: String, data: BodyInit?): Boolean (@deprecated in 2.0.0) WorkerNavigator[JT] def userAgent: String +WorkerOptions[JT] var credentials: js.UndefOr[RequestCredentials] +WorkerOptions[JT] var name: js.UndefOr[String] +WorkerOptions[JT] var `type`: js.UndefOr[WorkerType] +WorkerType[JT] +WorkerType[SO] val classic: WorkerType +WorkerType[SO] val module: WorkerType WriteableState[JT] WriteableState[SO] val closed: WriteableState WriteableState[SO] val closing: WriteableState diff --git a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala index 1fd081f51..7762b125e 100644 --- a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala +++ b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala @@ -2,6 +2,7 @@ package org.scalajs.dom import scala.scalajs.js import scala.scalajs.js.annotation._ +import scala.scalajs.js.| /** The SharedWorker interface represents a specific kind of worker that can be accessed from several browsing contexts, * such as several windows, iframes or even workers. They implement an interface different than dedicated workers and @@ -17,13 +18,14 @@ import scala.scalajs.js.annotation._ * {{{var myWorker = new SharedWorker("aURL", name);}}} * @param stringUrl * A DOMString representing the URL of the script the worker will execute. It must obey the same-origin policy. - * @param name - * An optional argument that specifies an existing SharedWorkerGlobalScope.name — if this is specified then that - * SharedWorkerGlobalScope will be used as the scope for this shared worker. + * @param options + * A DOMString specifying an identifying name for the SharedWorkerGlobalScope representing the scope of the worker, + * which is mainly useful for debugging purposes. Or, an object containing option properties that can set when + * creating the object instance. */ @js.native @JSGlobal -class SharedWorker(stringUrl: String, name: js.UndefOr[String] = js.native) extends AbstractWorker { +class SharedWorker(scriptURL: String, options: js.UndefOr[String | WorkerOptions] = js.native) extends AbstractWorker { /** The port property of the SharedWorker interface returns a [[MessagePort]] object used to communicate and control * the shared worker. diff --git a/dom/src/main/scala/org/scalajs/dom/Worker.scala b/dom/src/main/scala/org/scalajs/dom/Worker.scala index 7cb7ee7c3..31e0b7154 100644 --- a/dom/src/main/scala/org/scalajs/dom/Worker.scala +++ b/dom/src/main/scala/org/scalajs/dom/Worker.scala @@ -10,10 +10,15 @@ import scala.scalajs.js.annotation._ * Of note is the fact that workers may in turn spawn new workers as long as those workers are hosted within the same * origin as the parent page. In addition, workers may use XMLHttpRequest for network I/O, with the exception that the * responseXML and channel attributes on XMLHttpRequest always return null. + * + * @param scriptURL + * A USVString representing the URL of the script the worker will execute. It must obey the same-origin policy. + * @param options + * An object containing option properties that can be set when creating the object instance. */ @js.native @JSGlobal -class Worker(stringUrl: String) extends AbstractWorker { +class Worker(scriptURL: String, options: js.UndefOr[WorkerOptions] = js.native) extends AbstractWorker { /** The Worker.onmessage property represents an EventHandler, that is a function to be called when the message event * occurs. These events are of type MessageEvent and will be called when the worker calls its own postMessage() From 2f3597dd683cfa43fc1cbbed6b56dd3d68c7d8a9 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 6 Apr 2022 10:14:25 -0700 Subject: [PATCH 2/9] Match scaladoc to code --- dom/src/main/scala/org/scalajs/dom/SharedWorker.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala index 7762b125e..beea279d5 100644 --- a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala +++ b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala @@ -16,7 +16,7 @@ import scala.scalajs.js.| * thrown. * @example * {{{var myWorker = new SharedWorker("aURL", name);}}} - * @param stringUrl + * @param scriptURL * A DOMString representing the URL of the script the worker will execute. It must obey the same-origin policy. * @param options * A DOMString specifying an identifying name for the SharedWorkerGlobalScope representing the scope of the worker, From 928cb9ed840c531f9122dfef41f75d7c3839d496 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 6 Apr 2022 17:15:17 +0000 Subject: [PATCH 3/9] Forgot to check in new files (: --- .../scala-2/org/scalajs/dom/WorkerType.scala | 11 +++++++++++ .../scala-3/org/scalajs/dom/WorkerType.scala | 10 ++++++++++ .../scala/org/scalajs/dom/WorkerOptions.scala | 18 ++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 dom/src/main/scala-2/org/scalajs/dom/WorkerType.scala create mode 100644 dom/src/main/scala-3/org/scalajs/dom/WorkerType.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala diff --git a/dom/src/main/scala-2/org/scalajs/dom/WorkerType.scala b/dom/src/main/scala-2/org/scalajs/dom/WorkerType.scala new file mode 100644 index 000000000..3fef2275e --- /dev/null +++ b/dom/src/main/scala-2/org/scalajs/dom/WorkerType.scala @@ -0,0 +1,11 @@ +package org.scalajs.dom + +import scala.scalajs.js + +@js.native +sealed trait WorkerType extends js.Any + +object WorkerType { + val classic: WorkerType = "classic".asInstanceOf[WorkerType] + val module: WorkerType = "module".asInstanceOf[WorkerType] +} diff --git a/dom/src/main/scala-3/org/scalajs/dom/WorkerType.scala b/dom/src/main/scala-3/org/scalajs/dom/WorkerType.scala new file mode 100644 index 000000000..8a32bec38 --- /dev/null +++ b/dom/src/main/scala-3/org/scalajs/dom/WorkerType.scala @@ -0,0 +1,10 @@ +package org.scalajs.dom + +import scala.scalajs.js + +opaque type WorkerType <: String = String + +object WorkerType { + val classic: WorkerType = "classic" + val module: WorkerType = "module" +} diff --git a/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala new file mode 100644 index 000000000..9f9965eef --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala @@ -0,0 +1,18 @@ +package org.scalajs.dom + +import scala.scalajs.js + +/** The Worker interface represents a background task that can be easily created and can send messages back to their + * creators. Creating a worker is as simple as calling the Worker() constructor, specifying a script to be run in the + * worker thread. + * + * Of note is the fact that workers may in turn spawn new workers as long as those workers are hosted within the same + * origin as the parent page. In addition, workers may use XMLHttpRequest for network I/O, with the exception that the + * responseXML and channel attributes on XMLHttpRequest always return null. + */ +@js.native +trait WorkerOptions extends js.Any { + var credentials: js.UndefOr[RequestCredentials] = js.native + var name: js.UndefOr[String] = js.native + var `type`: js.UndefOr[WorkerType] = js.native +} From 68f793be8833be81a4a406c41f7610f92d9b8333 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Wed, 6 Apr 2022 17:19:36 +0000 Subject: [PATCH 4/9] Delete wrong scaladoc --- dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala | 8 -------- 1 file changed, 8 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala index 9f9965eef..4acabfe9d 100644 --- a/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala +++ b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala @@ -2,14 +2,6 @@ package org.scalajs.dom import scala.scalajs.js -/** The Worker interface represents a background task that can be easily created and can send messages back to their - * creators. Creating a worker is as simple as calling the Worker() constructor, specifying a script to be run in the - * worker thread. - * - * Of note is the fact that workers may in turn spawn new workers as long as those workers are hosted within the same - * origin as the parent page. In addition, workers may use XMLHttpRequest for network I/O, with the exception that the - * responseXML and channel attributes on XMLHttpRequest always return null. - */ @js.native trait WorkerOptions extends js.Any { var credentials: js.UndefOr[RequestCredentials] = js.native From 8e3c7dab5200a5d2238a66e1a02706336dd3ce3f Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 7 Apr 2022 13:51:15 +0000 Subject: [PATCH 5/9] Fix WorkerOptions encoding --- dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala index 4acabfe9d..986b3e2b8 100644 --- a/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala +++ b/dom/src/main/scala/org/scalajs/dom/WorkerOptions.scala @@ -2,9 +2,8 @@ package org.scalajs.dom import scala.scalajs.js -@js.native -trait WorkerOptions extends js.Any { - var credentials: js.UndefOr[RequestCredentials] = js.native - var name: js.UndefOr[String] = js.native - var `type`: js.UndefOr[WorkerType] = js.native +trait WorkerOptions extends js.Object { + var credentials: js.UndefOr[RequestCredentials] = js.undefined + var name: js.UndefOr[String] = js.undefined + var `type`: js.UndefOr[WorkerType] = js.undefined } From a9ab55f9d2fa3ae94f14fabe0963ce77d76c6aa3 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 7 Apr 2022 13:52:25 +0000 Subject: [PATCH 6/9] Use overload for Worker constructor --- dom/src/main/scala/org/scalajs/dom/Worker.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dom/src/main/scala/org/scalajs/dom/Worker.scala b/dom/src/main/scala/org/scalajs/dom/Worker.scala index 31e0b7154..a38e99eeb 100644 --- a/dom/src/main/scala/org/scalajs/dom/Worker.scala +++ b/dom/src/main/scala/org/scalajs/dom/Worker.scala @@ -18,7 +18,9 @@ import scala.scalajs.js.annotation._ */ @js.native @JSGlobal -class Worker(scriptURL: String, options: js.UndefOr[WorkerOptions] = js.native) extends AbstractWorker { +class Worker(scriptURL: String, options: WorkerOptions) extends AbstractWorker { + + def this(scriptURL: String) = this(scriptURL, js.native) /** The Worker.onmessage property represents an EventHandler, that is a function to be called when the message event * occurs. These events are of type MessageEvent and will be called when the worker calls its own postMessage() From ce9293bd7f4f40a3496cf0f7ba84ce7f8bb45c71 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 7 Apr 2022 14:27:20 +0000 Subject: [PATCH 7/9] Add constructor overloads for SharedWorker --- dom/src/main/scala/org/scalajs/dom/SharedWorker.scala | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala index beea279d5..b16a565a7 100644 --- a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala +++ b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala @@ -25,7 +25,14 @@ import scala.scalajs.js.| */ @js.native @JSGlobal -class SharedWorker(scriptURL: String, options: js.UndefOr[String | WorkerOptions] = js.native) extends AbstractWorker { +class SharedWorker private[this] (scriptURL: String, options: js.UndefOr[String | WorkerOptions] = js.native) + extends AbstractWorker { + + def this(scriptURL: String) = this(scriptURL, js.undefined) + + def this(scriptURL: String, name: String) = this(scriptURL, js.defined(name)) + + def this(scriptURL: String, options: WorkerOptions) = this(scriptURL, js.defined(options)) /** The port property of the SharedWorker interface returns a [[MessagePort]] object used to communicate and control * the shared worker. From f48f839ae603118d6fc831db5b5019d7077231f5 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 7 Apr 2022 07:39:43 -0700 Subject: [PATCH 8/9] Simplify SharedWorker constructors --- dom/src/main/scala/org/scalajs/dom/SharedWorker.scala | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala index b16a565a7..1b3e756ec 100644 --- a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala +++ b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala @@ -25,14 +25,10 @@ import scala.scalajs.js.| */ @js.native @JSGlobal -class SharedWorker private[this] (scriptURL: String, options: js.UndefOr[String | WorkerOptions] = js.native) - extends AbstractWorker { +class SharedWorker(scriptURL: String) extends AbstractWorker { + def this(scriptURL: String, name: String) = this(scriptURL) - def this(scriptURL: String) = this(scriptURL, js.undefined) - - def this(scriptURL: String, name: String) = this(scriptURL, js.defined(name)) - - def this(scriptURL: String, options: WorkerOptions) = this(scriptURL, js.defined(options)) + def this(scriptURL: String, options: WorkerOptions) = this(scriptURL) /** The port property of the SharedWorker interface returns a [[MessagePort]] object used to communicate and control * the shared worker. From 101ea9643f550b7052bc3b546ae2c7c5ed00c025 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Thu, 7 Apr 2022 14:50:18 +0000 Subject: [PATCH 9/9] Fix compile --- api-reports/2_12.txt | 1 + api-reports/2_13.txt | 1 + dom/src/main/scala/org/scalajs/dom/SharedWorker.scala | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 12de4c157..fc20a3f5d 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -24057,6 +24057,7 @@ SharedWorker[JC] var onerror: js.Function1[ErrorEvent, _] SharedWorker[JC] def port: MessagePort SharedWorker[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit SharedWorker[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit +SharedWorker[SO] SharedWorkerGlobalScope[JO] def self: SharedWorkerGlobalScope SharedWorkerGlobalScope[JT] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit SharedWorkerGlobalScope[JT] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 12de4c157..fc20a3f5d 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -24057,6 +24057,7 @@ SharedWorker[JC] var onerror: js.Function1[ErrorEvent, _] SharedWorker[JC] def port: MessagePort SharedWorker[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit SharedWorker[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit +SharedWorker[SO] SharedWorkerGlobalScope[JO] def self: SharedWorkerGlobalScope SharedWorkerGlobalScope[JT] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit SharedWorkerGlobalScope[JT] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit diff --git a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala index 1b3e756ec..257252274 100644 --- a/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala +++ b/dom/src/main/scala/org/scalajs/dom/SharedWorker.scala @@ -2,7 +2,6 @@ package org.scalajs.dom import scala.scalajs.js import scala.scalajs.js.annotation._ -import scala.scalajs.js.| /** The SharedWorker interface represents a specific kind of worker that can be accessed from several browsing contexts, * such as several windows, iframes or even workers. They implement an interface different than dedicated workers and @@ -35,3 +34,5 @@ class SharedWorker(scriptURL: String) extends AbstractWorker { */ def port: MessagePort = js.native } + +object SharedWorker