From 7c32b9655856e640bccdd7e8dfd62103e0b9dfed Mon Sep 17 00:00:00 2001 From: Raphael Kubo da Costa Date: Tue, 12 Mar 2024 09:09:41 +0100 Subject: [PATCH] automation: Save readings set when no sensors are active As described in #478, the current behavior is underspecified and allows implementations to discard readings provided to the "Update virtual sensor reading" WebDriver endpoint when no sensors are currently registered to receive readings. This makes writing some tests (especially Device Orientation API ones) harder, as one then needs to order calls in a very specific way so that a virtual sensor is created, a sensor is activated, a virtual sensor reading is provided and then it is consumed by a sensor. To complicate things further, implementations may differ in when they deactivate sensors (think page visibility handling, for example). It is easier to mandate one specific behavior: * Readings are never discarded. They are always saved and are stored as long as the virtual sensor exists * If there are active sensors when they are received, they are also made available to said active sensors. * Whenever a sensor connects to a virtual sensor and wants to start receiving readings, the virtual sensor will provide its saved reading to it if there is one. In practice, this means one can call `test_driver.update_virtual_sensor()` before a Sensor object is even created (or a Device Orientation event listener is added), or that if one calls Sensor.stop() followed by Sensor.start() the previous reading will be reported again. Making this possible requires several changes across the specification though, as virtual sensors need to keep track of platform sensors but platform sensors did not have their lifetime properly defined. Furthermore, the virtual sensor changes need to be flexible enough to be possible to use them in the Device Orientation specification, which has no concept of platform sensors or sensor types at all. Platform sensors: - Platform sensors are now Document-bound. Their definition in the "Concepts" section remains more abstract, but when used in algorithms and interacting with platform objects, they are always treated as belonging to a Document. This change also removes all usages of "browsing context" and finally gets rid of all Bikeshed warnings. - Platform sensors are kept in a per-Document `[[sensorMapping]]` internal slot, a map of sensor types to platform sensors. This helps with the above, and also helps define that there is at most one platform sensor per sensor type in a Document, which is shared by Sensor instances with the same associated sensor type. Virtual sensors: - The concept of "platform sensor-like" was added to account for the Device Orientation API. It is like a platform sensor, but without the Generic Sensor-specific parts that are not used in the Automation section (sensor type, latest reading map, activated sensor objects). - Virtual sensors now have two more associated items: a set of platform sensor-likes (which are notified when there is a reading), and a latest saved reading map (self-explanatory). - When "update virtual sensor reading" is called, the stored reading now contains a "timestamp" key, so that if a reading is sent more than once it contains the same timestamp. The interaction between per-document platform sensors and per-top-level traversable virtual sensors works as follows: - When a virtual sensor exists, a platform sensor adds itself to the former's set of connected platform sensor-likes and also sets it as its associated device sensor. - When "set sensor settings" is called with an empty active sensor objects set, the platform sensor removes itself from its virtual sensor's set of connected platform sensor-likes. When the active sensor objects set is not empty, it checks if it is being activated (i.e. the previous sampling frequency was 0) and, if so, it retrieves the virtual sensor's latest saved reading. - When a Document is unloaded, all platform sensors in `[[sensorMapping]]` are removed from their virtual sensors' connected paltform sensor-likes set. - When a virtual sensor is removed, any connected platform sensor-likes have their associated device sensor set to null. Fixes #444 (removes all remaining browsing context references). Related to #478. --- images/generic_sensor_model.png | Bin 29047 -> 52565 bytes images/generic_sensor_model.svg | 4503 +++++++++++++++++++++++-------- index.bs | 139 +- 3 files changed, 3541 insertions(+), 1101 deletions(-) diff --git a/images/generic_sensor_model.png b/images/generic_sensor_model.png index 6bd30a43fa2a05a09dbc2125447e44197c0df5bf..2750a58c90b2f880db8248088a7fd9d7a3bd97e7 100644 GIT binary patch literal 52565 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 *pMn70XvMMgofG@x-35?qi zaaR!;IbQTCj~e9Z2e;oez8=y*OY}-2y``QrTANwpf?q>aj0haLQB*Bt?FkH^mli7^ z?g++3-ALlPW(wZt7XDC1awZ@l4u^BT=@Tfg5v@^^;PiA z;y@S1+!Fub3z8#X2SR4vA-?}@#9c&Y-~A*w0brxlOJNPdLTfo!xB@JE>C1O4C@b<53KawU|NAGj7 - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Browsing Context 1 - - - - - - - - - - - - - - - - - Accelerometer : Sensor - - - - - - - - - - - frequency = 1 Hz - - - - - - - - - - - - - - - - - - - - - - - - - - - - state = activated - - - - - - - - - - - - - - - - - Accelerometer : Sensor - - - - - - - - - - - frequency = 10 Hz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - state = activated - - - - - - - - - - - - - - - - - Platform Sensor - - - - - - - - - - - requested sampling frequency = 10 Hz - - - - - - - - - - - activated sensor objects - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - latest reading - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Browsing Context 2 - - - - - - - - - - - - - - - - - Accelerometer : Sensor - - - - - - - - - - - frequency = 1 Hz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - state = activated - - - - - - - - - - - - - - - - - Platform Sensor - - - - - - - - - - - requested sampling frequency = 1 Hz - - - - - - - - - - - activated sensor objects - - - - - - - - - - - - - - - - - - - - - - - - - - - - latest reading - - - - - - - - - - - - - - - - - Accelerometer : Sensor - - - - - - - - - - - frequency = 1 Hz - - - - - - - - - - - - - - - - - - state = idle - - - - - - - - - - - X - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Y - - - - - - - - - - - Z - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Device Sensor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Document 1 + + + + + + + + + + + + + + + + + Accelerometer : Sensor + + + + + + + + + + + frequency = 1 Hz + + + + + + + + + + + + + + + + + + + + + + + + + + + + state = activated + + + + + + + + + + + + + + + + + Accelerometer : Sensor + + + + + + + + + + + frequency = 10 Hz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + state = activated + + + + + + + + + + + + + + + + + Platform Sensor + + + + + + + + + + + sampling frequency = 10 Hz + + + + + + + + + + + activated sensor objects + + + + + + + + + + + + + + + + + latest reading + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Document 2 + + + + + + + + + + + + + + + + + Accelerometer : Sensor + + + + + + + + + + + frequency = 1 Hz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + state = activated + + + + + + + + + + + + + + + + + Platform Sensor + + + + + + + + + + + sampling frequency = 1 Hz + + + + + + + + + + + activated sensor objects + + + + + + + + + + + + + + + + + + + + + + + + + + + + latest reading + + + + + + + + + + + + + + + + + Accelerometer : Sensor + + + + + + + + + + + frequency = 1 Hz + + + + + + + + + + + + + + + + + + state = idle + + + + + + + + + + + X + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Y + + + + + + + + + + + Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Device Sensor - - \ No newline at end of file + diff --git a/index.bs b/index.bs index 7d32b8e..0f0c44b 100644 --- a/index.bs +++ b/index.bs @@ -807,6 +807,9 @@ A [=platform sensor=] must have the following associated data: - A latest reading [=map=], which holds the latest available [=sensor readings=]. - A [=sensor type=]. +As used in this specification, a [=platform sensor=] is always bound to a {{Document}} (see +[[#extensions-to-document-interface]]). + Any time a new [=sensor reading=] for a [=platform sensor=] is obtained and if the user agent [=can expose sensor readings=] to the current [=/navigable=]'s [=navigable/active document=], the user agent invokes [=update latest reading=] with the [=platform sensor=] and @@ -858,23 +861,37 @@ To get a platform sensor's sampling bounds given a [=platform sensor= This example illustrates a possible implementation of the described [[#model|Model]]. In the diagram below several [=activated sensor objects|activated=] {{Sensor}} objects from two -different [=browsing contexts=] interact with a single [=device sensor=]. +different [=documents=] interact with a single [=device sensor=]. Generic Sensor Model The {{Sensor}} object in "idle" [[#sensor-lifecycle|state]] is not among the [=platform sensor=]'s [=activated sensor objects=] and thus it does not interact with the [=device sensor=]. -In this example there is a [=platform sensor=] instance per [=browsing context=]. +There is one [=platform sensor=] per [=document=]. The [=latest reading=] [=ordered map|map=] is shared between {{Sensor}} objects from the -same [=browsing context|context=] and is updated at a rate equal to the requested [=sampling frequency=] +same [=document=] and is updated at a rate equal to the requested [=sampling frequency=] of the corresponding [=platform sensor=].

API

+

Extensions to the Document interface

+ +The {{Document}} interface must have a \[[sensorMapping]] +internal slot, a [=map=] of [=sensor types=] to [=platform sensors=]. + +
+This specification defines the following [=unloading document cleanup steps=] given a {{Document}} +|document|: + +1. [=list/For each=] |platformSensor| of |document|.{{Document/[[sensorMapping]]}}'s [=map/values=]: + 1. If |platformSensor|'s [=device sensor=] is not a [=virtual sensor=], [=continue=]. + 1. [=set/Remove=] |platformSensor| from |platformSensor|'s [=device sensor=]'s [=virtual sensor/connected platform sensors=]. + +

The Sensor Interface

@@ -1290,32 +1307,42 @@ to {{SensorErrorEventInit}}. :: |sensor|, a {{Sensor}} object. :: |global|, a [=/global object=]. : output - :: True if |sensor| was associated with a [=platform sensor=], + :: True if a [=platform sensor=] was successfully connected to a [=device sensor=], false otherwise. - 1. Let |platformSensor| be null. + 1. Let |document| be |sensor|'s [=relevant global object=]'s [=associated document=]. 1. Let |type| be |sensor|'s associated [=sensor type=]. - 1. Let |virtualSensorType| be |sensor|'s associated [=virtual sensor type=], or null if it is not set. - 1. Let |topLevelTraversable| be |global|'s [=Window/navigable=]'s [=navigable/top-level - traversable=]. - 1. If |virtualSensorType| is not null and |topLevelTraversable|'s [=virtual sensor mapping=] [=map/contains=] |virtualSensorType|: - 1. Let |virtualSensor| be |topLevelTraversable|'s [=virtual sensor mapping=][|virtualSensorType|]. - 1. If |virtualSensor|'s [=virtual sensor/can provide readings flag=] is true, set |platformSensor| - to a [=platform sensor=] corresponding to |virtualSensor|. - - Note: If the [=virtual sensor/can provide readings flag=] is false, |platformSensor| will - remain null and this algorithm will return false. + 1. Let |platformSensor| be null. + 1. If |document|.{{Document/[[sensorMapping]]}} [=map/contains=] |type|, set |platformSensor| + to |document|.{{Document/[[sensorMapping]]}}[|type|]. 1. Otherwise: - 1. If the device has a single [=device sensor=] which can provide [=sensor - readings|readings=] for |type|, then - 1. Set |platformSensor| to a [=platform sensor=] corresponding - to this [=device sensor=]. - 1. If the device has multiple [=device sensors=] which can provide [=sensor - readings|readings=] for |type|, then - 1. If |type| has an associated [=default sensor=], then - 1. Set |platformSensor| to a [=platform sensor=] corresponding to this [=default - sensor|default device sensor=]. - 1. If |platformSensor| is null, return false. + 1. Set |platformSensor| to a new [=platform sensor=] whose [=sensor type=] is |type|. + 1. Set |document|.{{Document/[[sensorMapping]]}}[|type|] to |platformSensor|. + 1. If |platformSensor|'s [=device sensor=] is null: + 1. Let |deviceSensor| be null. + 1. Let |virtualSensorType| be |type|'s associated [=virtual sensor type=], or null if it is not set. + 1. Let |topLevelTraversable| be |global|'s [=Window/navigable=]'s [=navigable/top-level + traversable=]. + 1. If |virtualSensorType| is not null and |topLevelTraversable|'s [=virtual sensor mapping=] [=map/contains=] |virtualSensorType|: + 1. Let |virtualSensor| be |topLevelTraversable|'s [=virtual sensor mapping=][|virtualSensorType|]. + 1. If |virtualSensor|'s [=virtual sensor/can provide readings flag=] is true, set |deviceSensor| + to |virtualSensor|. + + Note: If the [=virtual sensor/can provide readings flag=] is false, |deviceSensor| will + remain null and this algorithm will return false. + 1. Otherwise: + 1. If the device has a single [=device sensor=] which can provide [=sensor + readings|readings=] for |type|, then + 1. Set |deviceSensor| to said [=device sensor=]. + 1. If the device has multiple [=device sensors=] which can provide [=sensor + readings|readings=] for |type|, then + 1. If |type| has an associated [=default sensor=], then + 1. Set |deviceSensor| to this [=default sensor|default device sensor=]. + 1. If |deviceSensor| is null, return false. + 1. Set |platformSensor|'s [=device sensor=] to |deviceSensor|. + 1. If |deviceSensor| is a [=virtual sensor=], [=set/append=] |platformSensor| to + |deviceSensor|'s [=virtual sensor/connected platform sensors=]. + 1. Run any [=implementation-defined=] steps to connect |platformSensor| to |deviceSensor|. 1. Let |bounds| be the result of invoking [=get a platform sensor's sampling bounds=] with |platformSensor|. 1. If |sensor|.{{Sensor/[[frequency]]}} is null, set it to an [=implementation-defined=] value @@ -1390,19 +1417,28 @@ to {{SensorErrorEventInit}}. :: None 1. If |platformSensor|'s set of [=activated sensor objects=] [=set/is empty=], - 1. Set |platformSensor|'s [=sampling frequency=] to null. + 1. Set |platformSensor|'s [=sampling frequency=] to 0. 1. [=map/For each=] |key| → value of |platformSensor|'s [=latest reading=]. 1. [=map/Set=] |platformSensor|'s [=latest reading=][|key|] to null. - 1. Update the [=implementation-defined=] way in which [=sensor readings=] are obtained - from |platformSensor| to no longer provide [=sensor readings|readings=]. + 1. If |platformSensor|'s [=device sensor=] is a [=virtual sensor=], + 1. [=set/Remove=] |platformSensor| from |platformSensor|'s [=device sensor=]'s [=virtual sensor/connected platform sensors=]. + 1. Update the [=implementation-defined=] way in which |platformSensor| obtains [=sensor + readings=] from its [=device sensor=] so that it stops obtaining new readings. 1. Return. - 1. Set |platformSensor|'s [=sampling frequency=] to an [=implementation-defined=] value based - on the {{Sensor/[[frequency]]}} values of the items in its [=activated sensor objects=] - [=ordered set|set=]. + 1. Let |previousFrequency| be |platformSensor|'s [=sampling frequency=]. 1. Let |bounds| be the result of invoking [=get a platform sensor's sampling bounds=] with |platformSensor|. - 1. [=Assert=]: |platformSensor|'s [=sampling frequency=] is greater than or equal to - |bounds|[0] and less than or equal to |bounds|[1]. + 1. Set |platformSensor|'s [=sampling frequency=] to an [=implementation-defined=] value based + on the {{Sensor/[[frequency]]}} values of the items in its [=activated sensor objects=] + [=ordered set|set=]. The value must be greater than or equal to |bounds|[0] and less than or + equal to |bounds|[1]. + 1. If |previousFrequency| is 0, + 1. If |platformSensor|'s [=device sensor=] is a [=virtual sensor=], + 1. Let |virtualSensor| be |platformSensor|'s [=device sensor=]. + 1. If |virtualSensor|'s [=virtual sensor/latest saved reading=] is not null: + 1. In an [=implementation-defined=] way, make |virtualSensor|'s [=virtual sensor/latest saved reading=] available to |platformSensor|. + 1. In an [=implementation-defined=] way, make |platformSensor| start obtaining readings + from its [=device sensor=].

Update latest reading

@@ -1590,7 +1626,19 @@ entirely defined by users.

Virtual Sensors

A virtual sensor simulates the behavior of a [=device sensor=] in controlled ways. It -reports [=sensor readings=] to zero or more [=platform sensors=] connected to it. +reports [=sensor readings=] to zero or more [=platform sensor-likes=] connected to it. + +This section also defines the auxiliary concept of a platform sensor-like, which +is either: +- A [=platform sensor=] as defined in this specification, or +- Any type that has an associated [=sampling frequency=] (a number) and an associated [=device sensor=] + (a [=virtual sensor=]). The [=sampling frequency=] must be either 0 or a number within the closed + interval set by the [=device sensor=]'s [=virtual sensor/minimum sampling frequency=] and [=virtual + sensor/maximum sampling frequency=]. + +Note: The only reason we use [=platform sensor-like=] in this section is compatibility with +[[ORIENTATION-EVENT]], which does not use the [=sensor type=] and [=platform sensor=] definitions +from this specification but whose Automation section needs to integrate with this one. A [=virtual sensor=] has the following associated data: - A can provide readings flag (a [=boolean=]). @@ -1605,6 +1653,9 @@ A [=virtual sensor=] has the following associated data: whether connected [=platform sensors=] have requested a certain sampling frequency (which might differ per [=platform sensor=]), or whether they are polling the [=virtual sensor=], in which case no sampling frequency might have been requested at all. +- Connected platform sensors (an [=ordered set=] of [=platform + sensor-likes=], initially empty). +- Latest saved reading (an [=ordered map=]-or-null, initially null). - A minimum sampling frequency (a number). A [=virtual sensor=] is a [=device sensor=], so this corresponds to the [=device sensor=]'s [=device sensor/minimum sampling frequency=]. @@ -1612,6 +1663,8 @@ A [=virtual sensor=] has the following associated data: [=device sensor=], so this corresponds to the [=device sensor=]'s [=device sensor/maximum sampling frequency=]. +### Auxiliary concepts ### {#virtual-sensor-auxiliary-concepts} + A virtual sensor type is a string that represents a sensor of a given type. The per-type virtual sensor metadata is an [=ordered map=] of [=virtual sensor @@ -1818,11 +1871,11 @@ sensor/minimum sampling frequency=] and [=virtual sensor/maximum sampling freque -This [=extension command=] makes a new [=sensor reading=] available to [=platform sensors=]. +This [=extension command=] makes a new [=sensor reading=] available to [=platform sensor-likes=]. Note: A [=virtual sensor=] acts like a [=device sensor=], so the [=sensor reading=] produced here -still has to be processed by a [=platform sensor=], which might discard it due to, for example, a -[=sensor type=]'s [=threshold check algorithm=] or [=can expose sensor readings=]'s result. +still has to be processed by a [=platform sensor-like=], which might discard it due to, for example, +a [=sensor type=]'s [=threshold check algorithm=] or [=can expose sensor readings=]'s result. @@ -1861,8 +1914,12 @@ still has to be processed by a [=platform sensor=], which might discard it due t parsing algorithm=] with |reading|. 1. If |parsedReading| is **undefined**, return [=error=] with [=WebDriver error code=] [=invalid argument=]. - 1. In an [=implementation-defined=] way, make |parsedReading| available so that it can be - obtained by [=platform sensors=] connected to |virtualSensor|. + 1. Set |parsedReading|["timestamp"] to the [=unsafe shared current time=]. + 1. Set |virtualSensor|'s [=virtual sensor/latest saved reading=] to |parsedReading|. + 1. [=set/For each=] |platformSensor| of |virtualSensor|'s [=virtual sensor/connected platform + sensors=]: + 1. In an [=implementation-defined=] way, make |virtualSensor|'s [=virtual sensor/latest + saved reading=] available so that it can be obtained by |platformSensor|. 1. Return [=success=] with data `null`. @@ -1932,6 +1989,10 @@ This [=extension command=] deletes a given type of [=virtual sensor=]. with [=WebDriver error code=] [=invalid argument=]. 1. Let |topLevelVirtualSensorMapping| be the [=current browsing context=]'s [=browsing context/top-level traversable=]'s [=virtual sensor mapping=]. + 1. Let |virtualSensor| be |topLevelVirtualSensorMapping|[|virtualSensorType|]. + 1. [=set/For each=] |platformSensor| of |virtualSensor|'s [=virtual sensor/connected platform + sensors=]: + 1. Set |platformSensor|'s [=device sensor=] to null. 1. [=map/Remove=] |topLevelVirtualSensorMapping|[|virtualSensorType|]. 1. Return [=success=] with data `null`.
Properties of the `parameters` argument used by this algorithm